Monday, 7 January 2008

A plan

The first step in fixing a problem is recognising the problem exists. If you read my first post then you know I already have this covered. Just to recap, my software development skills are narrowly focused. I idly dream about working for Google but until just recently I was nowhere near being on the right path (I hope I'm closer now). The second step is to devise a plan to solve the problem. The third step is to put the plan in action, but I will write about that another day. This post is about the second step. Here is my plan in no particular order: 1. Learn a programming language that is outside my comfort zone First and foremost, it cannot be statically typed. It is time I got some perspective and experienced first hand what programming is like without this particular "safety net". As compensation for losing static typing I want some advanced object oriented support. Features such as "pure OO" (everything is an object) and stuff like mix-ins would be good. Finally, it must be professionally relevant, which rules out languages that I consider to be academic or niche such as Haskell and Lisp. It didn't take long to decide on Ruby. I am impressed with its OO features and meta-programming support. It is definitely outside my comfort zone and seems like a worthwhile language to learn given the popularity of Rails. Of course the fact that Steve Yegge has written a fair bit of positive stuff about Ruby has nothing at all to do with my decision. 2. Learn to develop for the web using technology other than ASP.NET I love frameworks, but they do have costs associated with them. One cost I have incurred from using ASP.NET exclusively is that I'm a web developer that can't write javascript. Another cost is that I lack familiarity with other approaches to web development such as MVC. Just as I seek perspective in other programming language paradigms, the same applies for web development. I think its worth concentrating on the web in particular because if I'm ever going to get uber rich, it will be from joining/founding a web startup. No, I'm not going to learn PHP. My current plan is to learn javascript, and tool around with some other frameworks such as Ruby on Rails and the Google Web Toolkit. 3. Write a blog about my endeavours. Write often and carefully. Blogging is an important part of my plan for a number of reasons. The most important reason is that writing a post about a particular topic will force me to get my thinking straight. A useful measure of how well you understand something is how well you can explain it. Another reason is the motivational aspect. I am convinced that maintaining a blog will help me stay interested in the project. Hopefully I'll manage to make it interesting enough to generate comments and lets face it, its much easier to stick to something if other people take interest in it. Yet another reason is that blogging will improve my communication skills. I am generally a slow writer. Well formed code comes to me much easier than well formed written English. I suspect I am not alone in that regard. Its really distressing how slowly I am writing these posts. I think at the moment they are taking about 5 hours each. You are probably blinking incredulously at that figure and frankly I do not blame you. What can I say - sometimes it takes a long time to get my thoughts straight. Plus I like to do research on the topics I'm touching on to avoid saying anything incredibly stupid. Ok, enough blogging about blogging. I am aware that it is often frowned upon. It wont happen again. For a while at least. I promise. 4. Fill out some of the computer-sciencey areas that my software engineering degree did not touch heavily on. Particularly: Algorithms and data structures, big O notation and compilers. If you had asked me yesterday to explain how quicksort works I wouldn't have been able to. I know I learned it at some point at university, but it didn't stick. I would struggle to answer questions about tree traversal (all I can remember is something about breadth first or depth first). I understand the basics of complexity analysis - I can tell you why O(n log n) is better than O(n^2) and what they mean, but I can't go much further than that. And as for compilers, well, there wasn't enough interest in the class and it was cancelled so I had to pick something different. For the algorithms and data structures, simple programming exercises will go a long way. For complexity analysis I will start from Wikipedia and go from there. As far as compilers go, I'll be taking baby steps - a calculator program that parses and calculates the result for strings such as "2 + 3 x 5 / (7-4)" by building a binary tree will be a good place to start I think. Well, that is the plan so far. Next post will be about my first impressions of Ruby.


  1. Good luck mate! After several years of neglect, my programming skills are all but non-existent!!

    I really hope you can travel this path well and succeed in the Google dream.

    I'll be reading and watching carefully along the way. ^^

  2. Cheers Matt, I appreciate the encouragement!

  3. Hey man, I like this new blog... I'll be watching closely. It might even encourage me to spend some of my spare time on DIY professional development!

    You say you're not going to learn php, but my limited experience with it (which has been obtained maintaining our division's not-very-fancy website) would seem to indicate that it doesn't really need to be "learned". Once I got used to the syntax and got to know a few of the most basic functions I could just look up anything else I needed. Then again, I'm only using it to generate pretty simple dynamic content - I'm sure there are much more complicated things you can pull off with it. I guess it just seems like the more complicated stuff follows in a pretty straightforward sort of way from the basic stuff.

  4. Hey Anatoli.

    You are probably right about PHP. I have only read a little about it but I understand it was successful because of the low barrier of entry, so that would be consistent with what you are saying.

    Ok.. back to fiddling with the template on this thing.