What is deliberate practice for programmers?
EDIT: Originally written as a response to u&#x2F;probinso, but got way too long. I&#x27;m a novice here, so any thoughts&#x2F;anecdotes&#x2F;(dis)agreements&#x2F;anything are greatly appreciated.<p>+1 - I would like an invite too! Back to the article, this is probably the topic I&#x27;ve thought most about recently.<p>Relevant background: Novice Guitarist + Junior Software Engineer<p>In the past year I have taken serious interest in jazz musicianship, specifically improvisation. I&#x27;d like to get significantly better at both programming and jazz improvisation as fast as possible, so relentlessly optimizing my practice, or &quot;practicing practice&quot;, has been my #1 goal. I have a decent approach for music, but I&#x27;m still looking for one for programming.<p>Here are a few of my amateur approaches to &quot;deliberate practice&quot; regarding music:<p>- The first and most obvious thing I learned was that you can&#x27;t improvise what you can&#x27;t physically play. So clearly, deliberate practice is required to gain the ability to play anything. I&#x27;ve seen and heard this referred to as a musician&#x27;s &quot;chops&quot;. To develop this, I practice scales, arpeggios, chords, licks, songs I&#x27;ve transcribed, and other targeted exercises.<p>- To improvise an appropriate melody I have to 1) hear and understand the music outside the melody, 2) create a good melody over it in my head, then 3) translate and play the melody in my head. There is a lot of overlap in the practice for these three, which mostly sums to ear training, sight reading, sight singing, listening to a bunch music, transcribing and analyzing it, and repeated, concentrated attention to how the harmony + rhythm of songs work and how the melody fits over&#x2F;in that.<p>- Learning lots of music theory + applied practice of it, with the ultimate goal of using knowledge intuitively rather than actively. The key assumption here is that my music knowledge has to be intuitive, because I won&#x27;t have time to think about all this stuff when improvising. So I&#x27;m hoping that consuming thousands of resources (songs, books, talks, paid lessons), actively using learned information, and gaining lots of experience will make improvisation natural, subconsciously feasible, or at the very least much easier.<p>- Playing and improvising with others a lot.<p>I generally think of all of this as 1) developing fundamentals and technical skills 2) discovering and adding new things 3) applying knowledge 4) reviewing assumptions, making changes 5) iterating. Then, maybe enough iteration =&gt; experience, and enough creativity + experience will lead to the craftsmanship I need?<p>This basic approach to music is good enough for me right now, but I&#x27;d like to start the same process with making software. So finally, the question in the article - &quot;What is deliberate practice for programmers?&quot;.  I don’t have the answer but I’d sure like to know.<p>I could review all the knowledge I gained from CS in university. Implement a bunch of stuff, like DS, algorithms, apps, low level mechanisms? Read a bunch of highly rated technical books? Talk to people smarter and more experienced than me? Go work at a company that says it&#x27;s invested in it&#x27;s employees growth?<p>This is all great, but it doesn&#x27;t seem like deliberate practice in the way that my practice for improvisation does. I would like to become a great programmer, but the problem is that I just want to be great at all things programming. I guess I have more specific end goal in terms of music. Maybe it&#x27;s that I don&#x27;t really know what I want in terms of programming? Perhaps I need to specialize, though it&#x27;s a little early for me to know where. It&#x27;s very frustrating knowing that I want to get better, am willing to &quot;put in the work&quot;, but don&#x27;t know what “work&quot; I should be doing.