0% found this document useful (0 votes)
223 views7 pages

Teach Yourself Programming in Ten Years

Teach Yourself Programming in Ten Years

Uploaded by

Juan Andres
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
223 views7 pages

Teach Yourself Programming in Ten Years

Teach Yourself Programming in Ten Years

Uploaded by

Juan Andres
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

11/10/2018 Teach Yourself Programming in Ten Years

Teach Yourself Programming in Ten Years


Peter Norvig

Why is everyone in such a rush? Translations


Walk into any bookstore, and you'll see how to Teach Yourself Java in 24 Hours alongside Thanks to the
endless variations offering to teach C, SQL, Ruby, Algorithms, and so on in a few days or following authors,
hours. The Amazon advanced search for [title: teach, yourself, hours, since: 2000 and found translations of this
512 such books. Of the top ten, nine are programming books (the other is about bookkeeping). page are available in:
Similar results come from replacing "teach yourself" with "learn" or "hours" with "days."
Arabic
The conclusion is that either people are in a big rush to learn about programming, or that (Mohamed A. Yahya)
programming is somehow fabulously easier to learn than anything else. Felleisen et al. give a
nod to this trend in their book How to Design Programs, when they say "Bad programming is
easy. Idiots can learn it in 21 days, even if they are dummies." The Abtruse Goose comic also
had their take.
Bulgarian
Let's analyze what a title like Teach Yourself C++ in 24 Hours could mean: (Boyko Bantchev)
Teach Yourself: In 24 hours you won't have time to write several significant programs,
and learn from your successes and failures with them. You won't have time to work with
an experienced programmer and understand what it is like to live in a C++ environment.
In short, you won't have time to learn much. So the book can only be talking about a
superficial familiarity, not a deep understanding. As Alexander Pope said, a little Chinese
learning is a dangerous thing. (Xiaogang Guo)

C++: In 24 hours you might be able to learn some of the syntax of C++ (if you already
know another language), but you couldn't learn much about how to use the language. In
short, if you were, say, a Basic programmer, you could learn to write programs in the
style of Basic using C++ syntax, but you couldn't learn what C++ is actually good (and Croatian
bad) for. So what's the point? Alan Perlis once said: "A language that doesn't affect the (Tvrtko Bedekovic)
way you think about programming, is not worth knowing". One possible point is that
you have to learn a tiny bit of C++ (or more likely, something like JavaScript or
Processing) because you need to interface with an existing tool to accomplish a specific
task. But then you're not learning how to program; you're learning to accomplish that
task. Esperanto
(Federico Gobbo)
in 24 Hours: Unfortunately, this is not enough, as the next section shows.

Teach Yourself Programming in Ten Years


French
Researchers (Bloom (1985), Bryan & Harter (1899), Hayes (1989), Simmon & Chase (1973)) (Etienne Beauchesne)
have shown it takes about ten years to develop expertise in any of a wide variety of areas,
including chess playing, music composition, telegraph operation, painting, piano playing,
swimming, tennis, and research in neuropsychology and topology. The key is deliberative
practice: not just doing it again and again, but challenging yourself with a task that is just
beyond your current ability, trying it, analyzing your performance while and after doing it, and German
correcting any mistakes. Then repeat. And repeat again. There appear to be no real shortcuts: (Stefan Ram)
even Mozart, who was a musical prodigy at age 4, took 13 more years before he began to
produce world-class music. In another genre, the Beatles seemed to burst onto the scene with a
string of #1 hits and an appearance on the Ed Sullivan show in 1964. But they had been
playing small clubs in Liverpool and Hamburg since 1957, and while they had mass appeal
early on, their first great critical success, Sgt. Peppers, was released in 1967. Hebrew
(Eric McCain)
Malcolm Gladwell has popularized the idea, although he concentrates on 10,000 hours, not 10
years. Henri Cartier-Bresson (1908-2004) had another metric: "Your first 10,000 photographs
are your worst." (He didn't anticipate that with digital cameras, some people can reach that
mark in a week.) True expertise may take a lifetime: Samuel Johnson (1709-1784) said
"Excellence in any department can be attained only by the labor of a lifetime; it is not to be
Hindi
purchased at a lesser price." And Chaucer (1340-1400) complained "the lyf so short, the craft
so long to lerne." Hippocrates (c. 400BC) is known for the excerpt "ars longa, vita brevis", (Vikash Tiwari)
which is part of the longer quotation "Ars longa, vita brevis, occasio praeceps, experimentum
periculosum, iudicium difficile", which in English renders as "Life is short, [the] craft long,
opportunity fleeting, experiment treacherous, judgment difficult." Of course, no single number
can be the final answer: it doesn't seem reasonable to assume that all skills (e.g., programming,
chess playing, checkers playing, and music playing) could all require exactly the same amount Hungarian
of time to master, nor that all people will take exactly the same amount of time. As Prof. K. (Marton Mestyan)
Anders Ericsson puts it, "In most domains it's remarkable how much time even the most
talented individuals need in order to reach the highest levels of performance. The 10,000 hour
number just gives you a sense that we're talking years of 10 to 20 hours a week which those
who some people would argue are the most innately talented individuals still need to get to the
highest level." Indonesian
(Tridjito Santoso)

