Earlier this month Tim Bray wrote a fantastic piece entitled Software in 2014. His insight is spot on and matches what I’ve seen over the past couple years. The most interesting talking points come in the areas of mobile development and client-side programming.
There has been a lot of chatter on ITWorld about programming lately due to a couple of inflammatory posts I wrote on the topic. I don’t want to dredge that up, but there are many parallels between the opinions I posted and the conclusions Tim draws in his post.
Tim starts his post by discussing what is working well in 2014. Upstream systems (read server-side) are now at a point where the technologies, patterns, and frameworks have gotten so mature and efficient that there is little question about how they are approached today. Nearly everything is built with proper separation of concerns (MVC and similar) and nearly everything communicates readily via HTTP based API’s. There are great programming languages to choose from (and still some poor ones), and after decades of improvement the server-side is feeling pretty darn good. Of course progress will continue and improvements will still be made, but it’s safe to say it’s stabilized.
Also gaining ground in 2014 are trends toward more scalable systems. Functional programming languages are picking up pace due to the changing requirements and demands of today’s super-scaled applications. If you’re unfamiliar with functional programming, the super basic idea of it is that objects/variables are immutable - meaning they don’t change. If you need to change something, you create a new one. This is useful for scaling applications because requests can be executed in parallel on multiple threads without causing concurrency problems. Along the same lines, distributed databases have made major progress lately and are changing the way we look at capturing, storing, and reporting on data. There are many distributed database engines to choose from, each with their pros/cons and use cases, but Tim talks specifically about Cassandra and how Netflix is using it to blow minds.
Doing your mobile development from scratch for each platform (read native) is also painful, but for now it’s the only way if you want a quality product. Updating the app independently for each platform is equally painful. Coupled with the app store deploys/reviews it’s downright frustrating. You don’t get a choice for languages either, you’re going to use Java or Objective-C whether you hate or love them. There is no shortage of people who say you can get a quality product using something like Appcelerator, or by simply using HTML5 properly, but please, that is not the case. While coding once is nice, you can’t do it at the cost of quality/experience if you want to succeed, any legit mobile shop will tell you that.
This leaves client-side development in an awkward spot. There is no clear winner, there is no clear path, and there is no clear best practice for proceeding. From what I’ve seen lately, progress is being made much more quickly than it has been in the past however. Like server-side development, arriving at a desirable position is going to take years. Old habits and technologies need time to fade and die, while new ones need to gain majority approval and adoption. It can’t take nearly as long to shake out as the server-side did but we’re just getting started as far as building the tools necessary to move forward. In the mean time, development shops need to suck it up and painstakingly build everything thrice. They also need to continually adapt and learn the new trends and frameworks as they start to gain momentum. It’s not going to be an easy road, but taming the upstream systems should give confidence that order will flow downstream in time.