Dr. Kim Kihlstrom
A CAPACITIVE RECAP
A typical liberal arts college offers a variety of courses for its students to select from in order to gain an unusually complete comprehension of the world in which they live. These courses may have great pertinence specifically to a student’s major, a few significant connections, or, in some cases… very little relevance at all. The intent, however, of a liberal arts college is to integrate all disciplines into one’s learning, to build up training in not just one category of academia, but to gain usable knowledge in all areas of life. Countless stories may be told by the residents of a single hall about a class they have taken that turned out to surprise them – either by the sheer wastefulness they feel for having taken said class after expecting great things when going into it, or by the unexpected benefits they’ve received and insight they have gained that might not have been available to them in any other form. This is a story of the latter.
Sisters can be a great many things. They can be an encouragement, an annoyance, a comforter, a comfortee, a challenge, a challenger. Mine has been all these things and much more. Focusing on her challenger facet though seems most appropriate for the moment. My sister may have done more for me in the course of my lifetime than baseball, bowling, soccer, track and field, and football have done collectively in fueling a competitive spirit in me. Our cutthroat one-betterment exercises since early childhood spilled into almost every aspect of life. One particular field in which she always seemed to a superior knowledge and understanding was computer science and all things related to it. While I developed a pretty decent understanding of how to make machines do the things they were designed to do, she was a step ahead – working to understand how to design things for machines to do. While she took classes to become C++ certified and spent many weekends p0wn|ng all teh boyz in games like Unreal Tournament and Starcraft at LAN parties (back before such things were done sans wires), I found myself committed overwhelmingly to other things, and gradually lost an interest as acute as hers in the realm of computing. I ceded the victory.
It was with mildly hopeful passivity, then, that I signed up to take a course with the disconcertingly ambiguous title “Fundamentals of Computing.” Needless to say my emotions were subtle but complex. Seeing that the instructor was the wife of Ken Kihlstrom, who had proved to be an entertaining and brilliant substitute Physics of Music professor in times past, I was at least excited about the possible breadth of topics that might be covered in such a class – especially if it were to continue in the tangent-prone fashion of all science-related classes I had taken before. Apart from this knowledge of the full name for CS-005 and its instructor, I hadn’t a clue what to expect in the four months during which its completion was to transpire. Being the lowest-level computer science class offered, I thought there may be a lot of others like me taking it to cover a general education requirement, perhaps making it a large class with a few dozen participants.
Seven heads turned as I walked into PH3 that first day – almost an hour late. Seven faces greeted me – all pleasant, none familiar. The most immediately welcoming of them belonged to our loving and gracious professor, who understood well the problems that arise with book buying and attempting to locate strangely-abbreviated buildings. It became clear that, as in most computer science classes, my presence or lack of presence would not be wholly unnoticed on any day. An unusual one is the family that forms from the members of such a small class, but the best characteristics of any person or group of persons are often the unusual ones. I began to find that our network of individuals could be, like computer networks, very complex and able to take on different forms.
This central concept of our computing and lives was, in fact, one of the features of computer science that we dealt with toward the middle of the course. Before getting into the depth necessary to understand networks, however, we addressed more fundamental concerns. We took a logical approach to understanding the fundamentals of computer science, beginning with its algorithmic foundations. Having grasped the general ideas of the algorithms, we moved on to hardware, and the many elements that make up a virtual machine. Next we were able to discuss software and the languages that make our machines work. With all these in place we were able to cover the various applications of computers as well as, most recently, the social issues that have arisen with the abilities of computing.
In Level One – chapters two and three of our text, we reviewed the discovery of algorithms and the design that goes into those that are used in computing. We found that these algorithms are usually written in pseudocode instructions that bridge the gap between natural and formal language. The operations performed by these algorithms take a few different forms, the first of which is sequential. Sequential operations are simpler than others, and do nothing more than carry out a set of instructions in their given order. Slightly more complex are conditional and iterative operations. A conditional operation has one or more instructions that are to be performed only if certain conditions are true; a common form for these is an if/then/else statement, for which one set of instructions is performed when the condition is true, and another is performed if the condition is false. In an iterative operation, a set of instructions may be performed repeatedly while a condition is true or infinitely, depending on the conditions of the statement. This is usually represented in much the same way as a conditional operation, but has a “while” clause so that the conditioned instructions are performed multiple times until their condition is false. The repetition of instructions in such a statement is referred to as “looping.” We also looked into the desired characteristics of algorithms – particularly their correctness, elegance, and efficiency. Most obviously, it is essential for an algorithm to be correct in its coding to effectively perform the function for which it has been designed. Secondarily, the usage of terms to write an algorithm should be as simple and effective as possible. This has somewhat to do with an algorithm’s efficiency, which can be hindered by a lack of elegance (poorly ordered terms) or by conditions that cause more work to be done to accomplish the same task that may be performed using fewer computations.
The second level, encompassing chapters four and five, cover the building blocks and organization of the hardware that comprise a computing system. Chapter four introduces us to binary, the machine language of ones and zeros, and the ways in which it can be notated. We furthermore see how binary is used to represent very complex sounds and images and the role data compression plays in accomplishing these tasks efficiently. Next come the concepts of Boolean logic and gates, particularly the “and,” “or,” and “not” Boolean operations, and the implementation of these operations and gates to create computer circuits that produce outputs from inupts. Chapter five details the necessary components of computer systems, and establishes the concept of abstractions, which “are ideas or interfaces that represent more complicated things in ways that are easier to work with. When working with computers, abstractions are especially important because they enable people other than technical machine language master to work with machines. When we use modern computers, we work with abstractions (like graphic interfaces, operating systems and the like [to be discussed later]) that are several steps removed from the cumbersome machine language that would overwhelm most of us if we were forced to work with it” (Midterm Answer #2). The model that describes the organization of almost all computers today is known as the Von Neumann architecture, which contains three major concepts: four essential subsystems (memory, input/output, the arithmetic/logic unit, and a control unit), the storage of programs, and the sequential execution of instructions. We go on to learn of the different forms theses subsystems take and the ways in which all Von Neumann’s elements work together.
Chapters six and seven form the third level of our increasingly pyramidesque
understanding of computer science. First we look at the system software that manage a computer’s hardware and cause it to all work together. The next section describes the languages that are used between machines, their components, and their human operators. “Assembly language and high-level programming languages are levels of abstraction or distancing from the most basic and time-consuming machine language, which consists of just binary. Assembly languages enable a programmer avoid binary but still require a substantial amount of input effort, as they do not assume much in the way of primitives. Another abstraction away from machine language are high-level programming languages. These help programmers get a lot done without as much primitive step-by-step input. Assemblers translate assembly language into machine language, and compilers do likewise for high-level programming languages” (Midterm Answer #1, modified). Additionally we learn about the form and functions of operating systems, and how they have evolved into the complex and user-friendly systems we have today. Chapter seven speaks to great depth of network concepts the allow for local- and wide-area networks, as well as the World Wide Web. These are structured in varying ways, and as a result of their complexity, are governed by a protocol stack of five layers – the physical, data link, network, transport, and application layers
The fourth level shows us, in chapter eight, examples of high-level programming languages and their uses, with an emphasis on C++. The ninth chapter provides us with understanding of procedural and special-purpose languages such as the html code that makes this currently visible to you. Chapter ten details the process of compilation in its four phases: lexical analysis, parsing, semantics and code generation, and code optimization.
Skipping on through chapter eleven, we turn our focus to simulation and modeling in chapter twelve, the beginning of our fifth level in the climb toward computing comprehension - Applications. Here we discussed the accuracy and error resolution of computational models and how to view the results of such models. Chapter thirteen showed us the underlying processes of a realm of computer science that has exponentially growing relevance: E-commerce. We dissect the anatomy of online transactions and see how data must be organized for electronic commerce to take place on a large scale. The movement of confidential data between machines for the purposes of commercial transactions requires means by which to make data secure through encryption and decryption by computers the parties involved. Beyond even such complex life action-modeling systems, chapter fourteen delves into the theories and design of artificial intelligence. Here we get to determine how to cause machines to recognize, acquire and make use of representations of knowledge. These reasoning abilities are the basis of robotics – the use of machines to perform tasks in lieu of humans for the sake of efficiency or simply to free up time for humans to use in other ways.
With robotics and the ideas of artificial intelligence we are led into the sixth level that chapter fifteen addresses: the social issues of computing. The primary focus herein is the ethics of activities such as hacking, piracy, and the use of developing computational abilities to improve human life. These issues that have come into play only recently with the exploding communication abilities and problem-solving capacity of our modern machines (Į 1-679).
Although I can hardly begin to expound upon the knowledge gained from this text and the understanding I have gleaned from it with regard to computing, perhaps the greatest and most applicable things I have learned as a result of taking this course are not C++ coding and data encryption techniques (though these certainly are valuable), but the things I have discovered about myself and about those with whom I relate and interact in daily life. It has been immensely encouraging to me to see while in this class the kindness and patience of fellow students and the compassion and grace of a professor who has no obligation to display these traits, but does so out of a desire to be Christlike and a love for learning and teaching others to learn. For these things I am truly grateful, and from them I feel a charge on my own life - I hope to impart them in turn on those I encounter who could benefit from experiencing such acts. Thank you.
Į Schneider, Michael G. and Gersting, Judith L. Invitation to Computer Science, Fourth Edition. Thomson Course Technology, 2007.