Chapter 26 Further Reading: Learning to Code


On Programming Skill Development

Ericsson, K. A., & Pool, R. (2016). Peak: Secrets from the New Science of Expertise. Houghton Mifflin Harcourt. The primary source for deliberate practice theory — directly applicable to programming. The general framework (specific goals, immediate feedback, practice at the edge of ability) is the foundation of the anti-tutorial-hell approach in this chapter.

Hunt, A., & Thomas, D. (1999). The Pragmatic Programmer: From Journeyman to Master. Addison-Wesley. A classic text on becoming a better programmer. The "deliberate practice" recommendations in this book (katas, reading code, maintaining breadth alongside depth) substantially predate the behavioral learning science and are consistent with it. The advice has aged remarkably well.

McBreen, P. (2001). Software Craftsmanship: The New Imperative. Addison-Wesley. The most thorough treatment of the master-apprentice model applied to software development — the argument that programming skill is best developed through working alongside experienced practitioners, not through coursework. The implications for mentoring and deliberate practice in professional settings are direct.


On Cognitive Science and Programming

Dehnadi, S., & Bornat, R. (2006). "The camel has two humps." (Unpublished manuscript, available online.) A controversial but thought-provoking study suggesting a bimodal distribution in programming aptitude among novice learners. Whether or not the specific findings hold up, the paper raises important questions about the cognitive challenges of building programming mental models — specifically, the ability to reason about state changes in programs.

Soloway, E., & Iyengar, S. (Eds.). (1986). Empirical Studies of Programmers. Ablex Publishing. One of the earliest and most comprehensive empirical examinations of how programmers actually think — including the expert-novice differences in debugging and program comprehension that underlie the recommendations in this chapter.

VanLehn, K. (1996). "Cognitive skill acquisition." Annual Review of Psychology, 47, 513–539. A review of cognitive skill acquisition research directly applicable to programming skill development. Covers the role of examples, practice conditions, and transfer in skill-based learning.


Practical Resources for Deliberate Practice

Exercism.io (exercism.io): Free platform with carefully designed programming exercises in 60+ languages and an optional mentoring system. The design philosophy explicitly targets deliberate practice rather than competitive performance. The community solutions feature is particularly valuable: seeing how experienced developers approach the same problem you just solved is a concentrated source of professional pattern exposure.

Python Tutor (pythontutor.com): Free, web-based visual debugger that shows program execution step by step. For learners building the "program in your head" mental model, this tool is transformative. Use it as a calibration tool: predict what will happen, then use Python Tutor to check. Available for Python, JavaScript, Java, and C/C++.

The Recurse Center (recurse.com): A self-directed programming retreat based in New York City (and now with remote options) designed for programmers who want to become dramatically better. The Recurse Center community produces and maintains a document called "The Recurse Center's Social Rules" that describes a learning environment specifically designed to enable the kind of productive struggle and honest feedback that this chapter recommends. Worth reading even if you never attend.


On Tutorial Design and Its Limitations

Kalyuga, S., Chandler, P., Tuovinen, J., & Sweller, J. (2001). "When problem solving is superior to studying worked examples." Journal of Educational Psychology, 93(3), 579–588. Research demonstrating that for learners with some prior knowledge, solving problems is more effective than studying worked examples — a direct empirical challenge to the tutorial-following approach for intermediate learners. The "expertise reversal effect" described here is foundational for understanding why tutorials work well for true beginners and poorly for anyone past the initial acquisition stage.

Sweller, J. (2006). "The worked example effect and human cognition." Learning and Instruction, 16(2), 165–169. A review by the originator of cognitive load theory about worked examples in instruction. This paper provides the theoretical context for when tutorial-following is appropriate (early acquisition, high cognitive load, novice learners) and when it stops being efficient.


For Career Changers

Newport, C. (2012). So Good They Can't Ignore You. Business Plus. Newport's argument that "follow your passion" is poor career advice, and that career capital (rare and valuable skills) is built through deliberate practice. Directly relevant to career changers entering programming: the path to a programming career is deliberate skill acquisition, not just completing courses. Chapter 4, on the "craftsman mindset," is especially relevant.

Kaufman, J. (2013). The First 20 Hours: How to Learn Anything Fast. Portfolio. Kaufman's "rapid skill acquisition" framework — different from deliberate practice in that it targets "good enough" proficiency rather than expertise. For career changers who need a functional foundation quickly, the approach in this book complements the longer-term deliberate practice framework. Especially useful for the initial phase of programming acquisition (getting to the point of writing useful code quickly before optimizing for mastery).