Antiquitates - liber II - De trivio atque quadrivio
2772 AB URBE CONDITA / 9317 September 1993
This is the follow up of the Antiquitates - liber I where i described the goal of these meditations: to profit of ancient wisdom to see and ponder our work as programmers in a new light.
Programming is an art
It's since longtime we know that programming is an art: it was the year 1974 when Computer Programming as an Art appeared. Please take your time to read the above text because it will be the starting point of the current writing.
τέχνη - ars - science
A great, positive energy ties these three words togheter and while τέχνη (tèkne) and art were stackable in meaning, if not the same thing, during ancient times, nowadays they are used in a very distinct way. But they shade into each other if we use them in relation to programming, if we, as programmers, are seeking the creation of something beuatiful, in a very personal sense of the word. Is evident that programming causes both intellectual and emotional pleasure.
A big difference from technique or skill and art will appear if comes the time to teach programming and while to teach a technique can be hard but is anyway feasible, to teach the research of intrinsic quality and the beauty of a task is more like a guidance to lead the pupil to discover their own way to feel such beauty and to be emotionated by their work. This makes programming an art.
In the Knuth's article is shown a driving force put in the transition from art of programming to the science of programming. He describes this as the positive intention to standardize programming knowledge to make possible programming automation. The process must be seen as an enrichment of our colture, not as a lessen. Even in the most extreme future scenario, when artificial intelligence will eventually write better programs than us, this intelligence will need to be instructed with good quality specifications, and we know how hard can be, and with big data arranged in a proper way: this will be for sure an art, even if very different from what we are used today.
Mechanic and liberal arts
Arts needed to live as a free citizen in the community were liberal arts, while others arts (notice: not techniques) were considered mechanic ones, more tied to a job or occupation and not strictly related to public life in the community.
Is programming a liberal art or a mechaninc one? Many people not involved in programming will opt for the latter. I disagree. It was told once that all technologies are an extensions of some human faculty or an amputation of one of these faculties, physical or psychic.
In our digital era I find programming one of the few, if not the only, sane interaction with the machine: we instruct the machine directly, extending our will into the area of calculation cycles and memory addresses. We are bound only by the depth of our skills and, obviously by the reality, being this reality the OS, the kernel and the various media types and by the limits of the tool we choosen to program with.
Programming and possibly many collateral knowldges due to the programming activity, makes us a little more free, in our digital era, than other types of workers: we are seen as wizards of arts in the modernity and in this false progress fulling everyone's mouth.
We have to underline the adjective liberal: it comes from libertas, the Latin word for freedom. What a great word. It was used in our case to differentiate liberal arts from mechanincs ones.
Art of programming is definitely a liberal one. Now we have to identify which of the seven liberal arts can be programming and if we can take advantage by an eventual analogy.
Seven liberal arts
Liberal arts were the first programme of high education in the western colture and they are found in the Latin litterature since the age of Cicero, but for sure they were present before him and the trivium (divided into three parts) was called in this way during the Roman Empire and it was the basic programme of the school, ie the study of grammatica, dialectica and rhetorica.
We can probably profit the analogy between trivium and programming education and activity.
Grammar was the first step for ancient pupils in the trivium. What grammatica can be in relation to programming? It is the set of rules that make a lanuage and its syntax but also word knowledge. Words are parts of the speech, little tiny objects tied up using rules and an appropriate syntax.
In natural languages practice we can profit all words spoken around us during our childhood and this thesaurus can be extended reading books, learning poetry or songs. The objects of a natural language are all around us everytime, they are natural: starting from mother, father and food all these words acquire their sense in our brains. At some point we are taught about rules governing these little objects.
The situation would be very different if we were born alone in a black, empty room where, after some years a teacher of a natural language would arrive.
In programming nothing is natural and we born in a black room nor the experience as end user of a computer system can give us the understanding of what happens under the surface of a point and click user interface.
So while teaching the grammar of a programming language would be important to expand the thesaurus of objects to play with, in parallel. What is bit and what a byte? Why there is the notion of an octet of bits? What a file really is and how it is different from a link? What memory is? Which kinds of memory exist? What programs are? Where they live? What is an environment? What a shell? What protocol means? What happens when I open my browser and I search for something? How can a computer understand floating point numbers or chinese characters?
We all started programming during the first or second generation of the internet era: we mounted large floppy drivers with our first operating systems. Nowadays the hardware ships with its OS and if this goes out of run a tecnichian has to be phoned.
So we have to profit of what is propedeutic to the programming activity, the syntax and general concepts but without forgiving we all born in a black empty room, alone.
In our acception dialectica has to be seen not only as the discourse between two people arguing with different opinions, but more as minor logic. So we discuss this part of the trivium meaning dialectic and logic.
Logic is propedeutic to programming and must be taught before any serious attempt to program. From a programming point of view logic can be seen as all methodologies that can be used to create algorithms. There are general principles, shared by many programming languages that can be taught in abstract: iteration, callback and recursion, the cache mechanisim, depth and width first search, sorting and parsing, abstraction of behaviours, boolean logic and many others.
Programming patterns and good practices are general logic mothods to be studied per sé before going into the depth of a particular programming language.
On other hand, strictly speaking, the art of testing is purely dialectic. We learn how to stress our code with the flames of the real world, when will be not sure what it will come into functions we wrote. Tests describes, literally, our code, marking what our code does and what it does not. Testing techinques can be taught separatly as general practices without focusing on a particular programming language.
So with the above two studies, grammatica and dialectica we are well prepeared to the great art of programing.
Programming is the rhetoric of the internet era. It's a general purpose art to solve problems. Where rhetoric aims to persuade, or motivate particular audiences, programming goal is to get the job done, to persuade the machine to act after our will.
Programming is an art as long we seek the creation of objects of beauty, as long we are emotionated by it, as long it remains not completly automatable.
There are no rules, there are no thumbs..
Reinvent the wheel, then learn The Wheel; may be one day you reinvent one of THE WHEELS.
In reply to Antiquitates - liber II - De trivio atque quadrivio by Discipulus