This is a bit on my earlier experience so you know where I'm coming from.
I have been writing software since 1989. The list of languages I have used includes the following (I'm sure I've forgot some):
- dBase III
- Clipper (Summer 87 and 5.0)
Technologies I've worked on include:
- XML (and its alphabet soup - xsl/soap/vxml)
- Java Client-side
- J2EE Stack
- Bash Shell
- Ruby on Rails
- Web Client Side
- A tiny bit of flash (mostly on the ActionScript)
I have a tendency of learning technologies very quickly, in part because so much of it is a reinvention of past technologies. Whenever someone tells you he/she invented something totally new, don't believe it. It doesn't mean what they did has no value, it just means it's probably based on something else.
I'm a fan of retrocomputing and emulators. I am the proud owner of a few machines of yore:
- Commodore 16
- Commodore Vic 20
- Commodore Plus/4 (fairly rare)
- Commodore 64 (2 of them)
- Commodore 128
- Laser 128 (Apple IIe clone)
- Commodore Amiga
I heard about computers first through an "Encyclopedic Magazine" called Mi Computer. I would buy those as soon as they came out, imagining what it would be like to program one of these machines, and make them do what I wished.
The first computer I saw on was an Apple IIe, at a store in a fancy southern Mexico City mall (it was running "Karateka"). Through "Mi Computer", I had learned to program through magazines even before then. Then one day I was at a friends' house and I was left to play around with a Timex Sinclair (2K). I wrote my first basic program in it while everyone else was recording mixed music tapes (with one of those 80's mixers). I remember I didn't even have the magazine with me at the time, but I thought programming was so amazing - I somehow remembered everything related to code. From then I was hooked.
Later that year my dad bought a Commodore 64, which was the first machine of my own. For a long time I was a Commodore fan, and got an Amiga 500 a few years after. I never was an Apple or an IBM fan, even after my Dad got a MS-DOS based machine (which, experimenting in the first day he brought it home, I accidentally formatted the original DOS disk - oops!). For me, AmigaDOS was it.
As that was happening I was an adolescent in need of a job. The country at the time was a bit lacking on people who could actually work these machines, and the spreadsheet was making its way into business. So my first night job after school was a little different than mowing lawns or waitressing at a restaurant. Instead, I taught Lotus 1-2-3 and dBase to local businessmen. As I taught, I learned a lot from businessmen's concerns and the typical needs of a business.
In the meantime, I kept playing computer games and programming different small things. A year or two later a friend of mine told me his father had bought a PC and something called dBase III in order to keep tabs on the inventory for his furniture store. So I worked for a few months writing my firs business program. I guess you could call it Agile - I wrote a menu and a product entry screen and showed him how to use it as soon as it was barely usable. He typed in his data in the mornings and I would come in the afternoon, run a backup and start messing with the software based on his input (and on the list of other things we needed the system to do). He was pretty happy. I also kept teaching on Friday nights.
After that (around 1988), I got my first glimpse of what it was like to be in a ground level startup. A businessman who came to one of my classes told me of his intentions to set up a formal school for Associate Degrees in business information systems. Not even out of high school but knowing what business people would need, I helped him design a teaching curriculum and somehow he got it authorized. I also did some of the teaching since rules were not very enforced back then (I suspect on purpose, as it was a very new area).
Thing was, the guy could only afford one computer, so we used that one machine to teach everyone (and pooled together all of our home computers, many of which weren't even PCs) until he had collected enough dues to get a real shipment of PCs in. We went through thick and thin, and when I left he was on his way to profitability and things were looking up. I believe he eventually franchised his system and there are a fair amount of those schools in cities throughout Mexico.
I like to think I did well teaching - at least my students seemed to understand. My passion however remained in coding, and at the time there was plenty of coding to be done using xBase-style languages. I wrote smaller Clipper programs for everything from construction materials companies to a children's club membership roster.
Eventually I started work in Mexico City at a financial holding company. Not too large of a company - there were only 3 IT guys (eventually we became five). This was my first experience with multiuser and locking issues, as well as Novell networking. It was also my first experience coding as part of a team. Soon after this company got an HP-UX system and 40 or so HP terminals with Wyse 60 emulation, and being the only kid who was geeky enough to want to learn I became the de-facto sysadmin. I cut my Unix teeth rewriting termcap entries to get Wordperfect's function keys to work properly.
With buying the Unix system came ADABAS, a database from Software AG, and Natural, their cobol-like language. So now I was for the first time a multilanguage coder. Natural (and shell) for Unix, Clipper 5 for DOS.
For a while I thought this was the perfect job for me - I was extremely young but appreciated by the business, and I was one of a team of 3 helping a holding company "win big" in the stock market. Foxpro for Windows was coming out and I was able to add pictures to databases, which I applied by writing a system for a museum. And then I got a modem and started going into BBS systems and CompuServe. Fom then on I was hooked on communication.
The idea of being able to talk to people from all over the world, people who might have actually written Clipper itself was simply amazing. As I discovered that the guys on the Clipper forums were very much a meritocracy, and that I was appreciated due to my skill and age was not a boundary (on the Internet, nobody knows you're a dog, or you're only 19). So I spent my afternoons poring over message boards about Clipper (and just about every other topic) and joining the conversation. That's how I met my wife, on a politics chat room.
After moving to the United States, I worked for more financial companies and eventually got sucked in by the Dot Com revolution. My skills kept growing since, and I learned mostly through a paired approach of talking to regular users about their actual needs and getting deeper and deeper into the technology. By now I have both written and architected software in Delphi and Java (big Borland fan until a few years ago), and I have worked on commercial as well as backoffice outfits.
From there the story merges with the rest of the Bay Area Internet history. From Java servlets and JSPs I went to PHP and then back to Java (my primary source of income ever since). Also did a bit of Perl here and there, as well as a C# .Net project. I write C and C++ when I need lower level stuff (like communicating with hardware directly, as in a project I did in 2001). I got into Ruby right before and during the Pickaxe book (first edition), and I dabbled in Python for a bit.
Lately I consult and do software development for customers, mostly on web development and technologies, technical leadership and SCRUM methodologies. I guess I became what they call a "generalist". I still use Java most of the time, but I've done some projects in Rails and I'm trying to do more of them (because I can accomplish more with it, leaving me time for other things that my job entails).
I am very fortunate to have been exposed to a very wide range of technologies both on the server and the client. Thanks to this, I try to spend some quality time with the language/platform to get the feel of what is the "proper" thing to do when working with it. So when in ruby on rails, for example, I try to follow "The Ruby Way" instead of just writing Java code in Ruby. This means trolling around the newsgroups for the specific technology whenever I have some free time, and learning from what I see.