Micronaut, a provider of a framework for building applications based on microservices and serverless computing platforms, today revealed it is allying with Moderne, a provider of a tool for refactoring code, to create a “recipe” that will automatically update the Micronaut framework.
Moderne CEO Jonathan Schneider said the open source OpenRewrite refactoring tool for code, originally developed at Netflix, makes it possible to automate updates to codebases, remediate vulnerabilities and provide a foundation for high-level building blocks that will make authoring custom transformations simpler. That approach will eventually be embraced by other providers of application development frameworks.
Fresh from raising $4.7 million in initial funding, Moderne makes OpenRewrite available via a software-as-a-service (SaaS) platform to enable IT teams to search and transform millions of lines of code in minutes. OpenRewrite currently supports Java, but the company is working toward adding support for additional languages, including infrastructure-as-code (IaC) tools such as Kubernetes, YAML and XML.
Moderne has also developed “recipes” for common search and refactoring operations that can be assembled into more complex recipes for framework migrations involving, for example, an upgrade from Java 8 to Java 11. Micronaut is the first provider of a development framework to create a recipe for its own framework using OpenRewrite.
At a time when applications are more distributed than ever, updating codebases is a major challenge. In fact, the manual effort involved in making those migrations is one of the primary reasons many organizations continue to employ older versions of frameworks such as Java 8. OpenRewrite is designed to automate that process at scale in a way that leaves it up to the individual developer to determine how involved they want or be or if they simply prefer to have a DevOps team manage the upgrade process on their behalf, said Schneider.
In the longer term, Schneider said he expects recipes will be created to address everything from mass migrations to remediating specific types of vulnerabilities across an entire codebase.
Too much reliance on legacy development frameworks generally stymies innovation. The latest versions of Java, for example, are designed to make it simpler for developers to build microservices-based applications.
It remains to be seen to what degree DevOps teams will embrace automation to upgrade code. Many developers are hesitant to rely on automated tools of any kind. However, given the need for most developers to spend more time writing new code, it’s only a matter of time before most of them come to terms with automated approaches to updating existing code.
In the meantime, the cost of supporting legacy frameworks should decline as organizations begin to migrate their codebases faster. One of the reasons there is so much technical debt in the enterprise is because different development teams tend to adopt different framework versions at different times. DevOps teams can find themselves being asked to simultaneously support multiple versions of the same framework. There may always be multiple versions of those frameworks, but, over time, DevOps teams should eventually see the bulk of deployed applications all using the same framework as the upgrade cycle becomes more automated.
Quite often, when developing applications, it becomes necessary to execute long-running code at the same time as performing other tasks. More recently, to run a program on the Java virtual machine (JVM) it was necessary to write the program in Java. Those days are long gone due to the wide variety of programming languages for the JVM. Clojure is a general-purpose dynamic language developed by Rich Hickey for the JVM. One of the main goals of an engineer who speaks this language is to simplify the process of writing a program with multiple threads that are accessing data simultaneously. What, exactly, is the role of a Clojure software engineer and how can they improve the functionality of its products?
What Problems can a Clojure Software Engineer Fix?
A good programming language should help us write transparent and straightforward programs. The software systems that humans create are inherently changeable. In development, it is impossible to foresee all situations in advance, especially when the system’s complexity only grows over time. Even the slightest code change can potentially lead to significant changes in overall system behavior. As a developer, it’s necessary to study carefully, analyze the code and predict each shift’s side effects. Over time, and with greater complexity, it becomes close to impossible to thoroughly analyze all the possible consequences of our changes.
The Clojure language was created to overcome these challenges. Clojure has a more convenient and modern syntax that orients the user to the functional paradigm as much as possible. Despite the dynamic typing of the language, Clojure programs are compiled into JVM bytecode and integrate seamlessly with existing Java programs. Clojure has now been implemented for several platforms, the most notable of which are the JVM, .Net, and JavaScript. Because it runs on the JVM, Clojure code is portable, stable, reliable and secure. Each operation in Clojure is implemented in three forms: function, macro or special form.
Typically, complexities in computer programs cause side effects. This language helps to localize those and makes writing functions cleaner. This makes testing easier for the developer, too, since they don’t have to try different queues and find the correct state of the inputs.
What to Look for When Hiring
Large companies in particular value senior full-stack Clojure software engineers who can work across a number of tasks from analytics to coding, testing and DevOps.
Among the problems that a Clojure software engineer can solve for an enterprise are:
Development of front end and back end systems
Creation of algorithms for load distribution by competencies/user workload
Design of modules for forecasting the load users create on systems
Machine learning in Clojure.
Here is the example of a Clojure engineer’s résumé:
Clojure is also an expression of a developer’s ideas about how simple a programmer’s tool should be. Clojure typically uses only four data structures: list, vector, display and set. The main API is built around these four structures. The main abstraction in Clojure is a pure function that has no side effects and is therefore much more reusable.
To date, many libraries have been written for Clojure, including those for developing simple and modular web applications. A Clojure program is an open architecture constructor, which means developers can choose for themselves which libraries to use regardless of which others they may have chosen previously.
Clojure Engineer Salary
Salaries for Clojure software engineers in the U.S. average $129,887, while a Clojure software engineer’s salary in the UK is $69,910. In Canada, the typical Clojure engineer’s salary is $61,780 and in Germany, $69,089. Clojure software engineers in Ukraine earn an average salary of $38,000.
Value to the Enterprise
Enterprise software performance requirements dictate the need to use parallel computing to interact with each other and work at the same time. Existing languages are poorly suited for parallelizing tasks. They contain many object and state dependencies, which translate to systems with unpredictable behavior in parallel interactions. Solutions based on locks and traffic lights do not greatly simplify the implementation of these tasks; the fundamental problem of the system’s state’s dependency on the sequences of object interaction remains.
By using Clojure in web development, a programmer can develop using other minor, task-focused languages. ClojureScript, for example, compiles quickly to JavaScript and runs in the browser. All of this provides an entirely new approach to building client applications.
Since Clojure seamlessly integrates with any Java code and can be deployed on standard Java application servers, it is well-suited to web application development, too. The flexibility of the language and its incredible expressiveness allows developers to create fully functional web applications very quickly.
All a developer needs to work with Clojure is the JDK and the Clojure library which are contained in a single JAR file. There are two standard ways to develop and run Clojure programs: The most common way is to use a simple interactive REPL, a read-compute-print loop.
Since Clojure is a general-purpose language, it is not difficult for a programmer to find a use for it. Since it is based on the JVM, there is already a massive selection of libraries available, which significantly lowers the entry threshold for developers skilled in other languages and removes the need for developers to write code from scratch.
Clojure can be used wherever modern, efficient, stable data structures are needed. Of course, there is no one-size-fits-all tool that can handle all types of development tasks. However, the fact that a Clojure developer can use the language for client-server communication is yet another advantage.
Members of the Adoptium working group include Alibaba Cloud, Huawei, IBM, iJUG, Karakun AG, Microsoft, New Relic and Red Hat.
OpenJDK is a free and open-source implementation of the Java Platform, Standard Edition that is provided by Oracle. AdoptOpenJDK was created in 2017 to provide open source, high-quality Java runtimes based on OpenJDK. Since then, AdoptOpenJDK has been downloaded more than 240 million times.
The Eclipse Foundation is now continuing that effort under an Eclipse Adoptium project that aims to become the primary source for OpenJDK-based binaries. The Eclipse Adoptium working group has negotiated with Oracle to create an OpenJDK Community TCK License Agreement (OCTLA) that will enable it to run compatibility tests to ensure conformance to the Java specification.
Mike Milinkovich, executive director of the Eclipse Foundation, said the Adoptium WG will provide the infrastructure, marketing, community building and developer education required to ensure timely releases and adoption of Eclipse Adoptium runtimes.
OpenJDK is a reference implementation used by multiple vendors to create their own binaries, which are only guaranteed to be compatible with the standard until the next update arrives; updates are released approximately every six months. The Eclipse Adoptium project will make it simpler for developer teams to identify which binaries are compatible with specific implementations of OpenJDK. Ultimately, the goal is to encourage developers to build applications using frameworks that make use of new OpenJDK features as they are added to the platform versus continuing to rely on older binaries.
At the same time, however, the Eclipse Foundation is also looking at making it simpler for enterprise IT teams to rely on long term support (LTS) licensing agreements that would be based on Eclipse Adoptium runtimes, Milinkovich noted.
Despite the plethora of programming languages developers use and even after 25 years, Java remains the dominant language for developers working in enterprise IT organizations. Over the last few years, OpenJDK has gained traction as organizations adopted an open source implementation of the specification that enabled providers of frameworks for building applications to reduce licensing costs.
It’s not clear at what rate enterprise IT organizations are replacing proprietary editions of Java with OpenJDK. However, in the wake of the economic downturn brought on by the COVID-19 pandemic, reliance on open source software has increased to reduce costs. At the same time, many organizations are looking to build microservices-based applications using Java frameworks that are based on OpenJDK runtimes.
Regardless of the underlying platform employed, as developers are asked to build and deploy applications faster, most of them will rely on the programming language they already know rather than take the time to master another.
Oracle announced today the availability of Java 16, which adds 17 enhancements to a software development kit that is now being updated every six months.
Georges Saab, vice president of development for the Java Platform Group at Oracle, said while most Java development teams are still using Java 8 or earlier editions of the platform, the expectation is that many of them will soon move forward, as updates are made available in smaller increments that are easier to test and vet.
At the same time, Oracle is committing to make available long term release editions of Java that won’t be updated as frequently. While there are many organizations anxious to take advantage of new capabilities as quickly as possible, Saab noted there are just as many that value stability more than innovation.
The latest edition adds support for finalized pattern matching for instances and records, as well as other language enhancements that were previewed in Java 14. Developers can also employ a packaging tool to ship self-contained Java applications that will make it easier to deploy in modern IT environments, said Saab.
Additional capabilities now available include the Vector application programming interface (API), the Foreign Linker API (JEP 389), and the Foreign-Memory Access API that are all available in incubations as well as a sealed classes capability that is being made available as a preview.
In general, Saab said, one of the primary reasons many organizations don’t tend to update Java more frequently is the frameworks they rely on to employ it at a higher level of abstraction are still optimized for older versions. However, as Java updates are delivered in a more modular fashion, it will become easier for the providers of those frameworks to keep pace.
It’s not precisely clear to what degree IT teams are employing Java to build next-generation applications based on microservices. However, a recent survey published by VMware, found 95% of respondents have either already used the open source Spring framework, based on Java, to either containerize an application (65%) or plan to do so (30%).
A quarter of a century after its initial development, Java is still the dominant programming language relied on to build enterprise applications. In many instances, the lack of tools for building Java applications for Kubernetes platforms was a significant inhibitor of adoption for the cloud-native platform. In the last six months, however, the number of tools for building and deploying Java applications on Kubernetes clusters has increased.
Despite the proliferation of alternative platforms for building and deploying applications on Kubernetes platforms, the appetite for retraining legions of Java developers is low. Most developers will rely on the programming tool they already know, especially when it comes to building mission-critical applications for the enterprise. That may mean some of those applications might not be as fast as they could be, but, given the level of risk, there’s always going to be a natural tendency toward being safe rather than sorry.
Web development has changed a lot since DevOps first hit the scene. The languages used have shifted, where languages are used has shifted, the likely back-end hosting environment has changed – but DevOps has folded these issues in and just kept plugging along.
We’re going to approach this from two angles – what languages you’re likely to use, and what DevOps offers. This is not a “Best Billion Web Development Languages for 2021!” article; there are plenty of those out there, and you are more than welcome to read them. This is more about using these languages in a DevOps environment, which has become standard for web apps more than any other type of development.
We’ll start by observing that your web app is, more than likely, going to have at least three parts – HTML, CSS and JavaScript. This is not news to those of you doing it daily, but we’re just setting the bar, here. Other languages may be used to generate or populate any/all of the above, but, in the end, these three languages get sent to the browser, so will be part of the equation.
Backends add an incredible amount of complexity to this equation. I’ve done Ruby backends that did most of their work in C++ and Java; I’ve done pure Java backends that spit out the required three components; I’ve done Node backends that had very little actual HTML/JavaScript source code, but generated a ton of both – it’s all there. And the hosting environments for backends have changed. When DevOps started, most hosts were virtual machines (VMs) or hardware, whereas now we’re mostly running cloud instances or containers. Those backends have to be configured and managed, too, along with all of the dependencies that your application requires. When you think about it, we really have created quite a messy environment.
But DevOps has risen to this challenge.
I’ve long been an Atlassian fan, and find them to be a great tool for managing the agile side of DevOps. Add in Ansible, for the operations side, and you have a good thing going. I recently looked into GitLab, and GitOps – through GitLab – offers a compelling alternative to Atlassian’s offerings; more so since Atlassian made some rather unpopular changes right about the time I was wrapping up my look at GitLab.
The key is that Git holds all the code. By adding in the scripts to spin up those increasingly complex backends and secure the entire infrastructure, you get an “App in a (virtual) box.” No matter what DevOps toolchain you use, tying this in is simple, because it already works well with Git and associated tools.
Developers tend to care more about the development side of the equation (imagine that!), so let’s talk a bit about what’s going on out there.
PHP is hanging on solidly, with a bulk of applications and (perhaps more importantly) libraries to keep it in the running. PHP is one of the original “generate an HTML page” languages, and is slowly being displaced. It isn’t a bad choice for your web projects, but it isn’t the only – or at this point, the most popular – choice.
Java is still somewhat popular, and while it offers good support for web development, it is … heavy? Is that the word? It’s something for this type of development, and has ceded ground to other languages when it comes to pure-play web development. The skills are transferrable to other targets, so it is a good broad-use language. Like the other serious players in this space, there are web-centric libraries and frameworks that make Java hum. I’m a fan of Spring, but the options are pretty broad.
JavaScript wins this race today. It is used on both client and server, there are a ton of developers and DevOps people available who can be productive in JavaScript from day one, and it is increasingly used in other contexts – meaning skills could transfer to other projects. Like any language, there are trade-offs, but the portability aspect makes the trade-offs things that many are willing to work to overcome. Libraries and frameworks abound to make JS development faster and more dynamic. Personally, I like Node for server-side development, and Angular for clients that need more than straight HTML/CSS offers (probably because it’s the one I’ve used the most).
Python is definitely a contender in this space, as it is in most others today. With Django (or whatever your framework of choice), it functions well for web development, and its popularity has given it a host of support libraries to get things done. Developers are easy to find, and skills are broadly applicable, as Python is used in most areas of Dev and Ops at this point.
Windows aficionados are still using C#, and it does have good hooks into Microsoft DevOps tools, so any Microsoft shop should include it in evaluations. I’ve done C# on Azure for web apps, and for me it was … different, but not broken. In a Microsoft shop, C# will be familiar, and at this point, most developers are familiar with web clients, so merging the two is only a tiny bit of a learning curve, but not a major one.
Ruby does seem to have ceded its spot to Python. It is unlikely you’ll find a steady flow of ruby developers to fill those positions, but it is a highly intuitive language that you can train Java, and even Python developers in, if necessary. Ruby is well-supported for web development; indeed, it feels more natural using Ruby for web work than command line tools (at least to me, YMMV). There are web frameworks to make Ruby more intuitive in web development, and jRuby offers deep integration with Java to make use of already existing Java classes.
All in all, JavaScript should be the strong contender for a new project today, but any of these tools will serve the need. They are all well-supported, and DevOps tools start with integration to most of these languages. Do what’s best for your environment, and keep rocking it.
Donald Smith, senior director of product management from the Java Platform Group at Oracle, said GraalVM Enterprise provides developers with a high-performance application runtime, built on Oracle Java SE, that includes a compiler that accelerates Java application execution. That’s critical as developers look to build microservices-based applications employing microservices that tend to be latency sensitive, Smith said.
The first stable release of GraalVM arrived last fall. It consumes less memory, and enables Java applications to spin up faster by taking advantage of capabilities such as a just-in-time compiler. GraalVM Enterprise adds a native image utility that compiles Java and JVM-based applications ahead-of-time (AOT) into self-contained native executables. That approach only includes the classes and libraries needed to run the application, which reduces the size of the binary that gets generated.
Including GraalVM Enterprise in the Java SE Subscription make it easier for Java developers to switch to that Java virtual machine (JVM) to build microservices rather than having to learn another language, Smith said.
Smith said most organizations will continue to build monolithic applications at the same time they’re attempting to construct microservices. The Java SE Subscription makes it possible for developers to employ different JVMs depending on the type of application being constructed or updated, Smith said. A survey of 560 developers conducted by Oracle last month finds nearly half (48%) are already employing GraalVM to build microservices using Java.
How much will organizations rely on Java to build microservices, given all the other programming language options available? That’s up for debate. However, being employed in the enterprise for more than 25 years, the number of developers that know Java well is substantial. Rather than waiting for those developers to become proficient in another programming language, there’s a natural tendency for organizations to want to stick with a familiar language. Each additional language introduced to build applications also tends to complicate DevOps processes in a way that can increase the total cost of IT.
At the same time, however, the number of developers that know how to develop applications using everything from JavaScript to Go is also increasing. Oracle, via ongoing investments made in the OpenJDK project, is moving to make sure Java stays relevant at a time when the number of programming languages being employed has never been greater. For what it’s worth, GraalVM is designed to support multiple programming languages, including JavaScript.
It’s unlikely Java will fade into obscurity any time soon. IT organizations have a vested interest in embracing next-generation JVMs, if for no other reason than making Java applications more efficient, regardless of how they are built.
It’s also worth mentioning that frameworks – such as Quarkus from Red Hat – that enable Java-based microservices to run natively on Kubernetes clusters already rely on GraalVM. In some cases, developers may wind up employing such a framework without realizing it relies on GraalVM. In other cases, the challenge will be getting developers to opt for GraalVM as their JVM of choice when so many of them have routinely used the same JVM for more years than they care to admit.
Observability has always been a key factor in software development – not so much on the mainframe. However, the rise of the internet as the go-to platform for modern commerce has caused an explosion of transactional activities. There’s much more complexity behind the scenes than the request/response activity that used to be the usual interaction between a client and a single server. That necessitates ubiquitous observability as a mission-critical necessity for any modern application. As computational activities increase, so, too, does the risk of failure. One way to avoid disaster is to rely upon observation technologies that monitor not only runtime behavior, but design-time behavior, as well.
Analytical Insights are Key to Application Modernization
Modern computing activity goes well beyond simple request/response interactions. Today, one request can traverse any number of computing resources before resolving to a completed response. These resources range from application logic that’s encapsulated and then exposed to the network at a number of endpoints, to a diverse mixture of data storage mechanisms. And, if the application is part of an event-driven architecture in which messages are passed around to a large number of recipients, ancillary logic can be executed in ways that are unknown to the originating request. This can cause significant side-effects, nonetheless.
Given the complexities inherent in modern applications running at web-scale, without ubiquitous observability, developers are flying blind. This is true not only for what we have come to know as commodity computing, in which applications are hosted on racks of X86 servers housed in private and public data centers but also for mainframe computing.
The Emergence of Observation Technologies
Over the last decade, a growing number of observation and monitoring technologies have emerged for network applications and database environments. Open source projects such as OpenTracing, OpenTelemetry, and Prometheus give developers insights into the runtime behavior of applications. Also, there are a plethora of commercial observability products that companies can buy to meet their specific monitoring and observability needs.
At the development level, there are open source tools such as JSHint for JavaScript developers, PyLint for Python developers and FindBugs for Java developers, just to name a few. These tools can inspect static code and point out shortcomings. Some tools, such as .NET analyzers, will go as far as to correct code as the developer is writing it. The easiest bugs to fix are those that are never created. Correcting code as it’s being written brings a whole new dimension to design-time observability.
However, while the X86 development community has benefited from observability tools for a while, their mainframe counterparts haven’t had it so easy. Commodity developers require nothing more than a click on a web page link to access any number of powerful observability tools, but mainframe developers have been starved for these types of tools.
Until now.
Applying the Principles of Observability to Modern Mainframe Development
One of the big challenges of mainframe programming is getting a clear picture of application dependencies. Unlike programming under Java, C# or Node.JS, where external dependencies are defined in a central configuration file, or internal dependencies can be discovered with a code analyst tool, mainframe programming makes knowledge of dependencies a difficult undertaking. This type of design-time observation hadn’t really existed until technologies like IBM’s Application Delivery and Discovery Intelligence (ADDI) came along.
An important thing to understand about dependencies in most mainframe computing is that they exist at both the function and executable levels. A developer can create a function, which, in mainframe parlance, is called a routine. That one routine might be used by dozens, if not hundreds, of other routines. Sharing code from a common resource is not unusual in X86 development, where binary libraries get shared all the time. However, in mainframe computing, these shared routines, along with file layouts and resource definitions, are physically copied in with the developer’s code using a technology called a copybook. Then, the code is compiled and linked to create an executable file. Once turned into an executable, the code becomes opaque. As a result, observing what’s going at runtime and design-time within the executable can be a herculean task. For many years, it was.
Fortunately, you can use a tool like ADDI to overcome this obstacle. IBM’s ADDI provides important insights and analysis into the code that makes up a mainframe application. Both developers and system analysts can use ADDI to determine not only application dependencies but also to gather information about the execution environment; for example, scheduler settings and database configuration.
As with X86 development where ancillary application intelligence, well beyond information about the source code, can be displayed in the developer’s integrated development environment, ADDI also makes it possible to report information in the developer’s IDE. Also, systems analysts can use the additional information provided by ADDI, such as the structure and segmentation of an application, to make decisions about how to refactor code when it comes time to make improvements.
Providing a broader scope of observability into design-time activity is but one aspect of enhanced observability in the modern mainframe environment. ADDI also reports test coverage metrics. Knowing what and how much code has been tested is an important part of observability, even more so when used with tools that are focused on mainframe testing. One such tool is Virtual Test Platform (VTP).
Leveraging Observability in the Mainframe Testing Process
Until VTP came along, mainframe developers were flying blind – they had limited visibility into the transactions that their code used and the dependencies that their code relied upon. They had an enormous amount of work to do to figure out transactional behavior throughout the application. They spent a lot of time doing archeological digging in legacy codebases to get a clear idea of what was happening. And, it didn’t get any easier as testing demands on all types of applications, both X86 and mainframe, increased due to the rise in commercial activities on the internet at a global scale.
According to Chris Trobridge, senior offering manager at IBM, “The testing load for developers has been increasing tremendously, and with the introduction of agile development processes, developers just can’t keep up with the testing load that they have.”
VTP addresses many of these testing issues, both in terms of observability and quality assurance. “VTP really is observing what goes on at runtime, but without knowing anything about the application,” Trobridge said.
VTP can monitor an application and capture and record all its interactions. This type of observability enables developers to make modifications and then run those changes against observed behavior. It’s a novel approach to mainframe development in which the benefits of both design-time and runtime observability are leveraged in a synergistic manner. In order to understand how groundbreaking this capability is, you need to remember that only five years ago, while X86 developers were enjoying a maturing set of monitoring and tracing tools; for mainframe developers, this type of observability wasn’t possible. Now it is. It’s a dramatic step forward.
“VTP is a tool that enables developers to automate a lot of the testing, and, in turn, enables the recording of a transaction environment without having to know a lot about the environment,” Trobridge explained. “The recordings themselves can be played back rapidly without compromising security. This is an important aspect of VTP. This level of observability and interactivity really is something that mainframe developers have not had access to before. It’s a transformational technology in the mainframe world.”
Technologies such as ADDI and VTP are a transformational approach to enhancing observability in mainframe environments. In many ways, the focus on exposing the granularity of computing at the routine level is a harbinger of things to come for all developers, in both the X86 and mainframe worlds.
Taking a Function-Centric Approach to Observability
Historically, for commodity developers, observing request/response behavior between services at runtime, along with identifying code quality and complexity issues at design time, allows for identification and remediation of most issues in software development.
For the mainframe developer, request and response behavior is only the tip of the iceberg when analyzing application behavior. In a mainframe environment, one sub-routine might be used by thousands of other functions and subroutines at any given time. Commodity developers have been spared the burden of accommodating the function as the fundamental deployment unit because, until recently, functions were grouped into well-encapsulated deployment units, such as Java’s .jar file, .NET DLLs or, more recently, containers. If something went wrong, the error would generally appear in one of the deployment units.
However, with the current rise of serverless computing, where the function becomes the primary deployment unit, X86 developers are in the same boat as their mainframe counterparts. In the past, for the X86 developer, one application might use a limited number of components that could have dozens, maybe hundreds of functions. Now in the serverless world, all these functions are exposed as standalone units, in which each function is the responsibility of a distinct team. We’ve gone from an ecosystem that has a limited number of deployment units to an ecosystem that can contain thousands. Fixing bugs can require hours of poring over logs and examining minute details just to determine the root cause of an issue.
As mentioned above, this depth of dependency at the function level is something that mainframe developers have been dealing with for years. Fortunately, tools such as ADDI and VTP provide a high degree of observability for very complex mainframe applications at both runtime and design-time.
It’s strange to say, but the large, function-based ecosystem issues that mainframe developers are solving today will become a growing concern for X86 developers in the very near future. In many ways, tools such as ADDI and VTP are setting an example for X86 tool development moving forward. The mantra, “You can’t fix what you can’t see” is as true today as it has ever been. That the mainframe community is at the vanguard of creating new ways to work in massive computing environments is a testament to the power of rejuvenation in the most unexpected ways.
As we close out 2020, we at devopsy.kinsta.cloud wanted to highlight the five most popular articles of the year. Following is the second in our series of the Best of 2020.
As a novice developer, you may be thinking about learning a programming language and starting a fantastic career.
In fact, this question on Reddit inspired the whole article:
The thing is, programming languages represent certain philosophies of its authors and tailored to certain types of problems, i.e., there is no such thing as “the best programming language.”
In this article, I describe major programming languages according to its popularity, usage, demand and ease of learning.
There is market demand and a potential salary range for each language. These are linked to specific personal goals and prior programming experience.
What Questions Should You Ask Yourself Before Diving in?
What kind of projects do you want to work on? If career flexibility is a priority, then learning Python or C++ will allow you to work with different types of programming. If your passion is web development, learning JavaScript or PHP is a smart choice.
How much experience do you have? You won’t want to switch to an advanced programming language, such as Rust, if you don’t have previous programming experience. If you’re new to a language, you’ll want to start at a higher level and be intuitive.
What are your career goals? Do you want to become a freelancer, working for an existing company or work with a startup? Are you trying to be better in your current role?
If you plan to get a job in a large technology company, learn the programming languages they use, e.g., NASA, Google and Facebook use Python.
Many programming languages have similar syntax and qualities—so if you learn one of them, it will be easier for others. The more languages you know, the more flexibility you have in your career and development projects.
In the list below, we will look at the best and most popular programming languages for many of the most common uses, including web development, mobile development, game development and more.
Top Five Programming Languages to Start Your Career
Java
It is probably the best programming language if you are looking for a common language that will be useful in various situations. As for choosing a programming language to learn, there are many resources for people who are thinking about learning Java. Java was released in 1995, which makes it one of the oldest programming languages. It is used on a wide range of platforms and operating systems, including Microsoft Windows, macOS, Linux and Solaris.
That means there will always be jobs for Java developers, making it (perhaps) the best programming language to learn.
Research shows that Java developers can expect to earn between $80,000 and $130,000 per year. If you are thinking about learning your first programming language, think about taking an online course, for example, CodeGym. This course, which contains 40 levels of game-play classes, will teach you all the basics you need to know to start programming in Java. It’s easy to follow—even if you don’t have programming experience—and it is worth checking out.
It is also best used for back-end web development, mobile development and desktop applications.
JavaScript
This programming language works on several platforms. Therefore, it is ideal for websites that will be accessed through various devices and browsers. It is suitable for anyone who designs websites with effects, interactive features, animations and pop-ups—standard features on virtually any brand website these days. If you want to work in a creative environment and add more experience to the user, this is a coding language to learn.
JavaScript is the number one language on the web. The growth of frameworks such as jQuery, Angular and React JS has made JavaScript even more popular.
If you just can’t stay away from the internet, it’s better to learn JavaScript sooner than later. I consider this JavaScript Masterclass an excellent place to start. For cheaper alternatives see this list of free JavaScript courses.
It is also best used for front-end and back-end web development
Learning PHP
PHP—another old language, first appeared on the stage of programming around the same time as Java in 1995. It is a general-purpose language widely used for web development from the early days of the web.
Unlike other languages, which can be quite tricky to use with HTML, PHP can be built directly into the HTML code block. Start and finish instructions are used to enter and exit PHP, making it very easy to use. Although PHP is not as popular as Python or Java, it can be a suitable language to learn because of its simplicity. It is convenient for beginners and you can write your first scripts just a few hours after you start your PHP course.
Again, the popularity and wide use of PHP means that work opportunities are relatively easy to find. An average PHP developer can expect to earn around $80,000 per year. However, there is potential to make much more as a freelancer.
Take an advanced PHP course, which will teach you everything you need to know to find your first job as a programmer. It doesn’t matter if you’re studying your first language, or if you’re an experienced developer looking for the best programming language to add to your resume—PHP is a great choice!
Python is a useful step toward more advanced forms of programming languages. Python provides a high degree of website readability and is used by companies such as Reddit, Google and even NASA.
It is seen as entry-level programming that does not require too much prior knowledge. It may be ideal for relatively new professionals to help small businesses that want to expand their presence on the internet without having to resort to advanced professionals. Python is a relatively simple programming language that is very easy to pick up if you already have programming experience. That makes it one of the best to learn if you are already working as a developer and want to increase your resume quickly.
The code on Python is designed to be readable. It uses a lot of white spaces, which makes it a pretty easy language to learn while you’re studying it.
One of the most useful Python’s features is its compatibility with data analysis systems and scientific applications. It is a popular language in scientific communities and is often used by researchers to write their programs.
An average Python developer can expect to earn about $100,000 per year. However, there is little room for wage growth.
If you think Python is the best programming language to further your career, consider enrolling in a BitDegree course. The Python Basics Course includes everything you need to know to start writing programs on Python and contains less than four hours of lecture material.
It is best used for back-end web development, desktop applications, and data analysis.
C#
C# is another object-oriented, general-purpose language based on C. It is considered a suitable programming language for building applications native to Microsoft platforms. Microsoft initially developed it as part of its .NET framework for building Windows applications. C# uses a syntax similar to other languages such as C++. Therefore, it is easy to pick it up if you come from a different C family language.
C# is not only a suitable language for developing Microsoft applications, but also a language used by mobile device developers to build cross-platform applications on the Xamarin platform. Besides, anyone interested in VR development should think about learning C# as it is the recommended language for building 3D and 2D video games using the popular Unity game engine, which produces one-third of the best games on the market.
If mobile application development or virtual reality is your business, consider learning C#. Many mobile device developers use C# to create cross-platform applications on the Xamarin platform. Although it is not the most convenient programming language for beginners.
As was mentioned at the beginning, there is no best programming language to learn. The best language for you will depend on your experience, your current knowledge and reasons to learn a new language.
While there are many options, you should be able to narrow down your language choice by what you want to learn from it.
Remember to consider the following:
Programming experience, because some languages, such as Python and Java, are more suitable for beginners who have never programmed before.
What you want to do with the language. Different languages are used for different things.
How much time do you have? Some languages are much more demanding than others.
Make your choice based on your interests and the type of software development you want to get into. Here is a brief summary:
External web development: JavaScript.
Internal web development: JavaScript, Java, Python, PHP.
Mobile development: Java, C#.
Game development: C#.
Desktop applications: Java and Python.
To Sum Up
Programming and developer communities are evolving faster than ever.
Various new programming languages are emerging that are suitable for different categories of developers (beginners and experts) as well as for other applications (web applications, mobile applications, game development, distributed systems, etc.).
This list simply scratches the surface of existing programming languages. Still, the simple fact is that with the right coding skills, you will be perfectly prepared to offer valuable technical support and become an asset to any organization.
In addition, the Eclipse Foundation has announced that version 6.0.0 of the open source Glassfish application server has now been certified to be compliant with Jakarta EE 9.
Functionally equivalent to the existing Java EE 8 specification, the release of a Jakarta EE 9 Platform and Web Profile specification is intended to enable IT vendors that have built offerings based on Java to shift their naming conventions to Jakarta EE 9.
Mike Milinkovich, executive director of the Eclipse Foundation, said now that the Jakarta EE 9 specification is in place IT organizations should expect to see the members of the Eclipse Foundation that contribute to the project begin working more aggressively on a Jakarta EE 10 specification that adds more features.
Under the auspices of the Eclipse Foundation, Milinkovich added there will be a lot more focus on developing a truly cloud-native implementation of Java EE as work on the next generation of Jakarta EE platform advances.
The rate at which new capabilities were being added to Java under the stewardship of Oracle had become an issue given the rate at which other programming languages are being advanced. Oracle agreed to relinquish control of the Java specification to the Eclipse Foundation, which in theory should lead to a faster rate of innovation as more contributors participate in an open source project.
However, Oracle insisted on retaining the rights to the Java trademark because it has support contracts in place for existing instances of Java that provide a significant stream of revenue. Providers of rival platforms based on Java are hoping enterprise IT organizations will shift quickly to Jakarta as part of a way to reduce their support costs at a time when IT teams are under intense pressure to reduce the total cost of IT.
Despite the rise of a wide range of programming languages in recent years, Java is still widely employed with most enterprise IT organizations, many of whom have been using Java since it was first made available by Sun Microsystems. Reliance on Java is not likely to significantly decline anytime soon; however, most IT organizations are now making greater use of additional programming languages alongside Java. In fact, many of the applications that DevOps teams are building and deploying are made up of modules that were built using different programming languages.
It may still be a while before a Jakarta EE platform is pervasively employed in IT environments. However, it’s clear a new era that should result in advances that make it easier to deploy applications that are compatible with Java faster has arrived. How those capabilities will manifest themselves may still be unclear, but the fact that they are being worked on should be a comfort to IT organizations that have already invested millions of dollars in training developers how to build Java applications optimally.
Azul today announced today it will provide migration services for IT organizations looking to transition from the proprietary Oracle Java Standard Edition (SE) developer platform to the Zulu edition of an open source OpenJDK equivalent.
OpenJDK is based on the HotpSpot edition of the Java virtual machine, the Java Class Library and the Java compiler. The Zulu edition was originally developed by Azul and Microsoft and has since been supported by Oracle, IBM, Apple, Amazon, SAP and Red Hat.
Azul CEO Scott Sellars said that while OpenJDK is compatible with Oracle Java SE there are some minor differences that enterprise IT organizations need help with to make the transition. While distributions of OpenJDK have been around for years now, Sellars said the fees for support that Oracle has been charging for Oracle Java SE have reached a point where more organizations are now ready to make the jump to OpenJDK.
In the wake of the economic downturn brought on by the COVID-19 pandemic organizations of all sizes are looking to reduce costs by transitioning to open source software whenever possible, he added. Rather than reduce the size of their IT staff most organizations would prefer to rein in their IT budgets by reducing their dependency on proprietary software, Sellars noted. The United States Transportation Command (USTRANSCOM), for example, earlier this month revealed it is replacing Oracle Java SE with Azul Zulu builds of OpenJDK to in part lower Java support costs. Taboola, an online advertising platform, also made a similar switch.
Azul is now offering two classes of migration services. A Level 1 offering helps organizations migrate directly from Oracle Java to Azul Zulu builds of OpenJDK and includes creating an inventory of the Java estate by vendor, by Java version, by Java security patch level and by which Java runtimes are currently being employed. A Level 2 service brings in a third-party IT services firm to enable organizations to migrate older implementation of Java Virtual Machines (JVMs) to either the Java 8 or Java 11 platform.
A recent Forrester Consulting study commissioned by Azul finds the Azul Zing Java Virtual Machine pays for itself in less than three months by reducing development and infrastructure costs, with a three-year 224% return on investment (ROI).
Regardless of the open source instance of a Java platform, it’s clear that going forward most of the ongoing innovation is shifting to platforms that multiple vendors are now contributing to more frequently. OpenJDK, for example, is now on a release cadence of every six months. Each distribution of an open source Java platform serves to reduce costs in a way that enables IT organizations to achieve backward compatibility.
Despite first being employed in the enterprise more than two decades ago, reliance on Java platforms remains high. There has been widespread adoption of multiple programming languages but most back-end systems in the enterprise are still based on Java. Many developers that have mastered Java have also been reluctant to abandon it no matter how many other programming languages they may learn.