For all its surface frenzy, 2014 was a year in which the biggest news stories in the programming language community were about acknowledging reality and bowing to the inevitable.
First, there was Java 8. For Java developers, this release is the most important since before the turn of the century—probably the most important release since Java 2. I know there are many companies that, in the face of finicky compatibility issues, have stuck with older versions. The truth is that the improvements in Java 7 or even Java 6 were incremental enough that this may have been a reasonable response. Not with Java 8.
The introduction of lambdas to the Java language will cause a sea change in the way that Java programs are written. The structure of libraries will change dramatically. Codebases will be instantly identifiable as “pre-” or “post-lambda.” Organizations that don’t modernize are essentially dooming themselves to the “maintenance mode” death spiral of neglect and inattentive developers.
Yet Java 8 is really just a “catch up” release. Every mainstream language has lambdas now. Heck, C++ even got lambdas before Java! The great excitement in Java 8 is not so much what it is as the prospect that the evolution of Java language is back on track.
Similarly, Microsoft’s decision to make .NET open source and to evolve the runtime around a cross-platform core is a huge deal, not so much for any immediate benefits, but because Microsoft is finally acknowledging that “cross-platform” does not mean “runs on multiple versions of Windows,” and that “open source” does not mean “commie hippies stealing software.”
The open-sourcing of .NET is especially epochal in light of famous comments from Microsoft CEOs. Bill Gates’ 1976 “Open Letter to Hobbyists” established the company’s antagonism to the “sharing culture.” The evolution of Microsoft’s programming languages and Visual Studio made it clear that Microsoft understood the importance of programmers even before Steve Ballmer’s exhorted the company’s focus on “Developers! Developers! Developers!”
It is very exciting that one of Satya Nadella’s first major course changes involves elements so central to the company’s identity. But again, while this is breaking ground for Microsoft, it’s hardly news to anyone else in the world that iOS and Android dominate mobile development, that fast deployment of Linux servers in the cloud is attractive, and that there are plenty of ways to make money even when portions of your code are open for inspection. (Better still when your company is open to accepting patches!)
Finally we come to Apple’s release of Swift, a new programming language for Mac and iOS developers. Swift is a hybrid object/functional language (like the other cool kids on the block: Scala and F#). It has some bold design decisions, with no exceptions or concurrency semantics, but is nicely expressive and has gotten an enthusiastic welcome from the Macintosh developer community.
The way a language evolves is an utterly crucial aspect of its quality (see the above discussion of Java), so I think it’s a mistake to make sweeping predictions about a programming language on its debut. I think it was a mistake for Apple to develop Swift in secret for so long. It is encouraging that during its beta period Apple made changes to some semantics in response to community feedback, but languages only get one bite at the apple before legacy concerns make them very difficult to change.
In keeping with the “bowing to the inevitable” theme, the most important thing about Swift is not its particular syntax and semantics, but that Apple is finally moving beyond Objective-C. As I discussed in “Quick thoughts on Swift,” whatever the merits of Objective-C versus C++ in 1989, Objective-C has never gained any kind of traction outside the Apple world (despite being broadly available). With Swift, Apple developers have a modern high-productivity language that is appealing in its own right, not simply because it can target the Mac.
Of course, it’s likely that what will in five years appear as the most important development of 2014 is the release of some library, some framework, or the launch of some company I haven’t mentioned. Such is the nature of our ever-changing, ever-exciting industry: We’re only at the beginning! Happy New Year and keep coding!