
Teach Yourself Programming in Ten Years (1998) - tinderliker
http://norvig.com/21-days.html
======
blackSnake
I can relate to it through the lens of Karate. I've been studying just about
10 years and I'm just beginning to see the depth of the art. Its almost like
you spend those 10 years building the foundation before you can start building
the house.

One of the points in the article really jumps out and again, I use martial
arts as a lens for comparison. Talking to other programmers extensively
accelerates your growth. If I had tried to piece together the knowledge my
Sensei taught me through "Youtube, books, & self-study", I would have not
gotten as far as I have. There's something about having a mentor that can
warp-speed your progress. Anyone who has mentored under a master in their
field would attest to that.

The programming culture is one where you're encouraged to go out and figure it
out. Yes, there are teams and pair programming but I don't see most companies
emphasizing mentorship as much because its not directly tangible on the books.
Its more of a long-term investment and they see employees jumping around every
couple of years, so why bother?

It would be interesting to see master programmers (30+ years of exp) offer
year-long intensives for serious students who wanted to accelerate their
growth. I bet you would get some excellent programmers.

~~~
ruraljuror
I believe Kent Beck does a mentorship program like this at Facebook.

~~~
Barrin92
The F# foundation also has a mentorship program for people that is free iirc.

~~~
ultrasounder
Thank You a zillion!. I followed along, got a free membership and am chatting
with their helpful community on slack. Their Feb Mentoring program is closed
but they have another one coming up for September cohort. All in all looks
promising.

------
bitexploder
Old but good. I have been seeing an interesting discussion around project
based learning vs. more formal CS type program lately. As a self taught
programmer who got started and became passionate about technology because of
MUDs I can confirm project based learning worked well for me. It kept me
engaged and pushed me to solve hard problems I might not have ever tried to
otherwise solve.

So, to me, making programming interesting is one of the keys. I know I have a
common learning and work style that heavily favors the experiential and
interactive. Other promgrammers I have worked with can Zen focus and design
for days before touching code. I can't. I like to interact, prototype, outline
with code, think in smaller bursts, and then iterate. I have learned to be
more patient over the years, but that is still my default paradigm.

I think I generally agree with Norvig here. Most of the criticism of his
article is misplaced. He isn't saying you should only learn to program in 10
years, but that it is a hard discipline with immense depth.

------
bungie4
According to the owner of this company, it takes at least 3 days for somebody
with absolutely no computer skills to learn programming. Apparently its the
career path of choice for telephone operators in a call center.

What is funny, after programming professionally for about 30 years, Is I want
that job in the call center answering telephones. Even more ironic, it takes 1
month of intensive training to do that job.

~~~
PerryCox
Having worked in a call center for 3 years I can assure you it doesn't take 1
month of intensive training. It takes a variable amount of time to get up to
speed depending on how much you are asked to think.

In some call centers, you will be following a script about 90% of the time and
that takes very little training. In others you actually have to think and
troubleshoot issues, those take a bit more time to get up to speed on.

All that being said, I can assure you that you do not want to work at a call
center. I'd take whatever programming job you currently have over the call
center I last worked at. For whatever reason, call centers attract the worst
kinds of managers in this day and age.

------
kelukelugames
I entered the work force in 2009. This year is the first time I feel like I
know wtf I am doing.

~~~
blueside
Don't worry, that feeling will pass and you'll feel like an imposter again in
no time.

------
mseebach
Already in the first few lines of the article, there's a reference to a
post-1998 date, so I started wondering about the veracity of the (1998).
There's no clear reference to the original publication date, buy plenty of
references to dates much later - the copyright notice says 2001-2014.

