epilogue

Some words to close this book

Thanks for making it to the end of this book. Whether you have read the whole text or just a few bits here and there, I am happy you reached this point. Writing this book for been a very rewarding experience. I learned a lot about cognitive science and programming because I dove deeper into the matter than I ever had before. But I also learned a lot about myself. One of the things I take away from this book is that confusion and feeling cognitively overwhelmed is fine, and is part of life and learning. Before I knew all I know about cognition, I used to get upset with myself for not being smart enough to read complicated papers or explore unfamiliar code; now I can be kinder to myself and say, “Well, maybe you have too much cognitive load.”

I also started to work on what ultimately became the Hedy programming language. And while I would certainly not recommend anyone create a programming language and write a book at the same time, in my mind these two processes were very connected and went together well thematically. Many of the lessons in this book, like lowering cognitive load, misconceptions, the semantic wave, and spaced repetition, are written about in this book and also implemented in Hedy. If you are teaching kids to program, I would be honored if you’d give Hedy a try on www.hedycode.com. It is free and open source!

To end this book, I want to stress that I have immensely enjoyed exploring, summarizing, and covering the work of great scientists in the field of programming and cognition. While doing my own research is amazing, helping developers gain an understanding of existing research has been tremendously rewarding and might have a bigger impact on programming than my own projects. If you want to read even more, there are a few books I can recommend and a few scientists that you might want to keep tabs on.

If you want to get to know your brain better, I love the book Thinking Fast and Slow (Farrar, Straus, and Giroux, 2013) by Daniel Kahneman because it helps you understand your brain in a broader way than this book does. Similarly, the book How We Learn (Penguin, 2015) by Benedict Carey dives deeper into topics of spaced repetition and memory. For readers specifically interested in learning math, the book How the Brain Learns Mathematics (Corwin, 2014) by David Sousa is packed with research on learning math and abstraction. In the realm of programming, I can recommend the book the Philosophy of Software Design (Yaknyam Press, 2018) by John Ousterhout. It is not an easy read, but it is filled with in-depth insights about how we design software. I also very much love the small book Software Design Decoded (MIT Press, 2016) by Andre van der Hoek and Marian Petre, which summarizes 66 ways programming experts think, which can be seen as a deck of flashcards you can apply in various situations. I have also covered this book in an episode of SE Radio.

If you are eager to read scientific papers on topics related to this book, I can recommend two papers that impacted my thinking extensively: “Why Minimal Guidance During Instruction Does Not Work” by Kirschner et al.,1 which challenged everything I knew about teaching, and “Toward a Developmental Epistemology of Computer Programming” by Raymond Lister, which channeled my experience of teaching programming badly and taught me how to do better.2

This book covers the work of a range of amazing scientists, but the few hundred pages this book became surely have not been enough to cover all their great work. If you want to dive deeper into program comprehension research, you want to follow these great people: Sarah Fakhoury (@fakhourysm), Alexander Serebrenik (@aserebrenik), Chris Parnin (@chrisparnin), Janet Siegmund (@janetsiegmund), Brittany Johnson (@DrBrittJay), Titus Barik (@barik), David Shepherd(@davidcshepherd), and Amy Ko (@amyjko).


1. Paul A. Kirschner et al., “Why Minimal Guidance During Instruction Does Not Work: An Analysis of the Failure of Constructivist, Discovery, Problem-Based, Experiential, and Inquiry-Based Teaching,” Educational Psychologist, vol. 41, no. 2, pp. 75-86, 2010, https://www.tandfonline.com/doi/abs/10.1207/s15326985ep4102_1

2. Raymond Lister, “Toward a Developmental Epistemology of Computer Programming,” 2010, https://dl.acm.org/doi/10.1145/2978249.2978251