Signs and portents for 2021

1 December 2020

Each December, our Head of Learning reflects on emerging trends, and makes some foolish predictions for the year to come. Read on to see that the future holds...

Introduction

Even in the midst of a global pandemic, the software industry keeps evolving. So I saw no reason not to continue our great Instil tradition, where each December I reflect on emerging trends, and make some foolish predictions.

And the Oscar Goes To…

Without question this year's big winner is TypeScript. 2020 was the year that, as an industry, we woke up to the potential of this type-safe superset of JavaScript. Initially popularised by it’s inclusion in Angular 2, TypeScript received a huge boost by also becoming the default for the AWS Cloud Development Kit. It allows us to write clean, simple code whilst preserving JavaScript’s universal applicability.

At Instil we are huge fans of TypeScript, especially when combined with frameworks like React and Electron. Simply put, it makes JavaScript safer on the client, workable on the server and (in the latest releases) adds FP features that meet or exceed even those offered by Scala and F#. Plus it’s a first-class citizen in emerging JS frameworks like Deno. What’s not to like?

I see no reason why TypeScript shouldn’t continue to prosper in 2021, and I predict it will win a lot of converts from discontents across the other programming communities. It will be interesting to see how other mainstream languages have to budge up to accommodate this success.

Polyglot and Proud

2020 proved beyond a doubt that polyglot programming is the new normal. Rust has established itself as a mainstream language, and the likely successor to C++. Reason, Elm and PureScript continue to pick up supporters, although not enough to give TypeScript any cause for concern. Most notably this was the year Haskell went mainstream, perhaps not as a language for day to day coding, but as the incubator of future coding paradigms and a subject worthy of serious study.

Doubtless these trends will continue in 2021. However I am going to go out on a limb and say that the one language we will be seeing less of is Python. Don’t get me wrong - Python is an awesome language and has been one of our most in demand courses for several years. But we are entering a world where there is a TypeScript API and/or Kotlin DSL for everything, where FP is the default paradigm and where ML is increasingly commoditized in the Cloud.

I believe Python's recent popularity in part reflects dissatisfaction with the state of other languages and platforms. So, while Python isn’t going anywhere, it’s popularity may have peaked.

FP FTW!

Another trend that consolidated itself in 2020 was the acceptance of functional design in software architecture. Admittedly, you’re not going to see the IO Monad and/or Functional Effects libraries popping up outside of Scala or Haskell. But innovations like Hooks in React and Composable Functions in JetPack Compose show how the industry is being pulled in that direction. This is driven by the perennial challenge of managing state in heavily modularized applications that are continually growing more complex and distributed.

We can expect that this trend will continue in 2021 and beyond, especially in the browser. Radical innovation often comes inside a Trojan Horse, such as when LINQ brought FP to C# in 2008 in the guise of SQL. So I predict that Functional Effects will come to the browser in 2021, but not under that name.

The Browser Wars Cooled

If there’s one place the industry could do with a little less innovation it’s in the browser. Compared to previous years innovation in the browser in 2020 seemed almost sluggish. By unspoken consensus Enterprise Architecture seems to have standardised on either React or Angular, with React continuing to edge slowly ahead.

The new React style (Hooks) won over the developers at Instil this year. It is especially powerful when combined with TypeScript. We see this continuing to erode Angular’s market share. Adoption of Redux remains more problematic, but the new Redux Toolkit should help lower the barriers to entry and speed up adoption. Should that fail to float your boat alternatives like MobX and Recoil are available.

The JVM (and Beyond)

This year has been a success for the Java ecosystem, as ever confounding the doubters with its resilience.

There was good news on a number of fronts:

  • Java proved once again to be the old dog that could learn new tricks. Features like records, sealed classes, switch expressions and text blocks showed that the core language could still keep up with its pretenders.
  • The continuing adoption of Modules and GraalVM, plus the highly anticipated Loom, offer a path to a leaner, more Cloud friendly VM. This may reverse the trend of companies deciding Java is for legacy projects only.

