How old were you when you started programming?
Something like 8-10 years old. In my elementary school we had a computer lab with TRS-80 Model III computers and I remember learning the commands to get it to load tiny game programs off external media (which at the time were cassette tapes, like the ones you used to use for music, back before CDs).
How did you get started in programming?
The TRS-80 machines had BASIC, and in the computer lab there was a book with some BASIC programs you could type in. One fun one was a game that I think was called ‘road race’, a very very simple scroller where there is a car on a road, and you press left and right to steer the car to keep it from going off the winding road that scrolls down the screen. So I would type in some of these programs, just rote transcription out of the book, and that was my first exposure to programming. Of course this led to experimentation, and like everyone at the time, I think my first self-authored program was probably something like
10 PRINT "BRIAN"
20 GOTO 10
What was your first language?
It was BASIC. I recall understanding conditionals and GOTO, but I never quite understood GOSUB. So all the code I wrote back then must have been spaghetti.
What was the first real program you wrote?
My first home computer was a TRS-80 Model IV-P (the ‘P’ was for portable, which basically meant there was a large handle on the back of the machine), and I remember using it to write a program (probably for some school project) that did long division on the screen, something like
and at the time it was a lot of effort to get working!
What languages have you used since you started programming?
After BASIC, in middle school I learned C, and then in high school C++. I learned these from books, and used Turbo C++ on my 386 box at home. I also did a little stuff with MS-DOS .BAT files. Along the way I also learned some dBASE/Clipper (see below).
When I went to college and grad school, I was exposed to tons of programming languages, and wrote a bit of code in Pascal, Smalltalk, perl, LISP, Haskell, and Java, as well as a smattering of Ada, Prolog, ksh, tcl, Eiffel, Scheme, and probably a few others I’ve forgotten. C++ remained my favorite language throughout most of that period.
Then I got a job at MS and learned C# (fortunately already C# 2.0, with support for generics). Recently I joined the F# team, so of course now F# is my favorite language. F# rocks!
What was your first professional programming gig?
The summer after high school I got a job working for an engineering firm where I did some dBASE III programming. A couple summers later I got a different summer job using Clipper. Those were my first ‘real world’ jobs where I got paid to write code.
If you knew then what you know now, would you have started programming?
If there is one thing you learned along the way that you would tell new developers, what would it be?
There is no "one thing" I can call out. I think that being a good developer requires a mix of both on-the-job experience and schooling. Before college, I had written tons of C++ code, but had no training in algorithms or using procedural/data abstractions to break up large problems, so all the code I wrote was awful spaghetti. Then I got to college and learned lots about good ways to structure code, as well as important algorithms, and finally felt like I knew what I was doing. Then I came to work for MS and had to learn about other issues we almost never dealt with in school, like software perf and scale, and working on large teams. There are always new technologies and new processes/methods in this field, so you need to always keep learning to stay current and add experience and tools to your personal toolbox.
What’s the most fun you’ve ever had… programming?
No single instance stands out, but a few memorable experiences have a common theme. I really enjoy it when you discover or come to understand some cool language mechanism. Back in high school I was writing some expression evaluator in C, and the expressions had parentheses, and the problem seemed so hard until I found out that, yes, "a function can call itself". And once I found that out, I was so happy because I knew an easy way to write the evaluator. So that was my experience discovering recursion. Much more recently, the blog I wrote about why pattern matching is cool was the same kind of thing… I had been thinking about the cleanest way to write a Dictionary API for forever, and then I learned about pattern matching, and it’s a perfect solution to the problem, and I just love that moment of revelation/understanding. To draw a stretch of an analogy, it’s like the end of the movie The Usual Suspects, when you finally realize who Keyser Söze is… except that in programming, each time you have a great revelation and come to understand a new abstraction, you get to name it and add it to your toolbox and carry it along with you forever more.
Over to you
I’ll keep things linear and tag only Jomo.