The hiatus in my blogging was due to the fact that, early in October, I learned that the company I worked for was going out of business. Sunset for the company was January 1, so I had from October through December to find another position. As you can imagine, this caused me more than a little anxiety, being responsible for a family of five in this economic environment.
Anyway, I eventually was offered a new position on Dec. 23. Surprisingly enough, it was Aristotle who helped me land this job. Normally in interviewing for these technical positions (I work as a software engineer), I keep silent about my passion for philosophy. But in this interview, I decided to be a little more bold, especially as I didn't think I was particularly well-qualified for the job - and these days, you have to be outstandingly well-qualifed to even be considered. So I figured what the heck, and went on for a little bit about Aristotle. My interviewer, to my surprise, showed real interest and we talked philosophy for a while. The interview was on Friday, and on Saturday I wrote a paper expanding on some of my ideas. I emailed it to him, and the next week I was offered a job. Here is the paper I wrote:
Aristotelian Principles of Engineering
Conventional and Unconventional Thinking
Back in my undergraduate days, a psychology professor conducted an in-class experiment with scissors and string that has stuck with me. I cannot recall all the details of the experiment, but I do remember that it consisted of a challenge to retrieve an object some distance away without touching it with your hands or moving from your spot. The subject was allowed a pair of scissors and a length of string with which to complete the task. It turned out it could be accomplished by tying the string to the scissors, throwing the scissors over and on top of the object, and then using the weight of the scissors to drag back the object. The psychological point of the experiment was that the conventional use of scissors (as something with which to cut string) often prevented the subject from seeing an unconventional solution involving scissors. When the experiment was conducted with the scissors replaced with a conventional weighting object like a paperweight, nearly all subjects quickly perceived the solution.
The unconventional solution of problems is, of course, the phenomenon that has come to be known by the phrase "thinking outside the box", now virtually a cliche. The ability to find unconventional solutions is valuable, but it occurred to me that the vast majority of our thinking is necessarily conventional - "thinking inside the box." Since so much of our thinking is conventional, rather than seeking ways to escape conventional thinking into unconventionality, why not find ways to make our conventional thinking as fruitful as possible? That is the theme of this paper - the investigation of conventional thinking with specific reference to engineering.
Let us consider a little more deeply the meaning of "conventional." With respect to scissors and string, it is not arbitrary or accidental that the conventional use of scissors is to cut string; scissors were designed for that very purpose. The conventional use of scissors reflects their fundamental nature. To think conventionally, then, is to think in terms of nature. To think well conventionally is to think well in terms of nature.
Who shall teach us how to think well about nature, and therefore to think well conventionally? It may seem surprising that an ancient Greek philosopher can teach us valuable lessons about nature, and in particular lessons valuable to modern engineering. Skepticism is only increased when we remember that Aristotle's physics was decisively overthrown by the physics of Newton in the 17th century. Nevertheless, I have found that Aristotle, the great classical philosopher of nature, has important lessons to teach about modern engineering. Whether there is irony in the unconventional use of Aristotle to understand conventional thinking in modern engineering, is a decision I will leave to the reader.
Aristotle's Understanding of Nature - The Four Causes
Aristotle taught that we understand something only if we understand its causes. In his Physics, he analyzes causes into four types: The final cause, or the point or purpose of something (e.g. scissors are for cutting); the formal cause or the principles that make something what it is (scissors consist of two blades working in tandem to achieve a cutting); the material cause or the "stuff" of which something is made (scissors are made from steel or plastic blades); and the efficient cause or the source of its coming into being (scissors are put together in a factory.) Our modern minds tend to think of causation only in terms of the efficient cause, but it is worthwhile to consider Aristotle's other three causes.
The final cause, for instance, is not merely the point of something but is the goal (telos) of its existence. Aristotle thought that all natural beings have a tendency or drive to fulfill their individual natures; fire "wants" to consume things in flames. Whatever our view of the ultimate reality of such an internal drive, thinking in its terms can provide a different and potentially valuable perspective on systems. In our scissors and string solution, for example, if we think of scissors as "wanting" to cut things, then we can perceive a certain instability and even danger in our solution. Even though we are only using the scissors as a weight, they still retain their sharp blades and hinged connection. The blades can fly about when we toss them, perhaps slicing through the string, sticking into a surface, or possibly injuring someone. The scissors will continue to "try" to cut things even though cutting is not part of the intent of our solution. More generally, to the extent that our solution does not permit its elements to fulfill their teloi, or is in conflict with them, it will include elements that may contribute to instability. Solutions with elements fulfilling their teloi will tend to increase stability; replacing the scissors with a paperweight (an object with no telos beyond weighting) in our experimental solution would create a more stable system.
There is something even deeper going on as beings fulfill their teloi. Aristotle teaches that being exists in two primary modes: Act and potency. An acorn is an actual nut and a potential oak tree. The careers of temporal beings can be thought of as a series of movements between potentiality and actuality, as an acorn grows from being a potential oak tree into an actual oak tree. The telos of something points the direction from potentiality towards full actuality. But things can act only insofar as they exist; therefore things are more powerful insofar as they are actualized, or insofar as they have fulfilled their teloi. When we engineer our solution such that its elements fulfill their teloi as much as possible, we know that they are operating at their maximum power. Conversely, a clue that our solution may not be optimal is the discovery that its elements are not employed at full actuality or against their teloi.
Let me flesh out these principles with an example from software engineering. We may be able to use any particular software language to solve any particular problem, just as we can use a pair of scissors as a paperweight. We have nature working for us, however, if we match the nature of the language to the nature of the problem at hand. The C programming language was designed as a "general-purpose programming language... not specialized to any particular area of application." It is a relatively "low-level" language, has an "absence of restrictions", is not a "strongly-typed language" and one that "retains the basic philosophy that programmers know what they are doing." If we use C in accord with its nature, then we will use it for low-level programming that does not permit restrictions, and we will remain careful and self-disciplined in its use. Only then will C function at its maximum power. C++ is an extension of C that provides support for data abstractions and object-oriented design. If C++ is part of our solution, then our solution will tend to be maximally powerful and stable if the software reflects the abstract and object-oriented nature of C++; that is, if the software fulfills the telos of C++.
Aristotle's Understanding of Nature - Hierarchy
Aristotle's understanding of nature was hierarchical. Things do not exist in isolation but in the context of intelligible systems. Aristotle uses the example of the eye, which is truly itself only when it is in the body and functioning properly. An eye in a lab dish is, for Aristotle, something that is not really "being" an eye at all. So the eye can fulfill itself only in the context of a human being that is also fulfilling itself. The telos of the eye consists of more than completing itself in an act of vision; it finds its true fulfillment in the flourishing of the complete human being.
We can think along similar lines concerning the elements of our engineering solutions. It's not enough that a particular element be perfectly designed in itself. It truly fulfills its telos only to the extent that it goes beyond its own perfection to contribute to the perfection of the overall system. Our C++ solution may evidence isolated perfection in its use of object-oriented principles, but that solution is not optimal if it does not promote the operation of the overall system in the best possible way. It may be that, by compromising object-oriented principles somewhat, we can save resources (e.g. processing overhead) that are particularly sensitive in a certain system. Such a solution fulfills the "remote" final cause more fully at the expense of the "local" final cause, and is more perfect since the local final cause is in service to the final cause of the system as a whole. Final causes, teloi, find their meaning in a downward hierarchy or, if we prefer it this way, the teloi of the elements of a well-made system come together in a symphony expressed in the telos of the complete system.
The Philosophical Engineer
Aristotle begins his Metaphysics by stating that "All men by nature desire to know." He means by this more than knowing external nature. He means as well man knowing himself in his own act. The Aristotelian engineer, then, is an engineer self-consciously aware of what he is doing as an engineer. He understands the relationship of formal, final, material and efficient causes, the hierarchical relationship of final causes to each other, and his own role as the agent who brings each element to its perfection in the context of an entire solution. He knows how to think well in terms of nature, to think well conventionally.
But he can do more than this. There are times when conventional solutions are called for, and others when unconventional solutions should be sought. If the Aristotelian engineer understands himself as an engineer, he will have some idea when he is in either situation. Consider for the last time our scissors and string experiment. Its most outstanding feature are the restrictions on the solution. We can only use string and a pair of scissors and cannot move from our spot. We are not in the position of finding the appropriate elements to include in a complete solution; we are handed the elements and must make of them the best we can. This is a situation that calls for unconventional thinking. In fact, a wise student subjected to this experiment may very well guess this from the restrictions.
In our engineering life, we should sense that unconventional solutions may be required when we are subject to restrictions in time, materials or methods. To the extent that we are not subject to restrictions, we should try to think well in a conventional manner; that is, according to the natures of the problem and its possible solutions. It is the difference between constructing a carbon dioxide scrubber in the development phase of the Apollo program, and constructing one from scratch in the Apollo 13 capsule after an explosion. The former may be a model of elegant engineering, the latter a hodgepodge of duct tape and cardboard that nonetheless gets the job done.
In any case, it is part of good conventional thinking to know when conventional thinking has reached its limits or is inappropriate. The Aristotelian engineer knows when to stop thinking like Aristotle.
 Kernighan and Ritchie,The C Programming Language, 2nd Edition, Preface to the First Edition.
 Stanley Lippman,C++ Primer, Preface.