In a recent post by Scott Hanselman, Scott talks about how he got started in computers and programming, with a tantalising little statement right at the start:
…Perhaps if I blog my story, you’ll share yours.
Early beginnings
In 1980, when I was three, my dad had passed away in a work related accident, and my mum had moved us in with her parents to recuperate and find some stability again. Given that my dad worked in the Navy, there was a widows package that helped us to get set up in a family home, and to cover the bills. I believe this is a pretty standard package deal, but if you recall some of the current pension packages that our elderly are struggling to live on, you have a rough idea of where that package was headed in later years.
But my mum was smart: by 1984 she bought a family home, created a budget (that lasted years with ongoing revisions), and we all did chores because no one felt that it was someone elses job. Sure we were young, and we moaned at having to do chores, but we didn’t have any luxuries, and we got by with what we did have.
Computing exposure
Perhaps to assist with the budgeting my mum bought an Amstrad CPC 464, but bought it as a Christmas present for me. “I’ve bought this for you, but you have to let your sister and me use it on occasion, without argument.” she said to me. I think I almost spontaneously combusted with sheer joy at that point; I had a computer… and I was only seven! “Of course! No problem!” I said, and I began poring over the books that came with the PC.
Now of course, I was very young, so this was WAY beyond my comprehension, and the best I could do was to type in the sample programs from within the books, even if it was BASIC (sorry for the pun). It took a while, (ok, a long while), but I got my first program running: a routine that drawn random coloured lines in the eventual shape of a circle. But it was a green-screen monitor so I had random shades of green lines displayed onscreen, in the eventual shape of a circle. Still cool though.
Over time other samples followed, and as I got to towards the end of the first book (a small paperback novel sized), my attention was wavering: I was just typing in stuff and didn’t actually understand why it was happening. So I stopped for a while and did kid stuff. At some point some months later I came back to it just out of sheer curiosity, cause there was a big book still to read (A4 sized, ring bound).
“Programming” begins
I finished of the other small book samples, and started on the big book samples, which where various examples of sound, animation, and general “programmy stuff”. It was one time when I retyped a timer program that I had done before that the “programming” started: a simple display of hours, minutes, and seconds, that started from 00:00:00, and incremented every second. I had questions. Why did it do that? How did it know to change every second? How did it know how to reset the seconds, increment the minutes, and start over? Could I start it from the current time? These questions prompted me to walk through the lines of code, trying to understand what was happening, and that’s when I began to comprehend the BASIC language. REM was a comment. PRINT displayed text. IF… THEN… ELSE was a decision. DO… LOOP was… a loop. GOTO caused the end of the world as we know it… well, according to almost all non-BASIC programmers :p (I’m a C#/VB developer today and I know why GOTO is frowned upon, but in my opinion generally most problems are due to bad usage of the language by the developer, not the language itself; if you feel like commenting on this goto some other place to rant).
So I began comprehending what was happening; why it was structured as it was, why syntax was vital (ok that was mostly frustration from typing everything in but spelling stuff wrong, then having to proof everything), and finally, how to change it’s output! I made it increment in 10 second jumps every second. I doubled then halved the period of time between increments. I made it count down instead of up. And lastly, I made it start at a time of my choosing. Not exactly a great accomplishment in terms of output, but I learned roughly how to make the program do what I wanted. I went back over every program I’d written before in both books, and played with them, just to see what happened.
By this time a few things had happened:
- I was asked to get out and be more social
- I was more aware of computer games
- I was ecstatic that there were computer magazines that had games listed in them
- My uncle started showing me programs and games that he created(!)
I realised that I had a very long way to go, and I became very curious about everything computers and programming, admittedly so I could create games. Over the years, an on/off approach to writing magazine programs or playing new games slid more towards mostly using games not writing them, with an infrequent interest in programming.
At some point during my primary school years there was a BBC computer introduced, and that’s when I learned of CENTIPEDE!!! I frequently used/played on that computer, running all sorts of educational programs, trying to figure out how they worked, but it was a class project that helped me realise my [minor] talent for computers. Me and two others had to create a project (on egyptian symbols/history if I recall) and lots of text had to be typed to be printed out (I don’t recall why). All that “programming” I’d done at home meant that I could type pretty quickly, and expose to other programs meant applications were accessible to me. No problem. We took turns, but my typing speed meant we were able to get stuff printed out pretty quick so it was actually achievable. I just thought it strange that others didn’t type very quick.
In secondary school a similar scenario presented itself, when our computer teacher asked us to write a 1000(?) word story, with completion being rewarded with being able to play Tron. I few minutes later I was playing Tron with a confused teacher asking how I typed so quick, and then talking about programming. Interrupted my game time is what I remember most!
A software developer is born
So up until now no real “programming”, but after not quite getting the grades I wanted for university, I enrolled in a scheme that guaranteed a job placement, after a short course on programming. I lapped it up. VB3 and VB4 programs, on an [old] machine that initially had a whole 1GB of disk storage where we were creating a simple data entry program, where the data was stored in a database. I was learning how to program properly this time (yes, even with VB), before getting a placement at a company where I was taught by professionals (as I recall at the time the company was called PACE or EDGE) in preparation for my actual job placement. Again, my typing speed was beneficial: I’d blitz through creating the code, and this time I could focus on things like data validation, good practices, error handling, interface design, and other stuff that wasn’t “type this in to get result x”. I.e. I got things wrong and got to learn why we do certain things in application creation, then make that a part of my everyday coding.
Now I’m in my first “real job”, as the sole “windows programmer” taking my lead from two very experienced and proficient COBOL programmers. The role involved creating VB versions of COBOL programs, but with my own input on windows design and user interaction. The initial task was a Sales Order Processing package, and I had to prove myself (and use a framework that helped speed up development). I learned loads about DLL hell, and how much I hated it, and also about Microsoft Access interaction, and Crystal Reports development. Looking back it was a lot to do in a short space of time, but I loved every minute of it, and the challenges just made the rewards of successful completion even better. Then we started work on other packages: an invoicing system, the Sales Ledger, the Purchase Ledger, the Nominal Ledger, and eventually I found myself on site at a customer doing [what I now know as] business analysis and reverse engineering to create completely custom packages. End-to-end testing, prototyping, migration of in-house development tools (VB 5, 6, and VB.NET), migrating MS Access to SQL Server, creating InstallShield packages, mobile device development… I have a lot to thank my employers (Meridian Systems Limited) for, as I grew at my own pace and they pushed me further than I could on my own. The [underestimated] skills of end-to-end testing and validation that I assume COBOL programming requires helped drill the requirement of application robustness into me, along with cross validation of methods and their results.
Multi-language beginnings
10 years had passed, and I’d been pushed technically, but I was still a programmer: no career progress, no official training, no certifications. I started looking for a new job but there was a catch: I had to write programs in C#. OK then. I’d been using VB.NET for a while and the propaganda stated that VB.NET looked almost identical to C#. This new company was willing to train me up, and if I performed well I’d be taken on permanently. I’ll tell you right now VB.NET is mostly the same but there are gotcha’s. It didn’t take too long to be comfortable with C# and the company (Intellident Ltd) gave me time to get up to speed. I was a mobile windows forms developer and I was comfortable in what I was doing, I just had to accept that C# switch isn’t as good as VB Select, semicolons and curly braces are everywhere, and the C# ternary operator is way better than VB iif. Eventually I grew to love C#, and for the record both languages have their advantages and disadvantages, but they both allow me to do what I need to do. I like any language that does that more than anything else.
Today’s developer
I’m now Senior Software Developer, Intellident Ltd is now the international Bibliotheca, I’m getting training, certifications, more involvement in project planning, specification, management, datawarehousing/business intelligence, and new programmer challenges each day. It’s the last one I like best of all, for I feel that as long as I have the opportunity to create solutions to problems, and I get the freedom to do it right (everyone has deadlines…) I’ll be getting what I want. I’ll still chase career development, and want the best I can get, but I now realise I think differently from most of my friends: I think like a programmer, and that to me is the best thing in the world.