This isn’t a post about kernels or compilers, but believe me I can barely fathom the humblingly impressive work that went into the GCC or Linux kernel. I am talking about languages. Allow me to explain.
A very good measure of a ‘language speaker’ is an agent able to tell lies and jokes. In order to lie or tell jokes, one must understand the architecture of a language (not just its syntax, but its semantics as well) enough to fundamentally alter its meaning. But language is only communication of ideas, so by changing the meaning of the language, you are applying your world-view and literally crafting new meaning into the world.
Sarcasm and irony, two of the most complex vehicles for humor, are impossible without first understanding the contexutal linguistic basis of the situation, and then extending that knowledge to recognize its subtle absurdities. To first take a sentence’s literal definition and twist its meaning to fit a different, often diametrically opposed, application requires a deep, meta-comprehension of a language.
So how does this relate to C?
Have you ever tried to lie or tell jokes in C? I admit to having a very passing knowledge of its constructs, but it seems to me that you cannot. Yes you can name variables ‘foo’ or ‘not_a_pointer’ when it really is, but that’s not what I mean. You cannot significantly alter the structure or meaning of the language itself.
Consider macros in Clojure or meta-programming with method_missing and define_method in Ruby. Forget shooting yourself in the foot, you can blow your leg clean off! C is an amazingly efficient means of communicating with a computer – it is fast, maps well to the constructs of assembly, and maintains a respectably logical simplicity. But as a linguaphile (both in computers and humans) I think it lacks a certain richness, a humanity that I find very appealing and attractive in the meaning that languages can convey. The expressiveness found in higher language may have given us the vapid wasteland of Call Me Maybe, but it also gave us the fun, enlightening works Vonnegut.