I think this post is worse for the reference to 10,000 hours (instead of 15 years) in the title and body, and including the Malcolm Gladwell quote. 10,000 hours of doing something is not the same as 10,000 of deliberate practice, which the Outliers quote is about (my emphasis):
The key to achieving world-class expertise in any skill, is to a large extent, a matter of practicing the correct way, for a total of around 10,000 hours
I don’t understand what you mean, isn’t it possible to achieve this with 10,000 hours of disciplined practice? In a programming setting this would be writing the very best code you can as much as possible.
The original 10,000 hours claim is a misinterpretation of the researcher Malcolm Gladwell is Igonning. The researcher, Anders Ericsson, said that what matters is the amount of time spent in “Deliberate Practice”, which is practice where
You are pushed out of your comfort zone,
On specific skills,
Using a “broadly accepted” training regiment,
With immediate feedback from a trainer.
Ericsson proposed that only deliberate practice mattered in determining your skill level. This is being challenged in modern research, which argues that genetics, talent, and inborn motivation also play significant roles. As far as I know, though, just doing the best you can in day-to-day life isn’t a major factor: time you spend practicing has to be for practicing.
“Perfect practice makes perfect.” My high school orchestra teacher drilled this into our heads. He would stop the entire orchestra to nitpick one students bow grip, or another’s tuning, but it was always worthwhile.
Writing the very best code you can may not force you to practice the breadth & depth of skills required to develop expertise in an area.
You could spend a day learning recursion and doing some exercises then spend a year converting a large code base to use recursion everywhere and remove all plain loops from it.
You might encounter some challenging cases doing that, and those few cases will help you develop better skills but in all likelihood you’ll be spending most of this time mechanically applying a skill you already acquired, probably on that first day, over and over again. Those hours don’t count.
I would refine Ericsson’s model to say that it’s less about wall time and more about cycles of “do-receive feedback-improve” you go through. The “tick” of the practice clock happens in the brain of the learner and can be perceived as a mini revelation or a sudden small improvement in performing a skill.
The purpose of a good teacher or educational program is to improve the efficiency of learning by maximizing the number of those “ticks” within the limited resources available (e.g., time, cost, etc). The problem is those “ticks” require mental effort, so highly efficient programs are often perceived as “over complicated”. This is because they’re intentionally designed to deepen your skill or level of understanding in a stepwise way in which each step challenges your current level.
People naturally tend to prefer learning at a lower pace or spend a lot of time doing things that don’t require as much mental effort but also don’t result in much knowledge or skill acquisition. Doesn’t mean they’re less valuable but it’s good to distinguish between education and entertainment.
I’ve found this to be the opposite over time. “Opinionated X” has become a norm and you’ll always be kicking yourself later because you find out the package or library you’re using was designed to be used in a particular way.
I found myself nodding along to almost all but the first:
Browsing the source is almost always faster than finding an answer on StackOverflow.
Not only is this false some of the time, it is false the majority of the time, and it is even more false if we add ChatGPT to the mix. Some very large percentage of my questions during the day (easily over half) are answered immediately (between 20 and 60 seconds) by SO or, lately, ChatGPT. Source browsing, which I do regularly when needed, cannot compete with that.
I posit that this is highly dependent on the popularity of the codebase in question. My experience for most tech is much closer to the original author’s.
I work on virtualisation, Qemu, device drivers on macOS/iPadOS, and the occasional bit of embedded development, and I have to be very lucky for something to be covered on SO. (In the case of DriverKit and related tech, I probably have seen 95%+ of tagged questions/answers, in part because I wrote a majority of the answers.)
But when it comes to shell scripting or sysadmin/devops type stuff, SO and its sister sites are extremely effective.
My most frequent use-case is as a search assistant, a more efficient google. However, that makes it sound less game-changing than it is. For example, we use AWS, and I often need to write a script using the CLI to accomplish some task, which may be multiple commands across 1 or more services. Previously, this would require docs search / SO searching, and a simple task might take 20 minutes, simply because I am not familiar with the many sub-commands and options.
Now, I ask ChatGPT, and it will return a fully functional bash script doing exactly what I want. Yes, sometimes it requires a back and forth where I clarify things, but the total time is still much less and the experience is more pleasant.
questions about code that isn’t on the open web?
I am not sure what you mean, but it is not merely copy / pasting snippets. It will even respond to commands like “can you rewrite that in a more functional style” and so on. Of course, the domain of the questions is about things on the open web: AWS, JS, bash, etc.
In my experience (30+ years now), #11 is a bit simplistic—you also comment when you have to work around bugs in code you can’t control (like a proprietary 3rd party library you have no source to). Or when the logic is convoluted and can’t be refactored (example—this is probably the most convoluted logic in my blog engine). #14 and #15 contradict each other. And I’m a bit iffy on #8.
I think this post is worse for the reference to 10,000 hours (instead of 15 years) in the title and body, and including the Malcolm Gladwell quote. 10,000 hours of doing something is not the same as 10,000 of deliberate practice, which the Outliers quote is about (my emphasis):
I don’t understand what you mean, isn’t it possible to achieve this with 10,000 hours of disciplined practice? In a programming setting this would be writing the very best code you can as much as possible.
The original 10,000 hours claim is a misinterpretation of the researcher Malcolm Gladwell is Igonning. The researcher, Anders Ericsson, said that what matters is the amount of time spent in “Deliberate Practice”, which is practice where
Ericsson proposed that only deliberate practice mattered in determining your skill level. This is being challenged in modern research, which argues that genetics, talent, and inborn motivation also play significant roles. As far as I know, though, just doing the best you can in day-to-day life isn’t a major factor: time you spend practicing has to be for practicing.
Ten minutes of drumming to the metronome is way more effective than one hour jamming
“Perfect practice makes perfect.” My high school orchestra teacher drilled this into our heads. He would stop the entire orchestra to nitpick one students bow grip, or another’s tuning, but it was always worthwhile.
Writing the very best code you can may not force you to practice the breadth & depth of skills required to develop expertise in an area.
You could spend a day learning recursion and doing some exercises then spend a year converting a large code base to use recursion everywhere and remove all plain loops from it.
You might encounter some challenging cases doing that, and those few cases will help you develop better skills but in all likelihood you’ll be spending most of this time mechanically applying a skill you already acquired, probably on that first day, over and over again. Those hours don’t count.
I would refine Ericsson’s model to say that it’s less about wall time and more about cycles of “do-receive feedback-improve” you go through. The “tick” of the practice clock happens in the brain of the learner and can be perceived as a mini revelation or a sudden small improvement in performing a skill.
The purpose of a good teacher or educational program is to improve the efficiency of learning by maximizing the number of those “ticks” within the limited resources available (e.g., time, cost, etc). The problem is those “ticks” require mental effort, so highly efficient programs are often perceived as “over complicated”. This is because they’re intentionally designed to deepen your skill or level of understanding in a stepwise way in which each step challenges your current level.
People naturally tend to prefer learning at a lower pace or spend a lot of time doing things that don’t require as much mental effort but also don’t result in much knowledge or skill acquisition. Doesn’t mean they’re less valuable but it’s good to distinguish between education and entertainment.
Where did I put in my 10,000 hours? Well, I’ve been programming for about 15 years.
Appreciate the humility of not counting the first ten years.
“Use other people’s code religiously.”
I’ve found this to be the opposite over time. “Opinionated X” has become a norm and you’ll always be kicking yourself later because you find out the package or library you’re using was designed to be used in a particular way.
I found myself nodding along to almost all but the first:
Not only is this false some of the time, it is false the majority of the time, and it is even more false if we add ChatGPT to the mix. Some very large percentage of my questions during the day (easily over half) are answered immediately (between 20 and 60 seconds) by SO or, lately, ChatGPT. Source browsing, which I do regularly when needed, cannot compete with that.
I posit that this is highly dependent on the popularity of the codebase in question. My experience for most tech is much closer to the original author’s.
I work on virtualisation, Qemu, device drivers on macOS/iPadOS, and the occasional bit of embedded development, and I have to be very lucky for something to be covered on SO. (In the case of DriverKit and related tech, I probably have seen 95%+ of tagged questions/answers, in part because I wrote a majority of the answers.)
But when it comes to shell scripting or sysadmin/devops type stuff, SO and its sister sites are extremely effective.
Are you using ChatGPT to answer questions about code that isn’t on the open web? If so, I’m super curious how!
My most frequent use-case is as a search assistant, a more efficient google. However, that makes it sound less game-changing than it is. For example, we use AWS, and I often need to write a script using the CLI to accomplish some task, which may be multiple commands across 1 or more services. Previously, this would require docs search / SO searching, and a simple task might take 20 minutes, simply because I am not familiar with the many sub-commands and options.
Now, I ask ChatGPT, and it will return a fully functional bash script doing exactly what I want. Yes, sometimes it requires a back and forth where I clarify things, but the total time is still much less and the experience is more pleasant.
I am not sure what you mean, but it is not merely copy / pasting snippets. It will even respond to commands like “can you rewrite that in a more functional style” and so on. Of course, the domain of the questions is about things on the open web: AWS, JS, bash, etc.
In my experience (30+ years now), #11 is a bit simplistic—you also comment when you have to work around bugs in code you can’t control (like a proprietary 3rd party library you have no source to). Or when the logic is convoluted and can’t be refactored (example—this is probably the most convoluted logic in my blog engine). #14 and #15 contradict each other. And I’m a bit iffy on #8.