
Teach Yourself Programming in Ten Years (1998) - llambda
http://norvig.com/21-days.html?
======
saintx
When I was learning how to program, I asked the friend who was teaching me the
rudiments "How long does it take to learn how to code?"

He replied "Eight hours."

"Eight hours?"

"Yep, eight hours, every day. It's pretty much just like driving a bus. The
hard part is keeping your ass in the seat."

Fifteen years and a master's degree later, his advice remains remarkably
accurate.

~~~
jrmattox1
A more appropriate title to the post might be "Become an expert programmer in
10 years."

We seem to focus on the poles: no coding skills vs. expert coding skills. You
can teach yourself to code in less than 10 years, you just might not be an
expert.

The "learn to code" debate might be more productive if we allowed for
definitions of competency at the stages leading up to expert. The post does a
good job of defining the characteristics of expert competency. What does it
mean to be an intermediate? How many hours should you expect to invest to get
there?

In most domains, the learning curve ramps up sharply for the first few years
and then plains off for a longer period. For example, you might move up 80% of
the learning curve in 3 years with an intense effort, but the remaining 20% of
the journey might take 7 additional years ... or a life time.

~~~
SatvikBeri
Completely agreed. Code I wrote with 6 months of programming experience has
saved companies millions of dollars by reducing work that required ~10
expensive people to requiring ~1 cheap person. A real developer could probably
further reduce that 1 to 0, but examples like these show that even basic
automation skills can contribute huge amounts of value.

------
cenazoic
An interesting implementation of the 'learn X in Y years/hours' concept is
here: <http://thedanplan.com>.

"It’s a project in transformation. An experiment in potential and
possibilities. Through 10,000 hours of “deliberate practice,” Dan, who
currently has minimal golf experience, plans on becoming a professional
golfer. But the plan isn’t really about golf: through this process, Dan hopes
to prove to himself and others that it’s never too late to start a new pursuit
in life."

After 3 years/4000 hours, he's at a 5 handicap after starting from nothing.

------
Androsynth
Relevant Marcus Aurelias quote:

"Think of your many years of procrastination; how the gods have repeatedly
granted you further periods of grace, of which you have taken no advantage. It
is time now to realize the nature of the universe to which you belong, and of
that controlling Power whose offspring you are; and to understand that your
time has a limit set to it. Use it, then, to advance your enlightenment; or it
will be gone, and never in your power again." (Meditations 2:4)

~~~
hello_newman
Can't even begin to think how much I agree with this. It kind of reminds me of
another great quote:

"Everyone on this planet is given the same 24 hours in the day. The question
is: what do you choose to do with yours?” \- Anno Sensei

------
igravious
Isn't it odd and curious and such like that the chunks of time bandied about
are units of ten? Coincidentally equal to the number of fingers on our hands.
10 years. 10,000 hours. I'd be willing to bet my granny's dentures that if we
had eight fingers on each hand those numbers would be 16 years and 65536 hours
(well, I mean it would still be 10 and 10,000 but you know what I mean).

Also, did you know that in many cultures (ancient Greece, Aramaic, Hebrew,
Chinese, to name but some) 10,000† just means "a heck of a lot", "more than
you can count". So you see, 10,000 is a bit too _magical_ for me to take
seriously.

† Here's a wikipedia entry but I think I read about this in a history of
mathematics book, cannot remember which one, sorry.
<http://en.wikipedia.org/wiki/10000_(number)>

~~~
adamtj
Imprecision (one significant digit) + Benford's law (most numbers start with
1) means most numbers needing citation are of the form 10^n.
<http://en.wikipedia.org/wiki/Benfords_law>

Interestingly, this would be true even if we had 8 fingers per hand. If we had
16 total fingers, 16 (base 10) would be written as "10" (base 16). 15 (base
10) would be a one digit number in base 16.

On the other hand, you'd rather have six fingers. Base 12 would be great
because it has whole thirds! Also 12 is divisible by four numbers (2, 3, 4,
and 6). 10 is divisible only by only 2 and 5, and fifths are much less common
than thirds.

That's why 12 inches in a foot and 3 feet in a yard is a nice way to measure
things (though the rest of the imperial system, excepting maybe Fahrenheit,
has no excuse!)

