Chapter Summary
This chapter introduces computer science as the discipline that seeks a scientific foundation for
topics such as computer design, computer programming, algorithmic processes, etc. It gives an
informal
...
Chapter Summary
This chapter introduces computer science as the discipline that seeks a scientific foundation for
topics such as computer design, computer programming, algorithmic processes, etc. It gives an
informal introduction to the concept of an algorithm (more detail is given in Chapter 5) and
discusses how this concept forms the foundation of the field known as computer science. The
chapter also presents a brief history of computing machinery, introduces the concept of abstraction,
and sets the stage for future discussions social/professional/ethical considerations.
A major goal of this chapter is to establish the concept of computer science as being the
underpinning for the development of the computer applications with which students are familiar.
Most introductory students will have seen computing/computer science only in the context of
using application software, Web browsing, and perhaps some programming. Thus, they may not
understand the distinction between studying computer science and learning how to use today’s
computer application software. I find it helpful to explain that computer science deals with the
development of tomorrow’s application software, rather than learning how to use the applications
of today.
Comments
1. This introductory chapter is included to set the stage—not to be the final word on the topics
presented. The goal at this point is merely to develop an intuitive understanding of the ideas and
the terminology involved.
2. When writing this introduction, I envisioned a chapter that would be used largely as a reading
assignment. Students tend to start a new semester with a fresh, enthusiastic attitude. They are eager
to get started and have resolved that this semester "I'll keep up and stay organized." I like to take
advantage of this enthusiasm. Thus, I assign this chapter as a reading assignment on the first day of
class and spend very little time discussing it. In my courses, class presentation usually starts with
material from Chapter 1.
3. Those of us who teach introductory computer science courses are always looking for interesting
algorithms to use as examples. Along these lines I've drawn from the art of origami (see the bird
folding algorithm in Chapter 5) for some time. Introductory students seem to enjoy working with
an algorithm that does something "different." I've also drawn from the field of magic for such
examples. I hope you like the example in Figure 0.2 of the text and find it useful.
4. Most beginning students don’t distinguish between data processing and computer science. They
don't understand that there is much more to computer science than Web browsing and writing
programs. In this regard, I like to use the following quote from Charles Darwin. "... science consists
of grouping facts so that general laws and conclusions may be drawn from them."
1
5. The topics discussed throughout the text collectively provide an understanding of computer
science. There is probably no single topic that a student must know. (Do students really have to
know about error correcting codes, two's complement arithmetic, the bootstrap process, or the
significance of the halting problem?) So don't hesitate to skip a topic if it doesn't fit your course
goals. On the other hand, I encourage you to cover a wide range of topics. The goal is to introduce
students to computer science by presenting a variety of topics in enough detail to expose the
realities of the issues involved. (Each individual topic may not be necessary on its own, but together
they paint an important picture.)
Maintaining this perspective is perhaps more of a challenge when teaching a computer literacy
course than a course within a computer science curriculum. In these former cases there is a
temptation to skip the more challenging or tedious topics since "they don't need to know that
anyway." In contrast, I prefer to go ahead and present such subjects in a manner compatible with
the audience and then adjust the level of assignments and exams to match the objectives of the
particular course and the abilities of the students. (I think a major problem in today's education is
that we avoid challenging topics. In turn, the students have learned to view formal course work as
an irrelevant waste of time and treat it accordingly. They perform poorly, we decide we need to
simplify the course further, and the cycle continues.)
6. You may want to point out that the discussion of ethical theories in Section 0.6 is there merely to
suggest that before one takes the position that “I’m right and you’re wrong,” one should think
about the source of his/her opinion. This is not a course on the philosophy of ethics, so don’t let
your students get bogged down in the differences between duty-based and contract-based ethics.
2
Chapter One
DATA STORAGE
Chapter Summary
This chapter presents the rudiments of data storage within digital computers. It introduces the
basics of digital circuitry and how a simple flip-flop can be used to store a single bit. It then
discusses addressable memory cells and mass storage systems (magnetic disk, compact disks, and
flash memory). Having established this background, the chapter discusses how information (text,
numeric values, images, and sound) are encoded as bit patterns. The optional sections delve more
deeply into these topics by presenting the problems of overflow errors, truncation errors, error
detection and correction techniques, and data compression.
Comments
1. Perhaps the most important comment I can make about this chapter (and the next one as well) is
to explain its role in the chapters that follow. This involves the distinction between exposing
students to a subject and requiring them to master the material—a distinction that is at the heart of
the spirit in which the entire text was written. The intention of this chapter is to provide a realistic
exposure to a very important area of computer science. It is not necessary for the students to master
the material. All that is needed from this chapter in the remaining part of the book are the remnants
that remain from a brief exposure to the issues of data storage. Even if the course you teach requires
a mastery of these details or the development of manipulation skills, I encourage you to avoid
emphasizing bit manipulations and representation conversions. In particular, I urge you to avoid
becoming bogged down in the details of converting between base ten and binary notation. I can’t
think of anything that would be more boring for the students. (I apologize for stating my opinion.)
2. The “required” sections in this chapter cover the composition of main memory (as a background
for machine architecture in chapter 2 and data structures in chapter 8), the physical issues of
external data storage systems (in preparation for the subjects of file and database systems in chapter
9), and the rudiments of data encoding (that serves as a background for the subject of data types and
high-level language declaration statements in chapter 6). The optional sections explore the issues of
error handling, including transmission error detection and correction as well as the problem of
truncation and overflow errors resulting from numeric coding systems.
3. As mentioned in the preface of the text, there are several themes that run throughout the text, one
of which is the role of abstraction. I like to include this theme in my lecture in which I introduce flipflops. I end up with both flip-flop diagrams from the text on the board, and I emphasize that they
represent two ways of accomplishing the same task. I then draw a rectangle around each diagram
and erase the circuits within the rectangles leaving only the inputs, outputs, and rectangles
showing. At this point the two look identical. I think that this creates a strong visual image that
drives home the distinction between an abstract tool’s interface with the outside world and the
internal details of the tool.
This is a specific example of teaching several topics at the same time—in this case, the concepts
of abstraction and encapsulation are taught in the context of teaching digital circuits.
3
4. Don’t forget about the circuits in Appendix B. I used to have students who continued to record an
extra bit in the answer to a two’s complement addition problem when a carry occurred—even
though I had explained that all values in a two’s complement system were represented with the
same number of bits. Once I started presenting the addition circuit in Appendix B, this problem
disappeared. It gave the students a concrete understanding that the carry is thrown away. (Of
course, in a later course computing students will learn that it really isn’t thrown away but saved as
the "carry bit" for potential use in the future, but for now I ignore this.) I have also found that a good
exercise is to ask students to extend the circuit in Figure B.3 so that it produces an additional output
that indicates whether an overflow has occurred. For e
[Show More]