Computer Programming and Philosophy
"I think everyone should learn how to program a computer, because it teaches you how to think".
-Steve Jobs
Philosophy is commonly understood to be the study of knowledge, thinking about thinking, or what is proper and improper to think.
It seems to me that the skills necessary to do both well are very similar. Programming teaches you how to create complex, consistent systems and that skill is essential to what philosophers do. Object-oriented languages treat reality as if it were divided into Aristotelian “substances", so programming seems to require some understanding of ontologies. "Ontology" is a term used both in philosophy and computer science and means basically the same thing. It refers to the nature of the thing that we are talking about or modeling.
Part of the process of creating a computer program is the use of variables. Variables are symbols that stand for some quantity or some other string of symbols, or an array of other variables. Words are like the variables in a computer program. They need to be defined for some function to use them properly. If they aren't defined then the function will produce an error. This is the problem that I see occur most in philosophy - where the terms themselves aren't properly defined to do any work with, or that the function references the wrong part of the array if the variable/word has multiple definitions. A word can have an array of definitions and if you confuse which one you are working with, then you will get an error.
So, just as creating a proper computer program entails the proper use of variables, doing philosophy entails the proper use of words in clearly defining what it is that you are referring to when using that variable/word.
One of the first things you need to do as a programmer is decide what exists and how it works so that you can model it with code. For instance, there is something that exists called, "purchasing an airline ticket", and there is a process to it - a how it works. In doing so, you have to figure out what the basic objects are and how they interact. Customers can have attributes like credit card numbers, seat assignments, email addresses, and can perform functions like placing orders, checking in, canceling, etc. Another object could be "flights" would would then have attributes like destinations, origins, expected departures, etc. Seats would have properties like row, windowed, occupied, etc. If any of these objects in the code don't accurately model the real world or how they interact properly, then you program isn't going to be useful.
If philosophers don't accurately model the world with their words, then whatever conclusions they reach won't be very useful either.
If philosophy is the practice of thinking clearly about life, then good programming and good philosophy go hand in hand, just as bad programming and bad philosophy do. It is about thinking clearly, not ambiguously.
I would love to hear feedback from the community.
-Steve Jobs
Philosophy is commonly understood to be the study of knowledge, thinking about thinking, or what is proper and improper to think.
It seems to me that the skills necessary to do both well are very similar. Programming teaches you how to create complex, consistent systems and that skill is essential to what philosophers do. Object-oriented languages treat reality as if it were divided into Aristotelian “substances", so programming seems to require some understanding of ontologies. "Ontology" is a term used both in philosophy and computer science and means basically the same thing. It refers to the nature of the thing that we are talking about or modeling.
Part of the process of creating a computer program is the use of variables. Variables are symbols that stand for some quantity or some other string of symbols, or an array of other variables. Words are like the variables in a computer program. They need to be defined for some function to use them properly. If they aren't defined then the function will produce an error. This is the problem that I see occur most in philosophy - where the terms themselves aren't properly defined to do any work with, or that the function references the wrong part of the array if the variable/word has multiple definitions. A word can have an array of definitions and if you confuse which one you are working with, then you will get an error.
So, just as creating a proper computer program entails the proper use of variables, doing philosophy entails the proper use of words in clearly defining what it is that you are referring to when using that variable/word.
One of the first things you need to do as a programmer is decide what exists and how it works so that you can model it with code. For instance, there is something that exists called, "purchasing an airline ticket", and there is a process to it - a how it works. In doing so, you have to figure out what the basic objects are and how they interact. Customers can have attributes like credit card numbers, seat assignments, email addresses, and can perform functions like placing orders, checking in, canceling, etc. Another object could be "flights" would would then have attributes like destinations, origins, expected departures, etc. Seats would have properties like row, windowed, occupied, etc. If any of these objects in the code don't accurately model the real world or how they interact properly, then you program isn't going to be useful.
If philosophers don't accurately model the world with their words, then whatever conclusions they reach won't be very useful either.
If philosophy is the practice of thinking clearly about life, then good programming and good philosophy go hand in hand, just as bad programming and bad philosophy do. It is about thinking clearly, not ambiguously.
I would love to hear feedback from the community.
Comments (34)
I would love to* hear (to infinitive verb pattern)
Amen to that. :up: "Garbage in = garbage out"
Programming teaches reductionism and abstraction. Break it down, then build it back up, and in doing so transform the real into the ideal, a castle-in-the-sky.
It might be the case that the way I think even in everyday software engineering is somehow useful as a way of training me how to think in a disciplined way that might be helpful for philosophy, but it doesn't really seem that way. When I'm programming, it doesn't feel like I'm thinking as such, as much as it feels like working on an engine with a toolbox. If it feels like thinking at all, it's like thinking with my fingers.
It's where philosophy, computer science, and linguistics meet. I went to law school instead, but I did talk to a professor there, and he was very encouraging, and felt like my background in philosophy would give me a leg up.
If someone here has gone down that road, I'd be interested in hearing what sort of work you do.
If I were to have triple majored, the third field would have been linguistics, so it’s interesting that that has AI applications too. I see linguistics, philosophy, and information and communication industries generally as sort of the core axis in my map of different endeavors:
Yeah, I see linguitics, AI, and cognitive science as areas in which philosophy really makes a difference today.
Quoting jamalrob
When do you have a sculpture? It seems that "sculpture" needs to be defined in order to know whether you've made one or not. If not, the the term is meaningless. I could call the way I slapped my mash potatoes on a plate a "sculpture". Picking my nose could qualify as "doing philosophy" if we aren't agreeing on what philosophy is and not agreeing is good. Is not agreeing a good thing or a bad thing when it comes to defining something?
Once it is defined you can create a program to use it, or a philosophy to work with it. If you haven't clearly defined what it is you are talking about, then what are you philosophizing about?
You claim that the parameters haven't been worked out, yet the only parameter that is used is logic - even when trying to show logic isn't the only parameter.
This is from the What is certain in philosophy thread:
Quoting A Seagull
I like to try to solve these types of problems by simulating the problem by recreating it in a program.
One of the most fundamental laws of logic is the law of non-contradiction, along with the law of identity. Words are just scribbles or sounds when they don't mean something, just as variables are just scribbles when they aren't defined. What they refer to, or mean, has to be clearly defined for any subsequent logical parameters using them to be useful.
Some computer programs require you to not only define the variable, but what kind of variable it is, an integer, string, boolean value, etc. If you use the wrong type of variable in the wrong function, you will get an error. For instance if you use a string variable to perform a mathematical calculation it will generate an error.
Another type of error is if your variable is an array and you don't refer to a particular index in the array that exists, then you will generate an error. An array is like a word that has several definitions. If you don't refer to the right definition, you won't get the proper output. You might not get an error, but the output would be erroneous, as in it doesn't reflect reality.
So what I think has happened in Seagull's post is that the first statement one definition of "on" has been established - the opposite of "under".
The second statement is more like referring to the array without the index number - as if "on" only has one definition - the one used in the first statement. The index number was referenced in the first statement but not in the second, hence the ambiguity of which definition is being used. The identity of "on" is never maintained throughout the argument. The moment you lose the non-contradictory identity of what it is you are talking about, you are no longer talking about anything.
In my humble opinion, where philosophy, inclusive of any other logically rigorous field, and programming overlap in a very significant way is language. As you correctly mentioned, you can't do any programming until and unless you have completely mastered the chosen high level language; too, computer languages are short on vocabulary but long on semantic precision. What this means is that, if you use the correct words and the proper syntax, it's impossible for the computer to misunderstand you and also for you to misunderstand the computer. This exactitude in communication between a computer and its coder is missing in philosophy because of the obvious reason that human language has more going on with the words and also with the way they're employed.
If it were exact, there would be no bugs or glitches.
It's a matter of integrating each our private languages into a public one, just as the computer has it's language of 1's and 0's - machine language - that the higher languages have to be translated to via a compiler. Some series of 1's and 0's means the same thing as "If x > y then do z", just with different languages.
Quoting Frank Pray
Quoting emancipate
Other programmers would agree with Frank, in that you program to solve problems, not to place limits on thinking, but to provide a means of solving virtually any problem by simulating with code. Variables allow you to define your own meanings, and produce your own conditions and ontologies, but they are only useful if they simulate the real world in some way.
I think the problem with some philosophers that question the use of logic to solve problems is that they like keeping things mysterious. Ambiguous term use is a means of keeping logic from attempting to solve the problem. If you can never define what it is you are talking about and are evasive and contradictory, then it seems to me that you like having the problem more than having a solution.
Quoting Frank Pray
Daily conversations usually don't include talk about "consciousness", "what it is like to be a bat", "direct vs. indirect realism", "metaphysics", and the other terms we use so often on this forum, so it generally isn't a problem like it is here, in the context of questioning the fundamentals of what we know. I think some of us come to this forum to escape the social games and roles that we play using words the way we do in our everyday lives. We take a break from being fake so that we can be real on these forums. Brown-nosing your boss can only be done so much before you begin to question your own integrity.
The problem is not that some philosophers keep things ambiguous, but that some believe ambiguity can be eliminated. It is OK that there is still some fuzzyness around the edges!
Logic is just a tool. Useful, yes. But certainly it is only one aspect of thought.
:up:
So do your words refer to the fuzzy edges or concrete center? If one is referring to the edges while another is referring to the center, are they talking past each other?
Is logic a tool or an aspect of thought? It doesn't seem coherent to claim it is both. If you could clarify, that'd be great.
It is a tool for proper thought. If you aren't interested in thinking properly, then can you actually claim to be doing philosophy considering logic lays out the rules for thinking properly about the other fields?
How do you distinguish between a delusion and fuzzy thinking? Delusions are thoughts that are uninhibited by facts.
Programmers usually start off creating programs for themselves, to solve their own problems. It just so happens that others have similar problems, or that the algorithm can be applied to solve other problems. I often find myself copy and pasting code because I'm solving the same problem, or I just create a function that automates the problem solving when called, providing the output of one function as the input of the other function.
The problem isn't experts defining the terms on this forum. Is Aristotle an expert on the topics of this forum? Are we permitted to disagree with his use of terms? Who here is an expert on the topic at hand? You'd think that the computer programmer would be, but then look at all the people disagreeing with my use of terms.
What I find strange is the assertion that ambiguities can't be eliminated which seems to imply no ambiguity of me being wrong in claiming that they can, and should be for proper thinking.
If ambiguities can't be eliminated, then emancipate's and jamalrob's posts could actually be agreeing wholeheartedly with everything I have said.
Jamalrob and emancipate are trying to have their cake and eat it too.
It can be proposed that nothing made of thought can accurately model the real world. This isn't a problem of the philosopher or any philosophy but of the medium all philosophers and all philosophies are made of, thought.
Thought operates by dividing a single unified reality in to conceptual parts. A profound bias for division is a key property of thought, and this bias distorts all products of thought.
Here's an example to illustrate. My model of this post is that it contains "my ideas". This model presumes I am a separate thing, and that these are unique ideas that arise from that source. This feels true, and it's a useful model in many ways, but...
I am not a separate thing. And these ideas have been circulating around civilization for thousands of years. The ideas don't belong to me, or to anybody, but are instead a property of the global human mind.
A great deal of philosophy is powered by the illusion I've described above. Thought creates the "me" through it's process of conceptual division, and then the "me" attempts to enlarge itself by claiming ownership of ideas which typically have already been shared countless times in a variety of ways.
Quoting Harry Hindu
As if all the other terms in a programs were not also words; as if all all words were nouns. As if the only thing words do is refer.
Variables are scribbles whose meaning can be customized on the fly, while the other words are used to perform functions on the meaning of the variables, what they refer to, not the scribble itself.
If a word doesn't refer then words are just sounds that make people do things, just as an alarm wakes you up from sleep.
If you want to address the specific examples I have provided or provide your own, then we can start there. But your amusement certainly isn't a good evidence that anything that I have said is wrong. You need to try a bit harder.
On occasions, I teach kids. I've several times been involved in setting up and running philosophy for children. It's never long before I start to question the wisdom of such a curriculum. So much of philosophy is bad or clumsy.
I also teach coding, and have found it a much more direct, effective way of teaching "thinking" - especially sits such as code.org, which comfortably straddle the concrete /abstract divide for eight year olds by using games.
But following through on the analogy above, it seems to me that you do philosophy in much the way a programmer would program if they only used variables - it doesn't work.
Jamalrob presents a tougher case. His argument is that coding doesn't work as a model for philosophical inquiry because it lacks "pathos," meaning, I surmise, coding is a cold mechanical set of rules that produce nothing really important to the process of philosophical inquiry. Many machines are quite useful despite lacking emotion, and it would be troublesome indeed if a chainsaw had a fit of anger just when your legs were exposed to the blade. Nor did you make the argument that coding was more than an analog for the process of seeking a solution. Nor did you advocate for coding as a source of useful premises. I understood your argument to be that coding is just a tool for how to think about a solution to a specific kind of problem, in the same sense that the scientific method is the preferred method to find answers to certain types of problems, e.g., discovering a vaccine for COVID-19.
We could spend a lot of time in the next world unraveling the undefined meanings of the terms "coding," "process," "pathos," "thinking," "program," "scribbles" and "tools," and I'm grateful that won't happen here, but it is useful to see that we've used these terms with unspoken assurance that we each have the same understanding of what they mean and how they apply.
Interesting observation. Not being a coder myself, it reasons nonetheless that for the process path to have one or more predetermined destinations, some constants have to be present in order to manage the variables [you can tell by the way I'm framing this idea I know no coding].
But what interests me about your comment is how you would carry your thought further to apply it to the "non-variables" in a philosophical inquiry. We live in a time of rampant relativism when "constants" are criticized as imposing absolutes when no viewpoint is more valid than another. You write that a line of code that was constructed of only variables "does not work." Would you say the same of a value system that held one viewpoint is as valid as any other?
And there are many different ways to solve a problem in programming depending on the programmer, paradigm or programming language. Object orientated is only one paradigm. Functional programming, for example, will have a very different approach - function composition rather than classes and property inheritance. Even the way a problem is framed is arbitrary.
Quoting Harry Hindu
Is it easier to comprehend if I say that ambiguity cannot be completely eliminated? The best we can do is a good enough approximation. Good enough to work with, we can have a discussion and understand each other to a certain extant, not completely but enough. This is the problem with language as transmission of thought: lack. Logic doesn't solve this because it necessarily omits what it considers to be the excess of thought, in an attempt to remove ambiguity.
I dispute the notion that 'proper thinking' and philosophy should aim towards logical reduction.
How exactly is "misguided" not the same as "wrong"? You say that it's "harsh", but if you're trying to spare my feelings, my feelings, and you trying to spare them, have nothing to do with what I said being wrong or right.
Quoting Banno
A curriculum in philosophy for children should simply be a course in critical thinking, which a computer coding course could be a choice because coding teaches critical thinking.
The history of philosophy should probably be reserved for high school and college elective courses, or those majoring in philosophy - which seems to be not much different than a major in theology.
Quoting Banno
I don't recall ever saying that programmers only use variables to solve problems, or that making sure words are clearly defined solves all philosophical problems. I think what I have shown is that this is part of the process, yet a necessary part, just as avoiding appealing to emotion is a necessary part of solving problems. All the rules are necessary and are dependent on the other rules to be followed in order to solve the problem. If I wrote a program that only showed a profit for a company because I wanted to spare the CEO's feelings, then that company wouldn't be a company for very long.
Sure, but they all involve logic (error-free thinking) if you want to actually solve the problem.
If the way a question is framed is arbitrary, are we sure we're asking the same question if the question is framed differently? How would you know? Maybe because some words mean the same thing?
Quoting emancipate
To say that it can't be completely eliminated would imply that we know what ambiguity being completely removed looks like to say that it hasn't been completely removed.
What has been lost in our conversation? Have I not understood you? If you meant more than what you said, then just say what you meant.
The fact that you can even play these language games displays the inherant ambiguity
Is it a language game? If it were then there was no ambiguity, was there, as you correctly interpreted my use of words as a game.
However it isn't, so while this shows that you might be right in language being ambiguous, it shows that you are wrong in that what I said was intended to be a language game.
Now, why don't we see if we can completely eliminate the ambiguity by you asking questions about what I said so that I can clarify what I said so that it will be less ambiguous for you, as you are the only person that I am aware of that claimed what I said was a language game. But you don't seem to want to completely eliminate ambiguity, you'd rather assert something that isn't true - that I am playing language games. So, it seems possible that ambiguity can be eliminated, but both parties need to want that.
Take this as an example:Quoting Harry Hindu
Is my goal to spare the feelings of the CEO or to display the true state of the company's budget on a computer screen? It seems that the program is written with one goal in mind - to spare the feelings of the CEO.
Should you spare your mother's feelings and lie to her, or tell her the truth that you want to join a rock band instead of becoming a doctor? Once you decide what path you want to take, you write a program to reach that goal. If you are confusing the two, then that is the problem.
You might say that the problem is deciding which path to take, and again I would say that you would use logic to determine the answer. You would ask yourself what other consequences there might be other than your mother flipping her lid, and those consequences become reasons for you to tell her or not to tell her.
So even in our everyday lives, we use logic. It's just that we don't apply all the rules and we end up making bad decisions because we didn't account for all the possible consequences of our actions, and therefore our reasoning wasn't complete before making the decision.