The Logic of Computer Programming
The internet is a magical place and it never ceases to light up my networks, both neural and social.
While traversing through the interwebs a day or so ago, I had a fun and entertaining conversation about Thomas Aquinas, Angel’s, And Nelson Goodman’s infamous “Grue Paradox”. Although these topics may seem disparate, they all speak to something that I have been thinking quite a bit about in my research and writing about programming languages. Through discussing the humor that can be found in the examples and metaphors that are used to explain philosophical concepts, I began to think about how much philosophy there is in programming. In particular, the ways in which programming languages rely on commands, statements, and logical reasoning.
In Summa Theologica, Thomas Aquinas works through multiple arguments around seemingly outlandish questions, such as “How many angels can fit on the head of a pin?”. And while the questions in this medieval work are thought provoking, what I always found to be more interesting about the piece was its structure. Each argument follows a clear formula, which we also see in Goodman’s work on Grue. This type of structure is found in most philosophical works, primarily because the works are a representation of logical reasoning and the belief in structuring one’s writing on proofs.
For those who don’t know, logical proofs (which are also commonly found in the world of mathematics and science) are a sequence of assumptions and prefaces that can be used to explain what or why something means. When reading a philosophical text, most authors work through their arguments using proofs, and the reader should be able to “prove” the validity of the argument by following the set structure(s) and formula(s) that are taught through Logic. Therefore, most Logic courses involve the condensing of pages of philosophical rambling into a few statements that clearly articulate the point of it all. These proofs are also seen within the world of computer programming.
The Philosophy Behind Programming
Consequently, the amount of philosophical reasoning that exists in computer programming is directly correlated with the fact that Logic is one of the foundational skills of a Philosophy curriculum. As a former Philosophy student this also makes it incredibly difficult for me to write a straightforward introduction or guide to any type of programming language. Most recently, I found myself waxing poetic about the logic behind “If, then” statements when I was supposed to be simply communicating how to write true conditions in SQL, but I digress.
As a college student learning Java programming, I remember spending hours thinking about what “do-while loops” meant for the concepts of Truth and Time. However, while I was always thinking these things in my classes and writing, it has been rare that I have seen people teaching these things outside of Philosophy courses. Like most theories and concepts which rely on philosophical thought, the role of Philosophy in most disciplines tends to be implicitly known but rarely explicitly discussed. And while we tend to think about math and science as having the power to make the humanities more “relevant” within the 21st century, I would argue that we could be using the popularity of Computer, Information, and Data Science to teach students how to understand philosophical concepts and beliefs.
With that being said, another foundational Philosophy course is Ethics, and I believe that many students that are being introduced to programming and other forms of instruction in science and technology, should also be required to have a foundational understanding of these more critical and theoretical understandings of their work. By incorporating studies which focus on Logic, Ethics, and other forms of philosophical thought I believe that we can begin to erase the disciplinary divide between these areas in order to create more space for cross disciplinary thinking and problem solving.
The Shift Towards Critical Approaches to Programming
But of course, I am not the only person who thinks this, and there are many schools of thought and study that have shown the relationship between philosophy and programming. From the Philosophy of Science and Technology, such as my favorite “Object Oriented Ontology” all the way to Human-Computer Interaction, the turn into the 21st century has shown an increase in the relationship between the humanities and the sciences. However, most of these areas focus exclusively on creating spaces where this work is done which do not always integrate into the larger curriculum.
For example, while a student can take courses in Computer Science or Data Science, most of the curriculum for these majors does not require taking courses which offer a more critical approach to science and technology. Instead, within and outside of these majors, you tend to have a few students who are interested in exploring theories and concepts, with the majority choosing to focus on the standard application of programming.
And it is this lack of interdisciplinarity in curriculum, which leads to a lack of critical reasoning when it comes to the creation of technology, such as mobile applications, digital media platforms, and the algorithms and recommendation systems which undergird them. By staying siloed within one area of education, students and practitioners miss out on the opportunity to explore all of the possibilities that a critical approach to science and technology can bring to our understanding of processes, such as programming.
Therefore, one of the primary ways that we can see the value of including more Philosophy within Computer, Information, and Data science is through encouraging a more speculative understanding of technology and ethics. Instead of just working through logical proofs as code, inviting students into the process of making proofs based on the outcome of their code and programs. By asking questions like, “If I create this product, Then what are the repercussions within the society?” students can walk through how the platforms of the past and the programs of the future have more practical and impactful applications than simply how to create them.
Updating the Curriculum of Computer, Information, and Data Science
With that being said, some of the primary ways that I see these insights playing out is beginning to create more diverse curricula for Computer, Information, and Data Science students and professionals which speak to the changes that we are seeing in the science and technology industries and society. In particular, not only offering more opportunities for taking more of a philosophical approach to programming but also through taking a more collaborative approach to working across disciplines.
Especially as we see more companies creating teams of scientists and humanists that will have to work together to solve societal problems or to create technology, it will be important for students and practitioners alike to begin working toward a common language that isn’t just code. And, as we have seen across time, the language of Logic, Ethics, and other forms of philosophical reasoning have the potential to act as that lingua franca.