CS 1321X - Lecture 1 - August 19, 2003

CS 1321X - Lecture 1

What Is This Course All About?


"Computer science is as much about computers as astronomy is about telescopes."
--- Edsger Dijkstra, 1930-2002


I.  What is computer science? 

There are lots of vague explanations of what computer science is. 
To some, computer science revolves around the mathematical theory that 
underlies computation. To others, it's about the computer itself...the 
organization of electrical circuits that make a computer able to be 
something more useful than a doorstop. To still others, computer science 
is about software...the programs or collections of instructions that are 
interpreted by those hardware circuits and respond with behavior that is 
somehow meaningful to us. 

A textbook we once used for this course gives as good an explanation 
of the term "computer science" as anyone else's: 

"Computer science revolves around computational processes, which are also 
called information processes or simply processes. A process is a dynamic 
succession of events---a happening." (This book was clearly written by 
someone who spent too much time in the 1960s.) "When your computer is busy 
doing something, a process is going on inside it." 

Putting this into different words, a nice concise way of defining computer 
science is this: computer science is the study of what computers do...not 
of what they are. So in this class, we'll talk a whole lot about what 
computers can do and how to make them do it, and very little (if at all) 
about the nuts and bolts of the computer itself. 


II.  From processes to programs and back again 

We can study computational processes independently of the physical entity 
that runs those processes. For example, many computer scientists study 
human intelligence from the perspective of a computational process that 
just happens to run on a pile of meat as opposed to a pile of silicon. 
They're not tied to thinking of computational processes only being 
associated with digital computers, and neither are we. 

However, since this is a first course in computer science and we 
don't want to go way overboard with really abstract stuff just yet, 
we're going to stay close to the world of digital computers and not 
think a whole lot about processes that might exist on other, more 
wet and squishy platforms. 

Another way of describing a process is "a procedure in execution." What's 
a procedure? That's a collection of instructions, hopefully in some 
meaningful order that results in some useful behavior on behalf of the 
device that executes the instruction. When that collection of instructions 
is written in some symbolic language that can be executed by a computer, 
we can call that collection a computer program. The notation or language 
that we use in writing those instructions is called a programming language. 
There are lots of programming languages in existence, and in this course 
you'll be exposed to at least two of them: Scheme and Python. Others you 
may have heard about include names like Fortran, Cobol (both very old), C, 
Pascal, C++, Java, and Matlab. We'll mention those names on occasion 
throughout this course. 

Let's add just a little bit more vocabulary on your first day: Many times 
when computer folks talk about procedures, they use the word "algorithm". 
We'll use algorithm in this class too, and usually we'll use it 
interchangeably with "procedure", but "algorithm" has a very specific 
definition that goes like this (adapted from "The Advent of the Algorithm" 
by David Berlinski...you should read it when you have lots of free time): 

An algorithm is 

     a finite procedure,

     written in a fixed symbolic vocabulary,

     governed by precise instructions,

     moving in discrete steps, 1, 2, 3, ...,

     whose execution requires no insight, cleverness, intuition,
     intelligence, or perspicuity,

     and that sooner or later comes to an end.


So for our purposes, procedures and algorithms are pretty much the same: 
collections of instructions intended to achieve some desired end when 
followed explicitly. The language they're written in is not too important, 
so long as the language is sufficiently unambiguous. If we want these 
collections of instructions to be run on a computer, we use a programming 
language to encode these instructions. Programming languages are very 
(although not completely) unambiguous when compared to, for example, 
a language like English. So in this class, even though at times we'll 
be talking about high-level conceptual content instead of low-level 
computer programming details, we're going to expect you to be able to 
express your understanding of both high-level and low-level stuff 
through the programming languages used in this course. English is often 
too fuzzy and hand-wavy to be a good medium for you to tell us how well 
you know what you're supposed to know, so expect to be writing lots 
of computer programs in this class, even when you're answering test 
questions without the benefit of a computer. 

When our algorithm or procedure that's encoded in a programming language 
is actually being executed by our Georgia-Tech-required computer, it 
gives rise to a computational process that does interesting things that 
we can talk see and talk about. And that's why there's so much emphasis 
on programming in most introductory computer science courses---it's 
not because we necessarily want you to become money-grubbing commercial 
programmers (though there are worse fates), but it's a really good way 
to explore computational processes, which is what we want you to do in 
an introductory computer science course. 


III.  So why does every Tech student need to know this stuff? 

This is a question that comes up frequently.  As you may know, 
introductory computing is part of the Georgia Tech core curriculum.
Every Georgia Tech student has to pass an introductory computing
course involving programming (or transfer the equivalent from somewhere 
else).  Why computer science and computer engineering students need to 
take this course is obvious, I hope, but why should other majors worry 
about this stuff?  It's certainly the case that all the engineering 
disciplines are becoming more dependent on computing technology, and 
that any new engineer who doesn't graduate with a decent understanding 
of computational processes isn't going to survive long out in the real 
world. Right now, for example, while undergrad industrial engineering 
majors are complaining about having to take computing, we have a backlog 
of industrial engineering grad students who are begging to get into our 
introductory CS courses because they're finding out that they can't continue 
on in their chosen profession without computer programming skills. 