~~~
brandnewthrow
My favorite part about the imperial system is that a pint of butter weighs a
pound. 16oz of butter is 16 fluid oz. A pint is a pound, the world round!

~~~
guard-of-terra
One liter of water weights one kilogram which is IMO nicer.

------
ameister14
If you want to become an expert, you have to put in the time. Personally, all
I want is to be able to throw some things together and tell good code from
bad, but I'm not a programmer.

I think this is pretty applicable everywhere, though. The cycle of challenging
yourself, working through it and challenging yourself again is how I learn
best, at least.

------
zdgman
I am never surprised when this article reoccurs on HN. Don't try to rush it
and continue to put in your time, that is the only way to get better at the
craft.

~~~
pekk
But being better at the craft doesn't count for as much as we tend to think.
Otherwise, we would not see much age discrimination in this industry.

~~~
Nursie
In some ways that's true - a lot of employers don't care if something is done
right or done well, just done fast. Youth and enthusiasm can get you shipping
quickly.

It's just that what you're shipping, and how often you have to rewrite whole
chunks of the product, can be questionable.

------
keiferski
As much as I agree with Norvig here, linking to this article in response to
the "I want to learn how to code to build my startup" question is not helpful.
Entrepreneurs aren't going to wait 10 years before launching their startup.

The difference, of course, is that some people just want to build an MVP,
while others want to be a programmer. In that case, I'd rename this essay:
"Become a Programmer in Ten Years."

~~~
Androsynth
You can _become_ a programmer very quickly. But if you want to teach yourself
to become a good one (something that no one else will do for you), you need to
put in the time and effort.

The article isnt called 'become an entrepreneur' in ten years. I didnt see it
as a response to anything. Its just a good article. One of the 5-6 that
regularly get upvotes every year or two.

~~~
keiferski
Agreed on all accounts. This article is just often linked to on "I want to
learn coding to build my startup" topics.

~~~
nekopa
Norvig himself commented on one of those type threads in support of a guy who
had taught himself to program in 12 weeks:
<https://news.ycombinator.com/item?id=3271866>

------
ghettoeinstein
Self-teaching programmer here. Extensive IT background, and have had a CS
class or two in public "B School" type university. After Codecademy, Learn x
the hard way a little bit, and even command line hacking with REPL's I have
been able to conquer my fear of the abstraction layer. And although I am able
to look at programs that exist and I use from a programmer's mindset, I still
can not understand how to model my ideas and build them out. I think with a
better understanding of core CS concepts and a thorough mental whipping I will
be in a better shape. My plan is to get through:

1\. SICP/SICP Python 2\. {Insert famous Data Structures/ Algorithms book here}
3.Find some open source project on Github of what I want to do, and extend it
or even better refactor it.

From there I will be ready to feel more like a programmer. Cause I really
breeze through these tutorials, but seem lost thereafter. I am not seeking
prodigy status, but I know that I can become a very formidable programmer
sooner or later.

~~~
viame
This is how I do it.

I just started working with python about 3-4 weeks ago. No experience other
than html, css3 and graphic design.

So I started doing some online classes but they were so boring and simple that
I finished them within a day or two. I actually started doing Udacity's CS
class when they teach you how to design a search engine, however half way
through I realized that this can be done twice as faster with tools that
already exist.

