Contents

Software as a form of art

It is well known that software development is not usually associated with artistic but technical disciplines; Universities all over the planet are faced with the challenge of teaching software as an “engineering” or a “science” oriented to being exact, something that intelligently already revealed as a contradiction in itself Edsger Dijkstra in his EWD 1036 titled “On the cruelty of really teaching computing science” in 1988.

A number of these phenomena have been bundled under the name “Software Engineering”. As economics is known as “The Miserable Science”, software engineering should be known as “The Doomed Discipline”, doomed because it cannot even approach its goal since its goal is self-contradictory. Software engineering, of course, presents itself as another worthy cause, but that is eyewash: if you carefully read its literature and analyse what its devotees actually do, you will discover that software engineering has accepted as its charter “How to program if you cannot.".

Without going into the extensive debate that has already taken place on this topic, I start from this hypothesis that poses as impossible the development of software as a civil engineer would do in a work, or a mechanical engineer with a piece. The software is different, although they can be tools, mathematics, exact sciences and natural engineering practices cannot be applied to the construction of the software. So it is not clear how to define software development, this is what I propose to answer today.

Utilitarian art

It is one that incorporates the ideals of composition and creativity to everyday objects such as a magazine, a lamp or a mug. It is important to note that not all objects created are art in themselves, since it requires that their elements be organized under the same aesthetic sense.
UI/UX

UI/UX - @halacious at unsplash.com


This categorization could include all the development of graphical interfaces and user experience (UI / UX), which is regularly built on designs previously captured in images by graphic designers. Although the designers give you an artistic framework, it is the role of the user experience developers who develop the transitions, widgets, shadows and animations that the software contains (web page, desktop application or mobile).

The beauty in coding

Not satisfied with the essential utility of any software product, there exists within the same discipline a tendency to simplify abstraction models, programming languages and even development environments with the sole purpose of making the job more “pleasant” for the software developer.

This trend begins to be important after the creation of the BCPL language designed by Martin Richards at the University of Cambridge in the 1960s, trying to simplify the CPL (Combined Programming Language) developed by the Laboratory of Mathematics at the University of Cambridge and the Computing Unit at the University of London making it more elegant, orderly and easy to adapt. This same trend was followed for the creation of the B language and later for the mythical (and still current) C language.

In summary, the history of the development of programming languages goes according to the creation of languages that, not only can extend the complexity of the abstractions proposed in the so-called “computer science” such as memory use, concurrent programming, functional or object orientation, but also facilitate reading and promote their beauty. Two clear examples of this are the programming languages Ruby and Python to which their developers wrote a series of rules called “The zen of python” in which they stand out:

  • Beautiful is better than ugly.
  • Explicit is better than implicit.
  • Simple is better than complex.
  • Complex is better than complicated.
  • Flat is better than nested.

And in the case of Ruby, its reflexive and simplicity-oriented design allows the creation of code not only understandable, but with all the aesthetic components:

1
2
3
4
5
6
#Fibonacci sequence in Ruby 
def fibonacci( n )
  return  n  if ( 0..1 ).include? n
  ( fibonacci( n - 1 ) + fibonacci( n - 2 ) )
end
puts fibonacci( 5 )

Ontology as a starting point

Ontology is a branch of philosophy that aims to study what exists, as well as the relationships between existing entities, it is also called “general metaphysics”.

There is a great ontological component in the development of software, coming from being a profession in principle marginalized, not relevant and relegated to women evidently despised in their time (who at the time were just beginning to be included as part of the academy and forces labor), it was one of them (Ada Lovelace) that formally created the first computer program.

It is no coincidence that a discipline that was started and dominated by women in its early stages was subject to endless influences from all branches of existence, from aesthetics to science. Women, being the gender most associated with the social sciences 1 , had a positive and definitive impact on the subsequent ontological evolution of software development.


Grace Murray Hopper

Grace Hopper, known to her friends as "Amazing Grace"


The influence of women in this sense is invaluable, examples of this are abundant, such as Grace Hopper being the creator of the first compiler in history or Margaret Hamilton who develops the “on-board” navigation software for the Apollo Space Program.

Another nice example of ontology applied to programming is written by Randall B. Smith and David Ungar in a paper entitled “Programming as Experience: The Inspiration for Self” specifically in a section dedicated to their motivation for writing it:

Programmers are human beings, embedded in a world of sensory experience, acting and responding to morethan just rational thought. Of course to be effective, programmers need logical language semantics, but theyalso need things like confidence, comfort, and satisfaction — aspects of experience which are beyond the do-main of pure logic.

A look to the future

In all areas of humanity, history tends to repeat itself, as we saw in the plastic arts, going from cave paintings to the intensity and precision of Renaissance art, then to the depth of Baroque to reach the maximum expression of simplification with conceptual art likewise we can reduce the history of software development from incipience to intensity and depth ending in maximum simplification.

Contrary to popular thinking, which expresses that software development has a tendency to disappear with the advance of artificial intelligence, just as it happened in the plastic arts, I believe that the future of the trade is destined for us to work on concepts rather than on implementations. There are several examples of what this means, the most recent and famous Github Copilot.

Humans advance because we are the only animals that can think of concepts, myths and we can express it through language. All these abstractions and motivations will continue to exist despite the development of tools that help us improve ourselves.

Conclusion

Software development is a profession oriented towards artistic expression, the best representation of this being video games, but also from a non-contemplative but utilitarian point of view, programming focuses its efforts on creating more and better abstractions for more beautiful results.

"It made the mysterious become diaphanous"

Daniel Molina




1 According to a 2015 study, 66% of researchers in the social sciences are women. Source.

This article can be also read on the Cecropia Solutions' blog (Spanish) .