Teach Yourself Programming in Ten Years
Teach Yourself Programming in Ten Years
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.
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).
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:
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
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:
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.
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.
LOG IN WITH
OR SIGN UP WITH DISQUS ?
Name
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 ›
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 ›
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
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 ›
Edit: I just realized your post was from 2 years ago. I guess I'm not double your age after all. :)
1△ ▽ • Reply • Share ›
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 ›
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).
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 ›
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 ›
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 ›
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 ›
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 ›
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 ›
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 ›
✉ Subscribe d Add Disqus to your siteAdd DisqusAdd 🔒 Disqus' Privacy PolicyPrivacy PolicyPrivacy
http://norvig.com/21-days.html 7/7