Now that framework authors are mandating Java 8 or above, there is an increasing acceptance and adoption of functional / reactive designs. This can be seen in Reactive Spring, Quarkus, QuickTheories and even JUnit 5.

  • Alternative JVM languages made great progress, both in their core features and satellite frameworks. Kotlin in particular not only completed its dominance of the Android market, but also surged on the server thanks to Ktor, Http4k, Koin, Arrow and, of course, Spring.

There are two interesting questions to be answered in 2021.

The first is whether the official release of Scala 3 will have any effect on the Java community in general. Both Kotlin and Scala now have rebuilt compilers, JS and Native versions, powerful tooling support and dedicated frameworks. The new release of Scala is awesome, but we still don't see it making much of an impact. Ultimately the Kotlin community has proved they can move up the FP complexity ladder as needed, but the Scala community has yet to show they can move down. There remains enough room for everyone, but we don’t see Scala winning new hearts and minds in 2021.

The second question is whether Kotlin will succeed in its bid to be the multiplatform language of the industry. In late 2019 the Kotlin team started to make a huge deal of their support for multiplatform libraries, which would enable the same code to be shared across Java, Swift, C++ and JavaScript codebases. This year we saw a number of successful case studies using this technology.

The meteoric rise of TypeScript will be an issue here. But if the Kotlin team can continue to refine their Dukat interoperability tool, and perhaps add features like Algebraic Types to the core language, then there is no reason why they should not succeed. Kotlin, TypeScript and Rust could then become the three essential languages for the next decade.

Serverless

Of course no discussion of 2020 would be complete without Cloud Computing, and Serverless in particular. We now see all our clients shifting to some form of Serverless, with AWS keeping the top spot for another year running. Standardisation on the Cloud Development Kit and emerging best practises (such as the CDK Patterns) should keep AWS in the top spot.

That being said we hear very good reports from those working on Azure and Google Cloud, especially as regards how simple and friendly the experience is for developers. So it wouldn’t take much for an industry as fickle as ours to anoint a new king.

I’m going to stick my neck out again and say that Multi-Cloud is inevitable. Not for technical reasons, nor because anyone wants it, but because that’s the reality of business. Companies grow as much through mergers and acquisitions as by expanding their existing customer base. So as Serverless applications become legacy (i.e. working and earning revenue) a successful company will be incentivised to keep the systems they acquire running, regardless of platform.

I predict the resulting situation will be like the .NET vs. JEE wars in the 2000’s, where initially an IT department was ‘either fish or fowl’ - but market forces soon drove them to be both.

Work, Rest and Play

In previous years these articles have only ever been concerned with technology trends. But 2020 required radical changes to our everyday routines, and it’s only natural to ponder how much of this change will become permanent.

In a sense, 2020 only accelerated us down a road we were already on. Instil, like many other software providers, was already participating in distributed team-working for a range of clients worldwide. We had an existing policy of working from home and distributed pairing was happening daily.

As an industry we had the tools, experience and motivation to take what had been a novelty and make it the daily reality for developers worldwide. The same applied to conferences, training and meetups - a personal journey for myself which I have discussed in detail elsewhere.

My ‘hot take’ is that many of these changes will stay with us forever. Developers have learned to make good use of the hours they would normally spend commuting, and project managers will be loath to lose that productivity. In many industries the only thing that was preventing teams from embracing distributed workflows was the fear of the unknown. Now we have been pushed past that fear, few will be inclined to make a case to turn the clock back.

I don’t think that offices will vanish, but will instead function more like conference centres and business incubators do today. They will be ‘drop in centres’ where you spend a couple of days a week on the most important meetings and the trickiest problems. But the rest of your time will be remote.

Conclusions

When I write these articles there is often a sense of ‘everything changes and everything stays the same’. This year is no different. Taking the long view it has been quite a while since we had a major platform shift, as happened with VM’s, web apps, mobile and Cloud. There are huge changes at work for certain, but they are happening in small increments under the surface with the odd lurch. A bit like plate tectonics. WebAssembly has the potential to shake things up tremendously, especially when combined with Rust, but it never quite seems to reach critical momentum.

The industry may have reached a condition where seismic shifts are no longer possible or desirable, and from the point of view of software as a career I believe this is a good thing. Perhaps we can now spend more time on the structural, social and humanistic aspects of the profession, to the benefit of us all.

Article By
blog author

Garth Gilmour

Head of Learning