Roger just tagged me for this software development meme thing…it looks like Julia tagged him, Shawn tagged Julia, etc. so all the usual suspects have been down this path already. I’ll bite…

How old were you when you first started programming?
I got my first computer, a Commodore 64, when I was 10. I just had to figure out how things like games worked, so I made my way through Commodore BASIC then (later I figured that none of the games I used where actually written in BASIC…).

How did you get started in programming?
I kind of started twice…first when I got my first computer, I got a couple of books on BASIC. None of the programs I wrote back then did anything useful. I "started again" when I was in school studying industrial electronics, where I learned assembly (for the Motorola 6809) and then C for controlling microprocessors/microcontrollers. 

I loved their bottom-up training style in this place: we first learned to assemble by hand using the processor manual and literally enter hex number into the "kits" using an hex keyboard. Then we used an assembler. Then we learned this "simpler, shorter way" of writing programs (a subset of C), which we still were required to translate to assembly by hand on paper. Only at the very end we were allowed to use a C compiler.

What was your first language?
First language at all: BASIC. First language for a useful program: C. First language for a paid job: C++.

What was the first real program you wrote?
As part of a school project I designed the hardware and wrote the corresponding software for controlling direct-current electric motors. The software had feedback from the engine (electric current consumption, speed in RPM, temperature) and maintained constant speed on the motor and made sure it stayed within safe ranges of temperature and energy consumption. I also did some graphics of all the state information on the screen (a "Hercules" monochrome screen).

There is something interesting about writing software that can physically break things…

What languages have you used since you started programming?
I wrote commercial-grade software in 80x86 assembly, C, C++, Prolog, SQL, LotusScript, FoxPro, VB, Javascript, Java and  C#. I've also written/modified small programs in other languages such as assembly language for various Motorola processors (6510, 6809, HC11), Haskell/Gopher, COBOL, BASIC and Pascal.

What was your first professional programming gig?
I wrote a small messaging application for Kodak Argentina as a freelancer. They wanted the thing to be really lightweight and really fast, so they wanted the whole thing in C/C++ with no dependencies. In retrospective I did all the wrong things on this one, such as re-inventing the wheel several times (wrote a small database from scratch, a synchronization-over-cc:mail infrastructure, etc.).

If you knew then what you know now, would you have started programming?
Absolutely. I still find it amazing that somebody actually pays me to do what I do. I get to spend most of my days working with smart folks solving hard problems. Couldn't ask for more.

If there is one thing you learned along the way that you would tell new developers, what would it be?
Well…I'll go with two things: first, stay close to the code where things are real, don't go into high-level-limbo-land –at least not too fast. Second, even if you're the best coder ever, you can't lock yourself in an office…software development is a social activity as much as it is a technical discipline, and it takes good interaction skills among team members to build great software.

What's the most fun you've ever had ... programming?
So hard to pick one…
 
There was this time when I lead a project (and was one of the developers as well) to build a highly scalable rules-based expert system for credit risk analysis. Expert systems are CPU-bound, so making them scale (back then more than now) meant massive distribution. We built both the expert system from scratch (first in Prolog, then switched to Java and a custom inference engine we also built), and then the networking stack and client/server agents for job distribution and control. The result was a system where you could simple plug-in more computers and you'd get more inferences/minute; the system was self-balancing, automatically adjusted itself for various nodes with different computing power, automatically recovered from failed nodes, and would scale pretty much as much as the network could take the load.

I must say though that after I thought I had all the fun and that I "knew" how to build software, I jointed Microsoft and got a different perspective, both from the people perspective and from the projects scale perspective. It's not just "programming" so it may not fit here, but being involved in building something like SQL Server is just too good…

Who's next?
Well, I can't resist the temptation of going with a few of the Astoria team folks, Andy, Mike, Marcelo, Phani.

-pablo