So You Want to be a Programmer


Here's my recipe for programming success:
Italian
Get interested in programming, and do some because it is fun. Make sure that it keeps (Fabio Z. Tessitore)
being enough fun so that you will be willing to put in your ten years/10,000 hours.

Program. The best kind of learning is learning by doing. To put it more technically, "the
maximal level of performance for individuals in a given domain is not attained
automatically as a function of extended experience, but the level of performance can be Japanese
increased even by highly experienced individuals as a result of deliberate efforts to (yomoyomo)
improve." (p. 366) and "the most effective learning requires a well-defined task with an
appropriate difficulty level for the particular individual, informative feedback, and
opportunities for repetition and corrections of errors." (p. 20-21) The book Cognition in
Practice: Mind, Mathematics, and Culture in Everyday Life is an interesting reference
for this viewpoint. Korean (John Hwang)
Talk with other programmers; read other programs. This is more important than any
book or training course.

If you want, put in four years at a college (or more at a graduate school). This will give Persian
you access to some jobs that require credentials, and it will give you a deeper (Mehdi Asgari)
understanding of the field, but if you don't enjoy school, you can (with some dedication)
get similar experience on your own or on the job. In any case, book learning alone won't
be enough. "Computer science education cannot make anybody an expert programmer
any more than studying brushes and pigment can make somebody an expert painter"
says Eric Raymond, author of The New Hacker's Dictionary. One of the best Polish
programmers I ever hired had only a High School degree; he's produced a lot of great (Kuba Nowak)
software, has his own news group, and made enough in stock options to buy his own
nightclub.

Work on projects with other programmers. Be the best programmer on some projects;
be the worst on some others. When you're the best, you get to test your abilities to lead a
Portuguese
project, and to inspire others with your vision. When you're the worst, you learn what
(Augusto Radtke)
the masters do, and you learn what they don't like to do (because they make you do it for
them).

Work on projects after other programmers. Understand a program written by someone


else. See what it takes to understand and fix it when the original programmers are not
around. Think about how to design your programs to make it easier for those who will Romanian
maintain them after you. (Ştefan Lazăr)

http://norvig.com/21-days.html 1/7
11/10/2018 Teach Yourself Programming in Ten Years

Learn at least a half dozen programming languages. Include one language that
emphasizes class abstractions (like Java or C++), one that emphasizes functional
abstraction (like Lisp or ML or Haskell), one that supports syntactic abstraction (like
Lisp), one that supports declarative specifications (like Prolog or C++ templates), and
one that emphasizes parallelism (like Clojure or Go). Russian
(Konstantin Ptitsyn)
Remember that there is a "computer" in "computer science". Know how long it takes
your computer to execute an instruction, fetch a word from memory (with and without a
cache miss), read consecutive words from disk, and seek to a new location on disk.
(Answers here.)
Serbian
Get involved in a language standardization effort. It could be the ANSI C++ (Lazar Kovacevic)
committee, or it could be deciding if your local coding style will have 2 or 4 space
indentation levels. Either way, you learn about what other people like in a language, how
deeply they feel so, and perhaps even a little about why they feel so.

Have the good sense to get off the language standardization effort as quickly as possible. Spanish
(Carlos Rueda)
With all that in mind, its questionable how far you can get just by book learning. Before my
first child was born, I read all the How To books, and still felt like a clueless novice. 30 Months
later, when my second child was due, did I go back to the books for a refresher? No. Instead, I
relied on my personal experience, which turned out to be far more useful and reassuring to me
than the thousands of pages written by experts. Slovak
Fred Brooks, in his essay No Silver Bullet identified a three-part plan for finding great software (Jan Waclawek)
designers:

1. Systematically identify top designers as early as possible.

2. Assign a career mentor to be responsible for the development of the prospect and Turkish
carefully keep a career file. (Çağıl Uluşahin)

3. Provide opportunities for growing designers to interact and stimulate each other.

