The author got the 10,000 hours-rule slightly wrong. :)
It's not as simple as merely doing something for 10,000 hours and then you magically become an expert.
The 10,000 hours-rules refers to the act of performing 10,000 hours of "deliberate practice" (or sometimes called "deep practice") in order to become an expert.
And that's something very different to simply code 10,000 hours in your day job.
When googling for that term, you'll find plenty of studies and other resources. :)
If you are interested in this topic, I can recommend the book "The Talent Code" by Daniel Coyle - yes, the title is cheesy but it's a good book, I've read it in pretty much one sitting. A gentle and entertaining introduction into the whole field of how to become an expert.
"Pragmatic Thinking and Learning: Refactor Your Wetware" by Andy Hunt also spends an whole chapter on deliberate practice.
It's a very good book, too.
EDIT:
This blog post by Derek Sivers could be considered as an example of deliberate practice:
http://sivers.org/kimo
Just stumbled about it as a submission to HN, nice coincidence... :D
I'm tired of seeing the 10,000 hours everywhere, there are so many counter-examples I have no idea why anyone buys it.
It doesn't take 10,000 hours to become a master striker in football, they are all young and the older you get, the worse you get. Does it take 10,000 hours to write master songs? No. Look at virtually any modern band. Not many people go through the same gruelling tours as the Beatles did before success.
Also, to pretend the complexity of the task has no bearing on the hours it will take to master it is nonsense.
You don't need 10,000 hours in virtually anything to be an expert. 10,000 hours to be a master of tic-tac-toe? No. Does it take 10,000 hours to become an expert coin-flipper? No. An expert dish washer? An expert waiter?
I also have take umbrage with the word expert. I think if anything it should be something like virtuoso, an exceptional ability, not just an expert. All of the examples I've seen used are people with exceptional abilities, not mere experts.
Ach, I don't know why I get so annoyed at it, it just seems to me that it's trotted out for totally inane lists like this one all the time.
> You don't need 10,000 hours in virtually anything to be an expert. 10,000 hours to be a master of tic-tac-toe? No. Does it take 10,000 hours to become an expert coin-flipper? No. An expert dish washer? An expert waiter?
I agree with your point, but these examples are flawed. The "fields" of tic-tac-toe, coin-flipping and dish washing are insufficiently complicated that it makes sense to talk about being an expert in them.
Waitering, on the other hand, is definitely an art. Sure, anyone can, with a minimum of training, take an order and put a plate of food in front of a customer. Knowing all details about all dishes on the menu in a fine a-la-carte restaurant, being able to remember an entire tables orders, deducing taste and matching wines from a huge wine list, keeping an eye on everything and understand the timing, so dishes are served and glasses filled exactly when the customer expects it -- and, by the way, doing this for maybe 5-6 tables simultaneously for 6-8 hours straight, on your feet, without missing a beat -- that takes years and years of hard practice.
> It doesn't take 10,000 hours to become a master striker in football
Wrong. 25 hrs / week * 50 weeks / year = 1250 hours. So 8 years of football = 10k hours. Most pro strikers have been playing since they were 8y/o; by 16y/o, they have acquired their 10k hours.
I think it's the other way around - 10k hours doesn't really get you to true mastery - it's more like 50-100k hours.
As Mas Oyama, founder of Kyokushin Karate, once said: "After 1000 days (=10k hours), you are a beginner. After 10,000 days (=100k hours), you are a master."
Wow, a single post where football, the Beatles, coin-flipping, dish-washing, waitering and the implied programming ... appear together.
> Look at virtually any modern band
If modern bands don't have to practice so much to be famous, that says so much more about their quality and the record labels that promote them.
And I don't see any "modern band" being as popular and as eternal as the Beatles. Michael Jackson was close, but he wasn't exactly known for his quick and painless path to success.
I think the point I'm trying to make is that they can write high quality songs at the beginning of their career as well as at the end. They didn't need 10,000 hours to come up with a great song, an expert quality song. I bet many had only written 20-30 songs before getting famous, certainly nowhere near 10,000 hours of song writing. You even get bands which then fall into mediocrity after a fantastic debut.
I have no doubt they put in hours beforehand, but they've been at school, certainly not playing for 3 hours a day for 10 years.
Not only that they have some mastery of the instruments, song writing, stage charisma, all distinct skills. Many great guitarists write crap songs.
So where did they get the 30 years to get all 3 skills?
I think the Beatles example is bad because they had an extra skill, the ability to morph their music with the times that many other bands don't (Bowie is another example of someone who was able to do this). They are eternal because they constantly changed, put out great albums, which has nothing to do with the 10,000 hours of practice they put in in Germany.
I'd agree with you. You can be talented and create a hit early on. I think one of the points of the 10,000 hours thing, is that you have to be really dedicated to a pursuit to become an expert/top percentile in your field.
Innate talent is another requirement and will slow you down or speed you up, but I would doubt that you find any experts who are not greatly committed to their field (even if they hadn't dedicated 10,000 hours to it yet, they fully expect to).
And I don't see any "modern band" being as popular and as eternal as the Beatles. Michael Jackson was close, but he wasn't exactly known for his quick and painless path to success.
Michael Jackson was more than just close, he achieved it.
The Beatles sold more albums than Michael Jackson, they had more successfully released albums to begin with (eight vs five), they had more nr. 1 singles in the US/UK, their hits stayed longer in the #1 position ... and the Beatles were active for eight years, certainly shorter than Jackson's career which is longer than 20 years.
Not that it matters much ... Michael Jackson's albums are here to stay.
I was just saying that to be great (instead of just acceptable) ... you have to put a whole lot of effort into it. For instance I haven't heard of a single great gymnast who hasn't practiced until every muscle in his/her body was pushed well beyond limits. I actually heard of a few cases where people have passed out, out of sheer exhaustion.
So you're born with a natural talent ... but so are many other people. What makes you stand out is the effort you're putting in achieving your goals.
First, to be clear, I agree with your main point ... I'm just arguing off-topic about Jackson vs. The Beatles. :)
Second, these minor differences between the two are not relevant ... they amount to nit-picking. My point is that they Michael Jackson and The Beatles are in the same equivalence class. Who sold more records or whatever really isn't particularly important.
Actually, I do agree that this number is kinda arbitrary and it of course depends on the field you want to become master in.
But that doesn't matter, the important point is that you perform deliberate practice.
If you look at any expert/master/virtuoso in a given field, you will notice that they did just that, the more complicated the field the more hours they put into it to master.
You seem to tend to believe that virtuosos aren't made but born, ie nature vs. nurture. I think that practice plays a much more important role. That is, a natural disposition maybe be a necessary but not the sufficient condition.
Really, read that book "Talent Code" I think it's better suited to get that point across. :)
As to #6—software engineering, at a sort of medium level, is mostly object-oriented. At a high level, when talking about how to parallelize and scale, it's more relational, and at a low level, when designing algorithms, it's first very functional and mathematical, then when optimizing them, very imperative. OOP is only really done to figure out what you're building; once you know that, figuring out how you'll build it isn't necessarily OOP at all.
Agreed, at the end of the day, Programming is just structures and functions that operate on those structures. Languages like Java tell you that's a "class" and do some extra nice book-keeping to make it much more clear to say dog.bark() (as opposed to, for example, dog->bark(dog) as you might do in C), but there's really nothing super fundamental about it.
I've been programming for almost 20
years now (some of that in school), and just recently began exploring web programming (started looking at php over the summer).
I found the information helpful, even though I can code pretty massive simulations with complex algorithms in C++ for a desktop environment, I couldn't build simple ruby/rails apps. Slowly learning about the fundamentals of persistent web databases (migrations), http restful I/o, and many languages for data access and views on that data (HTML,php,JavaScript,java,scala/lift,ruby/rails,python/django, along with many APIs). This is probably going to take me more than 10k more hours to learn well.
I don't know about that. Three years ago, my entire programming career had been spent in Swing apps and utility scripting. I only started on Rails to be able to sell my Swing app better, and only started to get into SQL, Javascript, and all the rest of the rabbit hole as my business (and day job) required me to. Thats, hmm, about 7 kilo-hours as an upper bound if you assume that all of my day job and business time goes into web programming, which is very, very far from the case.
Mostly good advice, but the 10,000-hours-until-you're-an-expert meme bothers me. First, not everything is equally difficult. Playing the violin is harder than knitting.
Also, being an expert programmer suggests that you've levelled out, that you've reached a permanent high plateau. There is no plateau. It's a slope all the way to infinity.
If you find you've reached a plateau, shift gears and change to a more abstract programming language.
I'm at 30,000 hours, and I'm not an expert programmer. I'm still learning every day, and I like it!
This scares me. I can relate to the OP in that I denied my interest technology until my twenties until finally embracing it. Evidently, we're both looking to up our game and become better programmers. However, a few of his points are really... concerning.
"Great code is easy to read"
Not at all. JWZ's code challenges me; heck, some of the Rails code baffles me until I sit down and think carefully. A lot of code can be unintuitive to the uninitiated and still be great.
"Use github."
Seems awfully narrowly scoped. Using SCM is undeniably beneficial, but using it to become a "master programmer" seems a bit misguided, like becoming a master hammer swinger will make me a master finishing carpenter.
"Code is surprisingly more like English than like math."
Ruby? Very little code I've read would be understandable if read out loud.
"Learn Linux."
Well, maybe. OP must be a web dev who grew up on Windows (like me). I don't understand how memorizing a series of command line switches will help anyone master programming. While understanding pipes, regexes, ACL, etc... is undeniably useful, there must be better approaches than "learning Linux."
All that said, I must give kudos to the OP. I'd like to master programming, too. I have no formal CS education, I get lost when spelunking through big code bases, I need to "learn Linux." But it seems to me that a better approach is needed.
The most intriguing part of the post was this comment:
"You will read and learn more from a good $30 paperback book than dozens of free blogs."
I'm really curious about this. Does this hold true for anyone else? Are books about design patterns really more beneficial than reading the jQuery (par example) source? Dozens of times more useful?
In all seriousness, I highly recommend the Head First series of books. They read so much smoother than other large reference/learning books.
As for Design Patterns, the value in that was not that I learned any specific patterns, but rather that it got me to analyze software design in a systematic way rather than a "I like this" way.
Maybe it should have been "make it as simple to read as possible, but no simpler."?
>"Use github."
>Seems awfully narrowly scoped
It is narrowly scoped. The thing I've witnessed with newbies and SCM, is that they are so intimated by it they never get in the habit of using it(until they go to a good shop that uses it). But it takes 1 minutes to sign up for github. And 1 hour of typing "git commit, git add, git init, git push" etc to master the basics. Then building upon that knowledge is easy. But just getting started with SCM is the hardest part, imo.
> "Code is surprisingly more like English than like math."
Kind of the same point as earlier ("clear as possible, but no clearer").
My linux advice was pretty weak, I got some good emails suggesting it should have been more specific, and I agree with that. I should have said "Learn key linux programs". pipes, regexes, vim, etc.
I do agree that in terms of getting people excited about SCM, github is the way to go. And helping a dev enjoy SCM and getting them involved with the community through forks and patches certainly will making them a better programmer. So, fair point on that one.
When you love it, you pass on the other stuff to do it. You buy the books and read them purely out of your own interest. You take on projects you don't have time for because they're too damn cool to pass up. Most importantly, you talk to your friends about it all the time, because it's what's on your mind and it's what you want their opinions on.
And guess what, that's not just a "Programming" thing.
Oh, good Lord, no. If I had a nickel for every hard-slogging, monomaniacal, talentless writer, poet, painter, actor, singer, musician -- and yes, programmer* -- I'd met in this life, I'd probably have more than enough money for a down payment on a house I couldn't possibly afford to live in. Love isn't enough. Love and study together aren't enough. Love, study and application aren't enough. Love, study, aplication and diligent practice aren't enough either -- one may be able to elevate himself above equally apt colleagues, but actual aptitude counts for a lot. As does the ability and willingness to realise that most people (and therefore, probably, himself) are merely adequate to the task.
*Okay, there's a difference between self-deluded artistes and self-deluded programmers. Artistes can always claim to be before their time, misunderstood, and operating on a whole different spiritual plane. Programmers need, at a minimum, to create something that works in order to claim any success or ability at all. A real genioid can produce code good enough to receive "Works on My Machine" certification, and that can be proven to scale to five or more "simultaneous" users (depending on how many automated virtual machines he can get to hit the server from his laptop, his workstation, and that old Pentium II in the basement).
He missed: Learn how to read code, and read lots of it.
Also: Find someone who knows how to debug, and sit next to them for an hour or two while they tear apart a problem, fix it, and make sure it's solved. I've had a couple of tough sessions with world-class debuggers, and learned an amazing amount in a very short while.
some more:
unit testing - annoyingly rather handy, had a good argument about why it's better not to use it, well I use it, I lost that argument but gained a lot.
design patterns
open source projects - a great benefit to your skills, there's something that needs kicking for any level.
learn why it's handy to use version control rather then just use it (tip - it's because if something borks can roll it back a lot easier)
linux - not just learn it, know it. bash scripting, piping commands and expect all have saved me multiple hours
rss - handy
Thank you. This comes at the right time for me. I have been trying to learn programming for a long time but i never get past simple console programs. I also suck horribly at math which is a major cause of embarrassment from middle school to college. Lately i am trying to make up for lost time by starting to learn again. Programming as well as mathematics. I can't afford to buy too many books. So i am relying on torrents/wikibooks/carlh on reddit for now. Progress has been excruciatingly slow and painful. But this gives me hope. Thanks a lot.
Same here. I want to reach a level where computer technology is a tool in my hand that I can wield skillfully to accomplish any computer related application.
I'm currently reading "How to write a lot" from Paul J. Silvia, where he is saying that you shouldn't try to find time for writing, but you should allocate time for writing and start doing it.
This is very similar to this Tip #1, take your calendar, find a sport where you have time each week and allocate this time to coding (or to learn coding, you are also allowed to read books about coding in this time, or do your research regarding coding, etc. - but whatever you do, it should be relevant for coding).
Can somebody enlighted me why my comment shows up only when I am logged into my account? It doesn't show when I am logged out or when I am logged in from another account. Is this a bug, or, what?
Details:
http://walkie-the-talkie.blogspot.com/2009/12/hacker-news-us...
I am posting here because I don't know where else to post.
I boot-time scanned my entire computer which ruled out virus infestation. Since I have only recently started using this IP address (4 months), I am guessing that the person using this IP address before me may have either been a spammer or may have had an infected system. I don't think it is because I goofed up in some way.
So will this IP be blocked from HN for eternity? Shouldn't HN take into consideration that my account from which the comment was posted is older than a year with frequent activity throughout? (Mainly upvotes on submissions and comments) -and without any history of spamming or any wrongdoing?
I would very much like to participate in the HN community. I request you to allow this IP address.
Can somebody enlighted me why my comment shows up only when I am logged into my account? It doesn't show when I am logged out or when I am logged in from another account. Is this a bug, or, what?
Details:
http://walkie-the-talkie.blogspot.com/2009/12/hacker-news-us...
This is weird. Even my complaints are not showing when I am not logged in. Is there any body there listening to me? The link to my comment does not work when I am logged out. It gives the message: parent [dead] . But the same link works when I am logged in. What is going on?
"Something that you’ll spend 5 hours panicking to learn will take them 2 minutes to explain to you."
I disagree with the mentor one. The Internet has always provided faster better and more complete answers than the "ask a co-worker" method, for me anyways.
From someone that is 100% self-taught I can say from experience that its more an issue of "you don't know what you don't know. This is the major crux of self-learning. How can google possibly help you if you don't know how to frame the problem or even what terms are involved in whatever it is you want to learn? One example I remember was learning about database optimization; how do I know to search for "normalization" if I don't know what normalization is? So of course getting answers from google is super-fast, but that entails that you know what to search for.
My first experience with "coding" was trying to make a website for my tshirt printing business. I spent literally 12 hours a day for 10 days learning css and html and I loved it. So I coded about 10 pages for my website. Naturally I just copied and pasted the layout and menus and common stuff over and over throughout all pages. Finally on the 11th day, through a random search for something I don't remember, I stumbled upon this concept of "include_once" where you could create your website in this "templated" style. You just put "include_once(header)" and then includ_once(footer) and you didn't need to constantly duplicate everything. But it was in some language called php so that entailed that i start googling "php" ...
So you see, a 5 minute talk with a guy that knew about coding websites could have quickly briefed me about the differences between client-side and server-side languages, and why and how to use them. Could have told me to start with a framework like kohana rather than write spahgetti-rific code for the first 3 years of my coding hobby. Could have told me about using things like jquery for quick js development (and why and how js is appropriate). Yes yes, expert "crash courses" are definitely valuable.
Note: I tend to disagree with the term "self-taught". Plenty of people have taught me, it just has not been in a classroom environment. I have learned endlessly from the great teachers that write books, code open-source and take the time out to answer forum posts- so I'm not self-taught, its more like self-motivated.
I can see in your case where you are really just beginning so nearly anyone you talk to is going to have a approximately correct answer to your question but once you reach a certain point where you know the basics I'd argue that it will be much harder to answer your questions by simply asking those around you. You are also perhaps not asking Google the right questions. because I just did a search for "optimize MySQL Database" and the first heading of the first result that popped up was titled "normalize" so I stand by my claim that I prefer searching over asking by default.
but have you ever been on the other side? seems like people ask, you explain the right way, they look at you like you're speaking greek, and go back to copy + pasting...
in other words, i think timing matters. once you're bored with the copy + pasting, you'll either listen to advice, or be on the lookout for a solution while googling.
The entire time I was reading this I was thinking, "wow this seems so familiar". Then I realized it's your blog and we just had this conversation two days ago. Thanks a bunch for your help the first time and again for this post!
I think this kind of advice is lacking in a major way: being a good software engineer is not just about being able to write code. Writing code, even 10K hours worth of code, does not make you a good software engineer, unless you also practice how to design your software. You should be able to determine when you are violating DRY, what parts of your program should be separated by a clean internal API and how to separate responsibilities.
Programming, as outlined by guidelines as in the linked article, is nothing more than being able to write the code that solves a problem. Engineering requires you to be able to organize the code and the machines, networks and other infrastructure required to allow your client to reach your code.
I think this is more of a starter tip list. I see this more of as a motivation push that some people need in order to get over the self-imposed obstacles of just starting. Just start!
It's not as simple as merely doing something for 10,000 hours and then you magically become an expert.
The 10,000 hours-rules refers to the act of performing 10,000 hours of "deliberate practice" (or sometimes called "deep practice") in order to become an expert.
And that's something very different to simply code 10,000 hours in your day job. When googling for that term, you'll find plenty of studies and other resources. :)
If you are interested in this topic, I can recommend the book "The Talent Code" by Daniel Coyle - yes, the title is cheesy but it's a good book, I've read it in pretty much one sitting. A gentle and entertaining introduction into the whole field of how to become an expert.
"Pragmatic Thinking and Learning: Refactor Your Wetware" by Andy Hunt also spends an whole chapter on deliberate practice. It's a very good book, too.
EDIT: This blog post by Derek Sivers could be considered as an example of deliberate practice: http://sivers.org/kimo Just stumbled about it as a submission to HN, nice coincidence... :D