Curricula ...

From: Michael B. Brutman <mbbrutman_at_magnaspeed.net>
Date: Wed Aug 22 00:10:50 2001

This is quite an interesting discussion on computer science
curricula. My 2 cents, for what it's worth.

I started with BASIC on a PCjr. The coding style was attrocious,
and I couldn't make it perform. Such is the tragedy of a strictly
interpreted language with a run-time that owns the entire environment.
Performance tips for interpreted BASIC actually had you shorten
variable names, use literals instead of constant variables,
strip comments, and put multiple statements on a line. These are all
things we learned to abhor.

Early on I figured out the need for speed and structure. I bought
Zbasic. That gave me functions, procedures, and it was a compiler,
not a wussy interpreter. It also gave me the ability to do inline
machine code. Zbasic opened lots of new paths for me. Best of all,
I still had to live within the confines of a 64KB code segment.
On my bigger programs (a BBS system) I had to use overlays. By the
time the BBS project was done, I knew the 8250 UART and RS232 signals,
and the Hayes command sent in and out. I had also learned to program
really tight.

In high school we did Pascal. Pascal gave me pointers, in return
for locking me up in a straight-jacket. Pointers were powerful and
alluring though. This led to self-study on C.

At State University of New York (Oswego) ten years ago, I learned
the classics - assembler, Fortran, COBOL, Modula-2, and C. I didn't
become proficient at assembler, Fortran or Cobol - I just needed to
be aware that they existed, and to understand the school of thought
from which they came. C was the language of choice, because I was
interested in networking and operating systems. (Use the right tool
for the job.) C++ just started coming out then .. in my last year I
dove into that, and picked up a new programming paradigm. (I hate
that word.)

Professionally I had to learn PL/MP, which was IBM's internal language
for programming in the OS on an AS/400. My first job was porting
SNA comm code from one dialect of PL/MP to a newer one. Pain is good;
it builds character. Then I had to learn to port PL/MP to C, and to
do PowerPC assembly - I now owned some interrupt vectors.

C and C++ were the languages of choice. We only used assembly when
raw performance was necessary, or when we needed to perform voodoo
that we could not code using the compiler. (We would often manipulate
stack frames and other data structures outside the confines of the
compiler.) Good programmers are too expensive and schedules are too
tight to do most things in assembler. Only the lowest levels of
the OS use assembler, and even then it is a mix of C and assembler.

After eight years in the hole, I decided to move up into application
space. Java is a much different environment. I've never been so
productive when writing code - the runtime and library support are
extensive. Java is deceptive though - lots of people can program
in Java, but few can do it well. I constantly struggle to guess
the performance characteristics of what I am writing; with a C++
program, I could change some listing options and look at the
generated assembler. Now I'm kind of blind - I have to the design
through very carefully as I write, because I can't see the generated
assembly as easily.

I don't know how a student with a four year degree can be called
a professional programmer. It's only after 17 years of programming
 (with 10 years of professional experience) that I now consider
myself armed and dangerous. I loved taking graduate classes as an
older student - it was so easy to crush the competition because of
the depth of experience and exposure that I had. ;-)

You can get somebody to do Java and VB in four years with a fair
level of competence. If you want a professional programmer, those
are a different breed. Without the languages background, the OS
classes and the compiler classes, it's all a black box. Understanding
the black box is key to utilizing it.

And I've so much to learn ... I've not forayed into LISP yet.

Mike
Received on Wed Aug 22 2001 - 00:10:50 BST

This archive was generated by hypermail 2.3.0 : Fri Oct 10 2014 - 23:33:34 BST