Philosophy and Programmers: Why and How It Makes Sense

"Hmm, Philosophy and Computer Science. An Interesting combination" is a very common response when I tell people I work in computing and am interested in philosophy. It seems like there is a perception about working in computing that a technologist is a person that would only be interested in STEM-adjacent fields; that a very human-centered area like philosophy is not for them.

I believe these are but a few of many misconceptions about being in tech. They not only affect how non-technologists perceive technologists, but they also affect how technologists view themselves. In this short write-up, I will give examples of how technology (mainly software) intersects with many areas of philosophy and how beneficial it is to learn from that.

What is philosophy?

This is an important question to answer before proceeding as philosophy can mean many things to different people. Some think of philosophy as "style" or the way they do things. Others think of philosophy as metaphysics or maybe how it relates to theology (and maybe to some, the antithesis of theology). Lastly, philosophy may be seen as merely the study of ethics in the most abstract and hard-to-come-by situations.

And these are all, more or less, parts of philosophy. Even amongst philosophers, there is this stereotypical categorization of philosophers as analytical philosophers or continental philosophers. Analytical philosophers are more interested in the rigorous math-like study, and continental philosophers focus on big picture theory.

Here, I use philosophy to refer to two intertwined ideas. First, I used it to refer to logic, epistemology, ethics, and the formal approach to theory formulation. Also, philosophy is the study of studying, the approach by which we examine things.

This specific approach to defining philosophy may not completely align with some of the academic definitions, but it serves a practical purpose here.

Logic

Logic may be the easiest of the bunch to relate to technology as it is the foundation of our work. We use logic to build our software. Boolean logic is the most fundamental building block that computers are constructed on top of. Yet, most programmers are never exposed to general forms of logic. That is thinking logically outside the realm of discrete input and discrete outputs that is practiced in computational logic.

Deductive and inductive logics involving decomposing human utterances to make inferences and drawing conclusions are essential tools for anyone building systems. This can be seen at work all the time with product managers and business analysts. They translate people's needs specified as premises in natural language to formal definitions in a restricted language (which occasionally includes diagrams).

As for developers, building systems is what we do every day. Eventually, the developer will have to make decisions based on the problem statement that was not explicitly defined in the requirements document. Especially since these documents greatly vary in their depth and detail. Some details will be omitted, and the developer will have to deal with them. So, having a logic background allows you to deduce implicit requirements from the business context.

Epistemology

Epistemology is the study of knowledge. What it means to know, believe, and the rational relation of knowledge and belief. Epistemology asks questions like: is it rational to believe in proposition x? Given that it is rational, does that belief constitute knowledge?

As a developer, I use epistemology whenever I am debugging a piece of code. I always tell my colleagues to be skeptics. Assume that nothing works, and then start rebuilding your confidence in what you thought was working piece by piece.

Epistemology also examines language and how it affects our knowledge or our perception of knowledge. Knowledge can also be context-dependent. I may know something in one context, but not in another. In that same sense, when writing code, we look into what context we have, what we know about our problem, and what we can infer. Then we structure our code to cover all of these branches of related sub-cases of the problem.

Ethics

I believe ethics has two folds in this matter. First is the study of applied ethics as a way to systematically evaluate our actions (and consequently, our software's). Second, the mode of thinking involved in studying ethics. That is having to decide what to value most and what to dismiss in evaluating decisions.

As previously discussed, we, programmers, love systems and patterns. The study of ethics tries to build what is called an ethical theory. That is a general system that can solve ethical dilemmas. Obviously, we are yet to develop one theory to rule them all. It is all about tradeoffs and what to prioritize. Similarly, when we design systems, we make tradeoffs. We build systems that serve certain use cases better than others because it is practically impossible to excel in all.

We also have ethics of computing where we discuss the moral considerations of our code. Considerations like bias, privacy, and autonomy are all at the center of such philosophical discussion. We see algorithmic bias in facial recognition, determining credit limits, and predictive policing.

Also, ethics has some gray areas. Some are situations where the ethical theory would suggest something that the agent (the person acting) may not be as confident to do that action because of common sense. In software, we deal with unexpected behaviors. Cases where we think our algorithms should act in certain ways, but given some set of input, we get an unintended output.

Language

Philosophy of language studies the nature of language, the use of language, and language cognition. Such investigation can directly benefit technologists working with Natural Language Processing (NLP). NLP is especially an area of human-centric nature. You can build the models through purely statistical methods, but you need to approach the evaluation of your NLP models from a user's perspective. You need to be aware of how people use language to be able to understand and produce language.

Closing Note

I can confidently say that Philosophy made me a better engineer and a better tech lead. Keep in mind that I only touched upon the direct parallels of philosophy and technology in this write-up. There is a lot more to gain from practicing philosophical thinking. Philosophical thinking pushes you to think of a problem in all directions and perspectives, allowing you to develop unforeseen solutions.

Lastly, I omitted the philosophy of science, yes this is a thing, because this field on its own can have a write-up of this size to explain how important it is to technology. It discusses the scientific methods, their effectiveness, and implications of scientific findings. And one deep area it investigates is Artificial Intelligence, the mechanization of reasoning, and regulating Artificial Intelligence.

Show Comments