It’s never as good as the first time.
Do you remember your first time? Do you think it is important?
Do you think it still influences you somehow?
Well, I do, I do and I do.
A couple of weeks ago, I received my long awaited Recreated ZX Spectrum,
basically a bluetooth keyboard shaped like an ’82 8 bits computer.
This is a piece of memorabilia from my youth, as the ZX Spectrum was my
very first computer.
It gave me an opportunity to ponder what it did taught me.
But first, let’s go through its ~~impressive~~ list of features
– A whopping 49152 bytes of RAM
– A 3.5Mhz Z80 8 bits processor, with an impressive 0.25 IPC
– 16384 bytes ROM with integrated basic interpreter
– A 256*192 colored pixels screen resolution, but color management is tricky
(more on that later)
– A 1500 bps in/out tape interface for persistent storage
– All of that in its signature book sized plastic encasing sporting a timeless
Those specs bear little meaning today! It is actually difficult to believe that
you could accomplish anything with those.
But they had an unsurpassable quality: they were engaging and not intimidating!
I had to learn how to enter instructions as it was required even to start a
I could even compare my programs to off the self software as those were
done by one or two guys in a couple of months!
And, I gained some interesting skills:
- How to learn a programming language: BASIC at that time. Since then,
I went through various ASMs, C, C++, Pascal, Ada, Smalltalk,
some Lisp and Prolog, Java and more recently F#.
- I need to be aware of how much memory my programs used.
Allocating a 100 x 100 int array uses up half available memory.
And we are talking 16 bits int!
- How to read/disassemble others’ programs and learned a lot
from those. Soon the debugger was my best friend.
- How to use non documented functions. Heck, nothing was documented.
Were they really beneficial? As a matter of facts,
I should probably talk about bad habits:
- BASIC, I mean, BASIC of all languages. This meant a lot of GOTOs…
- I mostly learn nasty tricks to shave every single byte whenever possible
- I hacked other applications to remove protections or copy algorithms
- I created fragile code, depending on undocumented features, including
undocumented opcodes for the processor
When I started my developer career I was still there. That’s the problem when you
code alone for your own: no feedback.
On one hand, being a self learner and self taught gave me some advantages. I did
read a lot, so I had a lot of book knowledge and knew C++ inside out. Which meant
that I lacked the humility that is needed to learn from feedback and I did
commit a lot of atrocities in the name of cute code cleverness.
Walk of shame
I still have a vivid memory of what I fear is the worst design I have ever
The platform was C++ on OS/2 and the product we were working on was
getting close to release and, as an attempt to improve supportability,
I designed an error class.
And I decided to be clever by providing several overloaded assignment operator
(=) to capture the error code, error message and error category. Let’s see
MyError error; error = 45; error = "Invalid user id"; error = ErrorType.Security; // which stands for error.code = 45; error.message = "Invalid user id"; error.type = ErrorType.Security;
I mean, come on, is there anyone who could see this as a good idea?
I did at the time, but I definitely no longer do!
So what did I actually learn from my first computer?!
I am afraid it will have to wait for the next part of this post.