Frabjous Dei

Robert Atkins's weblog

Objective-C is like Jimi Hendrix

The first time I heard Jimi Hendrix I had no idea what all the fuss was about. Sure, it was great, but it wasn’t changing my life. Maybe a decade later, it hit me: thirty years previous, he’d changed every guitarist’s life and changed the sound of guitar music forever. He was the first person to play a guitar like that but it happened before I was born, so I just accepted the post-Jimi guitar sound as normal and nothing special.

I’m getting some sense that Objective-C is like that. Books, manuals and grey-bearded Objective-C programmers bang on about how marvellous the runtime is and the power of code introspection and method swizzling and dynamism and I’m thinking, “Yeah, so what?”. Even as a Java programmer[1], I just expect my programming environment to have those features.

But as a C programmer in the 1980s, this stuff must have been fucking mindblowing! Having joined the industry in the late 90s, the languages I’ve used have been mostly paving over the trails blazed by Objective C (and friends) without needing to carry the burden of backwards compatability.

So if you’re new to Objective-C and, as I am, struggling to come to terms with the fact that it’s one great big leaky abstraction on top of C, put yourself in the shoes of an 80s C programmer and remember you get to use these neat “modern” features in a systems programming language.

[1] Yeah yeah, Java’s hardly “dynamic”, but most of the rest of the “amazing” bits of Objective-C can be (and regularly are) done with reflection and aspects. If you squint really hard, you can even use anonymous classes to pretend you have lambdas.