I have a BA in Cinema Studies, which is more useful than it sounds. I initially started with Computer Science, took a few semesters, but the maths made me drop out. One of the problems was that I just about made it out of High School without ever really studying, but once in university this approach didn't work. I went to the math lectures, listened and thought "whatever, I get that", and never bothered to actually do the hard work solving the problems.
One difference between doing maths and programming, is that you seldom see the real reason why you're actually doing all that hard work to solve something, at least not until you reach a higher level. When you're programming, this is usually not the case, because you're trying to create something which is not directly related to the aesthetics of the code you actually write. That statement is a bit simplistic, as the code quality can eventually end up influencing, both the quality of the end product, your thinking around it, and the ability to adapt and change it in a flexible way.
But the principle still holds - a beautiful solution in Lisp to a problem which is functionally equivalent to one, in say, badly written Pascal, just to bring that language up for no reason, are still the same to the end user. They will only care once you've nested yourself so deep down in your code you cannot easily add features to it, or do so without introducing bugs.
Programming requires, apart from Computer Science, creativity, intuition, holistic thinking and actual technical knowledge based in experience. It also requires thinking about both time and space of the system at runtime. It requires to constantly reevaluate the idea of the future system, as the current system will involve constraints which may or may not have been foreseen at the point of actually building it. It's a struggle between the idea of what the system should be next, the possibility of what the system can be, and the actuality of what the system is now.
There's the cultural aspect of the code, how it got there, what influenced it, the wider historical understanding the person who applied an idea into the system in the first place had. It involves traces of the mental state of the people who wrote it, and the ones now changing it. There are traces of ignorance in parts of the system of it as a whole. And there's an influence from other systems in it, systems seen, heard or dreamed of, or written before by its authors. All these things can be stretched and evolved over years in several parts, or concentrated to a single outburst of creativity over an hour in a single place.
The system as an complete idea, does simply not exist. And this is not a technological problem.
Now, Cinema Studies, and the humanities in general, requires a different, but also similar, way of thinking. You're allowed to connect dots which aren't obviously related and try out ideas which cannot be directly proven in the mathematical sense. The value of a theory is more about what new useful insights you can have by applying it - and what's useful depends on what question you're asking, and what kind of answer you're actually looking for. The validity of the interpretation has to be judged by the person who is asking, and the audience. Actually, maybe the real value in all this lies in what further questions it opens up, some which were not clear enough to be asked before.
I tried to write my master's thesis in Cinema Studies about the c2 wiki, this was before Wikipedia, so my professor was quite intrigued by the entire concept of a website editable by its users. Now, the reason this was an acceptable subject for my paper, was that Cinema Studies had to deal with all kinds of new media, as there was yet not a department for "multimedia" or "games", and all these artefacts of digital culture had to end up somewhere, as they all warrant deeper critical analysis - Cinema Studies itself of course owes a lot to Literary Theory. Game Studies was actually quite common already back then. I recently recommended the Platform Studies book series from MIT, which I really like, as they're not trying to shy away from the technical aspects, there's assembler code being discussed, for example:
Platform Studies investigates the relationships between the hardware and software design of computing systems and the creative works produced on those systems.
Then there's Software Studies, which seems to be more about how something like PhotoShop affects art and visual expression (but don't take my word for it), they describe their mission like this, which, for me, is hard to disagree with:
Software takes part in, shapes and makes possible almost every aspect of contemporary life. But whilst much is written about how software is used, and the cultural, economic and social activities that go on around and through it, thinking about software itself remains largely technical. Increasingly however, artists, scientists, engineers, hackers, designers and scholars in the humanities and sciences are finding that for the questions they face, and the things they need to build, an expanded understanding of software is necessary.
You further have Critical Code Studies, which seems to be a quite confused field to me, with everything from Florian Cramer's fascinating book Words Made Flesh - Code, Culture and Imagination (PDF) to studies of ascii art:
Critical Code Studies (CCS) is an approach that applies critical hermeneutics to the interpretation of computer code, program architecture, and documentation within a socio-historical context. CCS holds that lines of code are not value-neutral and can be analyzed using the theoretical approaches applied to other semiotic systems in addition to particular interpretive methods developed particularly for the discussions of programs.
So there's no lack of people looking at this from many different angles - if you as a programmer feel a bit surprised about this attention, remember that we actually have quite a lot of indirect control over how the world is shaped and works - I briefly discussed Christopher Alexander's view of this here back in 2004.
I'm writing this in a cafe in Paris - so let me share my favourite Foucault quote - not because I really understand it, but it just sounds so damn cool. It is mildly related to this - in the sense that we need to break free from our preconceptions about programming, but also how hard - and potentially impossible - that is:
But truly to escape Hegel involves an exact appreciation of the price we have to pay to detach ourselves from him. It assumes that we are aware of the extent to which Hegel, insidiously perhaps, is close to us; it implies a knowledge, in that what permits us to think against Hegel, of that which remains Hegelian. We have to determine the extent to which our anti-Hegelianism possibly one of his tricks directed against us, at the end of which he stands, motionless, waiting for us.
This post is a somewhat late follow up to this one from 2005, where I promised to talk more about my abandoned masters in the Philosophy of Technology and Science - Andrew Feenberg's What Is Philosophy of Technology? is a good introduction, and was also the angle from where I came to this subject.
This field is broad and somewhat obscure, most people at the department where I was were interested in relatively practical things, like the risks of technological solutions, and what moral consequences that has for their makers. My idea was to try to figure out what sorts of communication between people, and people and machine were required to build modern software, but carefully avoiding any technical aspects of it. And once having stripped it down, try to refactor the result - "we don't need this crap, let's drop this step", "this is actually just a repetition of what was said over there" and try different ways of retrofitting the result back into a concrete programming model.
I obviously never got that far - actually I got nowhere, and moved to London. But the idea is compelling - sometimes you need a clean break and try something different. But to make a real break, I feel I must first take a serious detour into functional programming, which will keep me busy for a while. And I don't mean something like playing around with lambas in Java or write a few lines of Clojure here and there and feel smug about it. This requires me to leave many of the tools I have behind, to rediscover them. There's a point around the idea of Ruby being an acceptable Lisp, as it is very powerful but still allows you to build on what you already know, but no, this time it's personal.
There's a risk that this is an unnecessary diversion, but while clean breaks can be good, you don't want to end up spending several years doing something that has been rejected many times before for reasons that will take yourself those years to understand.
It's a tricky balance.
Today's title is borrowed from, not Hegel, but another contemporary great german thinker, Sash! - it means "Once Again".