From there I read some Django docs, installed it but django was the most
confusing framework to me (not really sure why, just didn't like it)

I stumbled upon Flask and I fell in love. Without any knowledge of how to
program and how things work I simply started coding, working with db
(postgres). Within a week or so I designed a small blogging application that
lets you register users, each user can upload photos, create docs and delete
them. I try to code very neatly, and comment on everything. There are a couple
of solutions for everything so if I find a better solution I comment out the
first one and apply another one.

PS. Don't code for 12h straight. Go out. If I don't know something, I seek for
direction, not an answer. I also walk away from my comp and think about a
solution, and these tend to be very easy and can be done with a few lines of
code. I guess I use my creativity to solve code problems.

Also write everything in small chunks and reuse.

------
stared
"Teach Yourself C++ in 21 Days" <http://abstrusegoose.com/249>

------
alpb
(2001) should be added to the title on HN. It is quite interesting to see
things just get reposted again and again.

------
orangethirty
I started at age 7. I'm 34 now. Still learning, and still feeling like a noob.
Can't get enough of this, though.

~~~
yen223
I feel like a noob too, mostly because I started at 18!

That's to say, I started taking programming seriously at 18. I did write a
crappy Visual Basic exe when I was 8, and I dabbled a bit in Flash
ActionScript in my teenage years, but I don't really count those years,
because I was learning by rote then.

I really only started taking programming seriously when I was in college.
Writing an RTOS from scratch was one of my biggest coding achievements. A lot
of times, I wish I have a job that's more technically challenging than what
I'm doing now.

~~~
orangethirty
I started at age 7 with BASIC on a C64. Then moved on to reading C and C++
books once I could read _English_. Yeah, I had to learn English before
learning how to program. It makes me crack up every time I think about it.
Anyhow, I had a, uh, rather interesting _phase_ were I was into _reverse-
engineering_ programs and systems. Luckily, I did not have internet access
until the end of that phase. Still remember having some fun learning stuff on
IRC. By the time I was 20-ish, I was heavily into robotics. But back then the
Arduino was not a reality, so it was mostly using PIC16F84 chips and 555
timers. And then I had another BASIC phase, which led me to discover Python.
Then Lisp. Then Visual Basic, C#, and the .NET framework. Had too much fun
with Python and Lisp. Love them both. Went back to them. I mostly do Python
these days, but love writing Lisp whenever I can.

------
michaelwww
I'd like to meet the person who would buy a book titled "Teach yourself
computer programming in 10 years."

~~~
nekopa
Well according to my wrestling with it, that book is out and called "The Art
of Computer Programming" by don knuth.

~~~
n33
Also see - "A Discipline of Programming" by Edsger W. Dijkstra

[http://www.amazon.com/Discipline-Programming-Edsger-W-
Dijkst...](http://www.amazon.com/Discipline-Programming-Edsger-W-
Dijkstra/dp/013215871X)

------
wavelander
Ah. This site. I came across this when I was a kid - like 5-6 years ago - I
had googled the term "how to become a hacker". This guy had opened my eyes
then - I was 14 then. He still continues to do so. His links are still
relevant and an amazing starting point for anyone who wants to learn.

One should probably keep visiting this page like every 6 months or so - just
to check whether you are on the right track to learning.

------
Tycho
The article makes a good point. But what's more useful is that programmers
skills matrix that someone posted to HN about a year ago. It had a row for
every area in comp sci, and then it had columns progrssing in order of depth
of knowledge. Over the ten years you chould check off each box one by one.

~~~
tianyicui
link: [http://www.starling-software.com/employment/programmer-
compe...](http://www.starling-software.com/employment/programmer-competency-
matrix.html)

------
zzzeek
Right so, do we get to shrug off people with less than 10 years experience?
Sure would end a lot of arguments.

~~~
wonderzombie
If you are interested in scoring points, yes. If you are interesting in being
a mature engineer[1], no.

[1]: [http://www.kitchensoap.com/2012/10/25/on-being-a-senior-
engi...](http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/)

~~~
zzzeek
haha, yeah im not looking to score points, just not waste time on things I
know are wrong ;)

------
ValentineC
Other discussions on the same article:

<http://news.ycombinator.com/item?id=43243>

<http://news.ycombinator.com/item?id=3439772>

------
sn0v
Um, hasn't this been posted and reposted already? Not trying to be a smartass,
but I thought this article was already pretty popular, and generally the
standard response to any beginner asking how he could learn X in 10/21 days.

~~~
yen223
HN tolerates reposts after a certain period, I think.

Anyway I'm not complaining. This is one of those articles which ought to be
required reading for any aspiring programmer.

------
riggins
regarding 10,000 hours ... from Moonwalking with Einstein

"What separates experts from the rest of us is that they tend to engage in a
very directed, highly focused routine, which Ericsson has labeled “deliberate
practice.” Having studied the best of the best in many different fields, he
has found that top achievers tend to follow the same general pattern of
development. They develop strategies for consciously keeping out of the
autonomous stage while they practice by doing three things: focusing on their
technique, staying goal-oriented, and getting constant and immediate feedback
on their performance. In other words, they force themselves to stay in the
“cognitive phase.”...

