Friday, July 18, 2008

Software Development Meme

I've been tagged by Andrew, in a software development meme that started way back here.

How old were you when you started programming?

I was exactly 13. My parents bought me my first computer for my 13th birthday. It was a second-hand Ohio Scientific Superboard II.

By the way, the Superboard shipped in 1978 as a single circuit board. It had keys mounted on the front and chips mounted on the back. That’s it. No case, no nothing – just one big circuit board with stuff on it. By the time it reached me a few years later, mine had been fitted into a hand-built wooden case, and its memory had been expanded to 16k. (I still have the machine. If anyone knows how to fix a Superboard II that won’t respond to the Break key after power-up, please contact me :-)

How did you get started in programming?

Before my SuperBoard, I’d only seen two other computers. I guess they must have made a big impression on me. I got Mum and Dad to buy me a book on programming in BASIC, and the purchase of the actual computer followed sometime after. I don’t recall how much nagging was involved ;-)

What was your first language?

The Superboard’s version of BASIC, which was apparently "Microsoft 6502 BASIC version 1.0 revision 3.2". In hindsight, I love the fact that it was simple enough for a 13 year-old to learn the whole language. If I recall correctly, there was IF .. THEN, but no ELSE; and GOTO but no GOSUB. Definitely a minimal language. It made me appreciate "real" languages when I finally got to use them.

What was the first real program you wrote?

It was a clone of the first computer program I’d ever seen – a game where you had to steer a tank through a minefield. My version had the randomly-generated minefield, and the tank that was stuck on full-throttle while you steered your way though, but it lacked the system-generated comments that poked fun at your crashes.

What languages have you used since you started programming?

I’ve done serious development in Pascal, Excel 4.0 Macro language, VBA, Ada, PowerBuilder, PL-SQL, Delphi and C#. I’ve dabbled in various others including C++, JavaScript and even VB.NET (although it makes my eyes hurt when I read it ;-)

What was your first professional programming gig?

I did a few small jobs in BASIC and Excel when I was a student, but my first really serious job was in PowerBuilder for an IT consultancy. PowerBuilder’s (in)famous DataWindow really was a fast way to get things done. It set the bar for productivity, and it's only now in 2008 that I feel like we've replicated that speed in .NET - thanks to a good ORM and our in-house framework. (And we get a proper domain model with layering, which we never had in PB!)

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?

I might tell them that it’s not about technology, it’s really about people – but I don’t think they’d believe me.

So instead I’d tell them to read How to be a Programmer.

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

I’ve particularly enjoyed my old Superboard; writing (most of) a compiler at university; doing some funky stuff with COM in Delphi; and releasing a couple of open source projects.

But the thing I look back on most fondly is a .NET project at Optimation. The highlight wasn’t the technology, which was interesting but not amazing; the highlight was the project as a whole. We had great collaboration with the customer, very much "one team" with great dialogue and innovation, and together we exceeded expectations instead of merely meeting requirements.

Over to you


Tuesday, July 15, 2008


Here is my long-promised near-POCO solution for LINQ to SQL.

As planned, it is deliberately not 100% pure POCO, but it does implement these key goals:
  1. Entity classes are simple enough to be hand-written (no need to generate them with SQL Metal or VS 2008)
  2. Mapping is easy (no need to manually map every property via attributes or external XML)
  3. Lazy-loading works
  4. Bi-directional relationships work (update one end, and the other is synchronized automatically)