This assumes that some people already have the qualities necessary for being a great designer;
the job is to properly coax them along. Alan Perlis put it more succinctly: "Everyone can be Ukranian
taught to sculpt: Michelangelo would have had to be taught how not to. So it is with the great (Oleksii
programmers". Perlis is saying that the greats have some internal quality that transcends their Molchanovskyi)
training. But where does the quality come from? Is it innate? Or do they develop it through
diligence? As Auguste Gusteau (the fictional chef in Ratatouille) puts it, "anyone can cook, but
only the fearless can be great." I think of it more as willingness to devote a large portion of
one's life to deliberative practice. But maybe fearless is a way to summarize that. Or, as
Gusteau's critic, Anton Ego, says: "Not everyone can become a great artist, but a great artist
can come from anywhere."

So go ahead and buy that Java/Ruby/Javascript/PHP book; you'll probably get some use out of
it. But you won't change your life, or your real overall expertise as a programmer in 24 hours
or 21 days. How about working hard to continually improve over 24 months? Well, now you're
starting to get somewhere...

References
Bloom, Benjamin (ed.) Developing Talent in Young People, Ballantine, 1985.

Brooks, Fred, No Silver Bullets, IEEE Computer, vol. 20, no. 4, 1987, p. 10-19.

Bryan, W.L. & Harter, N. "Studies on the telegraphic language: The acquisition of a hierarchy
of habits. Psychology Review, 1899, 8, 345-375

Hayes, John R., Complete Problem Solver Lawrence Erlbaum, 1989.

Chase, William G. & Simon, Herbert A. "Perception in Chess" Cognitive Psychology, 1973, 4,
55-81.

Lave, Jean, Cognition in Practice: Mind, Mathematics, and Culture in Everyday Life,
Cambridge University Press, 1988.

Answers
Approximate timing for various operations on a typical PC:

execute typical instruction 1/1,000,000,000 sec = 1 nanosec


fetch from L1 cache memory 0.5 nanosec
branch misprediction 5 nanosec
fetch from L2 cache memory 7 nanosec
Mutex lock/unlock 25 nanosec
fetch from main memory 100 nanosec
send 2K bytes over 1Gbps network 20,000 nanosec
read 1MB sequentially from memory 250,000 nanosec
fetch from new disk location (seek) 8,000,000 nanosec
read 1MB sequentially from disk 20,000,000 nanosec
send packet US to Europe and back 150 milliseconds = 150,000,000 nanosec

Appendix: Language Choice


Several people have asked what programming language they should learn first. There is no one
answer, but consider these points:

Use your friends. When asked "what operating system should I use, Windows, Unix, or
Mac?", my answer is usually: "use whatever your friends use." The advantage you get
from learning from your friends will offset any intrinsic difference between OS, or
between programming languages. Also consider your future friends: the community of
programmers that you will be a part of if you continue. Does your chosen language have
a large growing community or a small dying one? Are there books, web sites, and online
forums to get answers from? Do you like the people in those forums?
Keep it simple. Programming languages such as C++ and Java are designed for
professional development by large teams of experienced programmers who are
concerned about the run-time efficiency of their code. As a result, these languages have
complicated parts designed for these circumstances. You're concerned with learning to
program. You don't need that complication. You want a language that was designed to be
easy to learn and remember by a single new programmer.
Play. Which way would you rather learn to play the piano: the normal, interactive way,
in which you hear each note as soon as you hit a key, or "batch" mode, in which you
only hear the notes after you finish a whole song? Clearly, interactive mode makes
learning easier for the piano, and also for programming. Insist on a language with an
interactive mode and use it.

Given these criteria, my recommendations for a first programming language would be Python
or Scheme. Another choice is Javascript, not because it is perfectly well-designed for
beginners, but because there are so many online tutorials for it, such as Khan Academy's
tutorial. But your circumstances may vary, and there are other good choices. If your age is a

http://norvig.com/21-days.html 2/7
11/10/2018 Teach Yourself Programming in Ten Years

single-digit, you might prefer Alice or Squeak or Blockly (older learners might also enjoy
these). The important thing is that you choose and get started.

Appendix: Books and Other Resources


Several people have asked what books and web pages they should learn from. I repeat that
"book learning alone won't be enough" but I can recommend the following:

Scheme: Structure and Interpretation of Computer Programs (Abelson & Sussman) is


probably the best introduction to computer science, and it does teach programming as a
way of understanding the computer science. You can see online videos of lectures on
this book, as well as the complete text online. The book is challenging and will weed out
some people who perhaps could be successful with another approach.
Scheme: How to Design Programs (Felleisen et al.) is one of the best books on how to
actually design programs in an elegant and functional way.
Python: Python Programming: An Intro to CS (Zelle) is a good introduction using
Python.
Python: Several online tutorials are available at Python.org.
Oz: Concepts, Techniques, and Models of Computer Programming (Van Roy & Haridi)
is seen by some as the modern-day successor to Abelson & Sussman. It is a tour through
the big ideas of programming, covering a wider range than Abelson & Sussman while
being perhaps easier to read and follow. It uses a language, Oz, that is not widely known
but serves as a basis for learning other languages. <

Notes
T. Capey points out that the Complete Problem Solver page on Amazon now has the "Teach
Yourself Bengali in 21 days" and "Teach Yourself Grammar and Style" books under the
"Customers who shopped for this item also shopped for these items" section. I guess that a
large portion of the people who look at that book are coming from this page. Thanks to Ross
Cohen for help with Hippocrates.

Peter Norvig (Copyright 2001—2014)

141 Comments norvig.com 


1 Login

 Recommend 75 t Tweet f Share Sort by Best

Join the discussion…

LOG IN WITH
OR SIGN UP WITH DISQUS ?

Name

Eric-Wubbo Lameijer • 4 years ago ⚑ −


Thank you for this post! I was trying to help someone learning to program (though she does not plan to take only 24
hours for doing so...)
Two remarks content-wise though:

1) learning by doing is not necessarily the best or even the fastest way to learn, even though it definitely has its
place. If I would teach anyone programming, I'd strongly recommend to study and try to understand good code; this
would be the technique of 'worked examples'. So far, lots of 'worked examples' and a bit of problem solving seems
to be better than one example followed by lots of problem-solving. (see for example http://www.jstor.org/discov...

2) The 10-year rule (or 10.000-hour rule) very much depends on the field; it used to be about 6 years for painters,
but can be over 25 years for musicians. (Sternberg, Handbook of Creativity, around page 230) It tends to depend
mostly on the competition in the field - the author of 'Moonwalking with Einstein' became an US champion after
about 1 year of training!. Assuming that a majority of programmers work hard at deliberate practice (which I doubt), it
may indeed take 10 or 15 years to become a top programmer. But to be functionally literate and 'worth hiring' may
not require that many years. Besides, one could definitely ask who is a 'top programmer': someone who can write
code that is superbly simple and clear? Someone who can solve a complicated problem with a snazzy new
polynomial algorithm? Someone who can keep track of a project involving millions of lines of code? Someone who
knows hundreds of language functions and libraries? Someone who actually understands what a non-computer-
scientist customer is talking about and can transform it into a solution? Not all programmers will be equally good in
all of those things, being the 'best' programmer may therefore be like comparing apples and oranges.

