If you pay attention you will begin to notice patterns in everyday life. A particular example usually occurs in the summer, as you walk by a restaurant where the public entrance is street side and a few meters away is the kitchen entrance. In some cases they are very close together and positioned in such a way that you get a view into the dining room with a handsome host or hostess waiting to greet visitors, elegant lighting, beautifully thought out interior decoration and (if you were to enter) soft, calming music to dine to. As you continue to walk you get a view into the kitchen, with the stove top range shooting flames a meter into the air, lots of people working in close proximity with stains on their clothing and a general feeling of being hurried and panic-stricken, as well as loud music with a fast rhythm promoting high energy.
After observing these features of restaurants enough times I couldn’t help but see the analogy to software platforms: The front end is polished with well thought out designs for the user interface (the interior design of the dining room), the menu design which applies the same principles of user interface design in software such as balance, negative space, typography, size, and proportion, color theory, et cetera. Then you continue to the kitchen where things are like the back end of a software stack: messy, loud, and dirty, not meant for public consumption (like the stereotype of most software developers :) ). You apply your proprietary algorithms to create a unique product. You both take raw ingredients of data, programming languages, and tools in the software case; raw food, cooking tools, and chemistry in the restaurant case, to create your business value. Both back ends also share that they are not to be viewed by the public and that the public usually doesn’t want to see them either, they just want their delicious product, which to them may as well be created using magic.
It is interesting to me how easily the analogy worked in this case, especially since restaurants are much older than software. Leading me to think there is something inherent in humans and how we organize our systems into subsystems recursively.
Being in software makes you view the world differently: you see data structures and algorithms everywhere. Clustering patterns of people bring to mind clustering algorithms with people represented by vertices in a graph data structure, to the obvious analogy of natural trees to the data structure with the same name, to distributed patterns applied to insects such as bees and ants. I think most of us take for granted how the structures of our society can map to ideas in software (granted you would have to be versed enough in software principles to make the connection) and more than likely how ideas from software can be applied to our society to improve the systems we use to operate the human world. Restaurants are just one easy to map idea, but it is not difficult to see the relationship between corporate and government structures to software architectures as another example.
I am sure the same connections could be made to other areas of study. I imagine biology, chemistry, and astronomy being easy targets due to the recursive structures of those fields - for example in astronomy: a universe is composed of galaxies, which is composed of solar systems, which are composed of stars and planets, et cetera - but I unfortunately do not have much domain expertise in these areas, and thus applied the thought to software. Although, one advantage of being versed in software is how everything is abstract from the start so you are trained to think of things one or two levels up the abstraction chain, whereas I am not certain this would apply to other disciplines.