KNOX THEOLOGICAL SEMINARY
FINAL PAPER
THE
PHILOSOPHICAL FOUNDATIONS OF MODERN SOFTWARE ENGINEERING
SUBMITTED TO
DR. TIMOTHY SANSBURY
IN PARTIAL
FULFILLMENT OF
CC602 HISTORY
OF SCIENCE (SU2022)
BY
DOUGLAS ROTHAUSER
AUGUST 24,
2022
WORD COUNT: 1917
In the study of the history of science, it is amazing to see how much modern theoretic thought is influenced in one way or another by ancient Greek philosophy. For example, many elements of Platonic and Aristotelian natural philosophy find themselves integrally engaged in the field of computer science, especially in the art of software engineering. In this paper, I will argue that the philosophical systems that Plato and Aristotle developed over 2,500 years ago laid the foundations for modern software engineering and are still relevant to today’s programming paradigms and will remain relevant as the computer sciences advance into the frontiers of cyberspace.
Metaphysics is the branch of philosophy that examines the fundamental assumptions and ideas that frame how we understand reality. Though metaphysics should be an essential component in any worldview, the science behind today’s methodological naturalism worldview discounts the value of metaphysics and resists metaphysical exploration[1]. However, in the computer sciences, there is no escaping metaphysics. When software engineers embark on the task of designing and developing a software system, they will soon find themselves ensconced in the world of metaphysics, whether they realize it or not.
When considering matters of reality, one of the thorniest conundrums for natural philosophers to solve was how to reconcile the metaphysics of being (essence, actuality, ontology) and becoming (phenomena, potentiality). Even before Plato and Aristotle, philosophers were grappling with these metaphysical issues. Heraclitus (fl. 500 BC) believed that all things are in a state of becoming, arguing that you cannot step into the same river twice. Heraclitus’ younger contemporary, Parmenides (fl. 480 BC), disagreed. His axiom is “whatever is, is,” meaning that everything is in a state of being. Parmenides’ pupil, Zeno of Elea (fl. 450), sought to defend his teacher, formulating his famous paradoxes to argue that change (i.e., becoming) is illusory.[2]
Plato sought to resolve the conflict between being and becoming with his Theory of Forms (sometimes referred to as the Theory of Ideas). He conceived of two worlds: a metaphysical world and a physical world. The metaphysical world is the realm of ultimate reality where things exist as nonmaterial ideas or forms in true immutable perfection. It is in this realm that things have their ultimate being. On the other hand, things that exist in the material world are only mere copies of their perfect form from the “real” metaphysical world. As such, the material stuff from which a thing is made is subject to change and is always in a state of becoming.[3]
Related to being and becoming is the Aristotelian notion of “cause,” which, when used in metaphysics, is understood as that which is responsible for a thing coming into being and for its becoming. The modern software engineer must also consider these matters as they carefully design their system, for its components must also manifest both being and becoming.
With these metaphysical concepts in mind, let us turn to a common style of software development known as Object Oriented Programming (OOP). OOP is a programming paradigm[4] that relies on the concept of classes, attributes, methods, and objects. Classes serve as blueprints or templates for creating “objects” capable of running in a computer system. Note that a single class can be used to create multiple object instances (similar to the Platonic concept of universals and particulars). The definition of a class typically includes attributes or properties that maintain the internal state of an instantiated object. A class also contains methods that define how it will govern the state of its properties as well as how it will interact with other objects.
Employing Plato’s Theory of Forms, a class correlates with an immutable, perfect Form[5]. Just like a Form that finds its being in the metaphysical perfect world of ideas, a class finds its being in the unchanging realm of class storage[6]. Here is where the unmistakable similarity between Plato’s Forms and OOP is seen. Plato thought that the phenomena of a Form’s instance in the material world (an object) is a mere shadow that mirrored the Form[7]. Further, objects in the material world are finite and physical manifestations of the Form and, because of varying circumstances, are in a constant state of change, i.e., in a state of becoming. Where Forms are unqualified perfection, physical material objects are qualified and conditioned[8]. Conceptually, OOP is the same. When an OOP program creates an object instance from a class, it now finds its being in the physical world of the computer’s execution environment and, like Plato’s instance of a Form, is also subject to varying circumstances causing constant change, i.e., it is always in a state of becoming.
Another Platonic concept borrowed by OOP is that of the “universals and particulars.” For Plato, a Form exists as a singularity in the metaphysical world of Ideas; thus, it is universal. However, there could be multiple physical instances of that Form in the physical world. Plato calls these particulars. For example, in the world of Forms, a single ideal chair exists but in the material world, many physical chairs exist as particular instances. OOP adopts the same concept. Each class in an OOP application must be unique and thus universal within its computing environment. However, many different (particular) object instances can be created from it, each with its own identity and operating state.
Now let us turn our attention to Aristotle’s doctrine of the four causes[9] and how they relate to software engineering. For Aristotle, it was the sine qua non to answer the question “why” when addressing the metaphysical questions of being and becoming. To structure cogent, commonsense answers to these questions, Aristotle provides the following four causes: 1) the material cause - the stuff a thing is made of; 2) the formal cause - that which defines what a thing is; 3) the efficient cause – that by which a thing comes into being and 4) the final cause – the ultimate purpose for a thing’s being[10].
In software engineering, these causes present themselves as follows: The material cause is the technological stuff the system is made of, for example, the bits and bytes of software instructions and data. The efficient cause is a software engineer or a team of software engineers. The formal cause is the design of the system, for example, the OOP class definition discussed above. The final cause embodies the purpose or the teleology of the system. For example, the purpose of Faithlife’s Logos platform is to “deepen your Bible study.”[11] Note that in modern science, final and formal causes are generally considered out of bounds because they tend to appeal to metaphysical concepts that are difficult to falsify[12]. In contrast, computer science heavily depends on the formal and final causes.
Another Aristotelian metaphysical theory borrowed by software engineers is “hylomorphism” (hyle = matter, morphē = form)[13]. Hylomorphism is the doctrine of the transfer from the potentiality of primary matter to the actuality of substantial form.[14] Hylomorphism assumes a tight coupling of the formal cause and material cause, where the form of a thing determines its materiality. Aristotle calls this entelechy, and it is the teleological force that governs its hylomorphism (actuality and potentiality)[15]. The classic example of the oak tree illustrates this concept where an acorn has within its being, according to its entelechy, the potentiality to become an oak tree in actuality. Note that the acorn and the oak tree share the same entelechy.
Applying this concept to a software system, a component[16] is usually designed to maintain its internal state via mutable properties or variables (or, in Aristotelian parlance, accidents). In this way, it is endowed with hylomorphic capability, which governs its potential to actualize a change within its internal state. Hylomorphism occurs once the component is loaded into the computer’s memory and begins to function. For example, imagine a type of component storing information about a student at Knox Theological Seminary. The component will assume the form of “Student” and contain many properties associated with the student, one of them being “Degree_Program.”[17] When a student enters the seminary, the “Degree_Program” property possesses the potentiality to become MABTS, MDiv, MACCS, or DMin. After the student decides what program to enroll in, the “Degree_Program” property becomes actualized with the choice. However, the “Degree_Program” property still has the potentiality to become another value, for example, when a student graduates from the MDiv program and decides to pursue the DMin degree. This pattern is an example of what is known as the “Potentiality-Actuality / One-Two Model.”[18] First, a thing starts with the potential to become something. When that potential is actualized, a second new potentiality-to-actuality event occurs, and that cycle continues as necessary per formal and final causes.
The principles of Aristotle’s hylomorphism are foundational to the programming style known as Functional Programming. Functional Programming (FP) is another programming paradigm that focuses on transforming data from states of potentiality to actuality using functions. A function is an encapsulated set of one or more operations for transmuting inputs directly to outputs. For example, consider the following square root function: sqrt(49) = 7. Here, the function is interested in the potential of the numeric argument to become its square root.
The metaphysics of Plato and Aristotle have greatly influenced modern computer science, especially in the realm of software engineering, so much so that software engineers tacitly assume them. For example, no rational software engineer would consider developing a system without first considering its purpose (final cause) and its design (formal cause). In other sciences, such as biology, the formal and final causes are largely downplayed because, per Francis Bacon and his successors, design and purpose belong to the metaphysical realm[19] and, as such, are speculative and unverifiable. It is ironic then that atheistic scientists who subscribe to modern evolutionary theory would trust a computer that clearly has design and purpose even though it was created by humans who evolved with no design or purpose. Oxford professor of mathematics and science, John Lennox, puts it this way:
As a scientist, the very bottom line for me is that atheism doesn’t even give me a reason to trust the mind with which I do science because it tells me that the mind with which I’m doing science is essentially equal to the brain and the brain is the end product of a mindless, unguided process. Well no scientist I have ever asked would trust a computer if he or she thought it was the end product of a mindless, unguided process.[20]
Consider this analogy: Just as God, the Logos, created an intelligible universe that is real, rational, regular, comprehensible, and good[21] - software engineers, created in God’s image, mirror their creator (universal-particulars) as they design (formal cause) and develop (efficient cause) technological ecosystems where digital organisms manifest being (actuality) and becoming (potentiality) not as combinations of carbon-based ATCG nucleotides but as bytes of 1 and 0’s (material cause), all for the purpose of providing a useful software system (final cause).
In conclusion, perhaps through the inspiration of the computer sciences and its philosophical foundations, modern science will once again elevate the formal and final causes to primacy within its own philosophical systems, motivated by the desire to “think God’s thoughts after him”[22] for the ultimate purpose of glorifying God.
Butcher, Matt. How the Ancient Greeks Invented
Programming. Sep 24, 2012.
https://www.infoq.com/presentations/Philosophy-Programming/ (accessed Aug 12,
2022).
DeMar, Gary, ed. Pushing the Antithesis: The
Apologetic Methodology of Greg L. Bahnsen. Powder Springs, GA: American
Vision, 2007.
Fields, Alex. The Four Causes of Technology.
Feb 2, 2017. https://www.itpromentor.com/four-causes/ (accessed 08 16, 2022).
Hylomorphism. Mar 15, 2016. https://www.britannica.com/topic/hylomorphism (accessed
Aug 11, 2022).
Lindberg, David C. The Beginnings of Western
Science. Chicago : University of Chicago Press, 2007.
Morris, Iain. INTERVIEW | PROF JOHN LENNOX WITH
IAIN MORRIS. Jun 01, 2021.
https://www.lausanneeurope.org/interview-prof-john-lennox-by-iain-morris/
(accessed Aug 18, 2022).
Rayside, Derick, and T. Gerald Campbell. “Aristotle
and object-oriented programming: why modern students need traditional logic.”
Semantic Scholar. 3 1, 2000.
https://www.semanticscholar.org/paper/Aristotle-and-object-oriented-programming%3A-why-need-Rayside-Campbell/ff18658ab2ee6b9dc2ac3aa897bb9df7d1296bb5
(accessed 08 12, 2022).
Sansbury, Timothy. Module 1 Reading and Video
Lectures, Lesson 05. February 1, 2021.
https://learn.knoxseminary.edu/mod/page/view.php?id=41485 (accessed June 26,
2022).
Sproul, R.C. The Consequences of Ideas:
Understanding The Concepts That Shaped Our World. Wheaton, IL: Crossway
Books, 2000.
Wilber, Jennifer. An Introduction to Plato’s
Theory of Forms. 076 28, 2022.
https://owlcation.com/humanities/An-Introduction-to-Platos-Theory-of-Forms
(accessed 08 17, 2022).
[1] See DeMar, Gary, ed. Pushing the Antithesis: The Apologetic Methodology of Greg L. Bahnsen. (Powder Springs, GA: American Vision, 2007), 111. This bias was especially evident with the Logical Positivists and still exists today (e.g., worldviews that posit reality cannot be known).
[2] Sproul, R. C. The Consequences of Ideas: Understanding the Concepts that Shaped Our World (Crossway Books, 2000), 20-24.
[3] Ibid, p. 33-36.
[4] It is noteworthy that Object Oriented Programming is considered a paradigm. It is like a worldview in the computer programming field. Prior to OOP, one of the most prevalent paradigms was procedural programming. New programming paradigms continue to emerge, for example, Functional Programming. Note that just like with worldviews, some software engineers tend to be religious about their paradigms.
[5] Note that Form is capitalized here to denote Plato’s Form as opposed to Aristotle’s form (lowercase l).
[6] The OOP programming language, Java, calls this storage “Metaspace.” This is a difference between Plato’s Form Theory and OOP. A Form is an immaterial idea (incorporeal). A class is a material (corporeal) entity existing in a digital format.
[7] This is derived from Plato’s Allegory of the Cave (The Republic).
[8] Wilber, J., “An Introduction to Plato’s Theory of Forms,” Owlcation, https://owlcation.com/humanities/An-Introduction-to-Platos-Theory-of-Forms (accessed August 17, 2022)
[9] Aristotle describes these causes in his work The Metaphysics.
[10] Sproul, R. C. The Consequences of Ideas: Understanding the Concepts that Shaped Our World (Crossway Books, 2000), 48-49.
[11] https://www.logos.com/grow/what-is-logos-bible-software/
[12] I.e., they cannot be tested and verified empirically. Formal and final causes attempt to answer the question “why?” which are metaphysical concerns. For example, the question of why we see the design in nature (e.g., DNA) is off limits because any answer to that alludes to a divine designer with a rational mind, and that cannot be falsified. The same goes for the question of purpose, the final cause.
[13] David C. Lindberg, The Beginnings of Western Science (Chicago: University of Chicago Press, 2007), 47, 373n4
[14] Britannica, Hylomorphism, https://www.britannica.com/topic/hylomorphism (accessed August 11, 2022).
[15] Sproul, R. C. The Consequences of Ideas: Understanding the Concepts that Shaped Our World (Crossway Books, 2000), 47.
[16] A software component is a kind of digital organism embodying form, behavior, and state. An object in object-oriented programming or a function in Functional Programming can be considered a component of a computing system.
[17] The computer sees this component in the form of a data structure roughly analogous to a paper form one might store in a filing cabinet.
[18] Butcher, M., “How the Ancient Greeks Invented Programming,” InfoQ, https://www.infoq.com/presentations/Philosophy-Programming, (accessed August 11, 2022).
[19] Francis Bacon states in his The Advancement of Learning, “As we divided natural philosophy in general into the inquiry of causes, and productions of effects: so that part which concerneth the inquiry of causes we do subdivide according to the received and sound division of causes. The one part, which is physic, inquireth and handleth the material and efficient causes; and the other, which is metaphysic, handleth the formal and final causes.”
[20] Morris, I., “INTERVIEW | PROF JOHN LENNOX WITH IAIN MORRIS,” Lausanne Movement Europe, https://www.lausanneeurope.org/interview-prof-john-lennox-by-iain-morris/, (accessed August 18, 2022).
[21] Sansbury, Timothy. Module 1 Reading and Video Lectures, Lesson 05. February 1, 2021. https://learn.knoxseminary.edu/mod/page/view.php?id=41485 (accessed June 26, 2022).
[22] “O, Almighty God, I am thinking Thy thoughts after Thee!” wrote astronomer Johannes Kepler, 1619, The Harmonies of the World.