The phone’s ringing but nobody’s home


You know what I like about Objective C? When you send a message to nil. You know what I hate about objective C? The phone ring’s but nobody’s home. Think about this a minute. Imagine if you were to dial your loved one and mistake a “4” for a “5”. The house you dial has no answering machine/service/secretary. You have no definite way of knowing that you dialed the wrong number or that nobody’s is there. All you know is that you always call at exactly 12:15pm during lunch after taking the 5th bite of your usual Chicken Cordon Bleu sandwich which you order daily from the same fast food provider (paid for by pulling what appears to be the same $10 bill creased in exactly the same corner out of your trusty tattered wallet then after reaching the door doubling back as you always do because you left your keys on the counter). You know your loved one always answers on the second ring and has no reason/desire/ability to suddenly dodge your usual 12:15, “How’s your day going? No, how’s YOUR day going sweetie?” exchange. You hit redial a few times to the same non-response and rather than accept the obvious fact you begin to panic. Something must be wrong! You verify every other point of failure except for the most obvious, calling other family/friends, contacting your building admin (y’all did pay the bill right?), even going as far as arguing with your communications provider(s) in a frantic attempt to resolve an inconsistency or ripple in your otherwise pathetically inevitable daily episode. (You were born with a slight undiagnosed touch of autism which not only hobbles you with predictability and inability to handle subtle changes in your routine but gives you a certain advantage in the field of software design which is roughly 90% about patterns.) After becoming Ralph Tresvant (featured in the clip below) and losing to the unlimited powers of the Verizon network (how come they always get over?) it dawns on you to finally attempt manually punching the memorized phone number into the keypad after which you finally get your much anticipated response, “How’s your day going?”

That’s kinda a little bit sorta like how I might have felt today after I spent 2 hours, 37 minutes and 17 seconds chasing an error where I forgot to set an instance variable in my Objective C class. A creature of habit, I like my runtime to yell at me when I access a null pointer! I love the freedom from these ambiguous errors but hate the flip side. You can go on willy nilly sending all kinds of messages to null pointers, non-objects, empty stuff and not know until three months after you’ve been workforce-reduced after slipping 5 months past a dead line while you spent 4 months and 28 days chasing a production day behavior oddity that just seemed impossible.

Bill Dudney said something like, “It’s not the learning curve that hurts it’s the unlearning curve” and I totally agree. I love/hate Objective-C and I could spit bullets at Steve Jobs for his take on Java and the arrogance of insisting his favorite programming toy should be everyone’s favorite programming toy. As much as I hated picking up yet another language/framework/way-to-do-things I forced myself on because to get hung up in any one tool-set or programming paradigm is to slowly reduce yourself to a collection of the basic carbons and minerals that make jelly-fish wiggle in the ocean. Lesson learned overall. Now I stand as I speak, “My name is Cliff, and I made a call to an empty residence.”

6 thoughts on “The phone’s ringing but nobody’s home

  1. Good link! It took me a while to get used to Linux’s “silence is golden” standard too. After wasting time building command wrappers that yelled in place of the silence of the wrapped command I realized that the historic relevance of certain features far outweighs your comfort level with that feature. In other words, get used to doing things different, never settle for what you’re used to as a good enough solution. “It works for me”, never works for me and when it does then I’m not working for you. When “it worked me over” then I’ve actually done work for you and me even if it means I’ve only added a button to the screen in the course of 4.5 hours because I’ve learned and matured and the next twelve features I commit will be 120% more robust taking far less time to complete.

  2. The magic google words for that link were “smalltalk message to nil.” For every weirdness in Objective-C, there’s some dissertation somewhere from a smalltalker about how it’s obviously the best way to go, though smalltalk is clearly in a different place, having an actual nil class as the bottom class. I found this too… http://c2.com/cgi/wiki?NullObject … I get philosophically why they did it, I just wish I could turn it off.
    From the first link, I’m glad Matz didn’t bite.

  3. Small talkers talk big stuff don’t they? I’ve never tried the language but from what I’ve heard/read/smelled-coming-out-of-the-kitchen-Friday-night you’d think that all other languages were just a waste of time. The net is full of, “Smalltalk did that back in 1806!” …and “That’s neat but in Smalltalk you can do this and that…” …as well as “why are you working so hard when you can listen to [insert name of legendary smalltalk engineer] who says alls yuh haff tuh do is…”One of these days I’ll have to pull down their compiler (does it compile or is it interpreted?) and see what all the hoopla is! It can’t possibly live up to that much hype, well maybe in yesteryear but not by today’s standards. Who knows? I might become the next SmallVangelist.

  4. If you’ve used ruby, you’ve probably seen everything worth seeing in Smalltalk. Smalltalk is one of those everything-is-an-object-and-no-primitives, no-type-system, closures-are-first-class-objects type languages; it runs as a compiled bytecode on a big virtual machine, and this no doubt is why smalltalkers reserve particular ire for Java-come-lately. As far as smalltalkers are concerned, Bill Joy took the least favorite part of smalltalk, the huge runtime (2MB in the 1970s was a lot of paper tape!) and put on top of it something smalltalkers particularly despise, an static and strict type system.
    Now if you REALLY want to waste some time, don’t bother with smalltalk, download lisp off darwinports and you can spend literally days trying to load a nib.

  5. Yes, that’s exactly what I need right now. One more vacuum hose plugged into the small window that I call “Cliff’s spare time”. (Incidentally, that window contains gems stolen from other windows labeled “Cliff’s time to clean the garage”, “Cliff’s time to sort out the bills”, “Cliff’s time to do yard work” and others.) I read up on Lisp shortly before getting hired at my current position. I was beginning my “functional programming is the way of the future” evangelism at the time. I Never fully picked up any languages cut directly from the functional mold which is why I cling to XSLT and Groovy as a few of my favorite toys. Back then I dreamed of writing ANTLR pre-processors for Java code to optimize for tail recursion, then later read of how certain compilers did this grunt work for you.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s