« Reading List: Rubicon | Main | Reading List: Thank You for Smoking »

Sunday, October 14, 2007

Forty Years of Programming

I can't document the precise date, and the program is lost in the mists of time, but as best as I can recall, it was about forty years ago this week that I punched my first computer program onto cards and fed it into the card reader of the Case UNIVAC 1107. The program, whose purpose I have forgotten, was written in FORTRAN, which I had imbibed in one huge gulp from Daniel McCracken's book. They say that, out there for everybody, there's a book that will change your life if you're lucky enough to find it. This was the one for me, and I found it in the fall of 1967.

Case Institute of Technology had a fantastically wise and prescient policy for undergraduate access to their computer facilities at the time: any student could sign up for an account which would provide up to one minute of computer time per job, with any number of jobs per day. Student job priority was below all other work, but turn-around was generally within five or ten minutes, with students feeding in their own cards and tearing their own output off the line printer.

Young'uns who've grown up with gigahertz processors and gigabyte storage may find it difficult to imagine the impact of this upon larval proto-nerds who, just a decade after Sputnik, found themselves able to command a multi-million dollar machine occupying most of the first floor of a building, for whatever purpose popped into their minds, at least for a minute at a time!

It was like suddenly finding yourself on that great space wheel in 2001, which wouldn't even reach the movie screen until the next year.

In the Bronze Age of computing, intellectuals tended to look down upon computer programming as a “vocational skill”. I remember one of my high school teachers likening a summer course in programming to scholars in the Great Depression learning to drive bulldozers in order to to hedge their career prospects—far better to be an aerospace engineer and design the Mars exploration vessels of the mid-1970s and the colony ships of the eighties and nineties…sigh. What particularly attracted me to computing was that it was one of the few remaining areas of technology where an individual could create a complete product entirely on their own, limited only by knowledge, talent, and willingness to exert the effort required to get the job done. With the Apollo-era consensus that the future belonged to huge teams of interchangeable-part engineer modules, this was singularly refreshing. Further, while computers were hideously expensive (although Moore's Law soon took care of that), the computer was all you needed to play the software game: you could create a complete product without the multiple disparate skills required to field something tangible. To me, software was pure reason without the critique. Before the end of 1967, I'd pretty much decided that's how I wanted to spend my professional life. Worked for me.

I've decided to use this anniversary as an excuse to list the principal platforms on which I've developed software over the decades.

Years Computer Operating System Language(s)
1967–1968 UNIVAC 1107 Exec III FORTRAN, ALGOL, Assembler
1968–1973 UNIVAC 1108 Exec IV, Exec-8 Assembler
1974–1975 UNIVAC 1110 Exec-8 Assembler
1976–1977 Interdata 7/16 Real-time Kernel* Cross-assembler*
1977–1982 Marinchip 9900* MDEX*, NOS/MT* Assembler*, Pascal
1982–1983 8080/8085/Z-80 CP/M PL/I-80
1983–1985 8088/8086/80286 CP/M-86, MS-DOS C
1985–1989 Sun 2/160, 3/260 (680x0) SunOS C
1990–1994 Sun SPARCstation SunOS, Solaris C
1994–2001 SGI Indigo² (MIPS R4400)
Intel Pentium

Windows 3.1/95/2000
2001–2007 Intel Pentium Linux C, Perl
* Computer/operating system/language of my own devising.

This table isn't exhaustive, and there are substantial overlaps. In my work for Autodesk between 1985 and 1993, I developed code on Sun workstations which was then rebuilt for the MS-DOS and DOS extender platforms used by most of our customers. Between 1994 and 2005 the Fourmilab Web site ran on a variety of Sun workstations and servers (SPARCStation 2 [1994–1996], SPARCserver 1000E/SSA [1996–1998], Enterprise 3500 [1999–2005]), and since then has run on a redundant server farm composed of Dell PowerEdge 1850 Intel Xeon-based servers. Whatever development platform I'm using, a substantial amount of the code I write is ultimately deployed on the Web server.

This is the five hundredth posting on Fourmilog, which celebrates its own third anniversary on October 29th.

Posted at October 14, 2007 01:44