From: solman@athena.mit.edu (Jason W Solinsky)
Newsgroups: soc.college,comp.sys.mac.programmer,misc.education
Subject: Re: Computer Science Programs
Date: 19 Aug 92 09:12:10 GMT
Organization: Massachusetts Institute of Technology

In article <1992Aug19.020350.26435@src.umd.edu>, clin@eng.umd.edu (Charles Lin) writes:

|>    In any case, it seems that the "better" schools, or the
|> ones with the so-called repuation tend to favor a more
|> theoretical treatment.  Why do some schools teach Scheme?
|> Because some of those folks who are interested in more
|> functional languages feel that functional languages are
|> the way to go.  Obviously, C is popular (and, ugh, even
|> FORTRAN), and it's popularity will keep it popular for
|> a long time to go, with everyone fearful of not learning
|> it.  On the other hand, I'm not so sure that just because
|> a school doesn't teach it doesn't mean that one can't learn
|> the language on one's own.

I've seen alot of interesting things said about C here. The real bottom line
with C is that it has two advantages:

A) its one of the lowest level languages which the present software
   engineering powers believe can be used to develop software quickly
   enough to be marketed competitively.

B) There exists a huge body of libraries which allow for programming at
   highly abstract levels. There exists no limit on the level to which
   this could be extended.

Letter A is changing very rapidly. The market value of quick execution (the
primary advantage of the potentially low level nature of C) is decreasing
rapidly, primarily because the maximum amout of computational power that
can be readily used by the business segment of the market is increasing much
more slowly than the unit cost of computational power in nominal dollars is
decreasing. This, coupled with a belief (and, I would argue, reality) that
the optimal time to spend in software development is decreasing, make
advantage A almost worthless.

B is not presently exploited as well as it could be in the real world. There
isn't any good reason (economically speaking) why this should be the case,
but it is. And now in 1992, as advantage A becomes worth less and less,
software engineering tools which exploit advantage B far better than
C does are becoming more and more available.

The ultimate result is that the lifetime of C with a majority of the software
engineering industry is VERY VERY limited. If people (who are using their
education only for the purpose of getting a job) are looking to their CS
education to provide them with a strong proficiency in C may be looking for
the wrong thing.

They should be looking for a proficiency in working within a software
engineering group as a team. It is an often touted truth that throwing more
programmers at a problem will not finish the problem much faster, but the
degree of inefficiency thus incured decreases when you have people who can
work well with a team. This has real market value ($$$) and after your first
job, when recomendations from previous employers come into play it will make
a real difference.

People who just want a job, should also be looking to gain the ability to
program irrespective of the language that you are using. Given a problem,
several hundred thousand lines of somebody else's _documented_ code, and
a reference manual on a new language, could you get the job done quickly and
bug free? If I'm right about the rate of increase in computer power having
finally outstripped the rate at which the business sector needs more
computational power, then you can look forward to a software engineering
environment wherein the level of abstraction doubles ever two months.
Merely programming in C won't help, you have to be prepared to handle
everything in terms of high-level abstractions. Being low-level as it is, C
has thus far spared people who are uncomfortable with this, even when working
on a lower level slowed product development. In the future resorting to more
primitive code simply won't be an option. It takes too much company time and
that makes YOU less valuable ($$$).

I think that the way in which the market is developing will render these skills
infinitely more useful than logging thousands of hours of C programming. There
are only two ways to acquire these skills (both of which should be done).
1) take a course in a lisp-like language. the course should leave you able to
build a basic compiler or interpreter in a minimal amount of time, and should
(MOST IMPORTANTLY) leave you ready to work with large amounts of somebody
else's code and...
2) take a course (or do CO-OP work) where you have to work on several team
projects.

Just my opinions.

|> 
|>    Personally, I think that if they didn't teach theory,
|> then there would be no new, interesting developments.  Where
|> would someone be interested in theory if it was never taught?
|> For example, calculus is taught in high school, and yet
|> some folks will never use it, even having learned it.  Physics
|> and chemistry tend to be required, but many never learn
|> anything approaching useful from it, and yet I think there
|> is some benefit with having learned it.  Even if the material
|> is not remembered, just trying to solve problems and such is
|> a skill that might be used elsewhere.

As I noted previously, if you don't care about theory and your primary goal is
to get a job programming, then college is not the place for you.

Jason W. Solinsky