]> git.r.bdr.sh - rbdr/blog.unlimited.pizza/blame_incremental - archive/1671315215263/reading-hermeneutics-and-the-block-model.gmi
blog-sync-up-1704232830559
[rbdr/blog.unlimited.pizza] / archive / 1671315215263 / reading-hermeneutics-and-the-block-model.gmi
... / ...
CommitLineData
1# Free Voluntary Reading, Hermeneutics and the Block Model: Acquiring Expertise in Problem-Solving with Code
2
3Software Engineers never stop learning, no matter the skill level: You need to adapt to evolving circumstances, learn new tools, and face new challenges.
4
5More 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?
6
7## Novices Solve, Experts Analyze.
8
9A 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]
10
11By 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.
12
13This 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]
14
15An 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.
16
17## Knowing the right tools is not enough: Organizing Knowledge is Key.
18
19To 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.
20
21Are 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.
22
23## Free Voluntary Reading is Beneficial for Language Acquisition.
24
25Dr. 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.
26
27One 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.
28
29## The block model is a Great Way to Divide Program Comprehension.
30
31In 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]:
32
331. Four levels of "granularity": Atoms, Blocks, Relations, and the Macro-structure of the program.
342. Three dimensions of meaning: Text surface (Connotation or "what does it say"), Program execution (Operation or "What happens"), and Function (Denotation or "why")
35
36The 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.
37
38This 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.
39
40## Hermeneutics ties the whole to the parts, and then back again.
41
42Hermeneutics is a theory and methodology for interpreting texts, that considers how our experience influences our understanding.
43
44We can see the analysis a cycle:
451. When we consider the whole of a text, our pre-existing assumptions and knowledge give us a better contextualization of what the parts are
462. When we consider the parts, we gain a better understanding of how they come together to form a whole
473. Repeating steps 1 and 2, we gain a more refined understanding.
48
49This 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.
50
51## Combine all three and learn to write better code by reading.
52
53With these three tools in mind, a team can improve their understanding of programs and problem-solving skills through reading.
54
55Run this session on your own or, even better, with a group of your peers:
56
571. 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.
582. Use the block model to pick an area of focus.
593. Read the code and take notes.
604. 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?
61
62The more you do this, the more your comprehension will improve, and the better you'll be able to organize and apply problem-solving concepts.
63
64### References
65
66[1] Larkin, J.H., & Reif, F. (1979). Understanding and Teaching Problemā€Solving in Physics.
67[2] McConnell, S. (2014). Code Complete (2nd ed.). Microsoft Press.
68[3] Krashen, S. D. (2004). The power of reading: Insights from the research, 2nd edition (2nd ed.). Libraries Unlimited.
69[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.
70[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.
71[6] Wikipedia contributors. (2022, September 28). Hermeneutics. Wikipedia, The Free Encyclopedia. https://en.wikipedia.org/w/index.php?title=Hermeneutics&oldid=1112903434