Broaden your horizons

I was just writing a comment on a post over at CompSci Canada* when I realised that it was well beyond comment length and had drifted a little off topic anyway. For that reason it has become a new post on my blog and my comment at the CompSci Canada blog will refer to it.

Basically there has been some discussion over the last week or so about students losing interest in Computer Science. It seems that most are drawn in by the lure of writing the next Quake game and then completely lose interest when they discover that it's hard. These people are a lost cause. We will never convince them to apreciate the complexity in an iterative solution to the Towers of Hanoi problem. They can leave now.

To those still reading, I have to assume that you actually, beyond all belief, enjoy programming. If you are a student who reads Tony's blog (welcome) then you need to be wary of getting bogged down in the "College is hard. Exams are hard. I'm having no fun" trap which is easy to fall into. If you are a professional developer, you need to be wary of becoming the 9->5 programmer with no passion or interest in what you do. A new technology shouldn't make you "learn it or I'll lose my job". It should make you excited about new opportunities and avenues to explore. It can be hard, but if you don't like learning, get out now! Seriously, we'll wait until you've gone.

Now that those guys are gone I wanted to ask you a question. When did you actually stop and have a look outside of your comfort zone? I'm not talking about your living room, I'm talking about the tool set which you use to do your day-to-day drudgery. I know that it has actually been a while for me.

The whole world is focused on Object Orientated Programming at the moment, but you can do OOP programming without C#, VB.NET, C++ or Java. You can do it in assembly if you really want to (I don't actually suggest that you try this). After all, that is what the guys who *invented* OOP did (well C is basically assembly in jeans, right?).

Get out of your comfort zone. Try and do something you've never tried before. Write an interpreter for an invented language in Pascal. It's hard huh? Switch to Scheme. Still hard? Now find a book on compiler writing in Scheme. Not so bad now, is it? You just needed to re-adjust your grey matter.

I once saw an article that showed a simple "compiler" written in Prolog. This was an awesome moment because right then, I could prove that there was no difference between the "code source" and the "compiled code". They were mathematically equivalent. That point may seem obvious but trust me, it isn't, and it's magical.

Seeing different techniques being utilised across languages adds to your toolbox when it comes time to tackle a new kind of problem. Just because your current language doesn't support a particular feature doesn't mean that you can't benefit from it. Seeing the same techniques implemented in a few different languages will only deepen that knowledge and increase those benefits.

So get out there and broaden your horizons. Pick up a new language every month for the next four or five. You don't have to master them, I'm forced to assume if you've made it this far then you've probably mastered at least one already. Just play.

* Please don't ask, I seriously am not sure how I started reading this. I didn't go to school in Canada. I have never been to Canada and whilst I do have some connection with Canada, it is so unlikely to be the cause, I hereby totally discount it. I do seem to have a keen interest in education as it relates to Computer Science. This is no doubt why I'm always back here
Posted by: Mike Minutillo
Last revised: 27 May, 2011 02:42 PM History


21 Apr, 2007 11:01 AM @ version 0

That sounds like an awesome way to do things Tony. I'm a knowledge addict so I will never stop learning new stuff.

Life has been a little hectic lately though and I haven't been as enthusiastic. I'm hoping to convince myself with this post a little bit.

19 Apr, 2007 06:58 PM @ version 0

I totally agree. In the past year or so I have started stepping outside of my "coding comfort zone", accidentally at first but more recently I have been pushing myself to try new languages, algorithms, challenges, etc. It has been a great learning experience.

19 Apr, 2007 04:46 PM @ version 0

A well written post Mike!

I guess the "Canada" name might be a bit misleading, there are a lot of international readers. It's just that when the community started out, we were all in Canada. And the .com domain was taken.

What's awesome about being a University student in co-op, is that I pick up a new job every 8 months (4 months of school, 4 months of work, repeat), and I get to reexamine all my tools, practices, and language choices. I try to get employed in positions where I can learn the most too ;)

No new comments are allowed on this post.