Tuesday, June 08, 2004

Lots of things have happened since I last wrote anything. It .looks like we will be pulling out of Iraq (I hope). Hopefully they will eventually enjoy their taste of democracy.

My clinical psychologist and I have worked out a spectrum of mental capacity, ranging from being unable to listen to music to being able to read article to being able to read technical books to being able to function as a software engineer / programmer in a normal commercial environment. At the moment my intellect is a bit like a sine wave, it has troughs where I can’t do anything and it has peaks where I can read a heavy weight text book over a long weekend.

I’ve been buying a lot of computing textbooks from cheap and not so cheap places. There is a method to my madness. It’s all to do with paradigm shifts in computing. Let me take you back to the early 80s. I was stuck in a sports crazy boarding school and calculators were being introduced as tools for use in mathematics classes. My father gave me a Hewlett Packard Hand Held Computer (basically a programmable calculator that ran using RPN – Reverse Polish Notation). So I learnt how to program using a stack based architecture and a very primitive instruction set. All of the programs were number crunchers. Then a friend of mine showed me his dad’s business microcomputer.. Try as I might, I could not program it. All my Hewlett Packard experience was useless. Soon, one Christmas, my father bought me a 16KB Sinclair ZX Spectrum – to be honest I wasn’t interested in getting one, I was more interested in Hewlett Packard Portable Computers. Well, I tried doing a bit of programming but ZX Basic was a massive paradigm shift. It introduced a high level language (ZX Basic) and a machine language (Z80 assembly language). I stumbled around in the dark for a while, trying to get to the new technology – and I even tried playing around with Forth (interesting but all I managed to do was dabble in that language) and microdrives (an ill fated experiment that was a dead loss).

