I was exposed to programming many times in my life before I was truly bit by the programming bug. There were two key ingredients that were missing from my early exposures to programming.
When I was in 3rd or 4th grade, I got a plastic computer called Digi Comp I. It had a 3-digit binary output, and it was mostly plastic (and some wire rods). You performed a clock-cycle by pulling and then pushing a horizontal plastic piece that was connected to the little plastic logic rods. I never understood it, but I could get it to play Elevator, Count Up, Count Down and play a simple game of “What Number am I thinking of?”. It didn’t excite me too much, because it wasn’t that useful and you were limited by the programs in the book.
In between 11th and 12th grade, I went to St. Paul’s School Advanced Studies Program and took a college course in Linear Algebra. I don’t remember the details, but Mike Lynch and I used the computer terminal (hooked up remotely to the Dartmouth mainframe), to print out prime numbers (using a very basic program (in Basic no less)). We let it run all weekend, and I think it almost made it to 1,000,000. (This is a very fuzzy memory). Yes, it was much more powerful than the plastic computer, but although we were impressed with the list of Primes, we didn’t sit there and actually watch the program run (after it hit the first 1000 primes). It was very, very slow compared to today’s computers.
So, jumping forward to college. I thought I wanted to be a teacher, but I wanted to get a real math degree and not go to a teaching college. I chose Rensselaer Polytechnic Institute, an excellent engineering school in upstate N.Y., and graduated with a B.S. in Mathematics with a minor in Psychology (in 1979). Along the way, I took one computer course using Fortran (with Watfor and Watfiv). Some of the upper level students got to use a teletype machine, but we had to use keypunch cards. We had to wait 1-3 days to get our results after handing in our keypunch deck to operators that ran the programs for us. I aced the course, but was mostly bored. Computers seemed to be a thing you either understood or you didn’t, and I seemed to understand them…but was not excited by them. Waiting 3 days to find out you missed a period or finding some other syntax mistake was not exactly fun. That ended up being the one and only computer course I took at RPI.
So, I managed to graduate college without finding my true passion or true calling. All that changed in the summer of 1981. I worked for UPS, 20 hours a week, my last 2 years of college. I had friends that were a year behind me at the College of St. Rose in Albany and I decided to hang around, continue working at UPS and watch them graduate. In 1980, I went back for my master’s in Education at SUNY-Albany but didn’t finish. In the summer of 81, I was helping a friend that was still in school at Russell Sage who was taking a computer course at RPI. RPI had just transformed the Chapel into a state-of-the-art student computing center. It was beautiful. All the stain glassed remained and there were rows and rows of CRT’s (one step above teletypes…because no paper was involved…just a great green-on-black glowing characters (no real graphics yet)).
Instead of keypunch cards, you worked right on a keyboard and you saw what you typed on the screen in front of you. I didn’t understand the specific Job Control Language needed to compile and run, but luckily she had that part written down and it was pretty simple. I don’t remember what her program was trying to do (I think it was something simple like find the sum of numbers 1 to N or factorials). What I do remember, was the rush of adrenaline I got, seeing the results happen immediately in front of us. You change the code, run it again, and something different happens…right then and there. No three day wait if you missed a semi-colon or typed an extra bracket. I was hooked. I also could see that you could get the computer to do just about anything (at least anything I imagined at the time that had to do with math).
So, what were the two key ingredients. The first was power, the feeling that I could make the computer do something interesting. The second was immediacy. You do something, you run it…and you know immediately whether it was right or wrong.
And I’ll add a third thing: correctness. Although you may want the computer to do what you want it to do, a computer will only really do what you tell it to do. If there is a mistake to be made, 99.9999% of the time, it’s your mistake. People think I love to argue, but you can’t really argue with a computer. It’s right, it does what you tell it, even when you tell it wrong.
Sometime soon, I’ll write about why I still love programming 30 years later.