http://qs1969.pair.com?node_id=1230957

Antiquitates - liber II - De trivio atque quadrivio

2772 AB URBE CONDITA / 9317 September 1993

Introduction

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.
In this second liber I'll try to focus on which place our programming activity has to be placed in respect to other professions or techniques, sciences, arts as they were in ancient world.
I will also try to describe how the knowledge was organized and taught in the past and in which way we can, today, profit this ancient wisdom.

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.
The first think I like to underline is how a general concept we all have in our minds, we can say a platonic idea, can be better profited if we operate a trichotomy on it. Infact sometimes words can hide a meaning, like a wood hiding trees, but on other hand, to analyze areas where words overlap can cast a new light of understanding.

τέχνη - 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.
So programming is an art, which kind of art?

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.
Such freedom is not a gift but more a terrain to defend with tooth and claw. The system, the money profit, will always tries to cut this terrain under our feet: we have seen in which direction internet and programming evolved in last decades.

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.
But arts were not strictly classified into seven distinct fields until Middle Ages. Was Martiano Capella in his Satyricon or De nuptiis Philologiae et Mercurii (On the Marriage of Philology and Mercury) also known as De septem disciplinis (On the seven disciplines) who made a clear distinction about arts giving a definition of the quadrivium (divided into four parts) in opposition to the above mentioned trivium. With the Insitutiones by Cassiodorus this division became the standard of educational thought and passed from Middle Ages to the modernity.
The quadrivium was the latter part of the study programme including: arithmetica, geometria, harmonia and astronomia.

We can probably profit the analogy between trivium and programming education and activity.

Grammatica

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.
While the syntax of a programming language is the first thing taught nowadays, not enough importance is given to words.

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.

Dialectica

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.

Rhetorica

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.
Rhetoric moves its steps from grammatica and dialectica and, under the light we have analyzed them, the same thing does programming.
Rhetoric is the art of speaking and has its own theory and tecniques but it will be empty without the support of other sciences like geography, history, law and literature among others. The same is for programming: it would be a sterile excercise without the understanding of operating systems, networking, mathematic, statistic, natural languages, data storages, world wide web and others.

Conclusions

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.
Programming is a liberal art because it permits a sane interaction with the machine, an exstension of our abilities, not an amputation of faculties. Such freedom must be defended or programming will eventually fall among mechanic arts.
Finally if we accept the analogy between trivium and information technology we can profit of what would be propedeutic to programming and we discover how many affinities are between programming and rhetorica.


L*

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.

Replies are listed 'Best First'.
Re: Antiquitates - liber II - De trivio atque quadrivio
by trippledubs (Deacon) on Mar 23, 2019 at 01:54 UTC

    What a great series! I was at a book store and saw Zen and the Art of Motorcycle Maintenance after your first post, must have read it (the first time) in one day. Thank you for the perfect introduction and memorial to a great thinker.

    Art is high-quality endeavor. Quality and its manifestations are in their nature, the same. -Pirsig

    It's funny in an amazing way, how kiddos learn to speak. I think the profit motive! Sure, they love you, but you are the food source also, the ride to the park, the partitioner of youtube. And they are the continuation of your DNA, the biological imperative. One does not profit at the expense of the other. Automation is going to be a big win for the VAST majority. Socrates next door neighbors could not even begin to consider his wisdom faster than I can with Amazon. Is this not the epitomic manifestation of quality?

    There is a great quote in almost every page of Zen. OK one more.

    In time you will come to see that the screw is less and less an object typical of a class and more an object unique in itself. You will begin to see the screw not as an object at all but as a collection of functions

    What is THIS object doing that is important?

    What are the collection of functions (class properties, methods) that these objects provide?

    Or I could see "collection of functions" being an abstract base class, the most generic idea, like 'Joins two things together'

    "Some programs are elegant, some are exquisite, some are sparkling." - Knuth

    In Knuth's list of the good:

    • It's especially good to have a program that works correctly.
    • It is often good to have a program that won't be hard to change, when the time for adaptation arises.
    • Interacts gracefully with its users
    • Recover from human errors in the input data.
    • Meaningful error messages, flexible input formats
    • Efficiency with which the computer's resources are being used

    Knuth also points out that artificial restrictions help develop skill. Perl one liners!

    I believe the deepness reacheable by human thoughts has not improved over centuries.

    I can't tell if you mean, all the centuries since the Roman Empire, or it takes a century or two to improve. Olympic records are broken after a while, when some greater athlete comes along. The mind likewise: Charles Darwin, John Stuart Mill, those two guys that invented Calculus at the same time. Even if you are right, it's no big deal. Plenty to consider already! And you keep adding to it!

    There are so many great ideas in your post.. Language is really not equipped. Maybe just English, I don't know. Art + Science, there should be one word to combine both ideas. You are exactly right, when you say one or the other, there is an image that forms in your mind that almost precludes the correct idea from forming. Your initial thought, more like a culturally based reaction, leads you in the wrong direction.

    But when you are applying yourself fully, trying to convince the machine to do what you want, combining your reasoning and your current understanding of the machine, reaching deep for the grammar that you have available, the rhetoric is firing off in your brain, you are trying to convince yourself what the right structure to put into the machine is. You know the payoff, the pride of Quality, the good, the accomplishment will come, eventually all the pieces finally fit into place, and you get that 'well done' pride of accomplishment -- Is truly great! Thanks++