For the rest, excellent post! It definitely contains material that I want to mull over some more...
75 △ ▽ • Reply • Share ›

jigar singh rathore > Eric-Wubbo Lameijer • 2 years ago − ⚑


And your comment just provided me the vision on what a good reading actually means. we should think
about not just accept it as the ultimate truth. add something according to your experiences throughout your
life. think before believing
5△ ▽ • Reply • Share ›

R3N0 > Eric-Wubbo Lameijer • 6 months ago ⚑ −


One could definitely ask who is a 'top programmer': someone who can write code that is superbly simple and
clear? Someone who can solve a complicated problem with a snazzy new polynomial algorithm? Someone
who can keep track of a project involving millions of lines of code? Someone who knows hundreds of
language functions and libraries? Someone who actually understands what a non-computer-scientist
customer is talking about and can transform it into a solution? Not all programmers will be equally good in all
of those things, being the 'best' programmer may therefore be like comparing apples and oranges.
- Eric-Wubbo Lameijer
1△ ▽ • Reply • Share ›

Sam G > R3N0 • a month ago − ⚑


Actually, a 'top programmer' is someone who truly can excel on a pretty significant subset of that list
(arguably all of it). Additionally, they are very quick learners (a necessary precondition in this field,
which evolves so quickly), and can communicate what they have learned to others in an effective
manner. Some of those are simply mandatory for someone who is going to be considered truly
'senior' in a team. The requirements for a particular position aren't likely to include all of those things
unless you are looking to hire the top dog for an entire department which is itself fairly immature and
in need of direction from the top for every aspect of their productivity, but anyone considered a world
class software engineer is likely going to be in the top percentile or two in any general-purpose aspect
of computer science plus at least a couple of specializations like machine learning or devops or
networking or whatever.

You'll certainly meet plenty of folks in senior roles who can't meet all of those prerequisites, and
sometimes not even any of them. They aren't a prerequisite for seniority, but they are a prerequisite
for truly being a world class talent. And people who can meet them all certainly do exist, so if you
aren't one of them, you aren't there yet, plain and simple. 'Top' is an adjective with actual meaning,
and it isn't just 'good enough.' That said, most companies aren't solving problems that necessarily
require that level of competence, either. Lots of those functions have been abstracted out into
frameworks tools and process that developers with less knowledge and experience can take some
http://norvig.com/21-days.html 3/7
11/10/2018 Teach Yourself Programming in Ten Years
frameworks, tools, and process that developers with less knowledge and experience can take some
advantage of without needing all of those years of experience. But then you'll often find the really
talented folks leading the effort to develop those kinds of frameworks and tools precisely because
they are the ones who are able to recognize the need for them and the value they'll provide.

