Me and computers
When DMC and I first got our MacBook Pros, it was a new adventure for me.
I’ve been used to Windows for a long time. But it didn’t start like that. I avoided owning a PC for many many years. I was stalwartly anti-Microsoft for many many years, until Windows XP. She was Mac committed already, through work. But enough about her.
The early days: Commodore, Sinclair, and Acorn
When I was young, still at preparatory school, some of my friends had BBC Micros. Some of them had Acorn Electrons. This is the platform that Ian Bell and David Braben originally wrote Elite for.
Of course, I wanted to have one. It was the toy to have. After much badgering, my father was convinced to go to Dixons and get one for me. It was my first real introduction to money, I guess, because when he came back he was carrying a Commodore 64. It was cheaper. The guy at Dixons told him it was just as good. I wonder just how much I owe that guy at Dixons.
I was disappointed, but the better graphics and better games quickly helped me through that. Part of the deal was that I would program this computer to help me with homework and so forth, so I learnt to program that, but never anything particularly fancy. I never never, for one thing, had the patience to design all the graphics and figure out a way to store and load them (I wasn’t good at drawing either, or planning for that matter).
I never really took advantage of the better graphics in my programming. Graphics were for games I played. I once tried to write a video cataloguing system for my dad (who had hundreds of VHS tapes, each with many programs on), but I don’t think it got very far. At the time, storing and processing data like that was slow. It was still easier to use his paper-based system, and of course we now still have the tapes, and the paper-based system. If I’d automated it into a database, it would have been long gone by now.
One of my neighbours happened to have a ZX Spectrum. This was a fantastic little piece of kit, closer to the C64 than the Beeb, but really genuinely small enough to take from house to house. But as I recall, his ones kept catching fire.
This group of Beebs, Speccies, and C64s lasted a while, eventually being joined by Electrons (for those who liked the Beebs but weren’t into the massive financial outlay), by Atari STs and by Commodore Amigas (amongst others).
The middle ages: Apple II and IBM PCs
I just mention this in passing since it’s chronologically appropriate. Although I had my Commodore 64, and although my friends had their Beebs with Elite, and their ZX Spectrums with Wheelie, some of our family friends had PCs (then built by IBM) and Apples.
A very dear friend of my father had many Apples through the years. He was previously a collector of typewriters, and as a successful author enjoyed splurging on computers, ostensibly to help his writing process. He had expensive fast and huge printers, the latest displays, and the latest voice recognition software. I must ask him how much of it he ended up using, but I think it was very little – he didn’t revert to typewriters, but I think he did drop the voice recognition pretty quickly. [Incidentally, this friend was instrumental in my use of computers – he lent me one of his Apples once to encourage me to code, and also bought me my first hard drive, I believe, but more importantly I know that he persuaded my father to indulge my interest in computers when it wasn’t necessarily in his nature].
Both of these people, the PC guy and the Apple guy, had Microsoft Flight Simulator. The Apple edition seemed way more advanced from what I remember, with landing gear and flaps and so forth, though I probably played it much later in life. I still miss that game. My brother displayed some serious addictive traits with it, even more than I did.
Whilst on the topic of flight simulators, I also had a friend whose father worked at the hospital’s medical research labs, and he brought me in one day to play an amazingly smooth and detailed flight simulator on one of their massively powerful machines. Of course, it was much less powerful than this laptop I’m writing this on, but it blew my mind back then.
The Acorn Effect
The father of one of my friends was a professor at the university and worked from time-to-time for Acorn Micros (this is a different friend/father combo than the Hospital Flight Sim one, though they were both named Arthur). He wrote Acorn’s C/C++ compiler for them (the Norcroft C compiler). It was a very good compiler. Quick and efficient. But it was also very expensive. I don’t recall if I ever ended up getting hold of a copy. Anyway, that friend’s house was consequently strewn with the latest kit and research machines from Acorn. Before its release, he introduced me to the Acorn Archimedes. I remember the day still.
I had been getting bored by the machines at my friend’s house. We’d hacked away at some BBC games a little bit. He’d done some really cool smooth scrolling stuff on it, and we were talking about writing a soccer game along the lines of Sensible Soccer, but complete with streakers, being able to abuse the referee, dogs to steal footballs, and battle modes with real debilitating tackles (if I recall correctly). But by and large, at that stage I was leaning towards the Amiga and Atari ST.
Lander
The computer booted up. It appeared to be similar to the BBC Micro. Back then computers booted quickly because the Operating Systems were stored in ROM (software took forever to load because it was loaded from floppy drives, though PCs were beginning to use physically huge hard disks). The BBC Micro had had a 5.25in floppy drive at best, but most of my friends and I could only really afford tape decks (although Amigas and Atari STs came with noisy 3.5in floppy drives built in). This computer had a hard drive in it already. I was familiar with hard drives from my PC and Apple friends. Not on an Acorn machine though.
The game loaded instantly. At this point, I though it was just an image. It was pretty impressive as an image. Bright colours (and many of them), 3D, high resolution. Even so, I thought it had loaded pretty quickly.
My friend clicked a mouse button. The image came to life and looked pretty much like the image of Lander you can see here. He moved the mouse, and the ship turned. The frame-rate was too high for me to notice and jitters or lag. Rocket exhaust shot at the screen. Water splashed under the ship. (It was, incidentally, a quick demo written by David Braben of Elite fame, and later turned into the full game of Zarch and ported to the Amiga as Virus - the Acorn version was best).
Then he hit another mouse button. The spaceship shot a tree which went up in smoke.
This was a defining moment in my life.
We played that for hours. I went home and dreamt of the possibilities.
Finally, I join the Acorn crowd
All children are adept at persuasion. They have tools at their disposal that adults do not. They can nag and repeat without getting tired or bored. Their voices are not soothing or calming, they are high pitched and grating. Yet their size and demeanour invites sympathy and kindness. Eventually, if it’s at all possible, an adult will find a way to provide for their child that which will shut them up. Confusing what a child wants and what a child needs is a mistake that adults make all to often. How can a young child know what it needs? It merely knows what it wants. Still, power to the children. Power to younger me.
Through my naturally gifted powers of persuasion I managed to get an Acorn Archimedes of my own.
Now I was really able to up the programming ante, and now I had a computer that could do more than engross me in Last Ninja, Ghostbusters, and Beach Head. I learnt to program the 32-bit RISC computer (the precursor to the chip used in the iPod and elsewhere now) from the ground up. I could write Basic. Everyone could do that. I instead decided that I wanted complete control over the computer and how it responded, and since I couldn’t afford a C compiler, I learnt to program ARM Assembly Language.
I wrote various user interface components and software to help with school work. I wrote a windowed graphical calculator. I had, somewhat overly ambitiously, set my sights on Mathematica. Actually, the program I wrote was pretty advanced in terms of its graphing abilities. It had a mild form of scripting language, but of course it was just one kid writing one app in completely the wrong way (it had a pretty comprehensive users manual though which I showed a draft of to my authoring Apple friend, who suggested very kindly that I should take up writing).
But it was hard to write in Assembly language. You didn’t get much for your hours at the keyboard, but what you did get ran very very quickly. GEEKALERT!: There was no malloc and release. You had to manage that yourself. You literally had to manage your own pointer tables and swap register values directly. The RISC set of 16 instructions made everything very fast, but code very long-winded. Strangely, it was fun.
This is the first time I found myself somehow able to afford software, though probably my persuasive powers had become more structured. I had a true WYSIWYG desktop publisher (Impression), a super-fast vector art package that beat the crap out of Adobe’s offerings (ArtWorks – I really had to save up a lot for that one, and then found I couldn’t draw - it later became Xara), a database (Squirrel, which introduced me to SQL) and perhaps the best implementation of Elite there has been. Some 3D modelling software (Euclid?). Pipedream (what was that? Perhaps a pre-Squirrel non-SQL database?) and a bunch of games by some crazy Frenchmen.
It was this that sealed my degree choice. Along with my dad telling me not to be an Architect, I was left with Computer Science.
University Years
What I learnt at university was the fundamentals and structure behind what I already knew. I learnt the very basics of what makes languages and so computers tick, and that with the right understanding, individual languages didn’t really matter – they were all little more than syntax. I learnt Unix and real networking. I learnt that Windows sucked, how to use databases and networks, protocol stacks, and the principles of security and object orientation.
We wrote a multiple-user distributed whiteboard application, which to this day still impresses me slightly. I was in charge of the communications language that would keep all the representations in line. It was robust and asynchronous. We would discover other instances on the network, and allow anyone to draw and modify, showing up on the other screens. That was a team effort, with some smart people. We got to know what it was like to design specifications, internal and external, and to code to stubs. It was a great time. The only problem was that some people were more intensely committed than others, which left some bitterness in the team.
I learnt a lot about working with others, and about working late nights. It was the first time I experienced sleep-deprived hallucinations, although only minor ones, but those labs were creepy and dark late at night.
I still had my Archimedes which I used to continue my development there, but mostly now I was working in the labs.
My last year project was a failed attempt to implement Microsoft Foundation Classes on X Windows. I failed (the project passed, but only just) because I wasn’t dedicated to the task. I was lazy and had discovered booze and fags and birds and the bar. I still owe my mentor Arthur Norman a great great apology for that period in my life.
Early Career - Smallworld
But my career involved me eventually having to grapple with Windows, though not until I’d settled into my career on more Unix systems with databases and graphics. I had accidentally entered the world of GIS.
The first project I worked on was, as with most, an expensive, failed, aborted and abandoned piece of work for a large American telecoms company. A facilities management project designed to allow network modeling and asset tracking. I don’t think they should have abandoned it. I think we were on track to deliver, albeit late, and were tantalisingly close. But there are so many hurdles to overcome once a project veers off the beaten track that it’s unlikely you’ll clear them all.
The next project was a new technology to me. Smallworld. A GIS platform that used real OO techniques through a real OO language (Smalltalk-derived Magik) and database integration that is hard to come by even now. Smallworld being platform independent with its own runtime engine, we worked on Windows boxes, which was my first real introduction to Windows NT. And Smallworld worked well. It was great, but frustrating as a developer – the documentation was poor. So I was easily tempted away when I saw what was coming.
Microsoft wins me over at last
For a long time I had disliked Microsoft. I had seen them steal ideas from Apple to develop Windows. I had seen Apple and Microsoft steal the mouse from Xerox PARC (though what they were going to do with it was beyond me, so I didn’t mind Apple doing it too much). Microsoft had written software that should be free (the OS) with a machine. I’d come from the Acorn/Commodore/Atari/Apple mindset of course. You buy a computer. It’s got the OS. Don’t pay more for it.
MS-DOS wasn’t anything special in my mind. Of course, historically it was of great importance, but many people were doing better things that just weren’t marketed as well.
Windows was a rip-off and not as pretty as Apple’s offering.
By the time I began working with Windows NT then I was bent against Microsoft. But once I started experiencing their development tools, things began to change.
To me, having learnt early on that computer programming was 99% logic and analysis and 1% syntax, it frustrated me no end that the syntax was bogging me down. But now I also had 3rd party APIs to deal with. APIs without source code, and frequently difficult to access documentation.
Using Visual Basic 6, I got a glimpse into the way an IDE can help you with more than just the build process. Documentation links, code completion and automatic pre-population of frameworks were all good. There was no memory management to worry about. Of course, the language was shoddy, but it made for swift prototyping and I like the concept. It beat Smallworld via Emacs, hands down (not that Emacs couldn’t have worked well, Smallworld just never made it an IDE).
By the time Microsoft released .Net, I was already programming Visual Basic 6 professionally (in parallel with Smallworld). I was developing GIS solutions using both Smallworld and the ESRI platform. Now, between Windows XP, Visual Basic, and C#, I was solidly impressed with Microsoft. Their development division was doing good things. And Windows XP finally seemed to be a version of Windows that worked and could be relied upon.
Losing my grip: The Four Year Project where time stood still
I spent the next few years working on a single ESRI project. Smallworld had gone quiet. It had been bought by GE and kind of lost its way. ESRI had taken over the GIS market and tried to model themselves on Microsoft. The problem is that Microsoft gave a lot back to their customers. And gave a lot to the development community. They contributed. ESRI have concentrated on the creation of a monopoly. What they didn’t count on of course was that where Microsoft could take a blow from a monolith like Google, they would be shattered. I think that the revolution in GIS is happening now, but for that you should read my good friend Pete’s blog, GeoThought.
For more than four years I worked on this single project in London. It was supposed to be a showcase for ESRI’s new technology, but instead (in my opinion) ended up showcasing what terrible mistakes ESRI made in technology choices and in corporate strategy. Their effort to establish themselves in the enterprise GIS market left them firmly playing catch up with competitors that weren’t even in the market. I could write a whole diatribe about ESRI. I may well someday. I really am not a fan of the company, although I know many fantastically talented people who have and who still do work there, with whom I’m great friends.
The project left me distracted from keeping up-to-date on practical uses of technology. My resume lists Oracle 9.2.0.5, .Net 1.1, ESRI 9.1, Windows 2003. All technologies that are at least a couple and sometimes nearly 4 years out of date.
And so I switched to Mac
When Apple released the Intel versions of their machines, I perked up. My Windows machines had become a disaster to maintain. They were tired, the hard-drives noisy, the machines overwhelmed by the work they had to do, and consequently the fans constantly humming. They crashed frequently. They became unstable over time. Frankly, Windows as a personal usage system was buying me less and less each day, and had reached the point where it just caused stress.
With an Intel-based Mac, using Boot Camp or Parallels (or now VMWare Fusion), I could do my development work, yet not need to “maintain” Windows as a home machine.
So, when Adobe brought out their first Intel native version of their Creative Suite (CS3), my wife and I both got new MacBook Pros, she a new copy of Creative Suite, and I a new technology to nerd out on.
And of course I had to learn how to develop for it, but I hadn’t the time until recently when my contract with the Four Year Project finally wasn’t renewed. This is how I spend my unemployed time.
Lastly, why not share? Nixta.com/MacSwitch
So, here I am, learning Cocoa and XCode. I wanted to write some iPhone apps, but it seemed immediately obvious that this would be easier to learn if I knew how to write Mac Apps, specifically Cocoa apps. So, I’m learning how to program the Mac, how to program the iPhone and catching up on programming .Net all at the same time. Plus, I get to play with WordPress.
Some of that information will be helpful to others, and that’s what this blog is about, but this blog is not really about development – that’s just a sideline. This blog is really meant to discuss what it’s like to switch from Windows to Mac OS X. There are good things and bad. There are things you take for granted as a Windows power-user that are frustrating to find or even missing on the Mac. There are things on the Mac that you wonder how you ever lived without on Windows.