Re: Antiquitates - liber II - De trivio atque quadrivio
by bliako (Monsignor) on Mar 24, 2019 at 13:11 UTC

    With art, there are at least 2 faces, I think. One is the satisfaction of the artist, how the artist feels when working and when finished and how the artist released internal feelings and how the artist transformed extenral stimulus, how the artist used and referenced others' work (shoulders of giants) and of course how the artist used craft,skill,innovation to accomplish the work. Second face is how others perceive the art product, understand it, get stimulated by it, how does the art product sets our chemical factory in motion and causes us to strip naked, dance or copulate when is perceived by our hypothalamus. This has a time dimension and a cultural dimension: how does an art product be perceived by different cultures and at different eras?

    I would like to set a few questions after Discipulus post regarding appreciation of art over time and whether art of one civilisation has any meaning to another. And how does programming, if is art, compares, with respect to these two metrics, with what most of us were taught art is.

    Are programming's products timeless? Can they be appreciated the same over different eras?

    Most other arts' products not only are timeless (big question mark here) but their appreciation increases with time (it seems to me). But a for-loop in BASIC printing "hello", is it not banal after a while?

    Another question: can a program (or part of it, a clever hack) be understood by alien civilisations (if they exist?). Or at least understood better than human art? For example, space-capsule Voyager (Voyager_program) travels in space since 1977 with some human art products (a golden record - how banal that is btw) aimed for whatever aliens happen to cross its path.

    Would sending a pictorial description of adding-with-carry be better understood by the little (better be!) neon-green man? Or a regular expression Graph? What about the tic-tac-toe lesson in War-Games? In the form of an algorithm I mean or a Graph. And what about showing the alien how we do recursion, surely a higher-order form of programming art?

    A nightmare for me is thinking about when something I wrote does not compile any more because the compiler gone bust or the graphic's library is no longer around. I have some first programs in Borland C who are long obsoleted, I have lots and lots of ZX-Spectrum BASIC that can't even get it out of the tape. (I think Choroba mentioned similar experience on cb). I have long dot-matrix printout of a dragon-dungeon game in csh but it is humanly impossible to retype. Surely a programmer is so disadvantaged over an artist in this respect. Though mind you those hipster generations can't even understand anymore what "easy rider", "homo faber", "dr strangelove", "accatoneaccattone", "solaris", "stalker", "last tango in paris" was all about.

    Edit: it was all about we are all diverging, like the fcuking universe is. Diverging. Me here, you there. Me ching, you chong. Unless we all ching, or chong. I still can't digest that my mental effort is long lost in oblivion, dust over the aeons. fcuked by non-existent gods. I beg to differ as long there is pulse.

    bw, bliako

      I've seen things you people wouldn't believe. Attack ships on fire off the shoulder of Orion. I watched c-beams glitter in the dark near the Tannhauser Gate. All those moments will be lost in time, like tears in rain
      

      ... like programs on obsoleted interpreters all claiming to be Turing complete ...

      time to go, bliako