In fact, recognizing where tools and process can reduce friction instead of adding it is very much one
of those necessary skills.
1△ ▽ • Reply • Share ›

Ciencia Da Computação > Sam G • 14 days ago − ⚑


Fantastic point, I couldn't have said it better myself.

The guy above you was really trying hard to make himself feel better about being another
average or just-above-average programmer.. It's a shame all that argument he made was
nothing but bullshit lol

"I'm not a top programmer so these top programmers must be unicorns"


"eVeRyboDy iS goOD aT sOMetHInG"

too much losers non-sense for me to handle...


△ ▽ • Reply • Share ›

Amit Jha • 4 years ago − ⚑


I am referring to AI book these days and its just amazing to come to these pages.
42 △ ▽ • Reply • Share ›

Fubin Hnust > Amit Jha • 3 months ago − ⚑


amazing
△ ▽ • Reply • Share ›

zejian ju • 4 years ago − ⚑


Great article, learn much from it, thank you very much!
33 △ ▽ • Reply • Share ›

dicksonagb • 4 years ago − ⚑


thanks for sharing this great article
34 △ ▽ • Reply • Share ›

ppolask • 4 years ago − ⚑


I have been wondering how to become a programmer in 21 days using these books, but this great article has
cleared my misconception of becoming a programmer in just over two weeks!!!.
10 △ ▽ • Reply • Share ›

Kirua • 4 years ago ⚑ −


