Be a Good Technology Ambassador
There’s also been a ton of discussion lately in the Apple developer world around Swift. The recent focus has been its lack of dynamic features. I think this is a particularly interesting discussion topic, considering how dynamic Objective-C is, and how many of Apple’s APIs are built around that functionality. There have been some fairly thoughtful pieces on this subject, and I’ve enjoyed reading them. But it is the nature of the problem where I find the most interesting issue arises.
Perhaps unsurprisingly, programming languages have some of the qualities of spoken languages. Cultures develop around them, often with very unique aspects. I think that partly because of Objective-C’s dynamic features, it has a unique culture. Particularly for those that have been using it for a while. Because Swift differs philosophically from Objective-C, it also differs culturally. This is going to be an shock for some.
But, we knew it was coming. Objective-C’s pure dynamism has been on the chopping block for years. Take this error as evidence:
Of course this is illegal for a very good reason. The compiler needs more information about the signature of the method to make ARC work. But, some time before ARC was introduced, this particular construct became a warning. And I mean that both figuratively and literally. It was the compiler trying to help prevent you making an obvious error. But, it was also a way of discouraging use of the most dynamic feature. It was an indication that a cultural shift was coming.
This definitely was a shock for me. I was stunned when Swift was announced. Even though I saw it coming, and knew it was an inevitability (http://arstechnica.com/apple/2010/06/copland-2010-revisited). It took took me months, I’m not kidding, to fully process the news and implications. Objective-C was weird and dynamic, and once I got the hang of it, I felt like I was using something very different. I liked that. And if you’re like me, you’ve formed an emotional attachment to the tool. Irrational, perhaps. But undeniable.
To me, Swift feels much more like a decendent of C++ than Objective-C. And, I think that makes perfect sense, given the circumstances. All of LLVM and Clang are written in C++. I have a suspicion that while Apple’s compiler team obviously had Objective-C in mind when designing Swift, it was C++ they had in their hearts.
So here we are. We’re not in that alternate dimension with Objective-C 3.0. This is about more than the target/action paradigm. More than Swift needing dynamism, or how it might be unnecessary. There are lots of technical reasons why this transition will be good. But, you also have to acknowledge that the transition isn’t just technical. It is emotional. This is about letting go of something you might be attached to. It’s ok if that doesn’t feel great.
I’d like us to think hard about why we have type wars at all. Why have snarky comments about individuals using dynamic typing. We’re temped to say good riddance to Objective-C. Thank goodness that’s over, right? There are better ways.
Apple has built a fascinating history of melding incompatible technologies. Unix and Mac OS. PPC and x86. C and SmallTalk. These have always produced cultural strains. It’s easy to think technically about these. And, that’s one of the easiest ways to make it hard for newcomers. There’s an entirely new culture coming in. Saying their way, the way that got us here, the old way, saying that was bad is not just (in my opinion) incorrect. It also shows a real lack of empathy for the people that still love it.
If you love Swift, love static typing and algebraic data types, you have an opportunity that doesn’t come along very often. Across our industry, things are moving in your direction. You have a chance to welcome in lots of new people, from different cultures. But, you have think emotionally first, technically second. You are an ambassador for the technologies you love. Be a good one.