Held Thursday, December 9, 1999
Overview
Notes
- In case you missed class yesterday, there will be no final exam in
this class. Instead, I will drop your lowest exam grade. (The same
policy as before, it's just that I'm dropping one out of three rather
than one out of four.)
- If you have difficulty with this policy, and would like to take the
final, let me know.
- I've received some requests to reconsider my grading policies. So ...
Homework: 30%; Exams: 35%, Project: 35%
- Don't forget to turn in your development forms tomorrow.
Contents
Summary
- Some definitions
- Computing
- Electronic computing
- Binary vs. Analog
- Networking
- Computer science
- A timeline
- The impact of computing
- Other implications
- In my experience, too many computer scientists and computer programmers
learn the technology and the science without completely understanding
where things came from, and what they imply.
- People invented the algorithms we use.
- People invented the technology we rely on.
- The things we build and study have implications on how people
work, life, and act.
- Nearly wo years ago, I was asked to teach a segment on the history
and implications
of computing for the college's Evolution of Technology course.
- Since it was scheduled at the same time as CSC152 (the wonderful time
of 8 a.m.), the lectures were
done to a mixed audience.
- The idea was good enough that I plan to keep using it whenever I
teach 152.
- Although I've said that this is a ``lecture'', my goal is to
encourage discussion about implications,
conceptions, and misconceptions.
- There is more in these notes than we can hope to cover in the
day alloted. What we cover will depend on where our discussion leads.
- I am a computer scientist and not a historian. While I have tried
to maintain some knowledge of the history of my field, I will admit
that it is not nearly as thorough as that a historian would have.
- Books and articles on the history of computing are remarkably
inconsistent. Something that plays a central role in one may be
barely mentioned in another (and vice versa).
- I'll admit a bias towards trends, concepts, and relationships rather
than ``pure facts''. For example, I don't tend to care precisely when
something was built or conceived of and instead focus on how its
development relates to other things.
- While we will talk about social issues, I will admit that I do not
have a background in impact of technology. I am sure many of you will
have useful comments on the topics we cover and I encourage you to
share them.
If we are going to study the history of computing and related issues,
we'll need to consider some basic terms. In particular, we'll need to
talk about computers, digital computers,
computing, computer
science, networking, hypertext, and the
Internet. We'll be covering hypertext and the Internet, in part,
because they've become a very important topic in computing.
Currently, we may think of a computer as an electronic device used
to perform calculations and computations. These computations are typically
based on some sort of symbolic data. Those symbols are often numbers, but
may also be letters, glyphs, bits on the screen, and many other things.
In the recent past, computers were also built from both electronic and
mechanical parts and even from only mechanical parts.
As recently as the 1940's, ``computer'' was a profession rather than a
device. That is, a computer was someone whose profession was computing
values (again, based on numbers or symbolic values). As you might
guess, that use has fallen into disfavor, but it was used for over one
hundred years.
In general, we divide computational devices into two kinds:
special-purpose computers automate some selected computation,
but are usually able to perform only that computation. Special purpose
computers have been developed to support simple mathematics, the
construction of ballistics tables, encoding, and many other processes.
On the other hand, general-purpose computers are designed in
such a way that they can be configured or programmed to
perform any reasonable process.
In the standard model of computers, a computer has five parts:
- An input unit, which the computer uses to gather information to
process.
- An output unit, which the computer uses to present results.
- A memory unit, which the computer uses to store information (and
instructions!) during computation.
- A control unit, which sequences the operations the computer performs.
- An arithmetic logic unit, which does the primary symbol manipulation.
Here's one picture of how they all relate (other people may draw things
differently).
+-------+ +--------+ +--------+ +--------+
| Input | -----> | Memory | <----> | Arith. | ----> | Output |
+-------+ ^ +--------+ ^ +--------+ ^ +--------+
| ^ | ^ |
| | | | |
| v | | |
| +---------+ | |
+----------| Control |------+-------+
| Unit |
+---------+
As the picture suggests, the control unit controls ``everything''. It
reads instructions from the memory and, according to those instructions,
tells memory to load information from input; the arithmetic unit to read
information from memory, perform computations, and store or output the
results; and the memory unit to provide further instructions.
Modern computers are often referred to as digital computers.
This is to indicate that they work with discrete digits rather
than continuous values. This is in contrast to analog devices,
that tend to work on a more continuous spectrum. For example, an
LP record produces a continuous waveform while a CD produces a set of
values which are used to simulate that waveform.
Most modern computers are also binary. That is, they are based
on a system in which there are only two values, typically called zero and
one.
We've talked about what ``compute science'' is, but it may
be helpful to reconsider the question.
Although there are many definitions of computer science, it is
often useful to think of computer science as ``the study of
computers, computation, and computability''.
Often, the emphasis of computer science is the development, analysis,
and implementation of algorithms, processes by which
computation is done. In addition, a select group of computer scientists
attempt to determine what is computable because it turns out that there some
things we could never compute, even given an arbitrary amount of time,
processing power, and memory. (Example: Traveling salesperson problem.)
Some computer scientists think of computer science as having three
important intellectual precursors: mathematics, science, and engineering.
The study of computing draws upon all three areas. Mathematics provides
a formal basis for understanding what is computable, and how efficient
algorithms are. Science provides a basis for analyzing particular
computing systems. Engineering provides support for understanding how
to build large systems (more on this later).
A number of computer scientists are also pushing for the field to consider
psychology an important precursor for modern computing. Today, interaction
between human and computer is particular important, and psychology provides
an important framework for understanding such issues. (Ergonomics, a
subfield of engineering, also provides significant contributions).
In modern computing, networking is often as important as
computation. In general terms, networking is the sharing of information
between a number of computers.
One of the most important networks is the Internet. The Internet
is a particular network of networks that grew out of two important
government-sponsored networks: ARPANET and NSFNET.
As you may know, one of the most powerful transformations of computing
was wrought by the World-Wide Web. More than almost any other computing
application, the Web has created an enormous growth in the number of
computers, the number of networked computers, and the number of networked
users. Ten years ago, there were less than three million networked
users. Now there are over three hundred million networked users (numbers
are approximate). The Web is responsible for much of that growth.
The Web is a hypertext system that takes advantage of computer
technology and computer networking. What is hypertext? Hypertext is
a mechanism for organizing information in which the information is
segmented into small nodes or pages which are then connected by links.
Unlike traditional texts, which are often intended to be read linearly
(and are certainly represented that way), hypertexts are expected to
support multiple sequences of reading (and, perhaps, to challenge the
notion of ``sequence'').
Computing has grown faster than almost any technology to date.
For example, the ENIAC cost over $1,000,000 in 1950 (approximately).
These days, you can buy as much computing power for about $10
(again, approximately). In some sense, that's equivalent to being
able to buy a Jet Airplane for the price of a children's trike (even
more approximate).
Few of the original predictions of the impact of computing accommodated
the implications of this enormous growth. It's not clear many of us can
really conceive of the growth, or the possibilities such growth implies.
A quick scan of the many early predictions about computing and related
issues show things that we now consider gross misconceptions, such as:
``there will never be a need for more than ten computers
nationwide''; ``no one ever needs more than two copies of a
document''; ``computers can only process numbers''; ``only
specialists need computers''; ``only specialists can use
computers''.
The growth has also led many computer programmers to be wasteful.
In 1984, a Macintosh had 128 kilobytes of memory and used 400K disks.
The ``smallest'' Macintosh you can buy today has about 16 megabytes of
memory (128 times as much) and comes with a four gigabyte hard drive
(about 10,000 times as much). Yet there was a lot squeezed into
that small space. A 400K disk could fit System, Finder, Drawing or
Writing Program, and even a few user files. Have we gained
significantly more functionality? One hundred times as much?
As computers have evolved and people have found new things that
computers can do, there has been a changing notion of what computers
are. Originally, computers were considered devices that did simple
computations (but lots and lots of them). However, if you ask a child
what a computer is, (s)he might say that computers are ``things that
help me draw, communicate with my friends, and do my homework''.
Similarly, much of the work the most of us do on the computer seems to
have little to do with computation (e.g., writing this handout).
Nonetheless, at the heart of everything we do on the computer is some
form of symbolic manipulation, which is what many consider to
be the heart of any type of automated computation.
One sense of the evolution (some of which happened in parallel) is:
- Early usage: calculation-based problems such as trajectories,
scientific data, etc.
- Continuing usage: analyzing and printing business-type data.
- Beginning general usage: spreadsheets, word processors, games.
- GUI-related usage: page layout, wysiwyg word processors, drawing
programs, better games, etc.
- Network-related usage: email, newsgroups, chat, Web.
- Ubiquitous usage: PDA, embedded chips, etc.
- Ancient Greece, Babylon, China, etc (a few hundred BCE)
- First algorithms. E.g., Euclid's algorithm for computing
greatest-common-factors, Eratothenes sieve method for computing
primes.
- Early aids to computation. E.g., abacus.
- Early common era
- Early ``hypertexts''. E.g, the Talmud.
- 1500s - 1700s.
- Slide rule as computational aid (John Napier).
- First automated/mechanical calculators designed by Pascal and
Leibniz.
- Printing press permits publication of ``computational tables''
(e.g., logarithm tables).
- 1800s.
- Jacquard invents ``automated loom'' controlled by punch cards.
Permits encoding of expert knowledge of weaving. (c. 1801)
- Babbage designs ``difference engine'' for computation of tables.
(c. 1820's).
- Babbage designs ``analytical engine'' for general purpose computation.
- Lady Augusta, Countess Lovelace, designs programming language and
writes programs for nonexistent analytical engine.
- 1880 census takes seven years to compute. 1890 census predicted
to be impossible to compute.
- Hollerith devises electromechanical counting machine for census.
Basics of 1890 census computed in six weeks. Hollerith's company
eventually becomes IBM.
- Early 1900's.
- 1920's. Vannevar Bush develops large scale analog calculator for
computing projectile trajectories.
- 1930's. Zuse develops a series of electromechanical computing
devices. Turing publishes paper on what is computable.
- Early 1940's. First long-distance computation done at Dartmouth.
- 1940s.
- Colossus, first electronic computer, used in Britain for breaking
German codes.
- Harvard Mark I is first fully automatic computer.
- ENIAC is first programmable electronic computer.
- Transistor invented at Bell labs. Grant Gale at Grinnell gets one
of the first transistors to show in his physics classes.
- Vannevar Bush writes ``As We May Think'' (published in Atlantic
Monthly), an article on a system
he has designed for organizing and linking information. Perhaps first
mechanical hypertext system. The paper eventually inspires a number
of great developments in computing.
- 1950s.
- Clif Flynt born (Clif said he lived through it all, so I thought
I'd put him in here).
- Noyce contributes to development of integrated circuit.
- First graphical output computers at MIT.
- Growth of Digital Equipment Corporation: ``It's a personal data
processor and not a computer'' (emphasis mine).
- Movement of computing towards business applications begins
(continues?).
- Turing designs ``Turing Test'' for artificial intelligence.
- 1960s.
- Ted Nelson coins the term hypertext.
- MIT hackers develop SpaceWar, perhaps first videogame (1962)
- Eliza, an automated ``psychotherapist''. See
http://www.friendlyware.com/Ella1_0.shtml for
an online example.
- Time sharing developed. More than one person can use a computer
at a time!
- ARPANET developed for communication between computers. Quickly
grows into system for human communication.
- 1970s.
- Graphical user interfaces and the mouse developed partially in
response to Bush's paper.
- Pong!
- Textual adventure games.
- Personal computers (late 70's, still mostly ``geek devices'').
- VisiCalc: first spreadsheets. Led to the growth of personal computers
in business.
- 1980s.
- First true GUIs on personal computers.
- Continued growth in video games.
- More networking.
- ARPANET retargeted as Internet.
- Macintosh released. Computer as personal appliance.
- 1990s
- The Web (early 1990).
- Enormous growth.
- As one might guess, the growth of computing has had a tremendous
impact on society, particularly because computing has grown
more quickly than almost any technology.
- How has it impacted society? In many ways.
- Computing permits us to gather and analyze much larger data
sets than ever before. (
- The growth of computing has led many to rely on computers and
their algorithms for things previously done by hand. At times,
this is good (it can prevent bias), but frequently it is bad
(it ignores many things that can't be quantified or automatically
processed). For example, consider a ``computerized judge''.
Such a thing might be race-blind. It might also forever
store contemporary biases (including race-based biases).
- Computing and the Web have led us to ask many new questions about
intellectual property.
- Computer programs have been called ``the most complex man-made
objects''. How do we handle that complexity and the likely errors
associated with that complexity? In fact, there are some algorithms
that ``build themselves''. What can we say about such things?
- Because computing can challenge some expectations, there are many attempts
to legislate computing. For example, it may be considered a felony
to export an encryption algorithm and many legislators are attempting
to control what information appears on the Web.
- Computing can both narrow and increase the barriers between classes,
nationalities, races, etc.
- Networks, computing, and particularly the World-Wide Web are forcing
many to rethink notions of information, particularly with regards to
intellectual property laws (copyright, patent, etc.) and the
veracity and usefulness of information.
- For example, many complain that little of the information on the Web is
refereed or edited in any way. Unfortunately, some people believe
``if it's in printed form (or on the Web) it must be true''.
- How do we teach people about ``levels of accuracy''?
- If someone writes an incorrect set of instructions for doing
X (e.g., picking a college), are they responsible
if someone else uses them and suffers the consequences?
- If another site links to the incorrect information (e.g., on
``The Official Xylinks Magazine List of Recommended College
Tips''), is the linker responsible for the incorrect information?
- Of course, it's never been clear to me why people think that print
is much better about accuracy. Amateur 'zines have existed for a
long time (certainly as far back as the broadsides of the
revolution) and much of what appears in print is still biased
according to the knowledge, limitations, or even goals of writers,
editors, and publishers.
- Another example has to do with linking and copyright.
- Is it (or should it be) a violation of copyright to make a document
containing a
link to another URL? Most would say no, as we have a tradition
of writing things like ``for more information, see ...''.
- Is it (or should it be) a violation of copyright to follow a link to
a document?
Again, most would say no, as the standard on the Web is ``if a link
to a document works, the provider of the document expects me to
be able to read the document''.
- Is it (or should it be) a violation of copyright to include an image
tag that links
to another site? For example, if I create a page at Grinnell, can I
include an image from Dartmouth, even if I don't copy the image but
instead write code that says ``Put this image from Dartmouth at this
point in my page?'' This is less clear, as it seems like a link, and
the actual downloading of the image is done by the reader. However,
the image appears within the Grinnell page, making it seem like the
property of Grinnell, rather than Dartmouth.
- Is it (or should it be) a violation of copyright to save a copy
of an image or file I obtained from the Web on my local disk, given
that I don't allow anyone else to access it? Note that most
browsers do this automatically. Does it make a difference whether
the saving is explicit or implicit?
- Is it (or should it be) a violation of copyright to print a page
from the Web?
- Is it (or should it be) a violation of copyright to modify a page
from the Web (provided the modified version is only for your own
use)? How is this like cutting up a magazine you buy? How is it
different?
- To return to our first two questions, consider the following links
to an archive of comic strips.
http://www.creators.com/comics/compage/obh.asp
http://www.creators.com/comics/compage/obh/obh121599.gif
as you may note, even though the ``main'' page limits access to
strips from over two weeks ago, the second link is to a strip not
yet published.
- These days, there are also many questions of deception, intentional
and unintentional.
- The Princeton Review once purchased the domain name
kaplan.com and used it to advertise their
services.
- If I purchase the domain name
grinnell.edu or
grinnell.com and write about a fictitious
Grinnell University, am I impinging upon the rights of Grinnell
College?
- I've been told that there were three ``front doors'' for Bob Dole before
the last election. None was authorized.
- There are also many questions of internationalization.
- What happens when one government tries to control the Web (as
ours tends to do)?
- Does the Web promote the ``Americanization'' of the world?
- Many also worry about issues of access, particularly for the disabled.
- There are screen-readers, but they require particular layouts and
can't usually read images.
- Clearly, one of the biggest issues relating to the social impact of
computing is the legendary ``Y2K'' (year 2000) problem.
- What is the problem? The problem is that many computer programs
(implementations of algorithms) represent dates using only the last
two digits. When the year reaches 2000, programs are likely to get
confused.
- Is ``00'' before or after ``95''? It's important for computing
interest, computing people's ages, and such.
- You might think ``but dates are just numbers, why does it matter
how many digits you use''?
- Unfortunately, while it should have been practice to use 19xx as
the internal represenation (the number the computer uses), even if
xx was the external representation (the number we see on the
screen), most programmers didn't make the leap.
- You might think ``but it's easy to tell whether something is a date,
and if it is, just put the 19 before it''.
- However, consider something like the following code intended to
``give older people a special benefit'':
if (foo > 59) then
specialBenefit = 10;
else
specialBenefit = 0;
- Is this ``if someone is older than 59''?
- Is this ``if someone is born after 1959''?
- Only rigorous inspection of the program can tell us (and it
can't always tell us).
- You might say ``can't we just set the clock forward, and see what
happens''?
- Testing every possible circumstance isn't possible.
- Some clocks can't be set forward. Consider the computer chips that
are embedded in other systems (cars, oil rigs, ....).
- The costs of identifying such problems have been enormous (and it's
clear that we haven't caught them all).
- Is anyone at fault?
- Programmers were often given specifications that said that the program
only needed to work for N years.
- The contractors that hired them were given similar specifications.
- How much havoc will this cause? No one knows.
- Some experts believe we'll have a day or two of minor trouble.
- Some believe that it will be months of severe trouble.
- Some believe that it will be years of minor trouble.
- Some believe that we'll all die, and it won't matter how long it
takes to fix it. (The former Soviet union is reputed to have an
emergency retaliation system that automatically fires missiles if
communication is lost. No one knows whether it's sensitive to
Y2K problems. Given the current financial state of Russia, it's
not clear that anyone is looking into it.
- Some students and faculty at Dartmouth have put together a nice set
of pages reflecting on particular implications. You can also follow
links to other articles.
My notes on the history of computing are based on a variety of sources
and experiences, not all of which are things I've seen, used, or heard
recently. Recent and remembered sources include:
- A collection of short historical videos from the Boston Computer
Museum.
- Jon Palfreman and Doron Swade (1991). The Dream Machine: Exploring
the Computer Age. BBC Books.
- Steve Ditlea, ed. (1984). Digital Deli: The Comprehensive,
User-Lovable Menu of Computer Lore, Culture, Lifestyles, and Fancy.
Workman Publishing.
- Rick Decker and Stuart Hirshfield (1998). The Analytical
Engine: An Introduction to Computer Science Using the Internet.
International Thomson Press.
My notes on social issues in computing are based on a variety of sources
and experiences, not all of which are things I've seen, used, or heard
recently. Recent and remembered sources include:
- Sara Baase (1997). A Gift of Fire: Social, Legal, and
Ethical Issues in Computing. Prentice-Hall.
- Rick Decker and Stuart Hirshfield (1998). The Analytical
Engine: An Introduction to Computer Science Using the Internet.
International Thomson Press.
- Richard G. Epstein (1997). The Case of the Killer Robot.
John Wiley and Sons.
- Peter G. Neumann (1995). Computer-Related Risks. ACM Press /
Addison-Wesley.