Friday, September 09, 2011

Algorithms

I was never a fan of algorithms as an undergrad. Whether it was the way they were taught or my attitude at the time, I don't know, but I didn't like them. It felt like dull rote learning, un-practical because, you could always look up an algorithm that you needed, right? (In contrast, I always had a soft spot for data structures, for some reason they just seemed so intuitive and stick in my head without me really trying, and there is something creative and almost artistic about some of the fancier ones).

I am currently applying for software development jobs, and I think my knowledge of algorithms is one of my weakest points. Programming is like riding a bike, it seems to just come back, I think I have pretty good 'general knowledge' about computer stuff, and I have a good idea of design things from my teaching, but algorithms are a bit of a gaping hole in my knowledge, and since they are a necessary thing to know for the more interesting jobs, and seem to be the number one thing to ask at interview, I thought I ought to improve...

So, I have been reading a lot and programming a lot of algorithm-type problems (makes a change from compiler things), and I've been really enjoying it. I don't know what's changed, but this time round I'm finding the algorithms stuff really interesting. It's amazing how some of these work, the creativity of some of them is amazing. And tackling algorithm-type problems (see, e.g., Google code jam, topcoder, endless olympiads/programming competitions) is lots of fun. I used to think of these as distractions from 'proper' coding, but it's great to really think about some of these things and often the model answers or commentaries are illuminating.

Anyway, just thought I'd write a little about the fun I'm having...