I was just at Microsoft Ignite here in New Zealand, and I have to hold Microsoft up as the company that does Tooling so well. I spent a few years doing .Net as a student, and quite frankly, I loved it. C# is a solid language to work in, with lovely OO and Functional (LINQ) capabilities and around it, a bunch of awesome tools such as Visual Studio, intellisense, ReSharper and more!
I spent the week quite frankly being quite jealous of the tooling. From VS you can publish directly to Azure and all sorts of other things. And then even Azure is a brilliant collection of tools that intertwine and integrate better than a plate of linguini.
Typescript, Microsoft’s new is actually leading the way with something they call a language server protocol, meaning as long as your editor speaks the protocol, you get all the features like intellisense and autocomplete. Even Rust is following. Such innovation. Wow.
In the other camp, our frenemies in Android land have Android Studio which is superb, and they love to bemoan Eclipse, which is still better than Xcode. Sure, they have to put up with Java, but since Java 7 it’s been quite nice and 8 just came out and it looks great too. Heck, even PHP has been good since v5.
You might say “Oh I’m too good for IDEs, I just use Vim”. Sure.. but wanna try tell me you have no vim plugins? Exactly. Tools.
Look, I’m not trying to have a go at language innovation (it’s great!), but this obsession we have with building new languages such as Swift and it’s features just has to be be matched with the innovation of tooling as well. Refactoring, renaming, style checking, unit testing and more must come with a new release. Rust is doing well with errors. Elm is following suit. And one could argue Go has had notable influence in its focus on really fast compile times and standardised syntax formatting (by way of the gofmt tool). Why is Swift lagging?
Sure, the official line seems to be “it’s on the list”, but I’d argue we could have at least got class renaming before several versions of Swift. It’s great they’re adding new features from other languages — but it’s not great that it is at the expense of the surrounding developer experience. With that said, do Apple really expect us to commit to Swift? How about for the Server and other places?
Still not getting it? How about this: since we like to call ourselves engineers, let’s take a more direct metaphor from our Civil Engineering friends. Swift is a new type of material, but we have nothing to mold or shape it with. Tools and materials go hand in hand, and we’ve forgotten that. It’s no different with Software Engineering.
Hey Chris Lattner. Love your work, but how about next year we don’t get a week-long migration process and instead get some better Swift tooling?
Don’t forget, Tools + language, not just the language itself, makes a developer productive.