# On creating software Created: 2023_07_03 15:14 Tags: [[Technology]] The creation of software operates at several layers of abstraction. [[The Formula The Universal Laws of Success - Albert-László Barabási|Success in software, is not easily measured]] yet it can be "mastered". ## Software as Art Obviously software is a tool to create, so it can be utilized to make master-pieces of games, music, films and entire experiences. This is not the aspect that I'm interested in exploring at this moment, I'm trying to get to how developers think of software. I think that a natural way to investigate this is to look how software is being described and see if we can learn anything from it. There is something to be said about software as a form of expression, we talk about good code as *poetry*, things can be *idiomatic* and even *concise* or *verbose*. Then there is an aspect of software related to disgust; we talk about things like *code smells*, *spaghetti* code, *trash* code, *throw-away* code. This is in contrast to software that is *clean*, *organized*, & *well-structured* code. So, in a sense, there is an axis of disgust ranging from dumpster-fire to elegant ![[Axis Of Disgust.excalidraw.svg]] But code can't be all art right? An elegant piece of code would also imply that it also satisfies it's intent very well too. So what does that mean? ## Software as Engineering There is much debate on whether software is even considered to be engineering. But using a minimal definition of engineering, I think we can agree it may fit the criteria: > The application of science and math, to solve problems Whether it actually is considered engineering or not is besides the point for this article though. The point of concern is around how software is meant created to solve problems (even if only problems software itself created) and how that relates to it's creators. An aspect of interest might be how rigorously things are made, whether they use *dynamic typing* or *static typing*, documentation, specifications, architecture documents. Then on top of this many rituals have been created to create these code artifacts, processes, systems, agile, waterfall, etc. TODO not yet done here... ## Software in General At the end of the day, software works at several layers of abstraction so it can be said to **be** any one of those layers. But in reality, it is working at all of those levels simultaneously. I'm not sure where the future of software is going, but I know one thing, it will always be designed to be centered around us. Whether the code we write is the code that gets executed I think is mostly unimportant. I think that we are moving towards a different model, [[Constrained Programming]]. ## References -