11 ms·
Teach Yourself Programming in Ten Years (1998)
- zdgman 14y agoI 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 14y agoBut 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 14y agoIn 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.
- scrapcode 14y ago503.
- adamnemecek 14y agohttp://webcache.googleusercontent.com/search?q=cache:SHt7f6BhFjIJ:norvig.com/21-days.html+&cd=1&hl=en&ct=clnk&gl=us http://webcache.googleusercontent.com/search?q=cache:SHt7f6B...
- walid 14y agoRemove the "?" at the end of the link: http://norvig.com/21-days.html http://norvig.com/21-days.html
- keiferski 14y agoAs 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."
- deleted 14y ago[deleted]
- Androsynth 14y agoYou 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 14y agoAgreed on all accounts. This article is just often linked to on "I want to learn coding to build my startup" topics.
- nekopa 14y agoNorvig 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 https://news.ycombinator.com/item?id=3271866
- ibudiallo 14y agoOne thing to remember is that the author is not suggesting to learn for 10 years than you start to code. You can learn to code in 21 days then start your startup it will be very difficult and slow. But if you are dedicated and keep at it you will get somewhere. And 10 years into it you will be an expert.
- vxkr25 14y agoThough 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 14y ago> 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)
- Jabbles 14y agoIt's an arbitrary amount of time that relatively few people are able to dedicate to any skill. The rare people that do are known as "experts". But you won't be as "expert" as someone with 20,000 hours. IMO it's a tautological phrase based on your chosen definition of "expert". That's why I dislike it. Pilots' experience is often measured in hours. 10,000 is nothing special (10 years?), but to a lay person they sure know a lot about piloting, and at a dinner party I'd defer to them as an "expert" on anything to do with flying.
- deleted 14y ago[deleted]
- hluska 14y agoOne 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/readings/ericsson-charness-am-psychologist.pdf http://stuff.mit.edu/afs/athena.mit.edu/course/6/6.055/readi... 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-03-15-expertise/part2-dp.pdf http://www.cogsci.rpi.edu/~vekslv/classes/cogeng2010/lecture...
- star0zero 14y agoI've heard this figured bandied about quite often, as well, and I think it's mostly anecdotal and should be taken as a general rule rather than empirical fact.
- shubhamjain 14y agoWell, 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.
- ameister14 14y agoIf 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.
- ghettoeinstein 14y agoSelf-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.
- kbenson 14y agoDon't forget to intersperse that with random little projects that you start because you enjoy or want to fix something that bothers you. IMHO the programmer mindset has less to do with knowing exactly how to fix a problem than with "Hey, I bet I can fix that, and it probably wouldn't even be too hard!" (which are also famous last words, but you can ignore that :)
- deleted 14y ago[deleted]
- jisaacstone 14y agoI recommend The Little Schemer.
- viame 14y agoThis 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.
- Androsynth 14y agoRelevant 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 14y agoCan'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
- saintx 14y agoWhen 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 14y agoA 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.
- trevor-rollin 14y agoThat's a little pedantic, no? It's just a "catchy" title. He also notes that 10,000 hours might have been just as apt.
- trevor-rollin 14y agoOh wait, this is Hacker News. Pedantry is implied.
- SatvikBeri 14y agoCompletely 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 14y agoAn interesting implementation of the 'learn X in Y years/hours' concept is here: http://thedanplan.com 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.
- zzzeek 14y agoRight so, do we get to shrug off people with less than 10 years experience? Sure would end a lot of arguments.
- wonderzombie 14y agoIf 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-engineer/ http://www.kitchensoap.com/2012/10/25/on-being-a-senior-engi...
- zzzeek 14y agohaha, yeah im not looking to score points, just not waste time on things I know are wrong ;)
- pekk 14y agoGiven the way we shrug people off for using a language we don't like (or not seeming enough of a polyglot), being pessimistic, not working in the past few months, or any number of other silly things, I can't see how a bias against people with less than 10 years would really hurt matters much further.
- walid 14y agoLesson 1: Figure out why the URL isn't loading the required page. Hint: ?
- wavelander 14y agoAh. 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.
- davidroberts 14y agoIf 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.
- orangethirty 14y agoI started at age 7. I'm 34 now. Still learning, and still feeling like a noob. Can't get enough of this, though.
- walshemj 14y agoyep I can recall after a year or so at my first job I was considered a bit flash because I used mixed case in my FORTRAN hollerith statements just made the prompts look nice on our PDP11's In fact having basic prompts whit told the user what the next input was was an innovation I refactored some of the senior guys code to add prompts he was a bit sniffy. "i know what to type when " which is ok for an experiment at 3 foot scale but scaled up to 1:1 where filling the rigs tank cost 20K (about 1/2 the cost of a house at the time) making sure you didn't blow a run was more important.
- emiljbs 14y agoI started at 12 with C++, then I went over to 13 and learnt some Python, then I learnt Lisp at 16 and that's when I started to actually learn programming. I know this sounds like a "lel Lisp is superior to your blub lang" but it's more of a "I actually went past procedural programming and stupid OO with Lisp and it felt like I finally actually knew something about the stuff I did". Dunno why I'm typing this out though, oh what the heck, posting it anyway.
- yen223 14y agoI 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 14y agoI 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.
- stared 14y ago"Teach Yourself C++ in 21 Days" http://abstrusegoose.com/249 http://abstrusegoose.com/249
- michaelwww 14y agoI'd like to meet the person who would buy a book titled "Teach yourself computer programming in 10 years."
- thenduks 14y agoThe books that don't claim to teach you in 24 hours/21 days/etc are the 'teach yourself in 10 years' books :)
- michaelwww 14y agoTrue, but I mean specifically titled that. Such a person might be particularly earnest and focused and might be worth talking to. Or an idiot.
- charlieflowers 14y agoI would, especially if it were written by Peter Norvig.
- michaelwww 14y agoI await it's publication and sales figures.
- jmmcd 14y agoHow about "Learn Python the Hard Way"?
- nekopa 14y agoWell according to my wrestling with it, that book is out and called "The Art of Computer Programming" by don knuth.
- n33 14y agoAlso see - "A Discipline of Programming" by Edsger W. Dijkstra http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkstra/dp/013215871X http://www.amazon.com/Discipline-Programming-Edsger-W-Dijkst...
- kayman 14y agoIt's like sports. You can learn to play any sport in a few hours. But to be good at it, you have to practice.
- sn0v 14y agoUm, 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.
- wahnfrieden 14y agoYeah hence the ? to get around URL dupe detection :p
- yen223 14y agoHN 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.
- igravious 14y agoIsn'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) http://en.wikipedia.org/wiki/10000_(number)
- gehar 14y agoWhy is that a reason to not take it serious? It's an order-of-magnitude estimate, like Carl Sagan's "billions and billions" of stars, or the Bible's "40"
- jotux 14y agoAfter reading Outliers I think of 10000 hours as approximately five years of full-time work, which is a much easier quantity to think about.
- davidp 14y agoSuch a rule-of-thumb needs a crucial caveat (said by others better than I'll say it here): You need N years of steadily, deliberately advancing full-time work. There's a fundamental difference between gaining 10 years of experience, and gaining 1 year of experience 10 times. It's harder than one might think to sustain continual real advancement over such a period; generally the employer paying the bills needs us to occasionally "take one for the team" and do scut-work for a while, simply due to normal business unpredictability; or the work dries up completely and you have a hiccup while you start somewhere new. A source of work where opportunity continuously keeps up with ability is a precious thing.
- 14y ago
- ValentineC 14y agoOther discussions on the same article: http://news.ycombinator.com/item?id=43243 http://news.ycombinator.com/item?id=43243 http://news.ycombinator.com/item?id=3439772 http://news.ycombinator.com/item?id=3439772
- klrr 14y agoStill some learn it before they're even 15.
- alpb 14y ago(2001) should be added to the title on HN. It is quite interesting to see things just get reposted again and again.
- theltrj 14y agoI 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 14y ago“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?
- pekk 14y agoIt 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
- riggins 14y agoregarding 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 14y agoI'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.
- smj2118 14y agoHow did Norvig know about Ratatouille 6 years before it came out?
- kamaal 14y agoTip: 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.
- Tycho 14y agoThe 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 14y agolink: http://www.starling-software.com/employment/programmer-competency-matrix.html http://www.starling-software.com/employment/programmer-compe...