But, lo and behold:
[https://web.archive.org/web/19980206223800/http://norvig.com...](https://web.archive.org/web/19980206223800/http://norvig.com/21-days.html)

It's a very different article, but at the core, it's the very same idea.
Pretty fascinating that it apparently has been "ghost-edited" to stay current.

------
mdwhatcott
It was about 10 years ago that I read Norvig's "10 years" post:
[https://michaelwhatcott.com/10-years/](https://michaelwhatcott.com/10-years/)

------
dang
Many previous discussions at
[https://hn.algolia.com/?query=Teach%20Yourself%20Programming...](https://hn.algolia.com/?query=Teach%20Yourself%20Programming%20in%20Ten%20Years%20points%3E10&sort=byDate&dateRange=all&type=story&storyText=false&prefix=false&page=0).

------
SatvikBeri
Last year was the first time I managed to write some code that didn't
obviously suck. It was great! (And about 9 years after I started.)

Though still, 95% of the time, I walk away from my check-ins feeling like my
code could be a lot better, but not seeing how until much later.

------
austincheney
How can this be from '98 when it mentions Malcolm Gladwell and someone's death
year as 2004?

~~~
nsgoetz
And it mentions Go which I believe was invented in 2009. It was on the site
previously as 2001 which also seems wrong
[https://news.ycombinator.com/item?id=3439772](https://news.ycombinator.com/item?id=3439772)
. Maybe it is just being updated.

------
komali2
I must be blind, I'm not seeing where this was written in 1998? I see some
couple-year-old comments. I only ask because I was going to express surprise
that the Amazon links still work.

Does the (1998) in the title maybe not mean it was written in 1998?

~~~
mxschumacher
use "view source" and see the fourth line: "Changed by: Peter Norvig,
13-Jul-1998"

~~~
ratzkewatzke
Clojure was built in 2007, so it's clear there have been some changes.

------
nurettin
>> branch misprediction: 5 nanosec

Turns out it was a lot more than just "5 nanosec".

------
alant
Old post but a classic one. Reminds me of the 10,000 hour rule of gladwell’s
book outliers

------
voidhorse
Great article. I think programming is a discipline that's especially
susceptible to ineffective learning approaches because it's intimately bound
up with utility. Part of this stems from the fact that we're not yet at the
point where it's learned ubiquitously at a young age.

For example, compare programming pedagogy to the typical way in which children
are taught to read. We begin learning to read at such a young age that the
actually utility of reading is more or less completely factored out of the
equation--we go to school, reading is a part of what we do there, and so we
sort of just accept that and spend a great deal of time engaging in the
activity intimately--exploring its nooks and crannies, playing with it,
joking, discussing it with classmates. In the case of programming on the other
hand, a lot of autodidacts have selected the discipline not for any love of
the game (of course there are _several_ who do have a genuine love for it) but
rather for some perceived use-value it provides. For example, if I learn to
program I can get a better job, or I can offload some menial task, or I can
ultimately do some other thing that happens to require programming (e.g.
making a video game is what I _really_ want to do, and if I have to learn to
program to do so, so be it). This sort of utilitarian frame makes it very easy
to engage in behavior that frustrates learning--reading for information only,
rushing through material, copying and pasting examples, seeking out solutions
to exercises when stuck rather than exploring and working through them. In
general it's much harder to be a good learner if you've attached some ulterior
motive to your learning activity.

There's a lovely German word Mitgefuhl, which is often translated as
compassion but literally means "feeling with". I think it's a fundamental
concept underlying a great deal of successful human endeavors--just as you
need to exercise compassion in order to really understand someone's emotions
or perspective, I think there's a lot of merit to dwelling with, or, as
ancient monks practiced, ruminating (chewing the words) intellectual material.
Taking one's time is important, as is checking in periodically to ensure
you're still consuming things consciously. When I read a book, no matter its
subject, I like to imagine I've signed a lease to rent out an apartment with
its author--to really get to know the consciousness behind the words--not in
any psychological sense, but in a purely epistemic one, to achieve a better
understanding--to learn how myself and this consciousness might live in
harmony, to imagine conversations--to 'feel with.'

As someone who is self-taught when it comes to programming myself (and still
has an incredible amount to learn) I can say my own experience of learning and
the rate at which concepts solidified definitely increased once I broke my
interest in the practice free from any concern over utility and decided it was
simply something I found _interesting_ \--something I valued irrespective of
its practical application.

------
zelah
good link - thanks

------
dreamygeek
10 years is a bit too much don't you think. I mean comparing 24 hours or 21
days with 10 years is highly demotivating. I think 1 year or 6 months would
still be an inviting title and it's not that farfetched. I've seen people
become good with a programming language in lesser times than a year.

~~~
thanatropism
I don't think Norvig is too worried about giving pep rallies.

At any rate: lately I've been having to interact at work with some folks from
another company whose entire outlook of what "programming" is revolves around
web CRUD stuff and some interactive-looking front-end... web stuff. So "I
learned some new programming skills" to them is closer to "I learned how to
make an HTML5 caroussel using jquery and Laravel" than "I learned how to
calculate road distances using GIS LineStrings and Djikstra's algorithm".
Their whole world looks like a CMS. There's a threshold of "meta" they cannot
cross.

I think this is both why PHP is so popular and so despised: it attracts people
who wouldn't be able to grok concepts at a higher level of abstraction (say,
Python @decorators) so they don't need it. PHP -- and really, Laravel,
whatever _that_ is -- is all they need.

~~~
Anthony-G
As a system administrator, I’m regularly amazed by the number of web
developers who have little or no understanding of HTTP, the protocol that
underlies the bulk of their work. Many don’t know even know what a transport
protocol is in the first place. They know that most form submissions (or AJAX
requests) should be POST and that some can be GET but they don’t know that
these are HTTP _methods_.

I’ve had to teach quite a few people the basics of HTTP: a user-agent makes a
request and a server replies with a response, that both requests and responses
are composed of a header and an (optional) body, and some of the important
information that might be included in the headers (cookies, character
encoding, caching information, etc.).

