Just ran across this essay, via Hacker News, and everything it says is true: “Poor, poor child. You have no idea – the letter I wish I could write to my former self, and have beamed at light-speed through some kind of vacuum tube and delivered at the precise moment when I finally decided to learn to program.”
The problem is that while you’ve uncovered a wonderful world that makes coding seem so approachable and fun, you’re unknowingly making a giant leap by thinking it’s somehow also easy.
This might not seem like a big deal, but it’s huge. Every single time (and this will happen constantly) you come across a concept that seems foreign or difficult or even just unintuitive, instead of thinking “It’s OK. Programming is hard.” you’re going to be thinking “This is supposed to be easy. What’s wrong with me? I must be stupid.” These feelings will keep you from seeking help or pushing through to discover why things work the way they do, and that is what’s stupid.
If I had to quibble with anything, it would be the comment about first languages. The first language you learn will influence the way you learn your next, of course, but every time you pick up a new tool, it stretches your overall model of computation. You’re not just learning a new language, but learning how to develop and reconcile models. It is hard to learn new ways of thinking about things, but that’s part of what you do as a programmer, and you aren’t going to get very far until you learn how to grasp and create abstractions.
A related essay I came across earlier today elaborates on the idea of time investment as the route to achievement. I Have No Talent:
It is true. I have no talent. What I do have is a lot of practice. And I am not talking about occasionally dabbling in Ruby on the weekends. I am talking about the kind of practice where I beat code that isn’t working into submission (though often times the code wins).
I completely disagree. All the tasks I’ve tried to tackle while programming have always been way too hard for my knowledge level at the time I start them, but I ask questions, and eventually (over the years) figure it out. Programming didn’t teach me that everything is easy, it taught me how to approach new subjects or impossible problems and *make* them possible and understandable. It’s called learning, I believe.
Comment by Asher — January 14, 2010 @ 10:24 pm
I feel like I must be missing something here; I don’t see what it is that you’re disagreeing with. The author explicitly advises his younger self to tackle tasks that are way too hard for his knowledge level, in order to push himself into learning:
Comment by Mars Saxman — January 14, 2010 @ 11:43 pm
I guess after re-reading the whole article I agree with the overall gist of it, but I disagree with the idea that programming makes you think everything should be easy. In my mind, if you expect everything to be easy, you will be bad at things that are truly difficult because you don’t expect their difficulty, and don’t know how to deal with it. I interpreted the third paragraph as saying just that:
> …every single time… you come across a concept that seems foreign or difficult or even just unintuitive, instead of thinking “It’s OK. Programming is hard.” you’re going to be thinking “This is supposed to be easy. What’s wrong with me? I must be stupid.” These feelings will keep you from seeking help or pushing through to discover why things work the way they do, and that is what’s stupid.
I’ve never had that reaction to something difficult. Programming taught me to expect most things to be difficult (but solvable in the end), not easy, and to ask lots of questions, not to avoid seeking help.
Comment by Asher — January 20, 2010 @ 10:04 am
Ah, I guess you don’t use Markdown for comments. Feel free to edit my comment to properly blockquote and delete this comment…
Comment by Asher — January 20, 2010 @ 10:05 am