My interest in computers started when I was about 11 years old, when my brother was introduced to the subject in his first year of university, a course called Business Information Systems 101. If you read my Outliers you'll know that we weren't well off financially and so couldn't really afford PCs at the time. So I first began reading about all things computer-related by going to the library, checking out the series of Computer Encyclopedias. This was a series of titles introducing the novice to computers, not sure if this is still around anymore, the books were hardbound, grey in colour, a little bigger than an A4 (tried searching for it now, couldn't find it. This is going back 20 years ago). So all I had to go on was books, this was in 1988-1990.
I remember my primary school library acquired a PC around the same time, but no one dared touch it! None of the teachers knew how to use it, and wouldn't even allow anyone to get close to it. I did manage to touch the keyboard one day and came close to hitting the power switch, if I remember correctly I did in fact switch it on, but was admonished for trying :-( Talk about encouraging exploration and discovery. I suspect that PC was your basic AT machine, with just two floppy drives, no hard drives. Such was the mentality in those days, and in the culture of the people - heck, I wasn't allowed to touch my dad's TV until I was twelve or thirteen years old. These machines cost money, so we had to look after them...compare that now to my kids who control the TV and even learnt on their own how to pause & playback live TV, but also access things from the Sky Planner without even knowing how to read yet!
I started high school in 1990. Our school was one of the few Indian schools (House of Delegates) to setup a dedicated computer room, with about 25 workstations (they were supposed to be networked, using BNC coax at the time, but there wasn't anyone with the know-how to do it). Our school provided a Computer Studies course from Standard 8 (Grade 10, 15 years) to Matric (Standard 10, Grade 12, 17 years) and that - really excited me. Although I was just 13 at the time (Standard 6, Grade 8) and wasn't even supposed to be close to the vicinity of the computer room, I managed to gain the trust of the Computer Studies teacher, who allowed me to enter the room during the lunch breaks, after school and even weekend sessions that he ran. Mr. Ranjeeth was his name (he's now lecturing at university), a wonderful chap, who's support and trust in his students will not be forgotten by all. I would hang around outside the foyer waiting for him to disappear into the staff canteen and seized every opportunity. My persistence paid off, so much so that I actually began to miss other lessons by staying late in the lab. I also made good friends who were in their senior year, at first they used to kick me out of the lab but then when Mr. Ranjeeth gave the all OK, it was fine afterwards. The teachers just knew where to look for me, better have a student interested in something educational rather than have him join the wrong company, believe you me...it was very easy to join the wrong crowd, for instance join a gang and start smoking...By the way, our lab was heavily secured, in keeping with the culture that these things are expensive, cost the people money and should be treasured...The other schools (i.e. the White schools of course had computers way before we did....)
It was these early high school years that I was introduced to MSDOS, GWBASIC and PACMAN of course. I read every manual I could get my hands on, and experimented as much as I could. It was in high school that I met other students from more affluent backgrounds compared to me, and was amazed that some kids had PCs since they were like 10 years old so I had a lot of catching up to do. I soon mastered the DOS command line and was fluent in playing games. I started programming at 15 when I took the Computer Studies course, and from there my interest deepened...I seriously needed a PC to practice on, luckily had a first cousin who always offered his help with open arms. After school and some weekends I would spend at my uncle's house doing the homework, and in between play games (Vikings, Duke Nukem, Dangerous Dave & DuneII spring to mind).
XT, from Ohio Computers, two floppy drives only, no hard disk, 12 inch Hercules monitor, orange text. It was a thing of beauty, my very own machine to play games and program...
In high school we covered basic computer architecture, algorithms and programming in Microsoft GW-Basic and Turbo Pascal. In the last two years we'd do a project each. My first major project in GW-Basic was called "Trig Tutor" by "JincoSoft" (cheesy I know). Trig Tutor was an interactive tutorial that taught trigonometry concepts, showing diagrams, graphs and even had an exam. For all intents and purposes, it was mostly a screen dump program with little logic of handling the exam and key presses. The thing that took me most time was coding the animation. Hopefully you can imagine this - Two people running from either side of the screen (one runs in from the left, the other runs in from the right, they meet at the centre), coming together and opening up a scroll and running outwards. The scroll opens up and you see "JincoSoft presents TrigTutor" in the centre. That's what I had in mind (just as the guy walks in Dangerous Dave, but running instead), but in the end, realising a running motion of legs and arms moving for both figures was too complicated, so I settled for what you could call stick figures coming in from either side of the screen, not simultaneously, one at a time, and then the intro text coming in from the right. So that was the basic animation sequence that nowadays can be implemented so easily - there are plenty of animation programs out there, and application engines hidden behind the scenes in browsers or the system turns animations on as if by magic. Just take a look at this snippet below, it's really amazing that even in a browser post, you can execute complex-behind-the-scenes code so easily.
So I was a bit ahead of myself then, knew what needed to be done in terms of frames and the physics of running, but just couldn't figure out how to do it in GWBasic. I wish I had a video to prove this, but I've lost all the floppy disks a long time ago...
Quattro Pro for DOS screenshot |
The next school project was in Turbo Pascal. I was heavily influenced by Quattro Pro, remember that? So I ended up writing a Quattro Pro clone, but instead of a spreadsheet, it handled a school report system. The classic problem of sorting out pupil's grades, sorting out the class positions and also generating a report for printing. I had emulated the Quattro menu style navigation, pressing "\" will bring up the menu, navigate left, right, up and down will highlight options, hitting enter will take you to an action and reset the screen. What I hadn't quite worked out was double buffering for screen scrolling - so I had to limit the display area to one screen width, with limited paging, but no scrolling.
Part way through school I met a chap who actually programmed back in the 60s/70s with punch cards. Yes, a South African, but no, not an Indian chap, a white guy. He was really helpful and fed me some classic books: Peter Norton's guide to Assembly Language, IBM PC, etc.
I also pair-programmed with a friend of mine who was equally passionate computers, he lived just up the road. One of our early experiments were to re-create the Norton Antivirus scan that used to be part of the boot sequence. It was a series of characters "| / - \ | / - " repeatedly that gave the appearance of spinning. That was cool,
remember the DOS spinning cursor (Thanks to Sal for helping with the javascript here):
I used to plan pet programming projects during school holidays, to the point of drawing the UI on paper, the classic wire-frames. I'd even toyed with names for my company I'd own one day. The programs I focussed on again was more around emulating Quattro Pro, which was a tall order, so nothing really materialised apart from the spinning cursor, the menu driven system and a basic spreadsheet-like application to do school reports.
You'd think that I'd continue my foray into computers after high school, but that didn't really happen. University, in my opinion is a waste of time [topic for another day]. Anyway after high school I had to decide what do do with my life: Medicine or Computers?? Turned out Medicine was not an option as it was too expensive and I declined my only offer, so that left Computers. Two choices: Computer Science or Electronic Engineering. I chose the latter because I thought I'd get the best of both worlds with Elec Eng because of the cross-over in the domains, and because of the promise of software engineering courses (Operating systems, databases, software engineering & software design) in the 3rd and 4th year of the engineering course.
During the university break of the first and second year, I used to work through the holidays for a national clothing retailer. I started off as an accounting clerk, but persuaded the IT admin guy to take me on. They were just installing Point-of-Sale (POS) systems nationwide, all networked, with the master control centre in the local town. I ended up planning and rolling out a few stores all on my own: installing the machines at the counters, patching the network cable and testing the systems.
I wasted the first year learning about chemical engineering, technical drawing & mechanics and advanced calculus. The second year was a little better, offering a course on C in first semester (2 months really) and Assembly in second semester. By that time, my passion for programming had waned because of all the other course load, being away from home and student life itself. In the 3rd year, there was one course on embedded programming PIC assembly language,
and guess what - the courses that were promised were not available because we didn't have the lecturers available. What a waste - I'm learning about radio communications, control system theory when all I wanted was to learn about software. So even though I succeeded at getting a university degree, which in itself was a triumph considering that out of 600 students who registered in 1st year, only about 50 students reach the final year in 4 years and graduate. But I had some major lost time, and by then I was no longer passionate about programming as I was in high school. In my third year holidays, I did a two week stint on Y2K testing, but no programming.
Because I got a bursary from Vodacom, I was heading off into the communications field, GSM seemed pretty interesting at the time - but we didn't even touch on that subject in university.
In my university projects, I tried to keep them software related. In my final year 1st semester project, I was part of the "MotorVations" team, our product was called "TheEye", a vehicle-based monitoring and measurement device. The project was a complete Product Development exercise, we had to do marketing, advertising, research, presentations, prototypes and final product implementation. Back in 1999, accelerometers were just coming out (compared to now where these things are in every smart phone, sat nav, etc). TheEye was all about measuring and reporting driving performance, by using data captured by the accelerometer and presenting it in a visual form that makes sense. It was a major team effort, the code that I wrote talked to the accelerometer via a PIC micro controller and sent data onwards to be processed. One team mate wrote the digital clock, another wrote the VB application interface. Like most university projects, we had little time for integration testing and feedback, in the end only the clock worked and data from the accelerometer appeared to be randomly generated! But if I recall correctly, our team did get the highest mark in the class overall. A sore point to note though, and it was our introduction into team work, was the immense pressure and negative atmosphere that resulted when it came to distributing the marks to team members...the team split after that project :-(
To end this post (my real-life industry projects will be another post), the final year project was a Mail system, written in Visual Basic, using Novell Groupware ActiveX objects. It was a simple system to filter out email distributed to specific user groups on the network, for university notices. For example, students shouldn't get to see notices sent out to university admin, chemical engineering students shouldn't get notices for mechanical engineering topics, etc. I was left entirely on my own to figure this out, not having a good relationship with my mentor (a post for another day, another reason for why I feel university is big waste of time - the professor could've done a better job in my humble opinion). I did a reasonably okay job of the project in the end (but again found myself missing out on big piece of information, for e.g. the whole topic of network systems and unix servers. Had I done the course on operating systems or taken Computer Science instead, I would've re-used part of an existing technology...but thankfully Novell had exposed some pretty cool ActiveX objects that provided all the data and network communication I needed. What really irked me was that after I'd submitted my initial design that used these objects, the professor routinely updated the project spec by specifying using novell groupware interface!) Agh, I needed to pass and just get the hell out of university and start work to earn some money...I was expecting to work for Vodacom anyway, radio engineering not doing software at all...
Having graduated, I found myself without a job - the Vodacom bursary didn't guarantee a job placement which I assumed was set all along. I had interviewed at Deloitte for an analytical role involving mathematics, statistical mining and investigating fraudulent pension schemes. I was desperate to take any job, but somehow maintained I shouldn't throw away my hard-earned Electronic Engineering degree for a job involving numbers analysis. A month passed, Vodacom approached me and offered a Database admin/systems programming role - I spent a couple of hours with the team and realised again that I'm not interested in data harvesting and SQL analysis, I wanted to create systems. So I really pissed those guys off for wasting their time. Then finally in March 2001 (after about 6 months looking for a job), an opportunity at UEC came up: These guys actually made Set-Top-Boxes from scratch, wrote the drivers, interfaced with operating systems and even wrote application code. They worked with companies around the world, and the interview process was not even an interview - they were just looking for fresh graduates to start churning out code. So this was the closest thing and most relevant company for an Electronic Engineering graduate, and I took the job. But I wasn't put on to write drivers or low level bootloader code, instead found myself learning and writing OpenTV applications, in C - a language that I programmed in briefly during my second year an university!
The flame was on its way out...until I started working for a real company (UEC), but even then in my first year of employment I was still a newbie...the flame only began to come back after I'd left South Africa to come into contact with the first world experiencing first hand what was on offer at both the workplace and universities which made me realise what a gaping hole there was, a big divide in knowledge and work ethic, professional responsibility between the two worlds....truly an eye opener! This then provided the spark igniting my analytical engine that had lain dormant for so long, spurned an interest in reading and experimenting as I had this big gap to close...which thankfully I did eventually close both academically (got an MSc from a distinguished University) and professionally (worked with brilliant people and secured a position with advanced product development team)... Alas, I have painted a bleak picture of the educational experience the South Africa provides, perhaps it was down to just bad timing during a period of change and transition in the political climate, the university has since then improved its graduate programme by introducing a Computer Engineering degree to be more in tune with the real world...globalisation, Internet and open source have no doubt been an overall influence.
Now that I'm heading back to SA, one of my goals is to promote a different kind of pragmatic education, and I will endeavour to promote open source software, that alone provides enough information to be learn and become a self-made software engineer (again, digressing - a topic for another post)...
During my stint overseas, I had solid exposure to real world development, writing all types of applications, centred around Digital TV systems. Starting with the Set-Top-Box User Interface Application Development primarily in C, exposed me to the world of embedded programming, real-time operating systems and operating system development. That was really cool stuff because the code was actually being used by real people in the homes - a very nice feeling to know that there's code out there that you wrote...I was also exposed to Server-side programming specifically on Windows Server Operating systems where I moved to C++ system programming, opening up a whole new area of programming, involving video streaming over IP, encryption systems for VOD servers and lights-out automation services using web services. I also did my Masters on Internet Search and Advertising, exposing myself to a somewhat different world of Internet Systems. And the closest thing to doing something from scratch, was when I took on a pet project to prove I could make a TV talk, the very first implementation of speech synthesis on a Set-Top-Box - alas, NDS at the time did not see any business value in promoting the work into mainstream product development - so a couple of years later, a start-up called OceanBlue went public and became the worlds-first in providing Talking STBs!!
I have always been full of ideas, and still continue to dream of owning my own start-up one day, yet I find myself caught in reality, that unlike Steve Jobs, I don't have a reality distortion field - I can't afford to take that massive risk and plunge into the unknown, I am always looking out for the most practical and realistic solution, putting my family needs ahead of myself - so as yet, as much I'd hate to admit it, haven't had the guts to really go out on my own - but the desire is still there. I just hope the flame doesn't burn out soon....