My tech folks interested in learning & mentoring, this one's for you. A while back someone tweeted asking, “when do we introduce abstracts?” I explained a bit
but now I have research to back it up.
In the article in Educational Psychology Review vol. 10, "Cognitive Architecture and Instructional Design," Sweller, van Merrienboer, & Paas (1998) examine the difference between novice & grandmaster chess players. When asked to re-create board configurations from previous games, chess grandmasters were able to do that easily. However, when asked to re-create random board configurations, chess grandmasters were no better at re-creating the configurations than novice players.
The reason the grandmasters could recreate previously experienced boards is because they were drawing from long term memory, not trying to reason abstractly like novices have to do because they are missing the experiences of playing thousands of games. The authors go on to say that "humans are particularly poor at complex reasoning unless most of the elements with which we reason have previously been stored in long-term memory". Therefore, "instructional designs that require learners to engage in complex reasoning processes involving combinations of unfamiliar elements are likely to be deficient." That's why when a new developer encounters lots of abstracts it's incredibly challenging & frustrating. They need concrete experiences to start from so that they can pull from those concrete experiences in order to understand the abstract.
What implications does this have?
Concepts like archetypes or patterns mean nothing if the dev hasn’t encountered examples. To build knowledge & confidence, when you’re working on something e.g. microservice point out “this uses the saga pattern to maintain data consistency.” Eventually the abstract concepts will be connected to concrete examples & the ability to process multiple abstract concepts will grow.