Thank you. I've been interested in programming from very early ages (I suppose I'm still in my early ages, being only
13) mainly because my father is a programmer and I'm a pretty big gamer. Actually, It isn't just programming
languages that I've been interested in. I'm also very interested and motivated to learn different languages, such as
French, Spanish and Japanese (though I haven't quite gotten anywhere with them yet).

At first, my ideal was learning how to program Ruby, Python and Java within two or three years (not to the point of
mastering them, but to the point of me having a proper understanding of the language and being capable of using
the language in a way that doesn't scream "Novice!"). At first I was a little upset that it would take so long, but then
realized that within that ten years I'd still be programming. It isn't a matter of learning for ten years, THEN doing it.
It's a matter of learning as I go, for the period of ten years... and maybe even learning more after those ten years as
I go. Really, I've been interested in this kind of stuff since I was six or so, and even tried learning some really basic
stuff when I was (probably) nine. I'm thirteen now, and I've still been learning a few things. I could continue doing this
for ten years, becoming more adapt with different programming languages. I have a Dad and an Aunt who'd be
more then happy to help teach me some things long the way. I just need to spill in a lot more effort!

Much different to how I was thinking about this at first, I'm now much more motivated! I hope I'll keep to my word and
learn within these ten years. ^_^ (I apologize for my lack of knowledge when it comes to grammar, especially with
my misplacement of the words "Then" and "Than", they just confuse me far too much for me to bother learning how
to use them properly. Hopefully this useless comment of mine still makes sense.)
7△ ▽ • Reply • Share ›

G Nebs > Kirua • a year ago −⚑


You're very insightful. I'm exactly double your age and I found your post motivating and even though this was
a post written about your individual perspective I still found it to be enlightening. This post was not useless
and your grammar is fine.

Edit: I just realized your post was from 2 years ago. I guess I'm not double your age after all. :)
1△ ▽ • Reply • Share ›

Brian Adgermilk • 4 years ago − ⚑


I think you have just answered a huge life question in general.
5△ ▽ • Reply • Share ›

Stefano Scerra • 4 years ago − ⚑


A great essay, many truths in it
8△ ▽ • Reply • Share ›

TheTaoOfProgramming • 4 years ago ⚑−


Bullshit. You're putting a lot of people off programming. What if you can already program before you `learn`? Your
mind already works that way, and someone showing you the basics it just makes perfect sense and you're coding in
say 15 to 30 minutes. You'll probably not sleep that night, of excitement. Just absorbing the functions and APIs
methods just fit.
Ok there's tons to `learn` to memorize like a parrot - but, the basics are also very simple - and it all was built on
basic principles. It also makes sense as if someone has already done much the work for you to achieve your
creative ideas.
Programming is also un-learning, the tech changes very rapidly. Very humbling. Can be very theoretical and
mathematical. Philosophical. And very fun. An incredible field and science.
Some program like filling in a coloring book, the lines are already there. For some it is painting a blank canvas,
infinite.
So it takes 15 minutes, to 10,000 hours to a life-time, decades and you're still learning every day.
Oh, and to put in 10,000 hours into programming can be done in 2 years, even faster do the maths.
Kids master this. It can be as much taught as teaching someone to love.
There you go, don't take much of what people say for granted - you write the code, you write the rules you decide.
29 △ ▽ • Reply • Share ›

This comment is awaiting moderation. Show comment.


Joey Joeseph Michaels > Francesco Basenghi • 3 years ago ⚑ −


You obviously don't know who Peter Norvig is Maybe just Google the name for the sake of it I'm sure
http://norvig.com/21-days.html 4/7
11/10/2018 Teach Yourself Programming in Ten Years
You obviously don t know who Peter Norvig is. Maybe just Google the name for the sake of it. I m sure
you'll be enlightened even if just a little...
1△ ▽ • Reply • Share ›

yr2091 > Joey Joeseph Michaels • 3 years ago − ⚑


I hate people who appeal to authority. Great Article!
51 △ ▽ • Reply • Share ›

Eyjólfur Kári Friðþjófsson > Joey Joeseph Michaels • 3 years ago − ⚑


He was not talking about Peter Norvig. He was replying to TheTaoOfProgramming
4△ ▽ • Reply • Share ›

Francesco Basenghi > Eyjólfur Kári Friðþjófsson • 3 years ago − ⚑


thanks, sometime pointing out the obvious becomes necessity.
4△ ▽ • Reply • Share ›

dcofjapan > Francesco Basenghi • 3 years ago ⚑−


You missed the point of this entirely. While it's good to let people know coding isn't as easy as riding a
bike, people that deter others from doing what they want to do is wrong regardless. How many times
have I been told game or web development is some stupid pipe dream whether vocally or without
saying a word. People are doing both successfully whether freelance or working with an actual
company and degree or no degree. Will they be a pro in 30 days from reading a book meant for
beginners? No but it's a start.
△ ▽ • Reply • Share ›

Tour de France rider in 24H > dcofjapan • 2 years ago ⚑ −


The comparison to riding a bike is silly: becoming a proficient bicycle rider takes years of
dedicated practice. Sure, everyone with some practice can ride a bike in the park or maybe
commute to work, but that is the "hello world" equivalent of bicycling, or chapter 2 of any 24
hour programming book.
1△ ▽ • Reply • Share ›

Eric MacLeod > Francesco Basenghi • 3 years ago −⚑


I think he's just trying to help people get in to it, this article comes off very strong and you don't need
to be in the deep technical to be able to do some useful things with coding. You can't assume he's not
a programmer though.
△ ▽ • Reply • Share ›

aaronpeacock > Francesco Basenghi • 3 years ago ⚑−


I don't agree with your expressed sentiments. I really take issue with your first statement. No it's not
obvious, nor is it correct procedure for you to jump to this conclusion as a reaction to
TaoOfProgrammings expressed opinion. If anything, it shows that YOUR brain requires more
discipline and perhaps YOUR brain has a natural tendency to assert things it has no clue about.
(whether TaoOfProgramming is a programmer or not, which I would tend to assume is a possibility
until proven otherwise, especially given his/her name...)
In other news, appeal to authority is still a logical fallacy. One can certainly disagree with Peter Norvig
and still stand upright...
△ ▽ • Reply • Share ›

TheCreepyCrow > aaronpeacock • 3 years ago − ⚑


I'm guessing the reason he said that he is not a programmer is. Well
find one programmer that will ever say "What if you can already program
before you `learn`?" .... Find me anyone who can do something and its a
99.9% chance they'll never say, "Oh yeah, I just tried swimming and now
I'm a professional swimmer after 15 minutes", or a professional painter,
ect. You might understand the basics better then others, but becoming
proficient and effective with said tool or skill will take a long time,
no matter what it is or who you are. Then to top that off, people sell books by making people
think they can literally "Learn (any language) in 21 days!" I agree its good to get people into it.
But that could also be why so many people stop coding. When you realize you wont be coding
that game or making that impressive website in a month a lot of people become discouraged.

What I think the OP ment was that some people are more inclined to learn certain
things over others. I might be able to understand programming easier
than you, it could just click with me, but you can understand other things better than me.

oh
and 10,000 hours is 416 days and 16 hours.... so If you wanna get those
10,000 hours in two years isn't that like 15 or 16 hours per day 7 days
a week?
△ ▽ • Reply • Share ›

Marcel Valdez > TheCreepyCrow • 2 years ago − ⚑


To be honest, the first time I programmed at 13 years of age, it just clicked, it was as if
programming was the perfect vessel to express something I had in me.

As soon as I knew what the basic idea of programming is (series of instructions with flow
control) and did some examples, endless abstract ideas came to my mind and were
automatically converted into pseudo-code in my head, it was effortless and could not be
stopped.

I remember coming back to my father that day and telling him during dinner: "I can do anything
you can do" (he owned a software company, and no, he never sat down to teach me). Even
though I only knew two flow control mechanisms IF and JMP, I could not think of a problem
(lack of creativity probably) I could not solve with the tools I had (IF and JMP).

I've been stoked with programming ever since.

While I was not a master programmer at 13, learning a language's syntax and basic
functionality triggered a lifetime of coding. I am a 31-year-old software engineer now and plan
on being one for few more decades.

see more

△ ▽ • Reply • Share ›

rururu > TheTaoOfProgramming • 4 years ago − ⚑


I agree. Also I think the basic premise "a little learning is a dangerous thing" of this blog post is
flawed. Or does Peter Norvig think that teaching calculus in high school is
dangerous because most students don't become professional
mathematicians?
1△ ▽ • Reply • Share ›

Jono > rururu • 4 years ago − ⚑


http://norvig.com/21-days.html 5/7
11/10/2018 Teach Yourself Programming in Ten Years

Good rhetoric, bad logic. We have understanding in Math before we get to calculus, 12 years of it. We
also don't go out after grade 12 and get a job doing calculus. We don't go up to a business owner
(who may not know calculus, and can't evaluate our skills in it) and say "I know calculus!" I would say
your analogy is worse than wrong, its a lie.
3△ ▽ • Reply • Share ›

This comment is awaiting moderation. Show comment.


Jono > rururu • 3 years ago − ⚑


Exactly, and people psychologically do this so incredibly frequently. The less we know, the
more we believe we know. That is exactly the issue, so theoretically you may be right but in
reality it's totally wrong.
3△ ▽ • Reply • Share ›

Sillycibin > Jono • 3 years ago − ⚑


Right, people don't know enough to realize how much they don't know. When they know
something about an area or have a skill of some degree and they have a overly simplified
model of the domain they grossly overestimate their proficiency.
1△ ▽ • Reply • Share ›

Eric MacLeod > Sillycibin • 3 years ago ⚑ −


agreed, if you can do some nifty things in say python and you didn't learn much about how it
works under the hood you're in trouble when someone else's module breaks if you manged to
get a job in coding prematurely.
△ ▽ • Reply • Share ›

Anthony > rururu • 3 years ago − ⚑


The problem tends to be down to the fact that there's a lot of ways to achieve things Right
Now. Nothing wrong with this, but unless you're working with people who are self-aware
enough to realise that they're incurring a lot of technical debt and have the work environment
set up to pay it down at some point it does put at risk the codebase.

It's dangerous not in the sense that it'll kill anyone, but dangerous as in building a structure on
dodgy foundations. Maintenance costs ratchet up, and the cost of implementing new features
or shiny new cool things is prohibitive (or impossible)
1△ ▽ • Reply • Share ›

VP > TheTaoOfProgramming • 4 years ago ⚑ −


The part about 'not sleeping' certainly rings a bell, and i agree that you can think like a programmer even if
you arent one.
△ ▽ • Reply • Share ›

Kai Chen • 4 years ago ⚑ −


Thanks, Peter, for this awesome post! There are some great pointers to ways to practice that never occurred to me;
and I've been programming for almost 20 years and have always considered myself as conscientious about
improving my art.

Itzshak Stern has said 'Practice slowly' when asked what's the best way to learn to play the violin. That advice has
stuck to me for the last 3 months or so. It jumped to me again when I read your emphasis on _deliberate_ practice.
But even with full attention, it would take 10K hours -- ars longa indeed. On the other hand, the reward for long toil is
always greater than that for the genius who gets it right away. Not that I feel sorry for the genius. :)

p.s. Now about working on projects where one is the worst programmer ... any openings at Google right now? :)
4△ ▽ • Reply • Share ›

Vallabh Kansagara • 4 years ago − ⚑


this is the only way you find that what can a programming language can do !
3△ ▽ • Reply • Share ›

Gregory Tasonis • 3 years ago ⚑ −


A few ramblings from a middle aged tech guy. There is a reason why the very best books on the hard sciences are
usually decades old and why publishers will never go broke with "24 hours" books. Everything is built on a solid
foundation. Everything you learn needs to be actively integrated into your overall "information architecture" web of
understanding. Something I read, Feynman I believe but my memory isn't what it used to be, stuck with me. People
have difficulty with Physics because Physics is properly taught using the language of Mathematics. You can search
for book after book after book that uses prose to "explain things differently", but it's an impossible task.

In this context, "A little programming knowledge is a dangerous thing" means to me that a trivial understanding of a
single language's syntax isn't something you can build on to understand more complex problems than printing "Hello
World!". You don't need to know everything up front to begin, but you DO need to realize everything you're learning
initially is really miles deep. If you don't understand something, you're probably missing some pre-requisite and need
to figure out what you need to learn, learn it and integrate it into your web. That process is painful and difficult. Did I
mention it's painful? If you're not naturally gifted, I've found EE's tend to develop this talent...indeed it may be the
most important thing you ever learn.

Mr. Norvig makes two excellent suggestions that I wish I'd heard 20 years ago and would recommend to anyone
interested in CS. "Remember that there is a Computer in Computer Science". Read Horowitz and Hill's "The Art of
Electronics" from cover to cover. Then learn 6 or 7 programming languages that each exemplify a different type of
abstraction.

"May the road rise up to greet you, may the wind be always at your back, and may you be in Heaven an hour before
the Devil knows you're dead."
5△ ▽ • Reply • Share ›

chris94703 > Gregory Tasonis • 3 years ago − ⚑


Thank you.
1△ ▽ • Reply • Share ›

Mage Ona > Gregory Tasonis • a year ago − ⚑


Will you tell us why we should read "The Art of Electronics" from cover to cover. What good will it give?
△ ▽ • Reply • Share ›

Dipankar A. • 4 years ago ⚑ −


What u said is definitely true..But this site surely requires some 'CSS'..and that can be learnt in less than 21 days :D
5△ ▽ • Reply • Share ›

John Osinski • 4 years ago − ⚑


Thank you so much for this blog post, i first read it years ago and it holds a special place in my heart :)
2△ ▽ • Reply • Share ›

