Joel on Software – Back to Basics
As an aside from my ranting & raving about politics, let’s talk about programming for a moment.
This article makes a good point about something very important; namely, that to be a good software programmer, you have to know a lot about the nuts & bolts of how the computer works – from raw CPU instructions right up to drivers & other high-level nonsense.
I totally agree with this; partly because it’s how I was taught in college. When I’m writing code or troubleshooting a problem, I can “see,” in my head, little visual representations that I’ve imagined of what’s going on at each level of the computer – App, OS, and hardware. It helps me keep it all straight, and helps me think clearly about problems (which is most of what programming & troubleshooting is really about, when you get down to it).
Good ‘ol FSC started me (and my fellows) out on Pascal, and also dragged us through several low-level Electronics classes, so that we would know the difference between a resistor, a transistor, and a capacitor. Then we moved into C, taught by someone whose influence I will never forget, but whose name I can only remember as “Aparna.” Learning to use pointers, learning the difference between calling by reference and by value, and allocating memory… ah those were the glory days! At the same time we were being indoctrinated into the C (and, eventually, C++) world, we were literally building a fully-functional 4-bit computer – and I mean building. We didn’t get to use a CPU, we had a ALU (arethmetic & logic unit) and a memory controller as seperate chips. Our “screen” was a single 8-segment LED display, and our “main memory” was just a few bytes. We programmed the whole thing by writing the bootstrap code in Assembly, and then translating it (BY HAND!) into its hexidecimal equivilant and dumping the whole thing into an EPROM. (We went through quite a few of thse one-time-only chips, as you might imagine – thank goodness they were cheap!)
Now, if that doesn’t give you a good ground-up view of computers, nothing will. Now, of course, after these fun projects we moved onto more “modern” stuff, like object-oriented programming & other fun, modern, hip stuff. But that’s neither here nor there.
What is interesting is that FSC’s computer science department has fallen into the same trap as many other CS departments – the same trap that is described in this article; namely, teaching Java as the “introductory” programming language. Me? I’m just glad I got in (and out) of there when I did. I may not remember how to program in Pascal, but I don’t really remember how to program in Java either, and I learned that much more recently – and it didn’t teach me anything new. Pascal did. Hell, we were running it on these ancient dumb terminals in a room called “VAXLAND,” and although the server wasn’t a VAX (it was an Alpha, I think), it did run VMS. And that was old and scary, and gave us (well, me at least) a good experience with older, lower-level programs.
I can honestly say I pretty much attribute my skills as a programmer today entirely to the CS program at FSC – it was, in my opinion, a good program, and the one right way to teach students software programming. (Software design, on the other hand, came later – mostly from work experience, not college classes.)
Ah, memories. Well, that’s all the rambling I have for now on this subject. Ta-ta for now!