Software Development Meme

I was recently tagged by Danny to answer questions about my programming experience as part of a longer chain letter, so here they are:

How old were you when you first started programming

I was 8 (some 0x17 years ago) when I got my first computer: Timex 2048 which was ZX Spectrum clone sold in Poland. Originally I was planning to use it for gaming. Unfortunately my computer didn’t come with an essential component (a tape recorder J), so I really had no choice but to learn programming.

How did you get started in programming?

Fortunately Timex had a built-in BASIC language interpreter and it came with a nice language manual. I started exploring that and found that I could do cool things with programs. First things I tried were graphics-related and used PLOT/DRAW combo extensively to produce some nice geometric patterns.

Later I realized that there was another language that my computer understood which was much faster: Z80 assembly language (the computer manual even included an introduction to Z80 assembly  - compare it with today’s manuals!) so I learned about it (with the help of GENS assembler and MONS debugger and “The Complete Spectrum ROM Disassembly” book) and quickly fell in love with it.

Side-note: because programs for ZX Spectrum were mostly distributed on audio tapes (with a buzzing sound on it kind of similar to a modem negotiating connection), some people in Poland came up with a super clever idea of distributing programs during radio shows in the middle of the night. The show was called “RadioKomputer” and that’s how I got some educational programs.

What was your first language?

My first languages were Sinclair Basic and Z80 assembly, many years later I moved to a PC (386 SX with 2MB of RAM) and then I started playing with Turbo Pascal & Turbo C from Borland.

What was the first real program you wrote?

I don’t remember what the first real program was, there were many of them, most were graphics related. I wrote some flashy graphics demos in assembly language which included some scrolling text, nice graphics, explosions, music (such as “Axel F" theme or Jean Michel Jarre because it was the only thing that sounded ok on Timex beeper). We demoed those on computer fairs which were organized every week in a nearby high school.

Later, on PC I wrote my first Norton Commander clone. Everyone else I knew had also written their own clones, too – I guess it was kind of a sport in the nineties. I was proud of my Jarek Commander, because it only took <500 bytes of resident memory while original NC consumed some 4 KB (in the world of 640K this was a huge difference).

My first big program (sometime around 1994-95) was a graphics program called “Canaletto” named after Bernardo Belotto who was a 18th century painter. It was a fully featured graphics package for DOS which included drawing and image processing capabilities (like MS Paint on steroids with some basic image processing effects which you can see in Adobe Photoshop today). I wrote everything from scratch in Turbo C & 8086 assembly, including my own windowing library, printing support, image processing algorithms and even some graphics drivers for non-VESA video cards. We wanted to sell Canaletto to Get Rich Quickly(tm). We prepared the first “batch” in my friend’s kitchen using his color printer and even shrink-wrapped the boxes manually using his gas stove. We sold whopping 3 copies and 33% of buyers have registered their copies by mailing in registration cards.

What languages have you used since you started programming?

Sinclair Basic, Z80 assembly, Turbo Pascal, C/C++, 80386 assembly, Java, JavaScript, Perl, Python, C#, Awk, Unix shell scripts, SQL, HTML, XML/XSLT/XPath/XQuery. I have also experimented with countless other languages such as Smalltalk, Boo, functional languages and more.

What was your first professional programming gig?

My first professional software development project was a PC game called “RoboRumble” which was produced in 1998 and released worldwide. It was a real-time strategy in 3D with some very cool accelerated graphics. I was responsible for gameplay, AI, multiplayer and various putting-it-all-together tasks.

After that experience I moved on to do some more “serious” development. I spent next 7 years building large workflow systems for enterprises. I implemented at least three O/R Mappers along the way. I just didn’t know that those things were called O/RM back then.

If you knew then what you know now, would you have started programming?

Absolutely!

If there is one thing you learned along the way that you would tell new developers, what would it be?

It’s all about requirements. No matter how cool the code is, it is useless if it doesn’t do what the customer wants. Customers often don’t know what they want, so it takes a lot of communication skills to “extract” that information. Also, be prepared for ever-changing requirements and incorporate them in your development process. BDUF rarely wins against agile practices. Usability is also extremely important; even if the customer does not realize the importance of it, you should do all you possibly can to make common user scenarios very easy to use and other scenarios possible.

What's the most fun you've ever had ... programming?

Definitely working on RoboRumble was a lot of fun. In the end-game we spent like 20 hours a day working on finishing the product (we literally left @4 AM just to get back at 8AM) but despite some local frustrations we absolutely loved it.

Who’s next

Because of the exponential nature of this chain letter it is increasingly complex to find more people with blogs, but here are the next nominees:

Zlatko Michailov
David Sceppa
Ju-Yi Kuo
Maurycy Markowski