Software is applied philosophy. Where else can you deal with everything that western philosophy offers, from classification to epistemology to the philosophy of language and science -- and at the end of the day produce something that has immediate value for someone? All of this working, real-world stuff we're doing, from heuristics to machine learning and meta-programming -- it's all applied philosophy.
I'll elaborate: in systems design you start with nothing. With words, ideas, feelings. Heck -- most of the time people can't even express what they want the system to do! When you start like that, you are in a completely impracticable spot.
Not only that, but when you do get the words out, they're all just abstractions of other things. "We'd like the user to see the most relevant article" Well gee, what do you mean by "relevant"? What do you mean by "see"? It's the same exact problem you face when you're talking about stuff most people consider BS, like are we real or not.
So you start in this totally meaningless set of concepts, you refine, you abstract, you categorize -- in short, you take a trip through each of the major branches of philosophy. When they say "user", do they mean something that is part of an abstract type of "person"? Or is that over-designing? When we look at scaling past ten million users, what's the impact of applying various principles of set theory, such as normalization? When we say we want the machine to learn what the user wants, do we really mean just what his next actions will be?
We do all of this automatically, without realizing that some pretty smart other people have walked many of these roads before. Because those guys have been there, done that, all of these sciences have been created: sciences like hardware and software design, debugging, complexity theory. For the most part, we don't need to learn about all of these smart people and the full stories of their ideas. After all, only about 1 or 2 percent of what they did lived on after them. But by understanding a more complete version of what they thought, sometimes it can save you going down a dead end. And heck, it can just make discovering the answer more fun. And at the end, when all of that BS comes toghether for a real, live, working system? It's a thing of beauty. Did you even build a system for a large organizatino and every department had a different idea of what reality was? Did you look for wrong and right people, or think of the word "paradigm" (Kuhn -- sort of)
You can't take philosophy like you would a hard science. It doesn't progress or evolve from one phase to another, and half of it doesn't even make sense with the other half. That's okay, though. It doesn't mean that it is not useful, just different.
But software has the shortest feedback loop between high metaphysical concepts and practical instantiation. For example, OO is a variation on the notion of Forms.
Software is applied philosophy. Where else can you deal with everything that western philosophy offers, from classification to epistemology to the philosophy of language and science -- and at the end of the day produce something that has immediate value for someone? All of this working, real-world stuff we're doing, from heuristics to machine learning and meta-programming -- it's all applied philosophy.