
Ask HN: What is deliberate practice for programmers? - cpoile
This has been asked before. Many people say &quot;work on projects&quot; or &quot;read lots of code.&quot; But that&#x27;s not what deliberate practice is.<p>According to Eriksson and Pool (2016, &quot;Peak&quot;), deliberate practice is different from what they call &quot;purposeful practice&quot; (trying very hard to push yourself past your limits and improve). In contrast, deliberate practice is both purposeful and &#x2F;informed&#x2F;. &quot;In particular, deliberate practice is informed and guided by the best performers&#x27; accomplishments and by an understanding of what these expert performers do to excel.&quot; (p. 98)<p>Is there anything that satisfies these criteria? (from p. 99-100):<p>1. Deliberate practice develop skills that other people have already figured out how to do and for which effective training techniques have been established.<p>2. Deliberate practice requires a student to constantly try things that are just beyond his or her current abilities. It demands near maximal effort, which is generally &#x2F;not enjoyable&#x2F;.<p>3. Deliberate practice involves well-defined, specific goals and often involves improving some aspect of the target performance; it is not aimed at some vague overall improvement.<p>4. Deliberate practice involves immediate feedback and modification of efforts in response to that feedback.<p>5. Deliberate practice nearly always involves building or modifying previously acquired skills by focusing on particular aspects of those skills and working to improve some &#x2F;specifically&#x2F;. Because of the way the new skills are built on top of existing skills, it is important for teachers to provide beginners with the correct fundamental skills in order to minimize the chances that the student will have to relearn those fundamental skills later when at a more advanced level.<p>The best violinists spend 3-6 hours in deliberate practice per day. They are guided by teachers---teachers who know what the best violinists need to know, and the steps to get there.<p>What is deliberate practice for programmers?
======
iraldir
I don't think there is such a thing for programming because by its very
nature, programming is against repetition. You'll repeat a piano concert over
and over until its perfect. Even a painter will train on classical painting,
trying to reproduce the skill of masters to make it their own.

Programming on the other hand relies on reuse, of your own code as well as the
"master's". By the time you learn how to do something perfectly by head with
no mistakes whatsoever, it means you missed an opportunity to automate
something. Say your job is to create restaurant websites. if you create 10 of
them from scratch (improving yourself in that skill), you're probably missing
the opportunity to reuse some of your work. I think that is quite unique as
far as arts / jobs go though.

~~~
cpoile
That's a really interesting way of looking at it, thank you!

Is there some kind of underlying base that you /can/ apply deliberate practice
to?

I'm trying to think of what 10x programmers know or can do that is
practicable...

~~~
avichalp
Yes, this is an interesting point. I think there should be ways to do
"deliberate practice" for finding better abstractions (reusable components). I
would love find those methods.

------
ksaj
My little contribution to deliberate practice: When I write something to learn
a specific function or macro in Lisp, I find several ways to program the same
thing, and then compile and rank them against each other.

For example, the Fibonacci sequence or factorial using simple iteration,
recursion, etc in a few different styles. Then after compiling the function, I
look at speed, binary size, execution memory usage, readability of the initial
code, etc.

The side effect is that I end up learning what techniques work better for a
given metric, in the hopes it eventually becomes an instinct.

------
pooya72
At least one aspect that seems to fit the definition of deliberate practice
that you defined is programming challenges. It's about a specific part of
programming, namely algorithms, you are constantly pushing yourself based on
the difficulty, and you can get feedback from other people who are doing the
challenges. One good example is r/dailyprogrammer:
[https://www.reddit.com/r/dailyprogrammer/](https://www.reddit.com/r/dailyprogrammer/)

~~~
cpoile
Or interview prep sites, like leetcode, hackerrank, etc. Or competitive
programming sites, like topcoder.

Is that basically the best we can do?

The problem with those is that a lot of HN commenters believe that practicing
for competitive programming (or algorithmic interview problems) has little to
no relationship with actual day-to-day programming.

Personally, I think there has to be some relationship... But the HN community
strongly disagrees (see any of the interview question threads)...

