This is a summary of a remarkable š³ tree book, which presents a theory for and methods to accelerate expertise in real-world contexts. This summary is not comprehensive; it only covers some of the actionable theories and recommendations in the book and leaves out the considerable lit review and the bookās recommendations for future research directions. Iāll note that Accelerated Expertise is not written for the lay person ā it is a book primarily written for organisational psychologists, training program designers and researchers employed in the US military. If you must read it ā say because you want to put the ideas in the book to practice ā my recommendation is to read Chapters 9-13 and skim everything else.
The case model that Harvard uses for their MBA program seems like the closest existing learning model in business that Iām aware of to these techniques. What is a case but an interview with an expert and the actions they took?
Reflecting back on my own process my school wanted to do case style study. But I feel the instructors werenāt brave enough to actually require us to do the upfront learning of the tools so the sessions could be throwing us into a case situation (or donāt have expertise in case style learning in the first place!). And instead many (not all) classes ended up being going through the underlying basic content where you could simply just read a textbook for a similar learning outcome.
While learning web development at the moment I feel that learning mental models on application at this beginner stage isnāt that useful. Somewhere between initiate and apprentice / junior journeyman according to the graph in the article.
However, once Iāve gotten to the point that I can build a fully functional something badly Iāll want to then transition mental models. Iām curious on other software engineers / web devs point of view here though. If youād spent much time at the start of your learning the technical skills focusing on models / expertise have been significantly useful? Or does learning a certain amount of foundational knowledge beforehand make more sense to you?
Iāve been doing professional software engineering for 4 years and doing programming for 7 years. According to my experience, having an understanding of how compilers work and fundamental OS concepts help tremendously in the long run, but not very useful at the very beginning.
Iād lean in more on the learning the foundational knowledge than learning mental models from experts. One of the things that I think almost no university students really understand is design pattern. They indeed may have learnt from textbooks and done exercises, but I havenāt seen any fresh grad being able to really appropriately apply the design patterns in a real, production code base.
Iāve always felt that developing functional software isnāt that difficult, whatās difficult is to design it in a way that would still be resilient tomorrow, the day after, months later when someone else decides to make some changes to the code base, and even years later when the software is stopped being developed. A lot of important mental models in software engineering are about withstanding changes. They either describe the common patterns of changes and the common patterns of effective solutions, or they describe heuristics that would prevent your software from being affected negatively by changes.
Failures to take change into consideration have always led to some kinds of problems downstream, when they are much more expensive to fix. And I suspect only after having our existing mental models (i.e all the ways to develop software that do not take seriously the inevitability of change) destroyed do we really understand why new ones are necessary. Not sure what the literature on expertise and tacit knowledge would say about this though.
Iāve wondered this as well, and I think a huge part of it is that it depends on developing taste, or judgment. But ā¦ the interesting thing here is that the whole design pattern approach in software was inspired by Christopher Alexanderās A Pattern Language, and heās argued that much of architecture design is this āstep-by-step unfoldingā. (And Iāve argued that the step-by-step unfolding is how product taste is expressed. )
So hereās what I donāt get ā how does software taste/judgment and the design pattern approach combine? Thereās certainly something to investigate here, though I donāt quite have the time to do it.
I think I couldnāt have said it any better.
Thereās this piece by Li Hongyi that I think you might find very resonant where he goes āsoftware is about developing knowledge more than writing codeā.
Full section:
In software development, most ideas are bad; this is not anyoneās fault. It is just that the number of possible ideas is so large that any particular idea is probably not going to work, even if it was chosen very carefully and intelligently. To make progress, you need to start with a bunch of bad ideas, discard the worst, and evolve the most promising ones. Apple, a paragon of visionary design, goes through dozens of prototypes before landing on a final product. The final product may be deceptively simple; it is the intricate knowledge of why this particular solution was chosen over its alternatives that allows it to be good.
This knowledge continues to be important even after the product is built. If a new team takes over the code for an unfamiliar piece of software, the software will soon start to degrade. Operating systems will update, business requirements will change, and security problems will be discovered that need to be fixed. Handling these subtle errors is often harder than building the software in the first place, since it requires intimate knowledge of the systemās architecture and design principles.
I wish I had something more useful to say, but I went through a traditional Computer Science education, and it was everything this book says not to do.
I will say that building lots of throwaway side projects during university was pretty important to my skill development, though. Youāll want to build totally trivial things (e.g. todo apps, a Twitter clone) and use each project to experiment with some new technology ā or even some weird approach.
But for now, I think learning the basics probably does help. And anyway ā as I understand it ā youāre already learning it through some sort of syllabus, right?