Later on (was it 1985?), Sinclair released a brand new computer with a brand new processor (Motorola 68008), a brand new language (SuperBasic), multitasking (in a primitive way, it didn’t really take off until the introduction of the Qjump Pointer Environment in 1987ish), networking, a user group (Quanta) and basic networking. When I had my Spectrum, I spent a lot of time reading and researching other computers and architectures – I am grateful to Coleraine’s library for introducing me to new ideas in computing. So I decided to buy a Sinclair QL – or rather bug my parents into getting me one. It took several years – then when Sinclair slashed his prices down to £145 my parents relented. So I got my hands on what would be recognised as a reasonably modern computer. I think I stayed with my Sinclair QL for seven to eight years, sharing knowledge with friends, writing programs and giving them away for nothing or just enough money to contribute to the cost of writing software (simply buying compilers or development tools). During my travels in computing, I came across the occasional Unix book in the library but the only Unix clone I knew of, Mini, required proper money for new hardware (Atari ST etc) and peripherals (hard disks). So I stayed with my QL for years, upgrading it occasionally (Miracle Systems in particular brought out expansion cards like disk interfaces with extra RAM, 40MB hard disks (which turned out to be quite temperamental), and a replacement processor board so we leaped from a 7ish MHz 68008 with 896KB RAM to a 16MHz 68000 with, if I recall correctly, 2 or 4 B of RAM. The expanded QLs were quite capable machines and the Quanta software a delight for people to tinker with. I expanded my QL every so often but the biggest drive to upgrade my QL was the hardware demands made by the GNU C compiler which had been ported to the QL and called C68. So I tried to port Unix tools (written in C) to C68 and the Sinclair QL. I also tried to write GUI programs using Qjump’s Window Manager. But I was out of my depth and instead of developing mega applications, I dabbled in programming but wrote a lot of articles explaining how non technical users could get the most out of using a Sinclair QL.

After I graduated from University, with a 2:1 Honours degree in Information Technology, I had a bit of a shock. All of industry was using technologies I’d never heard of - Novell Netware for networking, Unix sockets for networking programming (QL networking was so much easier), MS-DOS 6.22 for an operating system (quite a disappointment compared to the QL). Anyway, the breadth of my QL experience impressed my future employers so I moved from Sunderland to Berwick Upon Tweed, to work as a C programmer. The company used Watcom C and the first task I had was to port the Opac from 16bit Turbo C++ to 32bit Watcom C. The Watcom environment relied on make files and was, in general, familiar ground to someone who had GNU C experience on 32 bit computers. After a few months working, my Dad encouraged me to buy a flat and get a mortgage. All this “real world” stuff was a bit heavy to me. But it meant that I could have somewhere to keep my network of Sinclair QLs, my collection of second hand science fiction novels and somewhere to play Dungeons and Dragons. Well that job lasted about 6 years and in that time, I joined the ACCU (Association of C & C++ Users), most of my Dungeons & Dragons friends left Berwick, the Opac was re-engineered to handle interlibrary loans for most of the UK (Unity). After the collapse of that company, a competitor, BLCMP, bought the intellectual rights to Unity/Opac for £5000, a pittance and hired me to work on the Opac/Unity business they were starting to pick up from ex-Libris customers. It was after about a year of tight deadlines and working away from home, that I had my first psychotic episode. I was taken off work, given a sick note that said “mental instability” and eventually withing 4 to 8 weeks, my employer made me redundant. Not a nice way to do business. Well, I moved back from Birmingham to Berwick, with the help of a friend who also worked in Birmingham.

When I went home to Berwick, I started applying for jobs and painting my flat. I kept up to date with programming gossip & ideas on the accu-general mailing list. I applied for various jobs and was turned down. Eventually, I spotted a tiny advert in the Scotsman. I didn’t think it would be worth a try but some friends of mine encouraged me to apply for it. Surprisingly, I got the job (after all I was a C programmer and they used Borland C++) fand that lasted for just over a year. During that time, I aggressively learnt new things about software development, reading Stan Lippman’s C++ Primer 3e and Multi Paradigm Design for C++ - Jim Coplien. And I attended the ACCU conferences and in particular I found Kevlin Henney’s (curbralan.com) lecture on substitution to be particularly enlightening. Anyway, that job disappeared in February 2001 and soon after that I had a psychotic episode and was admitted into St George’s, something I’ve already covered in previous entries on this blog.

To recap on paradigm shifts. I started with RPN on Hewlett Packard Handheld Computers. Then I migrated to the Spectrum that introduced a much larger (colour) display and memory and text handling. Then I shifted from the Spectrum to the Sinclair QL. Then I shifted to MSDOS 6.22 with all its limitations. Then I shifted to Windows by porting the Opac/Unity to a 32bit Windows SDK application – the same source code base handled both 32 bit DOS (DOS/4GW) and 32 bit Windows (Win32 C SDK). Then I shifted from C (in which I had, using structs, been using in an object based way) to C++ where I had better facilities for objects / user defined types. During my time in Birmingham I had been learning how to design C++ programs – any old text book can teach you the syntax but it took the help of the Association of C & C++ Users (www.accu.org) with their email correspondence and regular conferences to get me up to speed on C++.

These days, my concentration and mental faculties are something I can no longer take for granted. It is either my illness, schizophrenia or its treatment, Clozapine which makes it hard to concentrate. So that’s the down side. The positive benefit is that I have more time to study and at the moment, I am working on yet another paradigm shift. In 1998/99 I was quite happy using Watcom C/C++, Visual C++ and Windows NT. But then I read in the Register that Microsoft was going to get stricter with licenses. And I heard that there were simply tons of free software being made available over the internet. So I thought : fine, I’ll continue using Windows at work because anyone can use Windows and I’ll branch out to new technologies at home by getting to grips with Linux.

My hardware has been giving me some hassle as well. I can’t quite get SuSE Linux 9.1 Pro to install on my P166Mhz Pentium-MMX PC, Theology (called that because only prayer power keeps it going) and my 1.3GHz Celeron (Patience) – where I’ve had both a faulty memory module – found that by downloading a memory tester, memtest86 – which took me a week to track down – and I may have a faulty 80GB hard drive as well. Linux appears to be a good way to stress test a PC and its components. It will all come out in the wash.

I’ve been reading about free software, especially “The Cathedral and the Bazaar”, “Homesteading the Noosphere”, “How to be a hacker”, all written by Eric S. Raymond and downloaded from ESR's home page
LAMPJ is the latest paradigm shift. Instead of using Windows and proprietary software, I’ll become a LAMPJ developer at home and a Windows RAD C++ (Borland C++ Builder) programmer at work. LAMPJ is an acronym that stands for “Linux / Apache / MySQL / Perl, Python, PHP / Java. It is basically a free software stack used to write client/server internet applications. So I have been spending my savings on text books, magazines (Linux Format, Windows XP Official Magazine, Cvu, Overload) and a little bit of hardware, all with the aim of becoming a LAMPJ developer. I still haven’t quite managed to completely shift from Windows NT to Linux. I’ve no idea how to compile a Linux Kernel, how the shared libraries work, how to upgrade the Gnu Compiler Collection, how to produce RPMs, etc. It all takes time and patience.

No comments: