Anyway, here goes... this is a very deep topic for me, so bear with me. :)
How old were you when you first started programming?
I think my first programming experience was in grade school, on TRS-80 machines ("trash-80s"), in BASIC. This was a mischievous child's dream, because although most people could bang out the programs the teacher wrote on the board, almost none of them knew what to do when their screen filled with the same lines of text over and over, ad infinitum. DoS (Denial of Service) at its best! (10 PRINT "YOUR MOMMA WEARS COMBAT BOOTS". 20 GOTO 10.) I vaguely recall building some incredibly simple game at the time, but it's been so long I may be making it up.
How did you get started in programming?
Not long after starting high school, our family got our first personal computer, a Leading Edge 8088 machine. It was awesome with its 640K of RAM. All we'll ever need, right Bill? :) Not long after, I produced a DOS manual for my parents, explaining the intricacies of things like "dir". Probably a year later (sophomore year?) I tried to teach myself Pascal. I had started working at a bicycle shop, so I had a little money, and I bought the Borland Pascal compiler which must have come with some introductory book, or something.
In any case, Pascal was a disaster. It was a very frustrating experience, mostly because the language felt so artificially limited. I did manage to program a little space game on our 4-color CGA display that would go into hyperspace and shoot laser beams, but I got tired of Pascal and let the whole thing sit dormant.
But, in the beginning of my senior year of high school, my mom began taking an intensive career-retraining course at DePaul University. It was a 9-ish month program designed to launch your career in IT software development (COBOL, JCL, etc.). I didn't pay much attention until she began taking a C programming class, got stuck, and asked me for help.
Let me tell you, to a born hacker not yet aware of his calling, who had only worked in BASIC and Pascal, programming in C was like injecting some kind of super-drug. THIS was freedom, this was power, this was programming. Pointers were what I'd been looking for. Raw, type-unsafe power, baby.
What was your first language?
Although I dabbled in BASIC and Pascal, I consider C my first language. It's the one I really learned, the one that clicked, the one that I didn't need to read books about or study. I just got it.
What was the first real program you wrote?
I would probably say the Oberon compiler I wrote in college was my first real program (I was taking Compiler Design). It was limited, and only worked on a subset of the language, but it was real. And it really compiled code. The assignment was to target a virtual machine platform with your basic operations, but my friend and I decided to target the real SPARC processor instead. This actually turned out to be fortuitous because the SPARC architecture included overlapping register windows, so I was able to implement all of the required functionality (we had to be able to compile a certain set of algorithms) without implementing a stack.
Very few things make you feel more like master of the universe than writing your own compiler and having it actually generate machine code for a real machine.
What languages have you used since you started programming?
Yikes. This is a long list, but here goes, in rough order of appearance:
- Visual Basic
- shell (bourne and c)
- lex and yacc
What was your first professional programming gig?
In college I began working for some friends who formed a consulting company. They were working on a couple contracts with a pharmaceutical company and a bank. This was where I had the unfortunate experience of being subjected to Visual Basic. There was also some C work, but all of it was tedium. I quit not too long after joining, ostensibly to start my own company with another friend, doing more interesting stuff.
The first gig I enjoyed, and stayed at, was with a tiny startup in Silicon Valley. My professor at DePaul recommended me to a friend of his, we had one phone interview, and I left Chicago bound for Palo Alto, 2 days after my last class finished, sight unseen, etc. We were building tools to put scientific journals and magazines like Science on the web (yes, the web, in 1994, pre-Netscape).
If you knew then what you know now, would you have started programming?
Certainly. It's in my blood. I would start with different languages if I had it to do over again (well, I would still do C first, but Smalltalk would be soon after).
If there is one thing you learned along the way that you would tell new developers, what would it be?
One? Are you kidding? :) Here's a few things:
- When the C++ and Java programmers tell you how the world works, don't believe them. Their world is too small.
- Learn Smalltalk, Erlang, and Python.
- Study EJB 3.0+ and recent JBoss. They represent an enormous amount of mature thought on deploying real applications. There is much there to learn, whether used in that environment or not.
- Do something meaningful.
- You won't really be any good for ten years, at least.
- If you don't get it, find something you do get, and do that instead.
What's the most fun you've ever had ... programming?
Usually, whatever I'm doing right now, for any value of now. I've been very fortunate to work on interesting projects that continue to stretch me.
Though, if I had to pick one, handing a live phone call from VoIP to GSM and back with no break in audio was pretty sweet.
Who are you calling out?
I dunno, I'll figure that out later. :)