]>
Commit | Line | Data |
---|---|---|
1 | # Free Voluntary Reading, Hermeneutics and the Block Model: Acquiring Expertise in Problem-Solving with Code | |
2 | ||
3 | Software Engineers never stop learning, no matter the skill level: You need to adapt to evolving circumstances, learn new tools, and face new challenges. | |
4 | ||
5 | 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? | |
6 | ||
7 | ## Novices Solve, Experts Analyze. | |
8 | ||
9 | 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] | |
10 | ||
11 | 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. | |
12 | ||
13 | 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] | |
14 | ||
15 | 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. | |
16 | ||
17 | ## Knowing the right tools is not enough: Organizing Knowledge is Key. | |
18 | ||
19 | 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. | |
20 | ||
21 | 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. | |
22 | ||
23 | ## Free Voluntary Reading is Beneficial for Language Acquisition. | |
24 | ||
25 | 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. | |
26 | ||
27 | 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. | |
28 | ||
29 | ## The block model is a Great Way to Divide Program Comprehension. | |
30 | ||
31 | 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]: | |
32 | ||
33 | 1. Four levels of "granularity": Atoms, Blocks, Relations, and the Macro-structure of the program. | |
34 | 2. Three dimensions of meaning: Text surface (Connotation or "what does it say"), Program execution (Operation or "What happens"), and Function (Denotation or "why") | |
35 | ||
36 | 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. | |
37 | ||
38 | 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. | |
39 | ||
40 | ## Hermeneutics ties the whole to the parts, and then back again. | |
41 | ||
42 | Hermeneutics is a theory and methodology for interpreting texts, that considers how our experience influences our understanding. | |
43 | ||
44 | We can see the analysis a cycle: | |
45 | 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 | |
46 | 2. When we consider the parts, we gain a better understanding of how they come together to form a whole | |
47 | 3. Repeating steps 1 and 2, we gain a more refined understanding. | |
48 | ||
49 | 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. | |
50 | ||
51 | ## Combine all three and learn to write better code by reading. | |
52 | ||
53 | With these three tools in mind, a team can improve their understanding of programs and problem-solving skills through reading. | |
54 | ||
55 | Run this session on your own or, even better, with a group of your peers: | |
56 | ||
57 | 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. | |
58 | 2. Use the block model to pick an area of focus. | |
59 | 3. Read the code and take notes. | |
60 | 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? | |
61 | ||
62 | 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. | |
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 |