I came across this paper which looks at ways to teach students complex systems courtesy of Jessica Kerr’s blog.
Based on how students reason about complex systems, they were placed in 4 categories in order of increasing sophistication: Completely Clockwork, Somewhat Clockwork, Somewhat Complex and Completely Complex.
“Clockwork responses are those that show deterministic, linear, single-cause, non-networked, centralized, or static system interactions or states, whereas complex responses are those that demonstrate nondeterministic, nonlinear, multiple causes, networked, decentralized, or dynamic system interactions or states”.
In my experience this translates extremely well to the progression of a developer and their understanding of the complexity of the ecosystem they operate in. So, I wanted to attempt to derive a learning progression for developers.
At each level of development, I recommend a few books. Each book hopefully is a thread you can pull on, if you want to go deeper into a particular topic.The book recommendations are subjective, but I believe that one can chart their own curriculum following the basic model. The recommendations that I make are just based on my own experience and aim to serve merely as guidance.
Completely Clockwork
My recommendations for this level would be:
At this level most of the work is involved in making changes in a single service or component. This is where most of the ‘coding’ happens. The amount of time that will be spent reading your code will be multiples of the amount you would take to write it. You will work more with existing code rather than writing new code. A corollary of this fact is that you need to know how to make your code easy to change.So your focus should be on writing readable code and making it easy to change. With these considerations in mind, I recommend the following books
Somewhat Clockwork
Books for this level
Distributed systems are ubiquitous. Even when you are making a change to a single service, that service most likely lives in an ecosystem of other services and a plethora of other distributed tools. As you grow in seniority you need to understand how best to interact with other services in your vicinity and also the tradeoffs involved with each tool.
Somewhat Complex
Books for this level
We are now in the scope of system of systems. A practitioner operating mostly at this level needs to be able to use models to explain the system and its interactions. These models are not just to explain the software system but also the teams that surround that software. You need to understand the best models for organizing teams to drive maximum impact. Additionally, as the operator of complex systems they wear two hats : that of the producer and that of the protector against failure. The practitioner needs to be able to handle this duality well.
Completely Complex
Books for this level
According to the paper, a completely complex system is a dynamic process, which is constantly in a state of flux. Any patterns here are emergent. Changes have both short term and long term repercussions. You also realize that the system is self organized for the most part. This sounds a lot like the modern organization. At this scope you are typically operating as the technical leadership. You need to be able to form technical strategies grounded in the needs of the business.
So to summarize, this is what we end up with as a progression plan for developers over varying degrees of complexity.
from Hacker News https://ift.tt/34WQRAE
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.