+# Free Voluntary Reading, Hermeneutics and the Block Model: Acquiring Expertise in Problem-Solving with Code
+
+Software Engineers never stop learning, no matter the skill level: You need to adapt to evolving circumstances, learn new tools, and face new challenges.
+
+More experienced engineers tend to have an easier time learning new tools and solving new problems, so what's the difference between them and someone just getting started?
+
+## Novices Solve, Experts Analyze.
+
+A 1979 study by Jill H. Larkin and Frederick Reif analyzed differences between novices and experts solving physics problems: The former would translate the problem to math first, while experts started by building a "low-detail" model to understand which principles applied. [1]
+
+By checking that this low-detail construction fit a model without intractable issues, they had a good idea of what equations and principles they would need to apply before creating a mathematical model. On the other hand, novices took longer to discover this as the right concepts only became apparent while trying to solve the equations.
+
+This same type of behavior is evident in Software Engineering, where upfront analysis, requirements gathering, and decisions on the right tools result in better outcomes: "Measure Twice, Cut Once" [2]
+
+An upfront analysis is valuable but not easy to do in practice, even if you know the principles behind it: Just reading a book on software architecture won't give you the insight to know where it's best applied.
+
+## Knowing the right tools is not enough: Organizing Knowledge is Key.
+
+To properly analyze a problem, having a toolbox of principles is not enough: It's necessary to have a coherent organization of these concepts that lets you evaluate at the general level and then iterate to the specifics.
+
+Are there tools we can use to build this organization of knowledge and acquire a better approach to problem-solving? Here I explore three tools I believe can work together to help in this effort: Free voluntary reading, the block model, and the hermeneutic cycle.
+
+## Free Voluntary Reading is Beneficial for Language Acquisition.
+
+Dr. Stephen Krashen is a linguist that has done extensive research in the field of language acquisition and the role comprehensive input plays in our ability to speak.
+
+One of the most effective methods for acquiring language is practicing free voluntary reading, which produces better results than direct instruction. Not only that, but reading is also a solid indicator of good writing. [3] and similarly, a working group has found that program comprehension is critical for writing good programs [4], and they propose a model to teach this.
+
+## The block model is a Great Way to Divide Program Comprehension.
+
+In 2008, Carsten Schulte (who later formed part of the above working group) proposed a model to teach program comprehension by looking at a program through 2 axes [5]:
+
+1. Four levels of "granularity": Atoms, Blocks, Relations, and the Macro-structure of the program.
+2. Three dimensions of meaning: Text surface (Connotation or "what does it say"), Program execution (Operation or "What happens"), and Function (Denotation or "why")
+
+The combination of these two axes provides different types of analysis that might be required to understand the text, from atoms at the text surface level to the macro-structure at the functional level.
+
+This type of analysis can be complex even for experienced engineers, as it requires moving between structure and function. This transition between the parts and the whole has a lot of similarities to the practice of Hermeneutics, where we can find a helpful method for text interpretation.
+
+## Hermeneutics ties the whole to the parts, and then back again.
+
+Hermeneutics is a theory and methodology for interpreting texts, that considers how our experience influences our understanding.
+
+We can see the analysis a cycle:
+1. When we consider the whole of a text, our pre-existing assumptions and knowledge give us a better contextualization of what the parts are
+2. When we consider the parts, we gain a better understanding of how they come together to form a whole
+3. Repeating steps 1 and 2, we gain a more refined understanding.
+
+This process of understanding is not fixed and will vary over time: our needs change, we have a different mix of skills in the team, we need the program to operate at a different scale, we have to adapt to advances in the environment, etc. Revisiting programs is a frequent occurrence in every software engineering team.
+
+## Combine all three and learn to write better code by reading.
+
+With these three tools in mind, a team can improve their understanding of programs and problem-solving skills through reading.
+
+Run this session on your own or, even better, with a group of your peers:
+
+1. Pick a piece of code: it can be written by the team, an open-source project of interest, or some of the dependencies in use.
+2. Use the block model to pick an area of focus.
+3. Read the code and take notes.
+4. Use the hermeneutic cycle to shift from one dimension to another and note how your understanding changes. What assumptions changed? What new insights did you get?
+
+The more you do this, the more your comprehension will improve, and the better you'll be able to organize and apply problem-solving concepts.
+
+### References
+
+[1] Larkin, J.H., & Reif, F. (1979). Understanding and Teaching ProblemāSolving in Physics.
+[2] McConnell, S. (2014). Code Complete (2nd ed.). Microsoft Press.
+[3] Krashen, S. D. (2004). The power of reading: Insights from the research, 2nd edition (2nd ed.). Libraries Unlimited.
+[4] Izu, C., Schulte, C., Aggarwal, A., Cutts, Q.I., Duran, R., Gutica, M., Heinemann, B., Kraemer, E.T., Lonati, V., Mirolo, C., & Weeda, R. (2019). Fostering Program Comprehension in Novice Programmers - Learning Activities and Learning Trajectories. Proceedings of the Working Group Reports on Innovation and Technology in Computer Science Education.
+[5] Schulte, C. (2008). Block Model: an educational model of program comprehension as a tool for a scholarly approach to teaching. International Computing Education Research Workshop.
+[6] Wikipedia contributors. (2022, September 28). Hermeneutics. Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/w/index.php?title=Hermeneutics&oldid=1112903434