The best ice skaters spend more of their practice time trying jumps that they
land less often, while lesser skaters work more on jumps they’ve already
mastered. Deliberate practice, by its nature, must be hard....

Amateur musicians, for example, are more likely to spend their practice time
playing music, whereas pros are more likely to work through tedious exercises
or focus on specific, difficult parts of pieces...

When you want to get good at something, how you spend your time practicing is
far more important than the amount of time you spend. In fact, in every domain
of expertise that’s been rigorously examined, from chess to violin to
basketball, studies have found that the number of years one has been doing
something correlates only weakly with level of performance."

tl;dr

10,000 hours may not make you expert. Constantly increasing the level of
difficulty of what you practice/work on might be more important.

~~~
nostrademons
I've heard it's both - that you need to constantly increase the level of
difficulty of your practice _for 10,000 hours_. The research, after all, says
"10,000 hours of deliberate practice", and deliberate practice is what you
describe above.

------
davidroberts
If you have some talent and enjoy it, you can teach yourself programming to a
pretty high level in a few months. But to master it, like any complex craft,
takes a lifetime.

------
shubhamjain
Well, this is the single most article, I personally recommend everyone to
read. Mr. Norvig writes specifically about programming but this applies to
every department like music, painting or photography. The way this article has
spread I guess most of the programmers must have glimpsed it, or at least the
good ones.

------
pekk
It doesn't matter if you know programming even with 10 years' experience,
since people with much less will get a job by selling and people with more
will not get a job if they so much as look funny.

Study how to build a personal reality distortion field, that is the ability
most in demand currently

------
kamaal
Tip: Don't focus on learning programming. Focus on learning to find and solve
tough problems.

Once you go that direction you will learn things along the way. 10 years or 5
or 20 don't even matter then. Because you will be achieving the end result of
why you should even be learning programming.

------
vxkr25
Though agree that those "For Dummies" books grossly underestimate the time
needed to be a good programmer, I really wish he didn't use the "10,000 hours
is the ultimate immutable number of hours you need to 'master' a skill." It's
nonsense.

~~~
cloverich
> It's nonsense.

The 10 year / 10,000 hours seems to come up frequently - care to cite or link
to some interesting counters? (genuine curiosity)

~~~
hluska
One of the big articles in the field is by K. Anders Ericsson and Neil
Charness. It is titled "Expert Performance - Its Structure and Acquisition."
You can find a copy at:

[http://stuff.mit.edu/afs/athena.mit.edu/course/6/6.055/readi...](http://stuff.mit.edu/afs/athena.mit.edu/course/6/6.055/readings/ericsson-
charness-am-psychologist.pdf)

Alternately, you could read "Deliberate Practice and Acquisition of Expert
Performance: An overview". It is also by Ericsson and you can find a copy
here:

[http://www.cogsci.rpi.edu/~vekslv/classes/cogeng2010/lecture...](http://www.cogsci.rpi.edu/~vekslv/classes/cogeng2010/lecture-03-15-expertise/part2-dp.pdf)

------
theltrj
I think many want to learn so quickly because we need to run faster and faster
just to stay in place within the technology fields....just look at all the new
things we see on hacker news each day

------
joemcm
“We would love for this to be rolled out to every high school in America,”
said Carson. “But we wanted to fix a couple schools, go deep, and really
understand if it works.”

Oh REALLY?

------
walid
Lesson 1: Figure out why the URL isn't loading the required page.

Hint: ?

------
kayman
It's like sports. You can learn to play any sport in a few hours. But to be
good at it, you have to practice.

------
smj2118
How did Norvig know about Ratatouille 6 years before it came out?

------
klrr
Still some learn it before they're even 15.

------
scrapcode
503.

~~~
adamnemecek
[http://webcache.googleusercontent.com/search?q=cache:SHt7f6B...](http://webcache.googleusercontent.com/search?q=cache:SHt7f6BhFjIJ:norvig.com/21-days.html+&cd=1&hl=en&ct=clnk&gl=us)

