Unnatural Languages
Wow, is it April already? Time sure flies.
Okay, so clearly I’m not the most prolific blogger in the world. It’s not that I’m out of ideas; I just find it hard to express myself in prose nowadays. Part of this might be because I’ve immersed myself in relearning a couple of programming languages lately: Ruby, Objective-C and even good ol’ C++. It’s kinda hard to write in plain English again after all you’ve seen lately are things like if ([obj respondsToSelector:@selector(valueForKey:)]) (BlockMethods.getImplementation()->*eachPtr)([obj valueForKey:@"array"]) { |x| class << x; attr_accessor :tag; end }
You may think this is because I’m a huge geek with no life outside of computers. That is, of course, absolutely correct. But to be honest, I’m not very good at programming for a geek; I just love learning about new languages and appreciating the beauty of their design.
In my freshman year at Cornell, I took a course where we had to write a compiler for a simple object-oriented language that would output assembly for a fictitious machine. Going through this course was like a revelation: scoping rules were not—as I thought at the time—dictated by some lower-level system, but were intentional design choices. I also saw that inheritance in OOP wasn’t at all natural to implement, which implied to me that the concept of objects came first before someone decided to put it in a language.
Put in other words, I realized that programming languages were human-created abstractions. And from that point on, I saw programming languages as something akin to works of art; each language is a collection of design choices—some more unusual than others—that come together and attempt to form a coherent whole. It’s really quite a fascinating subject…
No? Oh come on, at least I think so.
Posted in Geekiness by jiunwei at April 7th, 2008. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.