From: clin@eng.umd.edu (Charles C. Lin)
Subject: Re: Computer Science Programs
Reply-To: clin@eng.umd.edu (Charles C. Lin)
Organization: College of Engineering, Maryversity of Uniland, College Park
Date: Sun, 16 Aug 1992 23:06:58 GMT

In article <k1HePB1w164w@tosh.UUCP>, steve@tosh.UUCP (Steve Wilson) writes:
> Hello.
> 
> I am looking for descriptions of Computer Science programs at the different
> Colleges and Universities around the country.
> 
> I'm interested in learning what languages are taught; whether there is an
> emphasis on mathematics and physics or programming. In addition, I would
> like to know how the faculty are (research or teaching oriented), how
> plentiful the resources (i.e., are different computer environments available
> for use by undergrads to broaden exposure), and how the campus culture is?
> 
> Recommendations and additional information are welcome, so don't be afraid
> to tell me about your alma mater.
> 

   Well, since this topic has already had some responses on the
net, I'll keep it there.

   Let's assume that you are talking about the undergrad schools
and that perhaps you may be a high school student.   First
of all, some schools make the distinction between computer
science and computer engineering.   Computer science usually
refers to software and more theoretical aspects of computer
science.  Computer engineeering typically leans more to hardware
and is often a subgroup of electrical engineering.  Sometimes
both electrical engineering and computer science are under
the same department (Michigan and UC Berkeley come to mind).

   I'll assume you are interested in computer science.  I
once talked to a prefrosh (high school senior or earlier)
about the computer science program.  Among the questions
that most people worry about are what computers will be
used, if one can get onto a supercomputer,  what languages
are taught.  There are more general questions as to whether
professors care about teaching, how dorm life, is everyone
cutthroat, are you just a number in the system.  Amazingly
most people grumble about it for a year, and then these
questions seem to disappear.

   Let's start (I'm sure I'll end up repeating some of
Jason's post) by looking at languages.   Most schools seem
to teach Pascal these days.   It's not so much that Pascal
is going to be the most useful language you'll encounter
(C is, at least it's the one most people expect you to learn
eventually) or that the idea of computer science departments
is solely to teach languages, it's the ability to write meaningful
programs in that language.  As an analogy, it's more important
to express one's ideas clearly than it is to learn French
or Japanese or any specific language.   It's what you say,
not the language you say it, that is most important.  Still,
Pascal is used since it lets you get away with less than C,
and keeps you more disciplined.  Some schools (MIT) prefer
other languages like Scheme (a variant of LISP) as they
prefer trying to get people to use more functional languages,
which seem more elegant to professors.

   There should some mixture of math and programming in
most of your CS courses.  The math is typically understanding
how "complex" a program is, or how "efficient" some algorithm
is.   Programming typically (with some exceptions) is machine
independent.  That is, you're more likely to create some
"data structure" which is something of an abstract object,
rather than to manipulate the I/O ports, or doing
anything with a memory map.  The idea is to get general
principles across, and let you figure out architecture
specific things on your own.  It's not that the architecture
isn't important, but by the time you learn how the Apple
functions, someone will come out with A Mac, or a Next,
and you'll have to start the learning procedure all over again.
Ideas such as data structures are more "permanent".  So
the undergraduate courses tend to focus on ideas that are
not immediately practical, but more theoretical, building
up a theoretical base.

   As far as getting a computer, unless you plan efficiently,
or can't afford one, getting a computer is a great help.
You don't have to wait in lines, go away from the dorm
during odd hours, or anything.  the only problem is
dealing with roommates and friends who may want to
borrow the computer.  Schools typically have discounts
on personal computers, and you might even have a dorm
that allows you to hook up to the network.

    Faculty (at least in research universities) are typically
researchers.  They aren't always hierd because they make
the most lucid lecturing, but because they're solid researchers.
Schools in the sciences and engineering build reputations
on research, not on teaching (colleges being the exceptions).
Still, you get a few who do feel the teaching to be very
important.  Most likely you'll find someone who's good
or OK, but not completely incompetent nor excellent.
This is where self-motivation, and learning on your
own takes place.  A lot of profs. no longer think it
is their responsibility to help you learn every little
detail.  You have to be willing to put in effort, and
be willing to get stuck, and think out some problems
for long periods of time.  Essentially, you need to
learn how to think computer science.  How to reason
about concepts.   I think few people are introspective
enough (even profs.) at being able to describe why
they are so good at the topic, which means that they
are sometimes unable to use that experience and pass it
on to the students.

    In any case, very few students seem to want to interact
with the faculty.  Few of them show up to office hours
(often for fear that the prof. will see how stupid they
are).  More are interested in what will show up on the
test, and how they will be graded.  It's not always
the most heartening thing for a prof. to hear.

    Let me quickly talk about my alma mater (I'm afraid
that despite tme being there only two years ago, some 
of what I say may be dated).  You typically start learning
Pascal on Macs.  Then you take a course in some of the
math needed for CS (induction proofs, divide and conquer)
and how to do simple analysis of the complexity of your
algorithms.  There is a course on scientific computation
which is in that awful language, Fortran.  Then you take
a course in discrete math, which is a hodgepodge of
stuff.  Elementary probability, induction proofs, logic,
all of which is fairly math oriented.  Then there is a course
on data structures (how to arrange data in efficient manner),
a course on computational complexity (a mathematical model
of a computer) and what computers can and can't calculate,
a course in computer architecture (closest thing to electrical
engineering), a course in analysis of algorithms, and some
project courses at the senior level (compilers, AI, operating
systems, databases, etc.).  The project courses usually
have a lot of programming in them.  

   Typically, by the time you take data structures, the course
will begin to focus on C, and perhaps to your dismay, they
won't really teach it (a lot of other schools do this).
Actually, this has been partially remedied by a four week
course on C.  However, you should try to learn it as soon
as you can (it's close enough to Pascal that it won't seem
to foreign, but far enough away to not make it a trivial
task).   Cornell has typically been called a theory school,
though that was more in the old days.   There is a current
effort to cross some courses over with electrical engineering
if you are more interested in hardware aspects.

   Anyway, that's my $1.20 worth.

--
Charles Lin 
clin@eng.umd.edu

Newsgroups: comp.sys.mac.programmer