In the sciences, it doesn't take more than a quick look at modern biology to 
see that a lot of what's happening there relies more and more on computing. 
The big human genome mapping project would have been impossible without 
computers. And biologists now often describe biological processes as if 
they were computational processes. The same sort of revolution is happening 
in physics and chemistry. Medical diagnostic techniques like MRI 
scanning can't exist without computing, and the behavior of new 
pharmaceuticals is modeled first on computers because the folks who 
invent the new drugs often look at how drugs work on the human body 
and the nasties that crawl around in there in terms of computational 
processes. 

But it doesn't stop there. Economists use the process metaphor to 
describe the behavior of financial institutions. Political scientists 
use the process metaphor to describe the behavior of political groups. 
We've heard stories of Tech's graduating International Affairs majors 
being hired over their competitors from other universities because 
they know something about computing above and beyond how to use 
Microsoft Word.  And why do architecture or management students have 
to suffer through a course that requires them to write computer 
programs so that they can explore computational processes? The 
answer is that pretty much everyone on this planet (minus some rare 
primitive cultures still moderately unaffected by modern society) is 
strongly affected by computer software. In your immediate future, you 
may make business decisions with the aid of computer-based management 
decision tools. Knowing how those tools work helps you understand what
those tools are, and are not, capable of.  And your architectural plans 
that you've created with design software may be stolen by a competing 
firm that knows more about your software than you do. 

No matter what your major or career path, people who know computing have 
significant power over those who don't. For example, financial transactions 
may be monitored without your knowing it by an overly aggressive IRS or 
law enforcement agency, using their software to examine your bank or 
credit card transactions. Your electronic mail may be screened by the 
FBI's nifty Carnivore software. When you browse the Web, the sites 
you visit are busy recording all sorts of information about you that you 
may not realize you're giving up. And those same web sites are sending 
programs to you that you're running on your computer without realizing 
it...who knows what those programs are doing. Computer-based polls are 
influencing the behavior of your elected representatives. Some time in 
your lifetime, especially after the recent presidential election debacle, 
you'll probably be able to vote for senators and presidents on your 
computer at home. Computing will affect the lives of your children: for 
example, you may have to decide whether to send your kids to a school 
that relies heavily on the use of computer-based instruction to 
supplement real live human teachers. These are just a few examples of 
how computer programs, or computational processes, are entwined in your 
lives, regardless of your major. And if you still don't think that 
everyone's lives are intimately intertwined with computers, think back 
a couple of years to the Y2K panic. Turns out that most of the problems 
were solved ahead of time, thanks to the infusion of lots of time and 
money, but things could really have been very bad if folks hadn't taken 
the potential for disaster seriously. Oh, and those billions of dollars 
that were spent to make those problems go away?....Rest assured that 
the cost is being passed along to you and yours even now, regardless of
your major.

So why should everyone know about how computer programs work? For Georgia 
Tech students, the answer is really that computing technology is clearly 
the most important technology of our time, and since this is an Institute 
of Technology, we'd be remiss to let you graduate without some reasonably 
deep understanding of what computers do, which you gain by practicing the 
art of getting computers to do stuff. But whether you're a Tech student or 
not, you can't be an informed citizen these days without understanding this 
stuff. The folks who know how it works will always have the advantage over 
the people who don't --- not to know means you're giving up control over 
big chunks of your life to the people who do know. 


IV.  How is this course different from the other versions of CS 1321 that 
other students are taking? 

The primary difference between CS 1321X and the other sections of CS 1321 
is that our section assumes that you have had some experience with 
computer programming, while the other sections assume only that the 
students are warm and breathing.  That means we'll be able to move forward 
a little bit faster and cover more ground than everyone else.  Their 
version might not be as challenging for you as this one will be, but 
rest assured that they'll think it's plenty challenging as it is, and 
they'll learn lots about computational processes and programming in Scheme 
too.  But they'll have a somewhat steeper learning curve at first than you 
will, so we use different approaches (as well as different textbooks) in 
the two versions.

So in this course, expect to work harder and do more than you would in the 
other sections.  If you don't want to work harder and do more, that's 
ok...there's no shame in that.  Tech keeps you busy, and we emphasize
that time management is something you should be practicing, so if you
decide to go to the mainstream 1321 course, that's great.  But make 
that decision now...after the first week of classes, you won't be able 
to change to another section.  Starting with the second week, if you 
start to sense that you aren't doing well and decide that you want to 
take the less strenuous version, you won't be able to make that change.  
The best you'll be able to do is withdraw from 1321X and start the less 
strenuous version in the spring, and you can do that only until 
September 26.  After that date, you're stuck in this course.



Copyright (c) 2003 by Kurt Eiselt.  All rights reserved, with 
the exception of stuff that belongs to somebody else.

Last revised: August 20, 2003