There is always a debate among those in the software industry (and especially contractors) as to where technology is going to go and what skills are likely to be in demand. This post is an attempt to look at technologies in the whole software stack from low level drivers to number crunching server software; from top to bottom; from by way of mobile apps and web services; and surprisingly there is a commonality of themes between them all!
C to remain at the heart of low level drivers and native methods.
This is not really a prediction. It is just a fact C is really little more than a macro assembler in terms of its abstraction capabilities – in fact it is really a macro assembler for a stack based machines. As such it is ideally suited to the very bottom software layer. Although C++ can add OO on top of that it is probably as well to jump to proper abstracting languages as rapidly as possible. There are exceptions to this for very time sensitive issues such as protocol stacks for communications but, in truth, those are few and far between.
The Java language to continue to make in-roads into the embedded space.
Android phones, e-readers such as Kindle, set-top boxes tablets and Smart-TVs are taking over the world. These platforms all run OSs based on Linux, and have Java based development environments. Increasingly, these are going to provide the standard for GUI interaction that consumers expect, on everything (as surely as colour LCDs took over from Starburst LEDs and Nixie tubes).
Anyone who has coded up a GUI by hand understands just what a tall order it would be to code up a system to compete (just ask Nokia and RIM). Thankfully all the fore-mentioned devices are supported by reference designs and backed by documentation and pool of talent (albeit an in demand pool).
Javascript, HTML5 and CSS to take over data-centric and enterprise applications.
Java applets on webpages are as dead as Flash. Where users interact with data the browser is already king; but the need for browser agnostic
There are fantastic tools for developing for Javascript, HTML5 and CSS; many of them drag and drop and customise.
All the facilities of modern devices can be accessed via such tools and using suitable frameworks, such as Spring, they can interface with the plethora of communications, SOA services and databases which make up the model and control aspects of modern systems.
Groovy and Spring features (and then Java 8) to take the back-office by storm.
The productivity increases brought about by the use of Groovy and frameworks like Spring will make them an obvious choice for the back office. The devolution of responsibility to smaller SOA services will make the use of tools to generate and maintain such services a no brainer. Groovy’s integration with automated testing (via SoapUI) and its ability to hook straight into Java, will make it the RAD tool of choice.
The facilities provided by Groovy and Spring are both having an impact in the design and specification of Java 8; sometimes directly and sometime obliquely, but functional programming, easy data persistence and cross-cutting are definitely making their way into the Java roadmap. That change to Java will take some time but even once it is made Groovy and Spring based systems will interact more easily and port more readily; and further skills acquired with Spring and Groovy will be the closest thing to experience available in this fast evolving environment.