Rajkanwar Batra • 4 years ago − ⚑


You need 10 years to be an expert programmer but what if someone is just trying to put together a prototype?
http://norvig.com/21-days.html 6/7
11/10/2018 Teach Yourself Programming in Ten Years
You need 10 years to be an expert programmer but what if someone is just trying to put together a prototype?
2△ ▽ • Reply • Share ›

Eduardo > Rajkanwar Batra • 4 years ago − ⚑


...reads like "You need 10 years to be a surgeon but what if someone is just trying to open up a patient?"
50 △ ▽ • Reply • Share ›

rururu > Eduardo • 4 years ago ⚑ −


But you may be thankful if a mere paramedic can successfully perform a simple, life-saving surgical
procedure in emergency situations.

Also comparing programming with performing surgeries is like comparing apples with orang utans.
Many scientists write code regularly, but they didn't practice it for 10 years.
2△ ▽ • Reply • Share ›

Марк Сафронов > rururu • 3 years ago − ⚑


You what, think that person programming the controller for LHC, pacemaker, mine clearing
drone, robotic arm at a factory, doesn't have the same level of responsibility than the surgeon?
Programming the UI for GPS satellite control center? OF COURSE comparing programming
with performing surgeries is valid comparison, at least in terms of responsibility, depending on
the domain.
4△ ▽ • Reply • Share ›

