Computing stuff tied to the physical world

Learning new tricks

In Software on Jan 27, 2013 at 00:01

There’s a reason why many people stick to a programming language and reuse it whenever possible: it’s hard work to learn another one! So once you’ve learned one well, and in due time really, really well, then you get a big payback in the form of a substantial productivity boost. Because – as I said – it’s really a lot of hard work to become familiar, let alone proficient, with any non-trivial technology – including a programming language or an OS.

Here’s me, a few weeks ago:

digg1

I was completely overwhelmed by trying to learn Node.js, AngularJS, SocketStream, CoffeeScript, and more. To the point of not being able to even understand how it all fits together, and knowing that whatever I’d try, I would stumble around in the dark for ages.

I’ve been through the learning curve of three programming languages before. I like to think that I got quite good at each of them, making code “sing” on occasion, and generally being able to spend all my time and energy on the problem, not the tools. But I also know that it took years of tinkering. As Malcolm Gladwell suggests in his book Outliers, it may take some 10,000 hours to become really good at something. Maybe even at anything?

Ten. Thousand. Hours. Of concentrating on the work involved. That sure is a long time!

But here’s the trick: just run, stumble, and learn from each re- / disrecovery!

That doesn’t mean it’s easy. It’s not even easier than the last time, unfortunately: you can’t get good at learning new stuff – you still have to sweat it through. And there are dead ends. Tons of them. This is the corner I painted myself into a couple of days ago:

digg3

Let me explain:

  • I thought I was getting up to speed with CoffeeScript and the basics of AngularJS
  • … even started writing some nice code for it, with lots of debug / commit cycles
  • big portions were still clear as mud to me, but hey… I got some stuff working!

The trouble is: instead of learning things the way all these new tools and technologies were meant to be used, by people far more knowledgeable than me, I started fitting my old mental models on top of what I saw.

The result: a small piece, working, all wrapped into code that made it look nice to me.

That’s a big mistake. Frameworks such as AngularJS and SocketStream always have their own “mindset” (well, that of their designers, obviously) – and trying to ignore it is a sure path to frustration and probably even disaster, in the long term.

Ya can’t learn new things by just mapping everything to your old knowledge!

Yesterday, I realised that what I had written as code was partly just a wrapper around the bits of NG and SS which I started to understand. The result: a road block, sitting in the way of real understanding. My code wasn’t doing much, just re-phrasing it all!

So a few days ago, I tore most of it all down again (I’m talking about HouseMon, of course). It didn’t get the startup sequence right, and it was getting worse all the time.

Guess what? Went through a total, frustratingly disruptive, re-factoring of the code. And it ended up so much simpler and better… it blew me away. This NG + SS stuff is incredible.

Here’s me, after checking in the latest code a few hours ago:

digg2

No… no deep understanding yet. There’s no way to grasp it all in such a short time (yes, weeks is a short time) – not for me, anyway – but the fog is lifting. I’m writing less code again. And more and more finding my way around the web. The AngularFun project on GitHub and this post by Brian Ford are making so much more sense now.

I’ve also decided to try and change one more habit: I’m going back to the vim editor, or rather the MacVim version of it. I’ve used TextMate for several years (now v2, and open source), but the fact is that pointing at things sucks. It requires eye-hand coordination, whereas all command-line and keyboard-driven editing activity ends up settling itself in your muscle memory. Editors such as vim and emacs are amazing tools because of that.

Now I don’t know about you, but when I learn new things, the last thing on earth I’d want is to spend my already-strained mental energy on the process instead of the task at hand.

So these days, I’m in parallel learning mode: with head and spine working in tandem :)

  1. I think that Sublimetext supports vim’s commands so you can get the keyboard efficiency while keeping the bundle goodies.

  2. Thanks for the cheatsheet JC! I learned a new one today: n or N: Repeat the latest “/” or “?” [count] times (in opposite direction).

    One I didn’t see in the list, which I’m learning to use more often: “+ is the clipboard buffer. So “+yy or “+p lets you copy-paste between programs. Although ctrl-ins / shift-ins also works, and this is something I’ve been using since the DOS days (edit rather than edlin).

    Good on you for taking this journey into new languages, and thanks a (large) bunch for sharing your enthusiasm, frustrations, successes and failures. No doubt this will come in handy sooner rather than later.

  3. and of course when getting older (i’m nearly 63) it takes more effort and time to learn new things , but don’t give up , goto conferences , meetings , listen to & speak with younger people , scan the internet for ideas , solutions (google is your friend) etc..

  4. I agree, having the experience of many years lets you see the grand picture, but then you also know it only takes 10000 hours to learn. At my age you need to double that, because everything is one step forward, did I just make a step forward? lets go back to be sure I made a step forward. Oops, it works, what did I do wrong this time. No, that’s right, that error is not an error.

    LOL, life is beautiful..

  5. Muscle memory huh? I’ve been telling people this for ages!

    Just to let all the dinosaurs know: Us young ones are also using the old tools like vim, but most of us are trying not to get accustomed to a particular system and/or platform too much, because a lot of it will have changed in 10 to 15 years from now. We just try to get the global ideas and use it.

    You also state that you need 10k hours to get good at something, but you will never experience the explosion of knowledge and understanding you gain during the first 100 hours of learning something new. The speed will simply never be the same after those 100 hours…

    So if you want to decide if something is useful to you and want to continue learning it: spend 100 hours (2 weeks) with it and decide if you really want to continue.

Comments are closed.