Q&A: How Did You Get Into Software?

(Ganked from Nadyne.)

I think I was first exposed to computers by a neighbor of mine when I was about 8 or 9 (so, 1977 or 78) who had somehow piqued my interest with some stories of his programming mainframes. He loaned me a book he had on programming in FORTRAN, which I thumbed through but didn’t really understand. I’m not sure it was a very good book, to be honest, although at that point I had no idea what distinguished a good book on programming from a bad book. (It’s not clear to me that most people who write programming books know this either.)

Also around this time I got into video games courtesy of the Atari 2600, which was the most popular (at least in my neck of the woods) game console of its day. There was even a “programming in BASIC” cartridge for the system which I bought with images of programming my own games, but it was a waste of time since its capabilities were, uh, extremely limited. But also around this time a friend of mine, Ben, got a TRS-80 Model I, which actually did have a full BASIC programming language. I borrowed his books on BASIC programming and wrote out – in long-hand on lined paper! – lengthy programs which represented little games. I’d go over to his house and type them in and see if they worked, debug them, etc. It was all totally ad-hoc, but those days I spent lots of time writing and drawing random stuff on paper, so it was right up my alley.

My parents bought me my very own TRS-80 Model III, which must have been when I was 11 or 12 given that it was released in 1980. So I was able to create all my own little games, and I’d also create little animation programs with the rather primitive graphics system. It had a tape drive and 4K of RAM, and I wrote a text adventure game which filled up the whole of memory, and I had to cut corners to get it to fit in. Later it got upgraded to 48K of RAM with a floppy drive. This was the day of computer magazines which printed whole programs in source code, and I subscribed to one: Softside. I especially enjoyed the text adventure games, in which they encoded all of the text strings using a simple algorithm so you wouldn’t have the game spoiled for you while you typed it in. On the other hand, you ended up with some interesting typos in the strings when you ran the program.

(I sometimes wonder if typing in all this stuff from paper helped make me such a fast typist, especially since I’m a two-fingered typist.)

In late 1981 my friend Rob – who at this point qualifies as my oldest friend with whom I’m still in contact – moved in across the street. They had an Apple II+, and we spent many hours on that thing playing Ultima II and watching MTV. This was a big step forward since it had better graphics and color, which my TRS-80 didn’t have. A couple of years later my Mom bought an Apple IIe, which pretty much put my TRS-80 into mothballs.

My next step in actual programming came through playing play by mail games, which inspired me to construct my own turn-based computer games, which my friends would play. I wrote an elaborate system in BASIC to track everyone’s moves and the state of the game, and emit board state to the screen from each player’s perspective (one of the things I thought was neat about these games was that you could only see a limited amount of the board, quite different from real-time board games). Unfortunately I had no idea how to write printer code, so I had to copy all the boards onto paper to hand them out. Did I mention that I had a lot of free time back in the day? (Did I mention that my grades weren’t so great early in high school?)

By senior year of high school I was seriously interested in computer programming, and I signed up for two programming courses at once, a full-time class in Pascal, and a part-time class in BASIC (the instructor insisted I take the latter class in order to take the former). These were my first exposure to structured programming principles. I also worked part-time in the computer lab and had to restructure a program they were using in the office. This was my first experience working with someone else’s code, and it was more than I could handle at the time – it was very slow going. I just shake my head when I reminisce about it, since these days I wade into thousands of lines of code I’ve never seen before on a semi-regular basis.

The other thing to mention here is that Rob’s mother bought one of the very first Macintosh computers, which must have been right in 1984. It had MacPaint and MacWrite, plus of course an ImageWriter. The screen size, graphics, and color were a bit of a letdown compared to the Apple II, but the interface and software made up for that. I still have a paper print-out of a drawing I did in MacPaint on that very machine. I don’t really remember Rob and I using that machine for much more than novelty fiddling around – the Apple II was still the game system – but in senior year – by which time Rob had gone off to college – my new friend Matt also had a Mac, and we spent many, many hours after school at his house playing Dungeon of Doom on it.

In 1987 I headed off to college at Tulane, and although I didn’t really know what I wanted to do with my life, I did want to keep up with programming. Tulane was a little draconian about its computer science courses: I wasn’t able to test out of classes with material I’d already taken, so I spent my freshman year being re-taught stuff I’d learned the year before. Sophomore year, though, we moved on to C more advanced information about how computers work. By the end of the year I’d decided to declare my major in CS, since the competing majors (English and art) were things I thought I could work on on my own without formal collegiate training. (Naturally, I’ve done fairly little creative writing or drawing ever since. Oh well!)

So that’s when I committed to a career in software When I finished college I felt somewhat deficient in my programming skills – in particular, use of pointers in C still baffled me from time to time – so I went off to graduate school at Wisconsin. Although I didn’t get a Ph.D. there, I did have the opportunity to work with an outstanding programmer on a research project and I learned a tremendous amount from studying his code and talking with him about how he designed software.

I was never a Macintosh programmer in the classic days. Whenever I tried to learn Mac programming I was either daunted by the high price of the developer tools (“Hmm, developer tools or four months of comic books…?”) or I would read about what was involved (the APIs and the lack of protected memory) and it just didn’t seem worth it, especially once I had experienced doing programming on UNIX systems. So my first experience with graphics programming was with X Windows. On the bright side, once Apple moved to a UNIX OS with the advent of Mac OS X, that made it an ideal system for my programming background.

When I look back on it, I often feel like I backed into being a programmer. I wasn’t a hacker or prolific programmer like many of my peers at the time, and sometimes I’d wonder if I wasn’t a fraud because programming didn’t consume my hobby time like it did so many other peoples’. But I’ve always tended to spread my time and attention across a variety of hobbies and interests – as even a casual reading of my journal should prove. Despite this I’ve ended up as a solid software engineer (well, I think so, anyway) in my career. Programming isn’t the be-all and end-all of my life, but I still enjoy building things and seeing them work, and all things considered I don’t regret the choices I made to end up where I am.

My Past Life

It’s somewhat amusing that my career at a previous company (or a close analogue) made The Daily WTF: A Case of the MUMPS. (The comments are also interesting.)

For four and a half years I programmed in MUMPS and in Visual Basic. It was an odd combination. It paid well, though. The work was actually fairly interesting, but a lot of that was because I was both aggressive about being one of the guys to use new technologies when the opportunity presented itself, and because the industry the company served was itself interesting to learn about. (Of course, one might call that a backhanded compliment: at Apple there’s so much to learn and new things to try that if I were aggressively picking up everything that came down the pipe, I’d never have time to do any real work.)

But MUMPS also feels a lot like a shell scripting language: Objects are created on the fly, creating anonymous data structures (arrays of dictionaries and so forth) is so easy that it’s commonly done, the syntax is quirky but not so bad once you figure out a paradigm you’re comfortable with, etc. Perl, Python, and even Ruby (my favorite of the three) all have touches of these characteristics to some degree. (I’m not a big fan of Python, and when I first read about it, its line-indenting restrictions reminded me a lot of MUMPS’ peculiar code-block notation.)

Reading the WTF article, I do have to wonder whether I view those days through rose-colored glasses. If I were to go back to programming in MUMPS (or M as it’s often called these days), would I be able to put up with the low-tech editor, the limited file sizes, the syntactic restrictions, the lack of any object-oriented programming at all?

Well, probably not. Especially since I’ve drunk the Objective-C kool-aid.

(Sent to me by Mark.)