Software as an Art Form

\ÒIt made the mysterious become diaphanous.Ó

Daniel Molina

It is well known that software development is not usually associated with artistic but with technical disciplines; universities all over the planet face the challenge of teaching software as an "engineering" or a "science" oriented to be exact, something that was already cleverly highlighted as a contradiction in itself by Edsger Dijkstra in his EWD 1036 entitled "On the cruelty of actually teaching computer science" in 1988.

Several of these phenomena have been grouped together under the name "software engineering. As economics is known as "The Miserable Science", software engineering should be known as "The Doomed Discipline", doomed to failure because it cannot even come close to its goal, since its goal is contradictory in itself. Software engineering, of course, presents itself as another worthy cause, but that is eye-washing: if you carefully read its literature and analyze what its devotees actually do, you will find that software engineering has accepted as its charter "How to program if you can't."

Without going into the extensive debate that has already taken place on this subject, I start from this hypothesis that suggests that it is impossible to develop software as a civil engineer would do in a construction site, or a mechanical engineer with a part. Software is different, although they may be tools, mathematics, exact sciences and natural engineering practices cannot be applied to the construction of software. So how to define software development is still up in the air, this is what I intend to answer today.

Utilitarian art

It is that which incorporates the ideals of composition and creativity to everyday objects such as a magazine, a lamp or a cup. It is important to note that not all objects created are art in themselves, as it requires that its elements be organized under the same aesthetic sense.

\art
UI/UX - @halacious on 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 designers give it an artistic framework, it is the role of user experience developers to develop the transitions, widgets, shadows and animations contained in the software (web page, desktop or mobile application).

Beauty in coding

Not satisfied with the essential usefulness of any software product, there is a tendency within the same discipline 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 began to gain importance with the creation of the BCPL (Basic Combined Programming Language) language designed by Martin Richards at Cambridge University in the 1960s in an attempt to simplify the CPL (Combined Programming Language) language developed by the Mathematics Laboratory at Cambridge University and the Computing Unit at the University of London, making it more elegant, tidy and easier 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 is in line with the creation of languages that can not only extend the complexity of the abstractions proposed in the so-called "computer sciences" such as the use of memory, concurrent programming, functional or object-oriented programming, but also make them easier to read 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 highlight:

  • 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 thoughtful, simplicity-oriented design allows for the creation of code that is not only understandable, but with all the aesthetic components:

#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 marginalized profession, not relevant and relegated to women, evidently underestimated at the time (who at the time were just beginning to be included as part of the academy and labor forces), it was one of them (Ada Lovelace) who formally created the first computer program.

It is no coincidence that a discipline that was initiated and dominated by women in its early stage was subject to endless influences from all branches of existence, from aesthetics to science. Women, being the gender most associated with the social sciences1, positively and definitively impacted the subsequent ontological evolution of software development.

The influence of women in this regard is invaluable, examples of this abound, such as Grace Hopper being the creator of the first compiler in history or Margaret Hamilton who developed the navigation software "on-board" 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 (translated):

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

Programmers are human beings, immersed in a world of sensory experience, who act and respond to more than rational thought. Of course, to be effective, programmers need the semantics of logical language, but they also need things like trust, comfort and satisfaction, aspects of experience that are beyond the reach of pure logic.

A look into 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 the Baroque to reach the maximum expression of simplification with conceptual art, in the same way we can reduce the history of software development from incipience to intensity and depth ending in the maximum simplification.

Contrary to popular thought that software development has a tendency to disappear with the advance of artificial intelligence, just as it happened in the fine arts, I believe that the future of the craft is destined to work on concepts rather than implementations. There are several examples of what this means, the most recent and famous being Github's Copilot.

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

Conclusions

Software development is a craft oriented to 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.

You can also read this article in the blog of our developer Juan Pablo, where you can also find more topics of your interest: https://juan-pablo.net/es/software-art/

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

\Ò

Juan Pablo Garcia

Technical Lead

Scroll to Top