"The computer changes epistemology, it changes the meaning of understanding" (Gregory Chaitin).
"The computer is a stupendous new philosophical and mathematical concept" (Gregory Chaitin).
"Computing has to do with computers as astronomy has to do with telescopes" (Edsger Dijkstra).
The Philosophy of Computer Science
The philosophy of computer science deals with the philosophical questions that arise when studying the nature of computer concepts, such as: data, information, programming language, program, program, database, and so on. In short, it tries to discover the deep concepts that are hidden behind these superficial concepts.
The philosophy of computer science aims to develop a philosophy distinct from the philosophies of other disciplines such as mathematics and physics, disciplines to which computer science is related. But, until now, this philosophy has hardly been developed, essentially because computer science lacks − or has lacked until now− of solid foundations. For it is in these foundations that the philosophy is to be found.
The philosophy of computer science tries to contribute to a deeper understanding of computer science and eventually contribute to provide it with a foundation. In addition, philosophy does interdisciplinary work, because deep down all things are connected.
Contemporary philosophy, for its part, has privileged reflection on the phenomenon of information and communication technologies, and its most relevant manifestation: the Internet, the "infosphere", the global network that has produced the so-called "information society" or "knowledge society", which is considered the successor of the industrial or post-industrial society. The Web has become so important that "Web Science" has emerged.
The issues
Among the questions posed by the philosophy of computer science are the following:
What exactly is computer science? Is it a science or a technique? If computer science is a science, what are its foundations?
What is the difference between computer science and mathematics? Does mathematics play a role in computer science?
What is information? What is the difference between data, information and knowledge?
What is computation? Is there such a thing as supercomputing? Is there a computational limit?
What can computers do? What are their limits?
What kind of entities are digital objects? Do we need a new ontological category for them?
What is a programming language? What is a metalanguage? Do we need a hierarchy of metalanguages?
Why are there so many programming languages? Is it possible to build a universal language from which all other languages are derived?
Why are programming languages complex?
Why are there so many programming paradigms? Is there a universal paradigm from which to derive or express all particular paradigms? Are paradigms scientific theories?
What kind of entities are computer programs? Are they concrete or abstract entities?
What kinds of abstractions do programming languages contain? Are they the same as mathematical abstractions? Are there levels of abstraction? If so, is there a supreme level of abstraction?
What kind of semantics do programming languages have? Can the semantics of a programming language be formalized? What is the relationship between abstraction and semantics?
Why is there a semantic gap between programming languages and natural languages?
Why are data types needed in programming languages?
What is the difference between program and algorithm? An algorithm is usually considered a mathematical entity. So, is it possible to consider that a program is the manifestation (in the Platonist sense) of an algorithm? And that algorithms are abstract entities and programs are concrete entities? And is this the reason why an algorithm cannot be legally registered and a computer program can be registered?
What is the difference between programming and specification? Are there specification languages?
When can two programs be considered equivalent?
What is the relationship between a real machine and a virtual one?
To what extent is computing dependent on machines? Is it possible to do computing without machines?
Why is there source code and object code? Would it be possible to unify them?
What kind of logic is used by programming languages?
What does it mean that a program is correct? Is there any relation to mathematical proof?
Why are there so many abstract entities such as grammars, virtual machines, abstract data types, etc.? Can't they be reduced or simplified into a few essential categories?
What are the essential instructions that every machine or computational device must have?
Are programming languages mathematical structures?
What is the relationship between mind and computer?
Can machines think?
Why are there differences between programming languages and AI (artificial intelligence) languages?
Is it possible to unify ontology and epistemology in programming languages?
Is it possible to create a programming language that is both operational and descriptive?
Are there higher order computations and descriptions?
Is there really a clearly defined boundary between hardware and software?
Can computer programs evolve?
What are the possible forms of interaction between programs?
Of all these questions, the most fundamental is the one concerning the true nature of computing, which is not known exactly. This situation justifies that there are at least 4 names that attempt to capture its essential principle: 1) Computer Science; 2) Informatics; 3) Information and Computing Science; 4) Information and Communication Technologies, ICT.
From the dawn of the computer age to the present day, there have been numerous attempts to capture the nature of computing by definition, including the following:
It is a form of mathematics or a branch of mathematics.
It is computational mathematics.
It is the science of information processing.
"It is the science of computers and the phenomena surrounding them (such as algorithms, etc.)" [Newell, Perlis and Simon, 1967]. This view was also reflected in a later book by Herbert Simon [2006] entitled "The Sciences of the Artificial".
"It is the study (not the science) of algorithms and the phenomena surrounding them (such as the computers that run them, etc.)" [Newell & Simon, 1976; Simon, 1996].
"It is a natural science, not of computers or algorithms, but of procedures" [Shapiro, 2001].
"It is not a science, but a branch of engineering" [Brooks, 1996].
"It is the body of knowledge that deals with the processes of information processing" [Denning, 1985].
"It is the study of information itself" [Hartmans & Lin, 1992].
It is an "art", at least the task of programming, as reflected by Donald Knuth [1986] in his work "The Art of Computer Programming".
Until now there has been no fully accepted definition of computer science, because its true nature is ignored. It is in a similar situation to mathematics, which also has no solid foundation since 1931, when Gödel proved his famous incompleteness theorem. Perhaps this is also due to the multifaceted nature of computer science, which offers multiple aspects (information, computation, communication, programming languages, user interfaces, databases, graphics, the Web, etc.), which are not connected by a common root.
What is clear is that computer science is a very important discipline, since it represents a new integrating or unifying paradigm, a new consciousness, a new way of conceiving reality. It has been called "the science of the 21st century".
MENTAL as a Philosophical Computer
The above questions concerning the philosophy of computing have been posed from a superficial level of consciousness, from which a multitude of issues are contemplated. From a deep point of view, everything becomes clearer and simpler, and most of these questions and problems become meaningless or diluted because at a deep level the boundaries between domains disappear, the concepts become unified and connected through the primary archetypes.
Programming languages have been built from the superficial to the deep, from the particular to the general, from syntax to semantics, from machine code to languages close to natural language.
This strategy has had a positive aspect: it has made possible the development of Computer Science at a practical level. It was precisely the low level of abstraction of the Turing machine that inspired the appearance of the von Neumann architecture of computers, based on a sequential memory (like the tape of the Turing machine) where the program code (the operating rules of the Turing machine) was stored. Moreover, 0 and 1 are archetypes because they are universal opposites or complements, whose semantics are open to different interpretations.
But it has also had negative effects:
It has caused a lack of high-level substantiation.
The great complexity in the implementation of interpreters and compilers of languages. For it is a matter of implementing high-level concepts of abstraction with low-level elements.
The strategy that we consider correct is just the opposite: first establish the semantics, as universal as possible by means of a set of universal concepts, the deep, and then go towards the syntax, the superficial, the particular.
It is better, more appropriate and fruitful to rely on the deepest level: the primary archetypes, if we want to evolve towards systems of higher semantic level capable of implementing Artificial Intelligence and the Semantic Web.
To do "philosophy of computing" is to try to discover its foundations, its essential concepts, a process that goes from the superficial to the deep. But with MENTAL we do not have to do philosophy of informatics −just as we do not have to do philosophy of information− because informatics emerges from the primary archetypes, which are also philosophical categories, the supreme categories of reality. And what emerges are descriptive and operative expressions.
Mathematics and computer science are manifestations of the same primary archetypes. MENTAL is the theoretical and practical foundation of computer science and mathematics. The boundaries between the two disciplines are blurred because they share the same principles, although one can be considered dual to the other. Mathematics is more descriptive and demonstrative (it uses deductive logic). Computer science is more operational and uses decision logic. But the boundary between the two is blurred.
All aspects of computer science, hitherto unconnected, have a common foundation. It makes no sense, for example, to speak of "Web Science" as a separate discipline, because it is all based on the same principles.
The term "informatics" is not the most appropriate, because informatics transcends the concept of "information processing". Hence, the term "MENTAL" is intended to indicate that it is something that transcends mathematics and computer science.
Computer science is not the science of the artificial, as Herbert Simon claimed. It is quite the opposite. It deals with the natural, with reality, which are the primary paradigms, a reality that at its core is abstract in nature, with primary archetypes that manifest themselves as expressions that serve to describe, compute, interrelate, etc. Abstract reality includes abstract space and abstract time.
MENTAL is a model of the mind and the model of an abstract machine. The semantic primitives of MENTAL can be considered as the "instructions" of a hypothetical computer, a computer that can actually be built and that is a model of the human mind, of inner and outer reality. As these primitive philosophical categories are a priori, we can consider MENTAL as a philosophical computer.
Information and computation are two aspects of expressions. The first is passive (self-evaluating). The second is active (it is evaluated as a different expression).
The limits of language are the primary archetypes, the degrees of freedom, both at the descriptive and operational levels. It makes no sense to speak of supercomputing, just as it makes no sense to speak of superinformation, although we can speak of meta-expressions in general.
There is no conceptual difference between programming and specification. The only difference is in the level of detail. The same language is used. At all levels, from general to specific, the same primitives are used.
It links the descriptive and the operational (or computational).
The limits of the language are the primitives, which are the degrees of freedom.
MENTAL is a programming and AI language.
Most programming languages are "typed" languages. Types play a role halfway between syntax and semantics and have an implementational character. In MENTAL there are no types because there are no implementing references in the language.
Computer science is not tied to machines. It is tied to the deep nature of reality.
Computer science and AI share the same principles: the primary archetypes.
MENTAL involves an "archetypal linguistic turn", beyond the "linguistic turn", the "informational turn" and the "computational turn".
Computer science, in general, has been considered "the third culture", a bridge culture between science and humanism. But MENTAL is the true third culture. [see Union of Opposites - MENTAL, a Language of the Third Culture].
As a conclusion we can say that the archetypal paradigm bears its fruits: the true nature of the philosophy of computer science, and MENTAL as a philosophical computer, is clarified.
Bibliography
Brooks, Frederick P., Jr. The Computer Scientist as Toolsmith II. Communications of the ACM, 39:3, pp. 61-68, March, 1996.
Colburn, Timothy. Philosophy and Computer Science. Explorations in Philosophy. M.E. Sharpe, 1999.
Copeland, Jack. Inteligencia Artificial. Una introducción filosófica. Alianza, 1993.
Denning, Peter J. What Is Computer Science? American Scientist, 73 (January - February), pp. 16-19, 1985.
Floridi, Luciano. Philosophy and Computing. An Introduction. Routledge, 1999.
Floridi, Luciano (editor). The Blackwell Guide to the Philosophy of Computing and Information. Blackwell Publishing, 2004.
Floridi, Luciano (editor). Philosophy of Computing and Information: 5 Questions. Automatic Press, 2008.
Grim, Patrick; Mar, Gary; St. Denis, Paul. The Philosophical Computer. Exploratory Essays in Philosophical Computer Modeling. MIT Press, 1998.
Hartmanis, Juris; Lin, Herbert. What is Computer Science and Engineering? In Computing the Future: A Broader Agenda for Computer Science and Engineering, ed. Juris Hartmanis and Herbert Lin, Washington: National Academy Press, chap. 6, pp. 163-216, 1992.
Knuth, Donald. El arte de programar ordenadores. Editorial Reverté, 1986.
Leeuwen, Jan van. Towards a philosophy of the information and computing sciences. NIAS Newsletter 42, 2009.
Moor, James H.; Ward Bynum, Terrell (editores). CyberPhilosophy. The Intersection of Philosophy and Computing. Wiley-Blackwell, 2003.
Moor, James H.; Ward Bynum, Terrell (editores). The Digital Phoenix. How Computers are Changing Philosophy. Wiley-Blackwell, 1998.
Newell, Alan; Perlis, Alan; Simon, Herbert. Computer Science. Letter in Science 157 (3795), pp. 1373–1374, September 1967.
Rapaport, William J. Philosophy of Computer Science. An Introductory Course. Teaching Philosophy, 28:4, pp. 319-341, Dec. 2005.
Shapiro, Stuart C. Computer Science: The Study of Procedures. Internet, 2001.
Simon, Herbert Alexander. Las ciencias de lo artificial. Comares, 2006.
Sloman, Aaron. The computer revolution in philosophy. Philosophy, science, and models of mind. Harvester Press, 1978.
Turner, Raymond; Eden, Amnon. The Philosophy of Computer Science. The Stanford Encyclopedia of Philosophy, 2011.
Vallverdú, Jordi. Thinking Machines and the Philosophy of Computer Science. Concepts and Principles. IGI Global Group, 2010.