Instructor's Manual for

M.B. Feldman and E.B. Koffman, Ada 95 Problem Solving and Program Design, 2nd edition. Copyright 1996, Addison-Wesley Publishing Company. All Rights Reserved.

Questions and comments to mfeldman@seas.gwu.edu


Chapter 1 Introduction to Computers and Programming

last revised Aug. 1996

Chapter Objectives

The student will

  1. acquire a brief historical background of the development of computers,
  2. be able to outline how the basic parts of a computer work together to solve problems and manipulate data
  3. learn about the general process of writing, compiling, and executing a program in a higher-level language

New Terms

Section 1.1

computer

John Atanasoff

ENIAC

John von Neumann

stored-program computer

late 1930s

computer program

1946

minicomputer

microcomputer

mainframe

supercomputer

workstation

 

Section 1.2

input device

hardware

secondary storage

central processor unit (CPU)

memory address

output device

computer terminal

memory cells

keyboard

control unit

hard-copy output

monitor

main memory

data files

Section 1.3

problem solving

problem specification

problem inputs

problem outputs

constraints

simplifying assumptions

Section 1.4

software development method

specification

analysis

design

test plan

coding

implementation

testing

refinement

divide and conquer

predictable performance

 

Section 1.5

programming languages

higher-level language

assembly language

machine language

binary string

binary string

Fortran

COBOL

Pascal

Ada

C

C++

portability

compiler standard

Section 1.6

source file

editor program

compiler program

compilation error

object file

linker program

binder program

load file

executable image

loader program

Section 1.7

operating system

control language

timeshared computer

personal computer

booting

logging on

Notes and Suggestions

This chapter contains primarily general information about computers, the history of computers and languages, and the program development process. For students with some previous experience in computers, sections 1.1 and 1.2 can be assigned as background reading.

It is never too early to start emphasizing that, while in the computing milieu we tend to focus much attention on differences between computers, languages, and so on, there is much that is fundamental and similar. An educated computing professional must try to understand both the similarities and the differences, and distinguish that which is fundamental from that which is only a detail of an operaying system or language.

Sections 1.3 through 1.7 introduce some terminology that is used in the sequel, especially the steps in the Software Development Method used throughout the book. You should point out that this method is similar to that used in industry to develop "real" systems. A software project is much more than just a program, and while the projects to be assigned in the course are "small," it is expected that they will understand and provide all the elements of a real project, not just a source listing.

The student should understand that such tools as compilers, editors, linkers, and loaders are just programs which process the text of other programs. I'm reminded of a certain purchasing official who asked me once whether a compiler was a large piece of equipment. How was he to know otherwise?

I thought I'd pass on some advice about computer terminology in general, especially in introductory courses. My students often have no computer experience at all, or only a bit on a word processor. Such students, especially female ones, often lack confidence and feel overwhelmed at the start, swamped with terminology and acronyms and other abbreviations. (The male students may be equally overwhelmed, but are less prone to admit it.) They preface their questions with "Do you mind if I ask a stupid question?" or similar. One of my favorite sayings is "inexperience is not equivalent to stupidity." In the book, I've included some stories about naive computer users, otherwise intelligent and educated people who make humorous assumptions in their use of computers. How were they to know otherwise?

Not in the book is a recent story from the technical support group in a large company, describing a user who called to complain about a broken "cup holder" on his PC. Asked to describe this "cup holder," the user said it slides out from the PC and says "4X" on the front. This user, confusing the CD-ROM tray with the cup holder in his car, had set down a heavy bug of coffee and broken the tray off. How was he to know otherwise?

I've also starting collecting and showing comic strips from the daily press about peoples' trials and tribulations with computers. It fascinates me that there is so much material in the dailies about computers and the Internet; it's an indication of how pervasive computers are now, and a leap of faith that readers will understand the jargon. Last year, "Cathy" tried to buy a computer, and went through an exaggerated version of every crazy experience we've ever had in computer stores. It was hilarious.

We are not born learning everything; the students are taking an introductory computing course precisely to learn things they did not know already. While this may seem obvious, teachers and students alike tend to forget this principle. Try to give the students confidence that they can succeed in this, and even though they feel swamped at the start, at the end they will be amazed at how much they've accomplished. Let them know you understand that the terminology is forbidding at first, and that you are on their side in guiding them through the thicket.