Latest News

Three Programming Languages That Will Drive Enterprise Development

Chanaka Fernando, Associate Director of Solutions Architecture at WSO2, discusses the programming languages most likely to drive enterprise development

The growth of digital services, mobile apps, and connected devices is creating an explosion of endpoints—from APIs to events, data streams, microservices, serverless apps, and other digital assets. As a result developers face ever growing demands and need a more modern and agile approach to connect to these endpoints than a traditional centralised enterprise service bus (ESB) can offer. Today ESBs have significant shortcomings in meeting the needs of modern app development and integration, including creating a bottleneck for centralised development, as well as having a poor fit with agile development, and underpowered configuration languages that results in it having a poor reputation with developers. That said the conundrum many developers face is which programming language should they use?

Understanding different programming languages

I used to be a part of a team that developed a modern programming language, Ballerina, targeting enterprise software. Ballerina is a programming language designed for implementing modern, network-aware, cloud-native applications and we released the 1.0 GA version this year in September. After spending two years entrenched in designing, implementing, and using this programming language, I moved into a different role where I became a user of many different technologies, including many other modern programming languages.

This gave me some really good insights and learnings which I wanted to share, in particular around three programming languages that I have become most familiar with:

● Go —a programming language is designed by Google and used by many new open-source projects including Kubernetes.
● Rust —a programming language is designed by Mozilla research and it is a replacement to C (yes it is the C you know).
● Ballerina —a programming language is designed by WSO2 to make enterprise application programming fun.

Go is for the majority

If we go back five years, within the enterprise software world, there were two sets of programmers running the show — Java and .Net. Even though these programmers had a sort of love-hate relationship with the respective languages, these were the languages being primarily used, but programmers were looking for a better alternative.

Today, Go fills that gap. Go’s design decisions and the modern features meant these programmers fall in love with Go, and the ecosystem they built around the language made it easier for these two types of programmers to adopt it very quickly. Even though Go doesn’t have the lion’s share of the overall market, it is on its way to becoming widely used in the enterprise software world.

Due to the effectiveness and the cleanness of the language, developers started using it to write enterprise software which previously had been dominated mainly by Java From cloud-native runtimes to API gateways to analytics tools, Go has been used by 1000s of developers. It was delivered with not only the language but with an entire ecosystem that is baked into the language itself.

Rust is for the passionate

While the enterprise software battlefield is divided into Java and .Net, systems programming has been dominated by C and C++. The power and the control offered by those languages made it the ultimate choice for systems programmers to adopt. However, a set of passionate engineers at Mozilla wanted to go against the status quo and invent a programming language that could replace C.

Hence they built Rust — a programming language that is as fast as C but doesn’t mean you get runtime bugs that crash your entire system with a segmentation fault. Rust designers have created the language in a way so that it is safe and prevents as many runtime bugs as possible and identifies them during the compile time. Rust is becoming a popular programming language outside the system programming circle because of the modern features of the language and the ecosystem that has subsequently been built with Cargo.

Rust is the next step for the C/C++ programmers to build efficient software without runtime bugs and with modern programming language features.

Ballerina is for system builders

So why do developers need another language like Ballerina? I hear you ask?

Both Go and Rust are excellent programming languages to build systems with the utmost efficiency. But sometimes the systems built with Go and Rust alone cannot fulfill the requirements of the end-user. You need to connect these various systems using an integration tool. But why use a graphical editor and build integrations, if you are an efficient programmer who wants more control over what you do?

That is where Ballerina comes into its own. Ballerina is specifically designed to build integrations with the knowledge of network, messaging formats, protocols, data structures into the language so that you don’t need to rely on third-party libraries when integrating software. It radically simplifies how developers build and deploy cloud-native distributed apps and services and effectively puts ESB as we know it on the path to extinction.

A world without ESB

Unlike ESBs and business process workflow tools, Ballerina is designed to fit into a modern development lifecycle—working properly with continuous integration and continuous delivery (CI/CD) tools, such as Jenkins, Travis and Codefresh; observability tools, such as Prometheus, Zipkin and Honeycomb; and cloud orchestration systems like Kubernetes. And unlike an ESB configuration language, Ballerina is a full programming language, so developers don’t run out of headroom when solving complex problems.

Today, modern applications are effectively integrations of services, data, transactions and processes from a vast array of resources to deliver innovative, new services. But ESBs and other traditional integration approaches have failed to keep pace. Our Ballerina programming language is facilitating a major evolutionary leap in the development of cloud-native distributed applications that is tearing down the outdated barriers between app development and integration to enable greater agility, performance and resiliency.