Saturday, August 20, 2011

The University of Fuzzo

Having been unemployed for a few months, after 15 years of near continual employment, I've made the lovely discovery that my skills are actually not particularly sought after. There isn't much call for old C++ programmers who don't even know what the object oriented parts of C++ are for, because they've been too busy for a decade writing software to solve hard problems.

Which is actually kind of refreshing, since I'd hardly say much of my self image is wrapped up into mastery of one particularly old and rather ugly looking computer language, and breaking free from it could be quite refreshing.

How to do that? I have a wife and 2 children and a mortgage to look after, which means that prolonged education at, say, University, is not an affordable option. The other option of seeking work that leads to new skills makes some sense, but has two problems - no one sees anything on my CV except the 3 characters "C" "+" and "+". All of my other languages were used so long ago as to be of little worth to any employer, actually slightly lower than a fresh graduate. So I'm effectively approaching employers with no immediately useful technical skills at all, asking to be trained. With the world in recession (or if it was to be honest, depression), no one will take someone in their late 30s for this, because they know I probably would be quite a lot harder than a fresh faced kid to drive like a slave for a pittance.

That's what the world of computer programming has come to. It is no longer a rich seam of opportunity, in which being able to program leads rapidly to enjoyable and varied work. It is a saturated market full of highly trained specialists who either slide deep into ruts that they must desperately defend by building an unassailable wall of code around them, making them indispensable to their organization, or they must constantly retrain, because the wave crest of trends in development is in constant flux, new languages proliferate, new tools emerge that must be mastered, and architecture itself is always moving.

An especially unappealing part of this business is that the domain knowledge learned is seldom transferable. Most likely, the business of a company involve learning hundreds of little rules, that are highly specific to their purposes - even another company doing exactly the same thing will have a different way of doing things, and any systems they have developed will be in totally different technology, so in moving across, you are pretty much back to square one. All you have is your mastery of the language, and that puts you in the same boat as any fresh graduate. Perhaps you have demonstrated an ability to analyze business problems. Perhaps not - this analysis is also often quite domain specific.

My solution, is therefore to bite the bullet and retrain, hopefully towards technology in the wave crest of opportunity. I'll do this directly - simply learn it with my own resources, by developing something that is of interest to me. If, on the way, I get another job, then fine, I'll work in that. If not, I'll have a product, which I might be able to either sell, or give away to enough people to draw attention to my advertising.

Which only leaves the question of which technologies to learn. It's a tricky one - I'd say there are about 10 times as many quite large and viable options than there were when I first did this in the early 90s. Which should seem exciting, but strangely isn't. Like a teenager, I'm bewildered by choice, and very nervous of committing my energies down a blind alley. In case you hadn't noticed, I've already done that once, and I sure as heck don't want to be in this position again, 10 years from now.

This time around, I'm going to start from the point of view of "what software would I, myself, actually buy?". The thinking behind this is that I might actually like the thing I'm writing and put a lot of energy into learning from it, and finishing it. The unusual answer is "almost none". I've become a totally parsimonious bastard, so far as software is concerned, almost always preferring a free, preferably open source product, over a highly developed, expensive proprietary one. In the last 10 years, I've probably spent about $1000 on software, $500 of which was Windows, preloaded onto my workstations. I've purchased one Playstation game. I also bought WoW, and paid for 6 months of subscriptions. From WoW, I learned to avoid computer games like the plague, as a major time sink and life eater.

However, in the past year, I've made dozens of software purchases. This is because I finally joined the Smartphone revolution. Initially, I only downloaded free things for it. But with almost everything free on there, I soon noticed that their list price was tiny, and that I could hardly feel like I'd wasted money on anything that I only paid $10 for, but had used for many hours. I could easily pay $30 just to see some stink Hollywood movie, which would have faded from my memory by the end of the week.

There is a real appeal to me in writing for Smartphones, too - the main one being that people don't expect much from them. A new idea, or something that entertains for a few hours is about all that's expected from an app that costs $10. This means that a large number of apps can be written by one person in a year, in which they will learn practically everything about what can be done, might make some sales, and will certainly have developed a skill that can be sold. This is in stark contrast to what C++ is usually used for and would make a very, very welcome change.

Also, writing software for limited devices is how I got into programming in the first place. My first computer was a VIC20, which had 3k of memory, and had a clock speed measured in kilohertz. At that time, programming seemed exciting because a lot could be achieved in a short time. This is in stark contrast to my experiences with C++, in which writing HelloWorld took several days. I wrote dozens of little games for that computer - practically the last time I was able to write something of my own choosing.

So, for now, I'm learning to write Android apps. 

Web Apps seems like another rich seam with similar characteristics. Only problem is, there's a Tower of Babel in the number of different technologies that are used for this, and I really don't relish the idea of learning a complex server-side scripting language. Any thoughts from anyone out there are welcome, I expect I will come back to this after getting a few Android apps under my belt.

So, that's the program for the first semester at the University of Fuzzo. It's a small University, has only one teacher and one student and they're the same person. It's heavy on course work, and has no exams. Other students are welcome, there are no fees, no official semesters, no formal courses, no lectures. Also no paper qualifications at the end. All you'll get from a semester here is highly practical skills in whatever you are interested in, which will be easily demonstrable to anyone, if you have been diligent.