The footer alludes to that: "Peter Norvig (Copyright 2001—2014)"
I tracked the page on web archive, and it existed at least since 1998. Here is a funny edit over the years:
1998: Let's analyze what a title like Learn Pascal in Three Days could mean:
2009: Let's analyze what a title like Learn C++ in Three Days could mean:
2014: Let's analyze what a title like Teach Yourself C++ in 24 Hours could mean:
I'm in the same boat. Sometimes I feel like I'm getting pretty good at this, but then I talk to somebody and I have no idea what they're saying half the time. It's really ... I want to say humbling, but it's more stupefying than humbling.
Yep, I've been learning Haskell for the past year. Honestly, I consider myself still at the beginner stage at best. But I'm just starting to see a light at the end of a tunnel.
It is most definitely humbling to learn new ways to compute that force you to reconsider what you hold true. I liken it to learning a human language and having it force you to learn another cultural viewpoint. You quickly learn that you have been in a filter bubble.
My light at the end of the tunnel remark was more of an analogy that at that point I'll be able to use the language with minimal competency. >.<
I can see with things like Idris and dependent types even more of the same of the whole, well I thought I understood computation to a minimal degree, here is another bit of it that totally changes how I view the world.
Well, Norvig really means _mastering_ the thing. For him, this includes learning half a dozen languages, learning them well, applying them in all kinds of projects with others and so on. This probably can't be done in two years.
Mastering something and merely learning competence in it are two different things though. I don't think the "Teach yourself X in Y" type books are claiming to be turning people into masters, similarly I'm sure many of the learning piano/sculpting/art type books aren't claiming to be making master artists out of their readers.
I think, with the right resources (people, material), if someone dedicated themselves to learning programming/software development actively for 2 years they could become extremely proficient in it. Not masters across a number of different languages and paradigms, of course, but just very proficient in a few of them to the point where they could churn out good work/projects/ideas with it.
I can show you how to use a table saw and all the other tools of carpentry in a day or two. It takes a long time to become a master carpenter. Heck, it takes 30 seconds to learn to use a planer, but a good while to really learn how to use it well.
A comment at the bottom seemed relevant and funny:
You need 10 years to be an expert programmer but what if someone is just trying to put together a prototype?
...reads like "You need 10 years to be a surgeon but what if someone is just trying to open up a patient?"
I think 10 years is pessimistic, 2 years feels about right, but I don't think the time is really the point of this page. You just can't rush learning, or expect to get a job after reading one of those books that sell a quick solution. It takes time, longer than you think it will, which is funny again considering how much I've experienced underestimating timelines in the past.
Programming in the 21st century equivalent of low carb diets and miracle weight-loss without exercise! Haven't you heard? You can go from novice to ninja in hours! Just pay keep paying us for these carrots.
Mastering any skill in life takes dedication, training and time. Whenever someone promises a shortcut in life, there is usually an ulterior motive.
A decent amount of NFL players didn't play the sport until their late teens, some even waited until their early twenties! This is unheard of for any other competitive sport. This occurs often where pure speed (receiver) and size (offensive lineman) are at a premium.
There are trained mathematicians and scientists that can outhink most programmers: your b might be greater, but their m is steeper (y=mx+b).
I came across that essay a couple of years back, and I liked it very much.
It pretty much taught me the value of persistence. The first time I tried to learn Lisp, I felt like my IQ had dropped to about room temperature. It took me years to get it, trying again every couple of months. Eventually, I did get it. I am not an enlightned, brilliant Lisp hacker, but refusing to give up has allowed me to understand things I initially considered myself too stupid for.
Which, in turn, encouraged me to tackle other problems. If that first one eventually turned out not to have been all that hard, maybe this other one isn't, either?
It's not a major influence, but I could say this essay has, in a way, changed my life.
I tend to be my own worst enemy when it comes to these things. I hit a roadblock, feel like an idiot, then beat myself up over it. What helps me is looking back at the kind of developer I was a year, 2 years, 5 years ago. It has been long, and sometimes incredibly slow and stagnant couple of years for me, but damn if I'm not twice the developer I was a year or two ago.
The first time I tried to learn Lisp, I felt like my IQ had dropped to about room temperature. It took me years to get it, trying again every couple of months. Eventually, I did get it.
Next stop is Haskell. :)
If it makes you feel better, the people who seem to be really smart have the same roadblocks, false starts, and struggles... if not more of them, just as world-class marathoners (while they run the distance faster than most of us could) are still exhausted at the end of a race, because they run so hard.
It wasn't until my late 20s that I "got" that this sense of exhaustion is often a good thing. At least the exhaustion that comes from solving hard problems is a good thing; the kind that comes from political flare-ups and open-plan offices is pretty useless as far as I can tell.
Alas, Haskell has resisted my attempts at learning it far longer than Lisp.
If I wanted to go in that general direction, I guess, I would look at OCaml, which seems to offer many of Haskell's benefits without being quite that weird.
I agree with Norvig that programming is a long-haul commitment...not much different than any other form of literacy, except in most schools, we're forced to go through 12+ years of English/math (and even then, a pretty high number of college students are still at a remedial level).
One thing he didn't address that I'd like to see more explored: how much of learning programming is learning the "mechanics"? By that, I mean everything from knowing how to Google effectively, to learning an IDE, to your OS keyboard shortcuts....I'd have to imagine that learning how to program 30 years ago can be fundamentally different than it is now, based on the _conveniences_ we have available to us.
When teaching beginners, I've been trying to stress the importance of good mechanics/practice...I've seen students spend literally 4-5 hours on some typo-caused bug (such as `rm`ing something accidentally) because they didn't take the few minutes to get use to tab-autocomplete. Or use a proper text editor with syntax highlighting. Learning anything is a race against time and energy...the all-night debugging sessions add up, and people who are intellectually capable end up dropping out simply because they've run out of time (or believe they have, which is a sensation that grows as you get older).
At the end of ten years, you have to start over, since what you learned ten years ago is obsolete. Worse, the programmer boom that impelled you to get into programming is now over.
I have to disagree with this...I started learning programming formally 10 or so years ago in college...not only are C/C++ and assembly still relevant languages in their own right, everything I learned about fundamental programming concepts, such as branching, loops, race conditions, and algorithms are directly applicable to every new language I learn...and everything I informally learned programming and hacking as a child -- QBasic, MSDOS command-line, how to dialup a local BBS and download the latest shareware id games...getting comfortable with those interfaces, getting an implicit understanding of how computers can be controlled beyond the default packaged interfaces made for consumers...that was invaluable experience in preparing me for learning programming in college.
Different skills / technologies have different half lifes. And it's actually pretty easy to pick some that have essentially infinite half lifes: stick to what's been around for a while. Stick to hard stuff.
Some examples that I'm willing to bet money on to stay relevant: Regular expressions. OS fundamentals. Compiler construction. Unix basics. Etc.
Mastering any skill takes close to lifetime, but for "Why is everyone in such a rush?" there are a few main points:
- because one needs to pay one's bills,
- because using technology is cool; and waiting 10 years is not cool.
It is easy to say in retrospect that it was worth spending 10 years of learning something. But it is hard to make such commitment in advance (especially as most of such commitments are misses, by opportunity cost).
And actually I think that the biggest mistake in traditional teaching of school subjects is that they teach many years, but don't make you use it. (Compare to playing with a ball, when you do it before learning about classical mechanics.)
> It is easy to say in retrospect that it was worth spending 10 years of learning something. But it is hard to make such commitment in advance (especially as most of such commitments are misses, by opportunity cost).
I don't think Peter implies to stay jobless, till you clock 10,000 hours on programming. Many people who don't program, see it as lucrative opportunity to start making six-figures a month, and pick one of those books mentioned in the article.
After completing few examples, they acquire a false notion, how easy it is. "Tell me any technology and I'll learn it in a week." said one guy I was interviewing but when they get to work on something tangible, they get a cold feet. The article simply speaks about foolishness of expecting to learn something within few weeks and get on a job, quickly. By no means, they should just learn and get a job only when they are ready, but realizing that nothing would ever be enough and constantly trying to level up, is essential to become really good at programming.
Yet, the author fails to mention marketing invovled behind this. Any fool can write a book, but it does take effort to sell it. Such titles like "Teach Yourself X in 21 days" are designed to give the user a small taste of what's involved AND to sell the damn book. Most of these books state right in the beginning that you have to constantly work at it to fully learn the material.
So are these books worthless? Absolutely not. They offer the user a basic foundation to start learning and work up from there. The user can from there find communities and more advanced books to continue to learn.
For me personally, these books gave me a foundation to continue to learn. But honestly, the best way I learned was actually coming up with small projects that I personally wanted to do.
Well, there is a good reason not to call oneself "C++ programmer" after spending 24h with it.
Being convinced that something is easy and using it is a wonderful thing (they are way too many people who are scared to program and miss the opportunity). Plus, one of the best strategies for learning programming is to go to a point where someone can pay (even if for a very junior position) and continue learning.
I think the rise of these development 'boot camps' is causing more harm than good. It devalues programmers skills and worth as well as give people false hopes. I am all for people wanting to improve their skills or learn something new, but these bootcamps overpromise, and under deliver.
Agree, we get a lot of 'boot camp' graduates at work and sadly they don't fare well in the interview process. The ones that do are typically CSS/JavaScript web developers, but even then their knowledge is superficial.
How do the bootcamps devalue skills and worth? They might give an impression that it's easy---but unless they find a way to make good programmers, which would be great!---they take nothing away from the value of skills.
Fortunately, we don't need to care too much about the expectations of underinformed potential employers. There are companies around that pay enough, and drive the market price for talent.
Personally I think programming is easy. Started 6 years ago on/off, and the last 2 years full time. I use to have a blast doing it, because it always kept my mind in the 'zone' by trying to solve complex problems in my head.
Now, it's automatic. 95% of the things I run into daily at work, I've done them a million times already, so I just regurgitate what I already know. The other 5% of the time a quick google search will find my solution.
I don't feel challenged anymore. I don't think my line of work can possibly get anymore challenging either. But job availability is so plenty in my current field of programming, arghhhhh.
Throwaway, so doesn't matter. Salary is 90k, though recently realized how little it matters. I'd be fine with 50 or so. Have some background in neural networks, and all the math goodies needed for ML. Between ML and robotics somewhere would be my dream job.
Hey, thanks for divulging. I appreciate it.
Right, writing apps can be fun at first, but it does get old. I agree with you. It's especially more hectic if you're a web developer with all the javascript churn that's been going on.
If you can do something over and over again just regurgitating what you already know, it says a lot about what kinds of things you are being asked to do.
Been interested in ML lately. I'm a good half way through Andrew Ng's CS 229 (the actual course, not the watered down coursera course). I find it much more intellectual stimulating than writing apps, lol, sigh.
I stumbled upon this essay by Norvig about one and half year earlier when I was just searching web as a newbie wannabe programmer and this essay really cleared my view about programming. I am still a student and have not yet seriously got into programming but the essay has encouraged me to be more persistent.
63 comments
[ 2.8 ms ] story [ 139 ms ] threadI tracked the page on web archive, and it existed at least since 1998. Here is a funny edit over the years:
:)I think he's wrong about the telegraph taking 10 years to master.
It is most definitely humbling to learn new ways to compute that force you to reconsider what you hold true. I liken it to learning a human language and having it force you to learn another cultural viewpoint. You quickly learn that you have been in a filter bubble.
I can see with things like Idris and dependent types even more of the same of the whole, well I thought I understood computation to a minimal degree, here is another bit of it that totally changes how I view the world.
Doing more that scratching the surface requires a lot of work and focus.
I think, with the right resources (people, material), if someone dedicated themselves to learning programming/software development actively for 2 years they could become extremely proficient in it. Not masters across a number of different languages and paradigms, of course, but just very proficient in a few of them to the point where they could churn out good work/projects/ideas with it.
You need 10 years to be an expert programmer but what if someone is just trying to put together a prototype?
...reads like "You need 10 years to be a surgeon but what if someone is just trying to open up a patient?"
I think 10 years is pessimistic, 2 years feels about right, but I don't think the time is really the point of this page. You just can't rush learning, or expect to get a job after reading one of those books that sell a quick solution. It takes time, longer than you think it will, which is funny again considering how much I've experienced underestimating timelines in the past.
Mastering any skill in life takes dedication, training and time. Whenever someone promises a shortcut in life, there is usually an ulterior motive.
A decent amount of NFL players didn't play the sport until their late teens, some even waited until their early twenties! This is unheard of for any other competitive sport. This occurs often where pure speed (receiver) and size (offensive lineman) are at a premium.
There are trained mathematicians and scientists that can outhink most programmers: your b might be greater, but their m is steeper (y=mx+b).
But they actually work.
http://web.archive.org/web/19980206223800/http://www.norvig....
It pretty much taught me the value of persistence. The first time I tried to learn Lisp, I felt like my IQ had dropped to about room temperature. It took me years to get it, trying again every couple of months. Eventually, I did get it. I am not an enlightned, brilliant Lisp hacker, but refusing to give up has allowed me to understand things I initially considered myself too stupid for. Which, in turn, encouraged me to tackle other problems. If that first one eventually turned out not to have been all that hard, maybe this other one isn't, either?
It's not a major influence, but I could say this essay has, in a way, changed my life.
On the other hand I don't think your salary has been multiplied by two in the meantime - unless you were not working two years ago.
Next stop is Haskell. :)
If it makes you feel better, the people who seem to be really smart have the same roadblocks, false starts, and struggles... if not more of them, just as world-class marathoners (while they run the distance faster than most of us could) are still exhausted at the end of a race, because they run so hard.
It wasn't until my late 20s that I "got" that this sense of exhaustion is often a good thing. At least the exhaustion that comes from solving hard problems is a good thing; the kind that comes from political flare-ups and open-plan offices is pretty useless as far as I can tell.
If I wanted to go in that general direction, I guess, I would look at OCaml, which seems to offer many of Haskell's benefits without being quite that weird.
One thing he didn't address that I'd like to see more explored: how much of learning programming is learning the "mechanics"? By that, I mean everything from knowing how to Google effectively, to learning an IDE, to your OS keyboard shortcuts....I'd have to imagine that learning how to program 30 years ago can be fundamentally different than it is now, based on the _conveniences_ we have available to us.
When teaching beginners, I've been trying to stress the importance of good mechanics/practice...I've seen students spend literally 4-5 hours on some typo-caused bug (such as `rm`ing something accidentally) because they didn't take the few minutes to get use to tab-autocomplete. Or use a proper text editor with syntax highlighting. Learning anything is a race against time and energy...the all-night debugging sessions add up, and people who are intellectually capable end up dropping out simply because they've run out of time (or believe they have, which is a sensation that grows as you get older).
Some examples that I'm willing to bet money on to stay relevant: Regular expressions. OS fundamentals. Compiler construction. Unix basics. Etc.
- because one needs to pay one's bills,
- because using technology is cool; and waiting 10 years is not cool.
It is easy to say in retrospect that it was worth spending 10 years of learning something. But it is hard to make such commitment in advance (especially as most of such commitments are misses, by opportunity cost).
And actually I think that the biggest mistake in traditional teaching of school subjects is that they teach many years, but don't make you use it. (Compare to playing with a ball, when you do it before learning about classical mechanics.)
BTW: See "A Mathematician’s Lament"by Paul Lockhart http://www.maa.org/sites/default/files/pdf/devlin/LockhartsL...
I don't think Peter implies to stay jobless, till you clock 10,000 hours on programming. Many people who don't program, see it as lucrative opportunity to start making six-figures a month, and pick one of those books mentioned in the article.
After completing few examples, they acquire a false notion, how easy it is. "Tell me any technology and I'll learn it in a week." said one guy I was interviewing but when they get to work on something tangible, they get a cold feet. The article simply speaks about foolishness of expecting to learn something within few weeks and get on a job, quickly. By no means, they should just learn and get a job only when they are ready, but realizing that nothing would ever be enough and constantly trying to level up, is essential to become really good at programming.
So are these books worthless? Absolutely not. They offer the user a basic foundation to start learning and work up from there. The user can from there find communities and more advanced books to continue to learn.
For me personally, these books gave me a foundation to continue to learn. But honestly, the best way I learned was actually coming up with small projects that I personally wanted to do.
Being convinced that something is easy and using it is a wonderful thing (they are way too many people who are scared to program and miss the opportunity). Plus, one of the best strategies for learning programming is to go to a point where someone can pay (even if for a very junior position) and continue learning.
I don't think Mattan & the guys at one month rails are gona like this.
It's similar to the classic "What do you mean $XX an hour? My nephew said he can make a site for $20"
Fortunately, we don't need to care too much about the expectations of underinformed potential employers. There are companies around that pay enough, and drive the market price for talent.
Now, it's automatic. 95% of the things I run into daily at work, I've done them a million times already, so I just regurgitate what I already know. The other 5% of the time a quick google search will find my solution.
I don't feel challenged anymore. I don't think my line of work can possibly get anymore challenging either. But job availability is so plenty in my current field of programming, arghhhhh.
What is your salary like??? (if you don't mind me asking)
Been interested in ML lately. I'm a good half way through Andrew Ng's CS 229 (the actual course, not the watered down coursera course). I find it much more intellectual stimulating than writing apps, lol, sigh.
2 years ago: https://news.ycombinator.com/item?id=5519158
3 years ago: https://news.ycombinator.com/item?id=3439772
6 years ago: https://news.ycombinator.com/item?id=1060176
7 years ago: https://news.ycombinator.com/item?id=191235
8 years ago: https://news.ycombinator.com/item?id=43243
Keep in mind these are the ones with decent number of comments. There are two pages of submissions with the exact same title.
Serious question - Why not?