Writing code is a creative process that involves using brackets and other symbols to encapsulate logical instructions, creating a framework that helps prevent errors. It’s like placing your thoughts inside brackets, and to excel, precision is key.

Software architecture, a broader concept than just writing code, encompasses the art of not only crafting individual pieces of code but also ingeniously connecting them to produce a cohesive whole. It’s the strategic orchestration of code components.

While coding tends to be rigid, software architecture strives to be flexible.
This flexibility is crucial because software architecture acts as the intermediary layer between code and the dynamic real world.
In the real world, adaptability is key, and flexible software is more likely to align with the ever-changing demands, unlike rigid counterparts that may quickly become outdated.

Many enthusiasts in OS development often wonder why “Plan9” from Bell Labs (not “Plan 9 from Outer Space“, the movie) met its demise despite its promising features.

The successor of Unix, Plan9 and its later iteration, Inferno, were conceived as evolutionary steps – some might label Plan9 as “Unix 2.0” and Inferno as “Unix 3.0”. Plan9, departing from Unix conventions, presented a revolutionary concept by treating “everything as a file“. In contrast to Unix and Linux, where this idea remains somewhat aspirational, Plan9 took it quite literally.

For instance , even the windowing system, was considered a file. This approach allowed someone using “Rio” Plan9’s second window manager following its first “8½” window manager, with the correct permissions, to observe and manage a screen from the network by simply mounting the folder containing the windowing system. This process eliminated the need for tools like the “X forwarding” in the Linux world… (or modern remote desktop software on Windows)

Plan9’s “Rio” windowing system, accessed remotely without additional tools or program logic !

In Plan9’s “everything is a file” philosophy, many tasks that typically demand dedicated tools in the Unix (thus Linux) realm were seamlessly integrated by design logic.

However, this innovation came at the cost of flexibility. While Unix (thus Linux), often requires specialized tools for various functions, Plan9 opted for a one-size-fits-all approach. In Unix (thus Linux), tools are tailored for specific tasks, each with its unique functionality. Plan9, on the other hand, implemented a default logic for everything, expecting the entire world to conform to its methodology rather than adapting to diverse scenarios. Despite its superiority in certain aspects, this lack of flexibility proved to be a stumbling block. The world, enamored with the adaptable Unix (thus Linux) and its… myriad tools, never fully embraced the less-flexible, albeit innovative, Plan9.

Consider the concept of elasticity and flexibility in materials, as explained by physics. In the physical world, structures like bridges are designed to be flexible to withstand external forces such as wind, temperature changes, and traffic loads. When a bridge is too rigid, it becomes more susceptible to cracking or failure under stress.

Similarly, think of a ball and an egg. A ball, being flexible, can absorb impact and deformation without cracking easily. On the other hand, an egg, although seemingly fragile, has a curved structure that distributes forces evenly, making it more resilient to pressure compared to a rigid object.

Now, draw an analogy to software engineering. In a flexible system, developers will be more productive and users will find their way inside your system.

Just as a flexible bridge can adapt to changing conditions and a flexible ball can absorb shocks, flexible software and mindsets can adapt to evolving requirements and changes without breaking. In the software field, embracing flexibility post-coding allows the software to gracefully handle unforeseen circumstances and modifications, enhancing its robustness and sustainability.

Therefore, dear software engineer, the plea is clear: be flexible when planning architecture, inflexible while writing code, and flexible again when you lift your hands off the keyboard.

Last modified: 23 Ιουλίου, 2024

Author

Comments

Write a Reply or Comment

Your email address will not be published.