Imagine three intersecting spheres: a sphere focused on theories of computation, a sphere of real-world applications, and a sphere of hardware, systems, and implementations. A bubbly swirling Venn diagram of computer science.

My knowledge began with these spheres distinct: learning propositional logic from my father, using software and thinking "wouldn't it be great if a computer could do...", or soldering together transistors and writing little prime number calculators in BASIC and C.

Slowly the bubbles collided, first with a growing interest in hardware and how a computer uses logic at the lowest level. Next an expanding interest in programming languages, finding similar languages and then languages completely counter to my experience, and arriving at some conclusions about programming above the level of any specific language. Also, an interest in user interface and the separation of appearance from implementation. The spheres combine, relate to each other, and produce a flurry of possibilities.

It's important that while these spheres come together, that while we get an understanding of each of these areas and how they are connected, that they remain completely distinct. If theory does not directly drive the implementation, the number of possible implementations expands. If implementation does not dictate application (or vice versa), then each implementation can be reused and many possible implementations can transparently direct an application.

I imagine there are many points of momentary equilibrium in this sytem of knowledge, that we're forever connecting the spheres into some delicious hypersphere of knowledge. It is some intersection of all three that currently drives me: a pleasing solution is based in beautiful and simple theory, well designed implementation using the right tools and tricks, and an end result that serves a real purpose that is not adversely affected by the details of the theory or implementation. The developer should know how beautiful the system is inside, but users should only see how beautifully it solves their problem.

From this, maybe I can explain my fervor for open source and communication of knowledge. Maybe I can understand my desire to teach computer science. Maybe I can better explain why a solution is beautiful to me. Explanation, understanding, and continued questioning are all I can ask of a philosophy.