Software development is not an easy business. Like a lot of technical jobs, people on the outside don't tend to appreciate what's involved. "Can't you just make it do blah-blah, " clients say, and then off we go as developers to try and make it happen.
Now and again, someone comes up with some amazing innovation that makes software developers lives genuinely easier. .NET is a good example -- any developer who worked with Microsoft technology back in the 1990s will remember how downright difficult working with anything other than Visual Basic was. Or jQuery -- a technology that in one single stroke made building web apps a hundred thousand times easier.
Yesterday at WWDC, Apple announced Swift, a new programming language that Apple thinks will make software developers lives easier.
Problem is, it's a total mishit that's badly judged the state of the software development industry, and offers little to the jobbing mobile software developer.
The problem that the industry has when it comes to software development for mobile devices is that each platform vendor produces their own toolset in their own language using their own APIs.
This approach makes it extremely difficult for developers to build apps that run on multiple devices. The only safe way to build good cross-platform apps is to create distinct versions of each app from scratch for each platform that you wish to target. As you can imagine, this greatly increases cost, not to mention hassle.
For example, if you want to build an app for Android, Google would prefer that you wrote it in Java and the Android SDK. For Windows Phone, Microsoft would prefer you used C# and Silverlight. And for iOS, Apple was preferring that you wrote it in Objective-C and Cocoa Touch. You can't have one set of code that hits all of those.
Apple's problem with developers was that they used to be a bit of a backward schoolkid eating paste in the corner when it came to the greater software development community, and then suddenly with the success of iOS ended up in spotlight (no pun intended). With the light shining on them, it was obvious their tooling wasn't very good.
CNET: WWDC 2014 full coverage
Apple's developer tooling was based on technology cribbed together to support NeXT. Objective-C is a mash-up of Smalltalk and C, the end result of which is a crazy and arcane looking language that lends additional meaning to the term "toxic hellstew". It's tremendously awful to work with, compared to the tooling that enterprise software developers work with every day.
To cut Apple some slack, that what iOS developers had to work was with was understandably awful because as previously mentioned no one really cared about developing Apple software and there was no point in the investment. It's amazing really that iOS grew the way it did given how bad the tooling is, which itself just shows how much money there is in developing for iOS.
Objective-C and Cocoa Touch are not proper software development toolsets. They're too weird and backward, and were in desperate need of a reboot.
Some of you reading this that use and love Apple's toolsets will probably baulk at that statement, which is understandable. But come on -- if you do use and love Apple's toolsets you know it needed rebooting, even if you don't like me saying that they are not "proper" software development toolsets.
When I first heard about Swift I was pleased as I assumed that Apple would look to solve the key problem faced by mobile developers -- specifically that there is little overlap between developer toolsets making cross-platform mobile development extremely difficult.
I'm a huge fan of Apple products. The iPad I think is a fantastic device. The iPhone ushered in a new and important era of computing. They've brought the benefits of a connected society to everyone through their technical leadership.
But sometimes the company's over-the-top, supercilious nature really grinds my gears, and Swift highlights that unappealing side.
What software developers need is familiar tooling that builds on open standards and well-understood approaches. What they don't need is a bunch of know-better-than-thou engineers sitting in their ivory tower coming up with something that feels almost deliberately, intentionally different just because they think they know best.
When you look at Swift, that is what you get. Something that has been designed in a way that shows no empathy at all for what the greater community of software developers actually need. It looks to serve only Apple developers, and even then it doesn't do it in a way that actually helps Apple developers be part of the broader and richer community outside of the Apple bubble.
In essence, Apple had one job -- create a new baseline tooling for iOS and show a sympatico approach with how the rest of the industry actually operates -- and they blew it.
What Apple should have done, years ago, was bought Xamarin. But they didn't. That would have allowed developers to build for all relevant mobile platforms using C# or Java, which in turn would have created a pretty elegant smoothing of approaches that would have been good for everyone.
It's been a long time since the software development community accepted commercial, "ivory tower" organisations to dictate engineering approaches. The last time this happened was back in the era that brought us Java and .NET itself. Now the community itself decides.
There's a quote in the Swift language guide: “Swift combines the best in modern language thinking with wisdom from the wider Apple engineering culture.”
Oh come on -- it doesn't show the best in modern language thinking at all. Modern language thinking comes from the community, building incrementally within that community in a way that's genuinely helpful to all of us.
Is it coming across that I'm deeply disappointed about Swift? You bet I am.
What do you think? Post a comment, or talk to me on Twitter: @mbrit.