As the prominent computer science (CS) scholar Knuth used to say “strings of binary digits can simulate numbers, automobiles, chess pieces, musical notes, electrons, patterns, human cells, colors, electoral circuits and so on.” As some of these things are not scientific the field of CS might then perhaps be described as being an art.
According to Knuth, not all CS is an art, yet the art can at least be implemented to its subfield of computer programming. Knuth uses the word ‘art’ in the sense that it is devised by man’s intellect rather than being derived from nature or instinct.
Today, when we think of liberal arts we usually associate it with the field of humanities rather than the sciences, yet the field of grammar, rhetoric, logic, geometry and astronomy were considered as being part of liberal arts in the sense that they were essential for a free person (liberalism). Therefore, CS could also be considered as a modern version of these fields.
The ability to analyze and construct processes is so important that it should be considered as being part of both science and liberal arts programs. Indeed, computer programming has the same relation for studying CS as an instrument does to studying music or painting does to studying art. According to Knuth, science is a knowledge that we understand so well that we can teach it to a computer. In case we don’t understand it fully, it can be considered as an art to deal with it. Since the concept of an algorithm or a computer program provides us with an extremely useful test for the depth of our knowledge on any given subject, the process of transitioning from art to science means that we learn how to automate something.
From Science towards Art
Every time science advances, part of art becomes science while art loses a little bit. Yet, in a mysterious way, art always seems to gain a net worth as the more we understand the more new things we invent which we can’t explain to the computers. So, we can conceptualize art as a temporary stage in the development of our understanding. If a particular subject is never fully understood, the remaining parts can be considered as being art.
Within the light of this information we can say that despite the great progress made in the field of AI (artificial intelligence) a huge gap still exists between what computers and human-beings can do in the near future. Still, much of what human beings can accomplish can be considered as being an art.
Furthermore, CS can also be considered as an art from an aesthetic perspective as it is akin to composing poetry or music. In fact, many scientists describe their theorems or proofs as being beautiful. In a similar vein, one can construct a computer program that is logically verifiable and easy to understand. The practice of computer programming requires a form of creative expression, yet of course, it is not just an art.
The art of programming also requires organizing complexity, mastering multitude as well as avoiding chaos as effectively as possible.
Software entities are more complex in comparison to other human constructs as no two parts are alike. Within this regard, software systems differ profoundly from buildings or automobiles that include repetitive parts. The complexity of software is an essential property rather than an accidental one.
From Parts to the Whole
CS is the study of complexity in general and in all nature rather than being a mathematical subject of computational complexity. Needless to say, information processing systems are one part of the study of organized complexity.
Programming, when stripped of all its contextual irrelevancies, can be considered as being no more and no less than a way of thinking of how to avoid unmastered complexity in an effective way. Programming helps avoid complexity as CS offers a standard way to handle complexity, namely a hierarchical structure. Programs are built from programs. Even the smallest sub-program is a compilation of sub-components. Programmers develop sub-programs by gathering discrete elements such as data, data structures and algorithms into a coherent whole. The engineering aspect of software engineering involves knowing how to assemble these components to produce the desired behavior. This is the underpinning idea of how a computer program is a construction from simpler things each of which can recursively be analyzed down to primitive operations and data structures of one’s programing system. In the case of a Turing machine, these would include operations of mobbing and printing and data structures built in the form of ‘0’ s and ‘1’s.
A Method or The Method?
CS certainly offers many techniques for handling complexity: structured programming, abstraction, modularity, top-down design object-oriented programming, recursion, etc.. to name a few. Within this regard, CS might be a good way, if not the best, to study complexity.
Viewing CS as a study of abstraction and the mastering of complexity would also apply to the fields of physics, mathematics or philosophy. As there is no single science or art that can be considered as understanding the nature of reality and dealing with it CS should also be not considered as being the best way to understand complexity.