advertisement

Weblog:   What would you put in a Computer Science Curriculum?
Subject:   The value of CS, and a rant on pedagogic calculus
Date:   2005-09-12 17:02:18
From:   rkk_529@hotmail.com
Hmmm. Several professorial posters have justified their difficult, esoteric classes by arguing that the student that can survive them can easily learn anything the real world throws at them. One could also state the same thing for learning Chinese. It's quite difficult, and those that do well in it find computer languages easy. Just an observation I've made over the years. However, they are right, in a way, as my rambling below will touch on. But first, my anti-pedagogic calculus rant


<rant>
Many sciences require Calculus. It's rather difficult, especially for math phobes and is a great way to cut down on the number of candidates for a popular major. The text books in the subject are opaque (compare any but Thomas to Thompson's 1910 "Calculus Made easy" if you doubt me), the instructors (usually foreign) are much more interested in completing their degree rather than dealing with these dumb Americans, and the professors (at least in my acedemic career) are incapable of conveying the excitement of what can be accomplished with Calculus (Refer to Darbyshire's "Prime Obsession" for a glimpse of how really cool it is). I'm sorry to say that you will not find this in freshman calculus 101. Most of you acedemics should just have the honesty to state that the course exists to get rid of those who cannot understand mathematics while being bored out of their skulls.


What a terrible fate for a beautiful set of ideas.
</rant>

I've worked as a programmer for 25 years. Programmer is too narrow. What I really do is manage complexity. I've written code in assembler, C, Forth, Pascal, Lisp, Basic, Fortran,
Python, Java, Smalltalk... I learned all of these from the manual. I have used calculus once, (to develop an algorithm that took the number of rotations of a tape capstan and turn that into a linear measure of the tape used.)


That's the only time I've use it professionally. Now, in decades of lunchtime talks about physics with colleagues, I've integrated and differentiated countless times. I'm glad I know it, but it hasn't been much direct use in my paying work. However statistics, fourier analysis, and an host of other algorithms has been, and understanding these requires calculus.


What is directly professionally useful is also ephemeral. How to pass arrays in perl. How to make paintComponent work in Java Swing upon program initialization. How to set up a jar file, or a CLASSPATH. These might well be as useful 10 years from now as using common blocks or setting up print/format statements in Fortran is now. Rather silly to base a college course on them.


So. What should colleges insist their CS graduates study?


Analytic skills
Well taught calculus so you can understand statistics, which is very useful.
How computers work. And, or, and nor gates. adders. 2's compliment. Assembler. Pipelining, caching, networks, both serial and parallel. Network architecture. Interperters. Complilers.
With this information, you'll understand how to go about optimizing a system.
Languages. The Algol family. The Lisp family (forth, for extra credit). Now you have an idea of how to match a language with a task. Or you can avoid dogs, like C++ or PL-1.
Object oriented programming. I've only seen it done correctly once in my career. Learn when to use it (hint: big projects) and when not.


Algorithms. As a scientific programmer, I've had Numerical Recipies in C as a constant companion. Learn how and when to use each one.
You might only use 10% of them in real life, but you never know which ones will comprise that 10%.
Oh. You'll need quite a bit of mathematics above the calculus level if you want to this, I might add.


Code, debug, and code some more. Learn Unix, for serious projects, and windows because it's so prevalent. Write neat programs that do what you want them to. Games, simulations, AI, control robots... you imagine it and make it happen. Lots and lots of work. Be sure you enjoy it!


English. You have to be good at english to write good code. As mentioned by other posters, a class in literature won't cut it. I suggest a course in english taught by the journalism department. This is very important. I've thrown out reams of poorly documented code in my career, not because it didn't work, but because it was so poorly organised and commented that it was easier to rewrite it from scratch.


Computers are a lifetime study, a CS degree is only the start. Not to worry, however, because it's really fun teaching these dumb machine to appear be much smarter than they really are.