rururu > Марк Сафронов • 3 years ago − ⚑


Yeah, depending on the domain. And that's why the comparison is not valid.
1△ ▽ • Reply • Share ›

Vance Feld > rururu • 5 months ago − ⚑


talk to any bioinformatician and they'll tell you most of the code is garbage one-offs.
1△ ▽ • Reply • Share ›

JTW > rururu • 3 years ago ⚑ −


that "mere paramedic" didn't learn his craft by reading a "how to perform a vasectomy in 24
hours". He actually spent several years in classroom training, then more time in what amounts
to apprenticeships, then more years working under close supervision by other paramedics,
doctors, and nurses, before being allowed to even touch a scalpel in the presence of a
patience.
1△ ▽ • Reply • Share ›

Aaron > JTW • 2 years ago −⚑


lol, no. A paramedic does about a year of training at a college. 6-7 months if it is an actual
academy, as evidenced by the U.S. Military's training like the SOCM course. Most paramedics
might get their hand hold for a few months, but that is it. When I was a 68W in the ARNG, I
could do crics, chest tubes, cut downs, etc after 5 weeks of "surgical" training.

That comparison was not all that valid. I do agree the title of this article should be ten years to
be a professional industry developer. I know several biophysicists that do
theoretical/computational work after CS1/CS2, perhaps a numerical analysis or comp physics
course, and a class or two that needed some coding in undergrad. After a year of grad work,
most can write highly effective programs/scripts for various tasks. That is maybe, at most, two
years of coding in UG work and 1-2 years of coding in grad work. Somehow they make
effective models. Is there code perfectly organized, the most efficient, and easily
maintainable? Depends on the person.
△ ▽ • Reply • Share ›

Mike Tamillow > Eduardo • 2 years ago − ⚑


No it doesn't, not at all. That is idiotic
1△ ▽ • Reply • Share ›

Load more comments

✉ Subscribe d Add Disqus to your siteAdd DisqusAdd 🔒 Disqus' Privacy PolicyPrivacy PolicyPrivacy

http://norvig.com/21-days.html 7/7

You might also like