Sunday, August 03, 2008

How Did I Get Started In Software Development?

This is a new one for me, I've been tagged by Ben Hall to follow up on this 'meme' that's doing the rounds. Thanks Ben!

How old were you when you first started in programming?

I was probably 13 years old when I was given a book on BASIC programming. It was a spiral bound, hand written introduction. I wish I could find a reference to it on Google because I remember it as being an excellent tutorial for novice programmers. I spent months hand writing BASIC programs and executing them manually before my parents relented and bought me a TRS-80. I really really wanted an Apple II, but they were far too expensive at the time, three or four times as much as the 'trash 80'. The cassette tape based storage thingy never worked which meant that I would write a program, execute it and then start all over again the next time I turned the machine on. My best effort was probably a space landing game which incorporated Newton's laws of motion. You had to use trusters to land a lunar module on the only flat piece of ground the 'moon'. I'd grown up with the Apollo moon shots and was totally obsessed with space at the time.

What was your first programming language?

BASIC, see above.

What was the first real program you wrote?

Ah ha, I see I've answered all the questions already!

What languages have you used since you started programming?

As a teenager it was pretty much TRS-80 BASIC, but I also studied COBOL for Computer Science 'A' level. I had a friend who could write Z-80 machine code straight from his head which I was very impressed with, but I never managed more than making the screen flicker myself.

Professionally I've been solidly Microsoft: first Visual Basic and TSQL, then ASP VBScript and Javascript, and now C#. I've had a play with Java, Ruby, F# and even read The Little Schemer, but I wouldn't say I'm much past 'Hello World' with any of them.

What was your first professional programming gig?

After being obsessed with programming in my early teens, I abandoned it for the electric guitar. Yes, I was seduced by Rock. I spent the next few years playing in several no-hope bands and backpacking around the world. I was only after doing a degree in Development Studies and working as an English teacher in Japan for two years that I rediscovered computers and found that I still got a huge kick out of programming. I went back to college and did an IT masters degree and then got my first professional programming gig with a small company called SD Partners. It was a great 'in the deep end' experience and I got to write several VB/SQL Server client-server systems in the two years that I was with them.

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

Oh yes, without a doubt. In fact I wouldn't have stopped for ten years.

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

There's an art to programming that goes beyond the tools. I didn't really discover this until five years into my professional programming career when I read Agile Software Development by Bob Martin. That book changed my life and it didn't mention a single Microsoft tool that I was currently using. Languages, Frameworks and APIs come and go, but patterns and principles of good software engineering stay around for a lot longer. Concentrate on those.

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

It's when you discover a great abstraction, one that suddenly turns hundreds of lines of hackery into a beautiful extensible structure. That doesn't happen enough for me, but when it does I go home after work on cloud nine.

Recently I've really enjoyed creating Suteki Shop. As a hired-gun developer I rarely get to do things exactly as I want so it was really nice being able to build a show case of exactly how I think an application should be written. The problem is, 3 months later, I've totally changed my mind :P

Who am I calling out?

Preet Sangha and Ken Egozi


damianpowell said...

Hi Mike,

First let's get the oligatory praise out of the way: I really enjoy reading your blog. The primary reason for my enjoyment is that your blog is full of very practical advice, with great real-word examples. I can honestly say that I've gained a great deal from reading it.

I've especially enjoyed reading your posts about Suteki Shop. I've been following it's development reasonably closely because I am currently implementing my own MVC application. On that topic (kinda), I have a couple of questions...

In GlobalApplication.InisitlizeWindsor() you use a cool, fluid API to register your Controller classes. When I implemented (i.e. copied and pasted) this in my own application, I realised that you aren't using the 1.0 RC3 version of Castle. So from where did you get the version Castle that *are* using? Do you build it straight from the trunk?

In this post, you mention that three months in, you've changed your mind about your Suteki Shop implementation; are you planning on any blog entries describing *how* you've changed your mind?


Mike Hadlow said...

Hi Damian,

Thanks, that's very kind.

Yes, probably once a month or so I get the latest Castle trunk and build it along with MvcContrib which references it. I have to make a couple of minor changes the MvcContrib code to get it to compile against the most recent Castle stuff, mainly because some of the older registration API has been removed and replaced with the new fluent API. That's the stuff that you find is missing in the InitializeWindsor method.

I updated Suteki Shop to the latest Castle trunk and MVC Framework Preview 4 yesterday, so you might like to have a look at the latest code.

I include the assemblies that I reference in the source repository so you can either get my copies or simply build your own version from the trunk.

As for changing my mind about Suteki Shop, the main difference would be my current love affair with NHibernate. I don't know why I didn't take the time to check it out before because it's a very compelling ORM, far far better than LINQ-to-SQL. I've only recently started to fully get the point that there's much more to ORM than simply ActiveRecord style class <-> table mapping.

I've been working on Suteki Shop's first commercial client recently, so there have been numerous tweeks, but not much of any substance. Hopefully I'll have some time to move the project on once that's out of the way.

It's great to have your feedback. Please let me know if you've got any other issues or comments about Suteki Shop.


Ken Egozi said...

Thanks for this rather personal yet full of good advices post. And for tagging me :)