I’ve never consciously thought of learning as a craft — as an aptitude in itself — until I was knee-deep in Launch School. Everything was new and unfamiliar. Daunting, challenging, and from time to time, overwhelming. The world of software development was foreign to me and the attempt to master it proved to be a juggernaut of a task.
I don’t mean to paint too grim a picture seeing that the journey wasn’t always over strange territories with dangers lurking at every corner. But learning software development is pretty much studying a whole ecosystem of processes, dependencies, and components. There are so many moving parts that it’s easy to lose bearing and feel like you’re aimlessly wading through a swamp. Every step, so heavy.
As the saying goes, confusion is the sweat of learning. Much of the things I worry about would, in time, resolve itself. With consistent effort, everything will click. I would then be able to understand without the need for deliberate thinking and analysis. But I was uncomfortable with this — being in the dark in the interim. I didn’t quite like that I couldn’t wrap my head around it effortlessly.
It is unreasonable to expect second-nature understanding from someone inexperienced. In truth, what bothered me was that I was missing something. Perhaps a first principle of sorts; an essential foundational proposition from which to build, layer upon layer, expertise. Or maybe a heuristic that can be employed. Whatever it is, that nugget eluded me.
In an effort to gain clarity, I doubled down, started pondering and even read books on learning methodologies.
How do I learn better? How do I get a better intuition about things? Is it even possible to get an intuition of things without much experience? What should my approach be? What’s the right mix of bottom-up and top-down approach? What’s the right mix of practice and theory? Which precedes which?
In the reading frenzy that followed, I walked away with critical realizations that proved to be helpful.
Thinking in Systems by Donella Meadows is a primer on socio-ecological systems that provides a framework with which to study systems and possibly diagnose and treat failures.
“Thinking in Systems, is a concise and crucial book offering insight for problem solving on scales ranging from the personal to the global. Edited by the Sustainability Institute’s Diana Wright, this essential primer brings systems thinking out of the realm of computers and equations and into the tangible world, showing readers how to develop the systems-thinking skills that thought leaders across the globe consider critical for 21st-century life.
Some of the biggest problems facing the world―war, hunger, poverty, and environmental degradation―are essentially system failures. They cannot be solved by fixing one piece in isolation from the others, because even seemingly minor details have enormous power to undermine the best efforts of too-narrow thinking.”
Though the concepts applied to social and ecological systems, a few ideas were pertinent to learning software development. In particular, it was helpful in ushering a deeper recognition of software development as a system of technologies.
Meadows begins with a simple definition of systems.
“A system is a set of things — people, cells, molecules, or whatever — interconnected in such a way that they produce their own pattern of behavior over time.”
Meadows, Donella H.. Thinking in Systems (p. 2). Chelsea Green Publishing. Kindle Edition.
What’s interesting to note is that systems produce their own patterns of behavior. Jolted by a stimulus or buffeted by force, a system reacts. It is a reaction that is unique; the same outside event is likely to produce a different response in another system.
Going on a tangent, to say that behavior rests on the system alone is quite subversive especially when you think about what that means. A person contracts flu because the body has the right conditions for viruses to flourish. Economic and political leaders do not cause recessions and booms; it is inherent in the economy. The same follows for war and poverty.
Regardless, a system responds. The response is a function of the elements, interconnections, and purpose/function of the system. The author provides excellent examples of systems and breaks them down to their components.
“A football team is a system with elements such as players, coach, field, and ball. Its interconnections are the rules of the game, the coach’s strategy, the players’ communications, and the laws of physics that govern the motions of ball and players. The purpose of the team is to win games, or have fun, or get exercise, or make millions of dollars, or all of the above.”
Meadows, Donella H.. Thinking in Systems (p. 11). Chelsea Green Publishing. Kindle Edition.
Similarly, web development is a system with elements such as browsers, databases, web servers, programming languages. Its interconnections are the protocols that allow the disparate elements to collaborate, the physical network, as well as the laws of physics that govern the shuttling of bits and bytes. The purpose could be as simple as creating a web page to building a multi-million dollar business.
The author proceeds to cite the oft-quoted the whole being more than the sum of its parts.
“A system is more than the sum of its parts… There is an integrity or wholeness about a system and an active set of mechanisms to maintain that integrity. Systems can change, adapt, respond to events, seek goals, mend injuries, and attend to their own survival in lifelike ways, although they may contain or consist of nonliving things.”
Meadows, Donella H.. Thinking in Systems (p. 12). Chelsea Green Publishing. Kindle Edition.
This was a quasi-lightbulb moment for me. Leapfrogs in conceptions do not necessarily precede novel realizations. It could merely be through reacquaintance of old notions. Being more cognizant of the connectedness of things shifts the focus from components and reductionism to systems and holism. An approach that I’d argue leads to better intuition.
“You think because you understand ‘one’ you must also understand ‘two,’ because one and one make two. But you must also understand ‘and.’”
- Mawlana Jalal-al-Din Rumi
Among the three things that make up a system, the author goes as far as saying that elements have the least effect on the behavior of the system. In other words, changing individual elements don’t change things much.
“Changing elements usually has the least effect on the system… The least obvious part of the system, its function or purpose, is often the most crucial determinant of the system’s behavior. If the interconnections change, the system may be greatly altered…”
“The elements, the parts of systems we are most likely to notice, are often (not always) least important in defining the unique characteristics of the system — unless changing an element also results in changing relationships or purpose.”
Meadows, Donella H.. Thinking in Systems (p. 16–17). Chelsea Green Publishing. Kindle Edition.
Meadows revisits the football example to further her point. Replacing all the players in a football team doesn’t change the nature of the team. It may be a worse (or better) team but it’s still recognizably a football team. Changing the rules, however, transforms it into a totally different game. And what if instead of winning, the purpose becomes losing?
On some level, you can think of the interconnections and purpose as the bearers of a system’s identity and the elements as an indicator of how effective a system accomplishes its purpose. It’s not to say that elements are unimportant. They are, but only in as far as they propel the whole forward.
Given the hierarchy, even what comprises a good cog is heavily influenced by the two other components of a system. Drop a football player in a basketball game and all his learned dexterity loses relevance and his physique not considered ideal for the sport.
In order to truly comprehend a system, therefore, look to the overall purpose and the slew of interconnections between them that work towards fulfilling that single purpose. A lone component doesn’t do much. A technology’s value is determined by both its contribution to the whole as well as what it enables by working with other parts. HTML, session storage, databases — they are just cogs in the web development mechanism; each part tasked a specific duty to make a whole work.
Extending the metaphor, imagine in your palm a jigsaw piece with one-half blue and the other half green. Trace the outline all you want. Notice the gradient fade from deep azure at the top to sky blue in the middle before making way to solid green all the way to the bottom.
No amount of close examination will give a complete understanding of what that little piece is — or even an inkling of what to do with it. Next to hundreds of more similar pieces, it gets confusing fast.
If you know that the puzzle is a landscape with a lush and vibrant forest below an azure sky, that same piece then starts to make sense. You now know that the upper half is the sky and the lower green is the forest. You know you have a piece of the horizon. Therefore, pieces to either left or right should similarly be half blue and half green.
A jigsaw piece only makes sense as it relates to the pieces around it and only derives value from how its presence augments the completeness of a picture. It may be pretty but in and of itself, it is useless.
To fully understand something, is to be constantly aware of its place in the bigger picture.
“Once you start listing the elements of a system, there is almost no end to the process. You can divide elements into sub-elements and then sub-sub-elements. Pretty soon you lose sight of the system. As the saying goes, you can’t see the forest for the trees. Before going too far in that direction, it’s a good idea to stop dissecting out elements and to start looking for the interconnections, the relationships that hold the elements together…”
Meadows, Donella H.. Thinking in Systems (p. 13). Chelsea Green Publishing. Kindle Edition.
In the context of systems, you can go too far on a single cog. In retrospect, I have done so on multiple occasions. There is nothing inherently wrong with deep dives, and it has its merits. But in-depth exploration must be anchored to the whole and must be preceded with a solid understanding of the interconnections.
However, getting a strong grasp of things not only necessitates mastery of the individual components but more importantly, absolute comprehension of the interdependence. Thus, the understanding of links should not be relegated second priority. Frequently reinforcing the connections provides a better intuition of the web development ecosystem and guarantees a strong mental map from which to venture out to unknown territories.