Give me a lever long enough and a place to stand, and I will move the Earth.- Archimedes
After spending ten years going deep in one vertical at Red Hat, I’ve spent the past nearly two years going broad – across industries and organisations. I’ve been at Just Digital People, interviewing developers, software development managers, and business owners, day-after-day.
I got into Red Hat in 2004 because I could see that Linux and Open Source were the future of technology. I got into Just Digital People in 2015 because I could see that developing a digital innovation economy is the future of Queensland.
Here are my picks on where technology is headed in 2017, and where I would put my money and my time.
TypeScript gains more traction.
Wallaby.js continues to rise in popularity, and eventually gets acquired.
The Rise and Rise of React
Facebook’s React library (and the design philosophy that it implements) combined with the Flux pattern allows software developers to reason about the data flow in their application and its interaction with the interface, as well as creating reusable interface components.
It’s the preferred view layer of choice for startups (Enterprises and Government seem to prefer Angular), and it will continue to increase in popularity in 2017. One of the big drivers behind its adoption is that Facebook / Instagram use it, so it’s battle-tested at scale, and has a significant invested engineering team behind it, as well as a large user community.
The Growth of Ramda, Cycle.js, and Elm
The Rise of Go
Go is a systems-level programming language from Google. It has “the expressive power and performance of C with the programmer safety of C++” (I just made that up, so you can credit me when you tweet it out). It’s a modern take on C++, incorporating lessons from decades of software production. It’s well suited to building network microservices, and a significant portion of the Docker code base is written using it. One of the expressed goals of Go is to enable junior developers to be immediately productive while limiting the damage they can do to existing code bases. The fact that Go mandates a single consistent formatting of source code removes a huge amount of friction in software development teams. As the Go team put it: “never have a debate about spacing or brace position ever again!“. That Silicon Valley episode was funny – but like everything in the show it’s funny because it is literally true. I wrote previously about a Brisbane company that fired their two local developers and outsourced their jobs to Vietnam because they literally burned $50,000 arguing about coding style and overwriting each other’s git commits.
Go is fast, it’s opinionated about sensible defaults, it’s supported by Google, and it is being adopted by Brisbane companies on the leading edge right now. This is going to continue throughout 2017, so if you want to get ahead of the curve, start coding in it now.
Organisations will move to writing microservices in Go, using Docker to deploy them.
Docker and Containerization go mainstream
Docker is a containerization technology. You add a single file* to your git repository that describes “here is how you build a machine around this code to run it“. Docker then builds that machine and runs it using a virtualisation technology. It’s different from old school virtualisation because multiple Docker containers can share system libraries, rather than every container being a complete universe. Containers are light-weight, self-contained predictable execution environments. In development they can be used to eliminate the “works on my machine” problem by encapsulating build chains and execution environments. For production, they provide a way to reliably deploy the same thing over and over again.
Organisations will increase adoption of Docker, and Docker will move to provide Enterprise-level stability in their APIs and tooling backwards-compatibility.
* Thanks to Dave Finster for pointing out that the Dockerfile is an imperative script file. The docker-compose file for bringing up multiple containers as a unit is declarative YaML.
The Rise of Serverless
Serverless is a pattern for event-driven functions that run on-demand inside a cloud provider’s infrastructure. AWS pioneered it with AWS Lambda, and this was picked up by the startup Serverless who built a framework for developing and deploying Lambda functions written in Node.js. AWS now supports Lambda functions written in Python, Node.js, Java, and C#. You can also hack in Lambda functions written in other languages, including Go. Support for Go is provided by Apex, written by legendary developer TJ Holowaychuk, who wrote 60% of the Node.js ecosystem before doing an epic mic drop and switching to Go in 2014.
Azure supports the serverless function model with Azure Functions, and IBM Bluemix supports it with OpenWhisk (now supported by Serverless in their latest release).
If you are avoiding vendor lock-in but want to take advantage of serverless architecture, then OpenWhisk offers a way to do this. However: with OpenWhisk you only get the pricing-per-execution model made possible by serverless architecture on IBM’s cloud. Your OpenWhisk code is portable between cloud providers, but on AWS and Azure you’ll need to run OpenWhisk on a cash-burning VM because they don’t provide OpenWhisk as a Managed Service. You’ll also need to manage the scaling piece yourself.
At the moment to get the full pricing-per-execution / infinitely scalable awesome of serverless (aka Functions-as-a-Service) you need to go with a particular provider. My pick is that Serverless builds an abstraction layer that offers portability between cloud providers; but in the meantime you should build something using serverless somewhere, because it is the future.
Open Source and the Rise of Social Coding
Kind of obvious, but pretty much everything is open source now. That means that your reputation can now be portable if it is on Github. More organisations will go to Github and more coders will code in the open – at least in terms of their contribution graph. Developer hiring decisions will increasingly be based on your Github profile, and on your interactions with others on Github. Developers who master Github as a social media platform will get paid big dollars. Companies will start to use Github as a recruiting platform, and view developers who are active and effective on there as brand marketers.
Take a look at the Github contribution graph on various developer profiles. In the market, you are literally competing with people whose work ethic is on public display. Hiring decisions are about maximising potential performance and minimising risk. If an employer can see that you play well with others and have a solid work ethic, then all other things being equal you’ll take the role over someone whose Github contribution graph and activity feed is empty.
Elixir and Scala – the Rise of FP on the Server
With a move to functional programming on the front-end, the back-end will also be affected, with leading-edge organisations choosing to do greenfield development in a functional language. Languages of choice will be Scala for organisations invested in the JVM, and Elixir for organisations that can adopt the Erlang VM.
Facebook doing development in Haskell is a strong indication that functional languages are a powerful response to issues of scale and concurrency, as well as making applications easier to reason about. Stateless functions scale horizontally – you can create more instances of them to meet changes in demand. Combine this with the serverless model and you have a recipe for elastic applications. Programmers will start adopting principles of functional programming in their system design, and this will flow over into using functional programming languages on the server.
If I were looking to launch, relaunch, or pivot in my career in 2017, I would do the following:
0. Get on Github and start to commit code every day. Read about this guy who did a 1,000 day Killstreak of Github commits, and this post from John Resig “Write Code Every Day“. Doing this builds your skill and your public profile at the same time.
- Read other people’s code on Github, and commit patches to upstream projects. Engage in the conversation around projects and technologies. Choose a particular stack and triple down on it. Doing this means that when you go for a job and they ask if you know “X” technology, you go: “Do I know it? I’m a contributor to that. Me and <insert name of project owner> were discussing the other day about <aspect Y of technology>.“
- Build something in Elm on the front-end.
- Go cold-turkey and use Docker on a daily basis.
- Start writing code using FP principles and attending FP talks. You don’t have to understand them, just go to them and watch them on Youtube. It will rub off.
- Write something in Go, Elixir, or Scala on the back-end.
You can also do hobby stuff like Nim, Rust, or whatever; and continue to build on the past with C#, .NET, Java etc. I’ve selected the industry niche that will be unoccupied and expanding in 2017. This is the area where you can dominate the market – you’re not competing with people with 20 years experience in the stack there. Predictably, in 18 months time clients will be asking us for “mid-level developers with experience in Elm, Docker, and Go / Elixir“.
That could be you.
Legendary Recruiter at Just Digital People; a Red Hat alumnus; a CoderDojo mentor; a founder of Magikcraft.io; the producer of The JDP Internship – The World’s #1 Software Development Reality Show; the host of The Best Tech Podcast in the World; and a father. All inside a commitment to empowering Queensland’s Silicon Economy.