One of the hallmarks of a truly modern programming language is the coupling of a language—for creating applications, devising algorithms and solving business problems—with an underlying database. When there is practically no separation between a database and its programming language, developers immensely increase their productivity, maximize the effectiveness of the code they write and provide unparalleled speed and flexibility in supporting business needs.
Predicating a programming language on a database delivers these advantages by enabling developers to treat data as if it is in-memory, liberating them from the burden of manipulating how data is represented in the underlying database. This one simple advantage exponentially increases the flexibility for addressing business problems and, when used with advanced logic languages, enables developers to write applications in a fraction of the time and with less effort than it would otherwise require.
Specific benefits of tightly coupling a database with its programming language include eliminating the time-honored mismatch between data structures and database representations, smart caching with transactional technologies for committing or rolling back database changes and automatically changing object definitions.
These benefits remove the database as an otherwise complicating factor in supporting business use of data by freeing developers to flexibly innovate solutions—and speedily implement them.
In-Memory Manipulations
Developers focus on manipulating data structures to solve business problems. Traditionally, this concern was hamstrung by the onus of translating those structures into how data are represented in the database, a time-consuming necessity detracting from programmers’ attention to business problems. By fully integrating an object-oriented database or graph database with its programming environment, users can manipulate data objects in memory and they’ll automatically persist to storage. Developers can solely focus on working with data structures for business objectives without spending just as much, if not more, effort wrangling data’s representation in the database.
Programming languages create this effect when they are imbued with an intelligent caching layer that persists in-memory data manipulations into the database. This advantage requires basing the programming language on a specific database. It eliminates the mismatch between working on data structures and toiling to get the underlying data to and from disk.
Smart Caching
The caching layer also tames the inherent difficulties in data objects pointing to other objects, which is a hallmark of object-oriented systems and graph databases. These databases require intelligent caching because one object can conceivably include the majority of the database by pointing to objects that, in turn, point to additional objects. Tight coupling between that language and its database fixes this issue so developers cache what is needed to work on data in memory while automating its impact on disk. Such caching is significantly improved with transactional technologies so developers can specify when they want their modifications saved in the database.
This way, if they make a mistake they can simply go back in time before it was made and undo it. Conversely, after successfully completing their work, they can easily commit changes to the database. Like the other advantages, this benefit boosts developer productivity to match that of business requirements. It adds to the flexibility programmers need to innovate solutions for mission-critical objectives by writing or integrating applications.
Object and Class Definitions
The third boon of basing a smart programming language on a database is the capacity to dynamically change the definition of data objects. With conventional approaches, this task requires developers to stop writing or operating applications and manually write code to adjust the classification, which may involve either reading or writing the data in and out again. But with no separation between the database and its sufficiently smart programming language, such coupling can effectively keep track of classifications while automatically modifying them as needed.
Developers can seamlessly add or delete features without manual coding, which also furthers their productivity. For example, if they add an attribute to an object, the next time they see it it’ll magically have the new feature. Alternatively, if they create a new feature of an old classification and decide to delete it, they won’t see it anymore. Best of all, these changes occur without rewriting the classification.
Advanced Logic
There is one more capability of very smart programming languages: They can combine these advantages with advanced logic languages such as Prolog. Prolog, or a subset of Prolog called Datalog, can instantly be used as a query language. In addition, it becomes very easy to create rule-based applications with Prolog because one can write declarative, logic-based rules with minimal coding. For example, they can specify a series of event-based rules detecting customer churn, money laundering or any important business outcome without being impeded by unnecessary database concerns to deliver time-to-value that’s unmatched without this method.
Basing a programming language on a database improves developer efficiency and effectiveness by letting developers work on data in memory and persisting changes to storage, intelligently caching data and rolling back changes as required, and dynamically adjusting definitions.
What cloud providers do you work with? Google Cloud Platform (GCP)? Amazon AWS? Microsoft Azure? Which services? Are you using a managed Kubernetes such as GKE, AKS, Openshift or EKS? How do you manage your cloud resources? How do you manage the release cycle of the infrastructure and applications that you deploy?
If the above questions are the basic introduction to describe your work, then you are probably also familiar with the console, API or both of a major cloud provider. You probably know how to use a configuration management tool such as Ansible or Chef, Terraform or CloudFormation, or some other similar tool. Additionally, you are familiar with the languages of one of these tools. You probably have opinions on those languages, which inform your attraction to the tools you choose.
Kubernetes and Ansible use YAML. CloudFormation and Azure ARM can be JSON or YAML. Chef and Terraform have their own languages. (To be precise, Terraform can also be expressed in JSON.)
A comparison of cloud orchestration languages
Whenever you start learning a new tool, it is helpful to already know the tool’s language. The strength of using a standard language is that new users will feel more at home learning to use a language if they already understand the basics of its syntax. In the same way that many English speakers will relate to cognates in French, German or Latin than in Greek or Sanskrit without using transliteration, developers that know YAML will find it easier to learn Ansible than a tool that relies on XML. However, just because you know the language doesn’t mean you know the DSL. A DSL might use a language in a novel or even strange way that contradicts what you believe is proper.
A number of variables may come into play when a user develops an opinion of a tool. The most important is, “How simple is it for me to create something that does what I want and minimizes frustration later on?” The next often are, “Which I venture is dependent on the first, are apparent scientific and analytical reflections? Does it lend itself to convoluted data structures? Do efforts to remain readable flounder because of inefficient use of space or punctuation?”
Some projects, such as HashiCorp’s (Terraform), abandon a standard language to avoid such issues and instead create their own languages. The main drawback here is that it is more difficult to integrate the tool with existing projects and software libraries (although, providing for input and output in standard languages such as JSON can alleviate such problems).
Cloudify has a DSL, which is based on YAML. Cloudify uses YAML, because it is easier to read than JSON, but powerful enough to define new types when necessary.
Whether using a general language such as YAML or a proprietary one, certain designations are necessary: the type of resource, the name of the resource and often even whether the line refers to a resource, a parameter or a dependency.
To illustrate the differences between the languages, and associated products that have been mentioned, let’s take a look at a few examples. Let’s use a relatively simple example, an AWS VPC, named “myVPC.” This is a simple resource to define in any language because it has relatively few parameters and no dependencies aside from an AWS account.
Terraform:
resource “aws_vpc” “myVPC” {
cidr_block = “10.0.0.0/16”
instance_tenancy = “dedicated”
tags = {
foo = “bar”
}
}
Terraform, or HCL, is notable for two reasons. First, the HCL “block” syntax recalls method definition syntax in a number of familiar programming languages. This is a nod to how Terraform, among all of these tools, relates to packaging infrastructure definition as code. Second, Terraform is the most concise. It only takes seven lines.
Also, Terraform syntax infers significance from string position through the use of identifiers, such as “resource,” “aws_vpc” and “main.” HCL knows that block type comes first, followed by type and then name. For readability, this may be an ideal and certainly elegant method for defining components. Inside of the block definition is the API payload accepted by AWS EC2 Service for the creation of a VPC.
One drawback of HCL is the punctuation requirements. Braces are required to enclose blocks as well as dictionaries. Arrays require square brackets.
Let’s compare HCL/Terraform to CloudFormation:
myVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: 10.0.0.0/16
InstanceTenancy: dedicated
Tags:
– Key: foo
Value: bar
CloudFormation utilitizes YAML as well as JSON. These are data serialization languages. So, we are looking at our resource definition, less as code and more as information. This results in greater verbosity and decreased readability. Less concise, CloudFormation is eight lines.
Whereas HCL uses “blocks” for resources. CloudFormation templates just call them “resources.” Instead of positional arguments, we have keys and values. “Type” defines the type. Properties introduce the resource API payload accepted by AWS EC2 service. However, YAML reduces the need for punctuation. Dictionaries are introduced by indentation and lists with hyphens. This can result in improved readability, and if someone really likes to use braces and brackets, no one is forcing them not to. However, it increases the number of lines and characters needed, because even abstract sections of the DSL require keys for introduction. This is because YAML accepts JSON.
Ansible also has a module for creating a VPC in AWS.
– name: create VPC.
ec2_vpc_net:
name: myVPC
cidr_block: 10.10.0.0/16
region: us-east-1
tags:
foo: bar
tenancy: dedicated
Ansible also uses YAML; however, there is no separation between API payload and other parameters. For example, authentication parameters are on the same level as payload parameters. Ansible uses modules for infrastructure management the way it uses modules for managing applications, which, while novel, is implemented in a clunky and relatively useless way. For example, you need a playbook for creation and a playbook for deletion.
Cloudify:
myVPC:
type: cloudify.nodes.aws.ec2.Vpc
properties:
resource_config:
CidrBlock: 10.10.0.0/16
InstanceTenancy: dedicated
Tags:
– Key: foo
– Value: bar
Cloudify also uses YAML. It also works with key-value pairs. Cloudify is even more verbose than CloudFormation.
A node template can be a resource or a group of resources. In Cloudify, there are three types of properties. The resource_config, which contains the API Payload; the client_config, which contains the API Authentication; and orchestration properties,which are additional properties that enable you to describe how Cloudify will interact with the resource. For example, all resources have the use_external_resource, which means that Cloudify can use resources that Cloudify did not create.
Whereas Terraform/HCL uses “resource blocks” and CloudFormation uses “resources,” Cloudify uses “node templates.” Node templates can be a VPC or other cloud resource, or even a CloudFormation Template or a Terraform template.
Azure also sports an orchestrator, Azure ARM, and has its own DSL to describe Azure resources. This is how a virtual network is defined in Azure ARM:
type: Microsoft.Network/virtualNetworks
apiVersion: ‘2019-11-01’
name: myVPC
location: “[parameters(‘location’)]”
properties:
addressSpace:
addressPrefixes:
– 10.0.0.0/24
subnets:
– name: “[parameters(‘subnet_name’)]”
properties:
addressPrefix: 10.0.0.0/24
One notable difference in Azure ARM is that the resource entry in the YAML does not have a key name with the definition being the value of the name key; instead, the entire dictionary is a list item. This is perhaps more concise, but it may forfeit a modest amount of readability. Also, Azure is similar to Cloudify in that the resource definition “properties” is not on the same level as other more general details, such as “apiVersion” or “location.”
The syntax for accessing a parameter is also a tad obtuse. Accessing a key in a dictionary via square brackets and parentheses is probably one of the most unreadable methods in the DSLs we are looking at.
Like Cloud Formation, ARM can be written in JSON or YAML.
Terraform can define the same Azure resource using fewer lines.
Azure and Amazon expose ARM and CloudFormation as API objects respectively. This enables orchestrators to manage those resource stacks as single resources.
You can define an ARM deployment in Terraform like this:
Cloudify can also orchestrate ARM deployments. Here is a simple infrastructure stack in ARM using Cloudify:
deployment:
type: cloudify.azure.Deployment
properties:
location: { get_input: location }
name: { get_input: resource_group_name }
template_file: ‘resources/arm/environment.json’
Cloudify can also accept a file or inline JSON (or YAML).
Having defined the source code for our infrastructure components, we can now connect other resources and processes to this infrastructure dependency. We can use the Terraform template to a CICD workflow or a networking application.
Using the same approach, Cloudify can also call Terraform stacks:
infrastructure:
type: cloudify.nodes.terraform.Module
properties:
resource_config:
source: resources/terraform/template.zip
variables:
access_key: { get_secret: aws_access_key_id }
secret_key: { get_secret: aws_secret_access_key }
aws_region: { get_input: aws_region_name }
aws_zone: { get_input: aws_zone_name }
admin_user: { get_input: agent_user }
admin_key_public: { get_input: public_key }
Cloudify also utilizes other Cloudify deployment stacks as service components:
infrastructure:
type: cloudify.nodes.Component
properties:
resource_config:
blueprint:
id: my_deployment
blueprint_archive: { get_input: infra_archive }
main_file_name: infra.yaml
deployment:
id: my_deployment
To summarize, there are many DSLs for orchestrating cloud resources. Each has its own focus: Terraform on simplicity and repeatability, CloudFormation on Amazon, ARM on Azure, Ansible on setting up applications and Cloudify on enabling users to automate any task, including automating Cloudify. We call this “orchestrating the orchestrator.”
COBOL is under fire, and as states such as New Jersey make headlines following vital system crashes that its citizens depend on—such as unemployment benefits—organizations are pointing fingers at the programming language as the source of their technological woes. However, while COBOL is a 50+-year-old programming language, there are still many use cases for it today. In fact, systems programmed in COBOL can modernize and continue to thrive in today’s business environment, even without transitioning to a new language or platform.
While COBOL itself isn’t the problem child that most IT leaders and government entities say it is, there are a variety of other legacy languages—such as CA Gen, CA Telon and Natural—that pose a far greater threat to an organization’s overall functioning and long-term success. That said, there is still hope for organizations utilizing systems coded in legacy languages.
Get on the CASE
Two of the top languages that enterprises should be alert to—CA Gen and CA Telon—are Computer Aided Software Engineering (CASE) application development environments that were developed in the late 1970s and early 1980s and offer code generation, enabling the power of abstraction on the mainframe, essentially serving as an early stage ancestor of the “low-code” concept. This approach offered significantly more agility to developers at the time, but these programming languages have since fallen from the spotlight and, similar to COBOL’s limited pool of talent, have an even smaller pool of skilled developers that can assist with updating and maintaining these systems. This challenge traps many organizations in long-term contracts that they can’t seem to escape from.
A major selling point of the CA Telon and CA Gen product lines was that its services were often offered within bundles—granting users with access to other mainframe utilities and services within a single licensing contract—but as time goes on and new technologies emerge, the advantages of this approach have fallen by the wayside. However, many organizations are trapped within expensive licensing fees and complicated bundling programs that make it difficult to sever ties with the legacy platform entirely.
CA Gen and CA Telon act as generators of COBOL code, meaning that developers utilize tools in a language like CA-Gen but when it runs on the mainframe the system is running on COBOL. The COBOL within the mainframe then references CA-Gen and CA-Telon libraries, which makes it easy for developers to reference specific functions but ultimately produces code that is unable to be read by a human person. This creates significant complications for doing anything outside of the CASE environment—even tasks as simple as routine updates—but especially for digital transformation initiatives.
While few organizations are purchasing CASE development solutions as new products, those that utilize these tools are constantly renegotiating the terms of their agreements to keep costs down, enable easy updates to their own unique systems and meet the emerging demands of today’s market. If they can successfully pull it off, they have another challenge: finding the talent who understands these obscure languages to implement necessary system changes. That said, the best solution for these organizations is to break away from these languages entirely—and this can be achieved relatively easily with automation through carefully selected modernization solutions.
Why Natural Isn’t a Natural Choice
In addition to CA-Gen and CA-Telon, one legacy language that all organizations should be alert to is Natural. Similar to the look and feel of COBOL but more abstract and powerful, Natural is a fourth-generation language (4GL) that was originally designed to enable agility and efficiency—but today, there are fewer than 100 companies utilizing this language. As a result, there is a scarce number of developers who can address and assist with any issues that arise within systems utilizing Natural. What’s more, most of these organizations don’t know they have a way out. This puts organizations at risk any time that a change to their operational systems is made, as the limited availability of specialized developers can make it especially difficult to achieve these updates.
In most cases, Natural is utilized in tandem with the Adabas database, which can exacerbate the maintenance and extensibility issues that come from a shrinking talent pool—and when it comes to modernizing these environments, they’re often peppered with other programming languages such as COBOL and assembler, adding complexity to the job.
Beyond COBOL: Choosing the Right Modernization Strategy
For organizations looking to break away from obscure languages and mainframes, the best option for both their immediate and long-term goals is to pursue some form of modernization—and in most cases, the best result is to translate these languages into cloud-ready languages such as Java or C# via an automated refactoring initiative. Automated refactoring can also be utilized to consolidate these applications to a single language such as COBOL while remaining on the mainframe—although moving from an abstract language to a more procedural alternative can present challenges.
By pursuing an automated refactoring strategy, organizations can move mountains of information, records and personalized code away from their mainframe and translate their system into a modern architecture. This allows organizations to untangle the “black box” of personalized code that exists within their systems and replace them with languages such as Java, C# or even COBOL, which unshackle companies from high licensing costs and have a much broader talent pool of developers. The resulting modernized system is easier to maintain, escapes high licensing costs and moves the business closer to cloud readiness, opening the door to modern development practices and tools. What’s more, in addition to saving significant funds by eliminating the costs associated with maintaining these legacy systems, an automated refactoring solution can help an organization to save years on its overall modernization process.
While languages such as CA Gen, CA Telon and Natural are less common in the industry, these archaic languages can present significant challenges for businesses as they work to meet the demands of customers and partners. In the world of information technology, the only constant is disruption—and organizations need to get started on their modernization journey before it’s too late.
Oracle today at its Oracle Developer Live—Java event proposed making a bevy of updates to Java that includes replacing the Mercurial source code management (SCM) platform, which is the repository Oracle created to share updates to the Java community, with Git starting with the initial availability of Java 16 and then migrating the project itself to GitHub.
In addition, Oracle has developed server-side tooling compatible with GitHub and GitLab and client-side tooling compatible with Git and Mercurial to aid in the migration. The effort is based on the Project Skara initiative, which already provides read-only Git mirrors of all active and consolidated lines of development for the Mercurial SCM repository.
Oracle is also proposing to add a Vector application programming interface (API), along with enabling some C++ features in Java 16.
Oracle today also announced enhancements to Java 15, including support for Edwards-Curve Digital Signature Algorithm, hidden classes and reimplementing the legacy Datagram Socket application programming interface (API). In addition, support for a more advanced garbage collection tool as well as text blocks has been finalized.
Other capabilities that have been advanced but are not finalized in Java 15 includes support for sealed classes, enhanced pattern matching, records and an API for accessing foreign memory.
Chad Arimura, vice president of Java developer relations, said collectively the latest innovations show the venerable programming language is still vibrant. Despite a plethora of options most enterprise IT organizations still rely mainly on Java to build applications even as they transition to building microservices-based applications based on containers deployed on Kubernetes clusters. As such, Java is not in danger of suffering the same fate as the COBOL programming environment, which from a pace of innovation has grown comparatively stale, noted Arimura.
Many of those organizations are also well down the path toward adopting best DevOps practices that revolve around a Git repository. Adoption of Git as the SCM repository for the Java project will further those efforts by simplifying workflows for organizations that have standardized on Git repositories, he said.
While Java continues to dominate development of applications in the enterprise, it’s also true organizations of all sizes are employing a wider range of programming tools. By embracing Git and GitHub, the Java community will be able to more fluidly coexist with a wide range of open source projects being created using a diverse range of programming tools. Enterprise developers are clearly still relying on Java to write most of their server-side applications, but more client-side code is being developed using frameworks based on, for example, JavaScript.
In the meantime, however, IT organizations looking to modernize application portfolios should be able to count on the fact that nearly 30 years after its initial launch, Java remains relevant. The challenge now is determining where best to rely on Java alongside a plethora of other programming tools that developers of all ages now regularly employ.
Every few years an alarm goes up about the shortage of COBOL programmers, and then it dies down. While it’s hard to tell whether this cycle occurs because programmers are found or because other solutions are identified, the latest resurgence of interest is at least in part due to the pandemic and state governments’ use of software for social services that couldn’t stand the increased caseload of tens of millions of unemployment claims.
As we continue to sit in the midst of the pandemic, organizations are thinking about the many ways businesses will have to change. For instance, will cash still be used in five years or will the business need to support some kind of cryptocurrency? It’s time to ask those big questions now—and determine whether it’s possible to make changes without touching COBOL code.
For most organizations, I believe that in answering these questions they’ll find that it’s time to start migrating away from COBOL.
The Rise (and Fall) of COBOL
COBOL is one of the earliest programming languages. It was invented in 1960 and rose to prominence as a language that required minimal programming skills. Part of COBOL’s initial attraction was that it was a domain-specific language designed for business—not only was it easy for programmers to learn, it also could be understood by executives; hence, the acronym for “Common Business-Oriented Language.”
COBOL was also one of the few programming languages that understood the requirements of business computing—most simply, the fact that an amount like 10 cents can’t be represented accurately in binary was a huge challenge. If you’re a bank, small rounding errors on each transaction add up. Libraries for business arithmetic could be written in other languages, but they’re scarce and hard to find.
While COBOL never disappeared, its influence faded in the 1980s but many large institutions failed to transition away from it. Today, there are billions of lines of code in governments, banks, enterprises and elsewhere performing essential business functions with few programmers able to maintain them.
Part of the reason why COBOL fell out of fashion was its inability to adopt things such as modularity or breaking down problems into smaller, functional pieces. When COBOL was invented, old business software was monolithic—and monolithic in a very deep sense. Internally, the software wasn’t partitioned into separate components that could be updated without affecting each other. It also tended to model forms that humans would fill out and couldn’t be submitted until the form was complete. Putting a web interface in front of those monoliths leads to a predictable result: long, complex forms that can take hours to fill out and are close to unusable on the modern web.
While the COBOL language itself has evolved over the years (with revisions released in 1961, 1974 and 1985 and object-oriented COBOL released in 2002), you still have to ask: what will it take to bring a COBOL program written in the 1970s or 1980s up to date? Is redesigning a program to take advantage of COBOL 2014 any easier than porting it to Java or Python or Go or Rust? Furthermore, COBOL looks unfamiliar and forbidding to most modern programmers, which likely caused it to lose popularity in the first place.
Finding an Alternative
So, where are we now, with our billions of lines of COBOL running the world’s governments and finances? We certainly need more people who know and understand COBOL programs. There’s a lot of old code that needs to be maintained, pure and simple.
But it goes deeper than that. COBOL is just another programming language; if we’re going to maintain (or replace) that software, we need programmers who understand the engineering decisions that made the software what it is. Programmers used a lot of tricks to work around the limitations of 1960s computers. Those tricks just don’t make sense to modern programmers; they solve problems we no longer have. We also need engineers and managers who are willing to look at our current situation—for example, the huge surge in unemployment applications—and think beyond the short-term solution. What does it take to reinvent current systems rather than replacing them? How can these systems become more human-centric? Can they be redesigned to match the way we live and work now? Putting a web front-end on a monolithic business process from the 1950s is the road to failure.
The new generation of programmers must understand financial programming and how to design business systems. There’s little value in migrating from COBOL if you don’t get something better in return. What you should get in return is the flexibility to add new features and new user interfaces, the ability to adapt to changes in competitive conditions and implement changes in the regulatory environment, and so on. We don’t yet know what those new features will be (perhaps cryptocurrency or virtual reality user interfaces), but we do know that businesses will need the flexibility to add them.
Simply put: Scrambling for COBOL programmers whenever there’s a crisis is not a viable business decision. Transitioning from COBOL is a change businesses will have to make eventually. This transition should be made when businesses have time to think it through, time to hire the right people and time to do a good job—rather than waiting for the next crisis.
In the meantime, while businesses are baking in the time to think through their transition strategically, it’s important to note that this isn’t an all or nothing decision—i.e. let’s scrap our legacy software and replace it by Jan. 1, 2021. This is not Y2K. Using a microservices approach offers numerous advantage. For one, businesses can split their existing infrastructure into different independent services. They can start with pieces such as authentication, then move on to things such as billing and other services. Whatever businesses decide, they need an approach that’s modular so that it’s easy to add new features as needed. That requires careful thinking about design—and that thinking is more important than the programming language itself.
Hasura today announced the public beta of Remote Joins, which makes use of an open source GraphQL query language for application programming interfaces (API) to join disparate data sources residing in different repositories.
Company CEO Tanmai Gopal said Remote Joins extends a GraphQL engine the company has developed around a project that is now hosted by the GraphQL Foundation, an arm of the Linux Foundation. The GraphQL Foundation counts among its members Airbnb, Amazon Web Services (AWS), Apollo, Coursera, Elementl, Facebook, GitHub, IBM, Intuit Hasura, Paypal, Prisma, Shopify and Twitter.
Originally developed by Facebook, GraphQL has emerged as the basis for a more streamlined alternative to REST APIs. GraphQL provides a complete description of the data made available via an API and is organized in terms of types and fields rather than traditional endpoints. In addition to making it more clear what data is available via that API, developers can employ types to avoid writing manual parsing code.
Hasura is now taking that concept a step further by enabling IT organizations to join data residing in different databases and microservices to enable that data to be queried as if it were a single data source. The core Hasura engine automatically generates the GraphQL engine, which enables those remote joins to be created in a few minutes.
Gopal said joining data across a complex portfolio of modern applications based on microservices and legacy monolithic applications is becoming increasingly difficult as the number of microservices in an IT environment continues to proliferate. The Hasura engine addresses that issue by providing data access and flow tool base on a GraphQL type system for managing APIs that can be applied to GraphQL APIs as well as REST APIs or other protocols, he said.
The join, authorization logic and consistency checks are all managed by the Hasura engine. Hasura also provides data change management, observability, auditing, security and performance management capabilities. That approach makes it possible for data sources and APIs to evolve independently while still allowing organizations to query data flexibly, noted Gopal.
As DevOps and DataOps processes continue to converge, IT organizations will need to find a way to advance application and API development in a way that doesn’t result in data access becoming a major bottleneck. Too many DevOps teams are rapidly building applications and APIs only to find themselves waiting to be given access to data. GraphQL could provide a foundation on which IT teams can manage DevOps and DataOps processes more collaboratively.
It’s not likely IT teams will be replacing existing REST APIs wholesale overnight. However, it’s also apparent that REST APIs may not enable IT environments to scale as efficiently as GraphQL, which is the primary reason why Facebook developed it. Of course, it’s still early days as far adoption of GraphQL is concerned. However, with more IT teams under pressure to innovate faster, interest in a more streamlined approach to building and managing APIs is likely to gain additional momentum.
With increased demands and challenges around compliance and regulations, plus growing expectations for IT to provide more value-added services, companies are looking for more flexible and collaborative options. Interestingly though, while some IT departments have updated legacy systems, COBOL code has continued to be a mainstay. In fact, COBOL just turned 60 and many are saying it’s here for the long haul.
There are a lot of reasons that make it challenging—or for some, unnecessary—to move away from the language, but there are also several clear signs companies and IT departments should know that indicate it’s time to make a change.
Here are five signs IT leaders should pull the trigger on modernizing their legacy environments.
You’re Constantly Worried About the Risk of Losing COBOL Expertise from Your Team
COBOL has more production lines of code than any other language in existence, with over 220 billion lines of COBOL today—or around 80% of the world’s actively used code. One of the problems is that many that are well-versed in COBOL language are also nearing retirement, and the amount of COBOL programmers entering the market is much lower than it was 10 years ago.
Author Glenn Fleishman put it best in his article on the subject stating “the language never died, though its early practitioners have faded away, and the generation of programmers who built systems towards the end of the predominant mainframe era in the 1970s and 1980s are largely near or past retirement age. It’s a slow-moving crisis with no crackling deadline, like Y2K, to focus the minds of Chief Information Officers.”
Pressure from Business Leaders to Take Advantage of More Agile IT Methods
Whether it’s cloud, DevOps or microservices, businesses want faster and more frequent IT delivery of new services to customers. In order to drive these results, embracing more agile methods of IT and developing a strategy that can support rapid application delivery is key. Moving to the cloud, integrating with Java or shifting to Linux requires open-based models that can handle legacy COBOL applications.
You’re Quickly Losing Your Competitive Edge Because of the Reliance on Dated Technologies
Direct and even indirect competitors are encroaching more and more in the industry and in new deals, and you feel as if your company’s position in the market is slowly declining. This may be a product of competitors’ willingness to open source systems that promote the business agility needed to react far more quickly to changing market dynamics and customer demands.
If they are modernizing their IT and investing in new technologies quicker than you are, it’s likely they’ll catch up to or surpass you quickly.
Your Confidence in Your Current IT Environment Is Extremely Low
No matter the modernization strategy you pursue, you should ultimately feel confident and peace of mind when it comes to your environment today and as you look to the future. Without flexibility, collaboration and a tailored approach however, the business will likely suffer and may be the reason for the growing insecurities.
For instance, if you’re interested in programming COBOL in some areas, but currently operate in a significantly pure native Java environment, a flexible and manageable solution is key. If you want to generate Java as the compiled object, the result will be inflexible static Java objects, rather than something flexible and extensible — and will require access to the Java source. That source is not nearly as maintainable as the source generated in the COBOL to Java conversion, but can be leveraged in Java-operating environments, and is much more flexible than other alternatives.
You’re Experiencing Vendor Lock-In
You’re wedded to an established tech company or consultants on-hand that seem like safe bets, but instead have caused you to miss the mark in being flexible and future-proof–not to mention are likely far over your budget to maintain. While transitioning to a new partner may seem daunting, conducting an assessment of your operational, infrastructure and application environment can provide a more comprehensive picture of the strategy that is right for the business, help manage the process more efficiently and ultimately cut unnecessary costs well before an exact migration or conversion path is decided on.
Although many organizations have run COBOL without substantial updates and issues for decades, the ability to solely rely on the dated technology is quickly giving way to a growing need for additional languages and more agile systems. If IT leaders are experiencing one or more of these issues now, waiting any longer to address them can result in much bigger problems in the future and considering a modernization strategy may be the better path to success.
2019 was a big year for internet infrastructure, programming languages and platform development. In the last 12 months, we saw things like new connectivity in the sky and the sea and greater security of those connections with the growth of TLS 1.3and certificate transparency. But three trends in particular stood out as having some of the biggest impacts on developers as we head into 2020.
Rust Capabilities Boost Its Popularity
Rust continued to grow in popularity as it was voted Stack Overflow’s most beloved language for the fourth year in a row, due in large part to its unmatched ability to free developers from the choice between safety and performance in a programming language. Before Rust, developers had to decide between languages like C, which is fast, but has a high likelihood of security failures, or Haskell, which comes with more safety, but is noticeably less performant. Rust provides a level of safety guarantees developers haven’t been able to enjoy before, while still delivering on low-level, native performance. The learning curve is fairly steep, but the batteries-included features you’d expect from a modern language check the boxes developers need to deliver on priorities next year.
HTTP/2 Paves the Way for HTTP/3, Allowing Developers to Build Even More Performant Sites Without All the Hassle
Protocols that deliver and secure richer content saw progress in 2019, too, with HTTP/2 becoming the most common web protocol and a glimpse of the even greater benefits of HTTP/3 to come in 2020. HTTP/2 made developers’ lives easier by simplifying the hacks and workarounds they had to do to get performant sites working with HTTP/1.1 by addressing the complexity of lots of tiny objects within a page. By reducing page load times and improving responsiveness, HTTP/2 has paved a solid foundation for HTTP/3, which has the potential to become widely deployed in early 2020 as the new transport protocol,QUIC, nears completion. QUIC, a replacement for TCP, addresses the head-of-line blocking delays HTTP/2 exhibits for some p90 scenarios. Additionally, QUIC incorporates TLS 1.3, ensuring an easy upgrade to the most recent version of the internet’s standard security functionality.
WebAssembly Promises New Possibilities
Most excitingly, love for and support of WebAssembly (Wasm) by developers picked up steam in 2019 due to the recognition it has received for its secure, performant, cross-platform and cross-device runtime. A glimpse into Wasm’s future promises greater portability, as it allows developers to take the code they have written and run it on entirely different platforms, at scale. Wasm is a sea-change for the entire industry as programs will be able to work not just on different browsers—as we saw with the Google Earth launch on Wasm—but beyond the browser, across various devices and platforms. Think watches, TVs, cars and security systems that can be more securely connected—not to mention the functions-as-a-service speeding up the world on the edge. With the backing of the Bytecode Alliance, a newly formed collaboration between Mozilla, Fastly, Red Hat and Intel, Wasm becomes a prime foundation for more secure and portable software development in 2020.
With all the changes in 2019, 2020 stands to be another exciting year for developers, bringing even greater flexibility to their roles and career opportunities. Ongoing internet infrastructure improvements continue to empower our developer community and enable more secure and efficient programming and computing—all while improving the end-user experience.
In the world of DevOps, the Agile Manifesto and countless other application delivery frameworks, one has to wonder how an anachronism such as the programming language COBOL (common business-oriented language) has managed to remain relevant. After all, COBOL has its roots back in the 1940s, and was built upon Rear Admiral Grace Hopper’s work on the FLOW-MATIC programming language (a text-based programming language). Hopper, who worked as a technical consultant on the FLOW-MATIC project, is sometimes referred to as the grandmother of COBOL.
Last century, COBOL quickly became one of the most used programming languages in the world and it is still quite popular, claiming more lines of code in active use today than any other programming language. It offered a huge advantage over the other programming languages of the era. One that can be summed up as portability. From the outset, COBOL was the first popular language designed to be operating system-agnostic. In other words, it could be run on numerous different systems with little change made to the source code. What’s more, as a text based language, COBOL used English words and phrases to make it easier to understand and also made it somewhat self-documenting.
While much of the programming world has moved onto JavaScript, Python, PHP and even C and C#, COBOL can not be ignored. It continues to evolve and remains relevant, even in the age of the cloud. Simply put, it still has some chops to it. Take for example:
COBOL is a Language of Business: It is still used by the majority of major banks and insurers. The language can be found in widespread use across numerous other sectors, such as retail, healthcare, government and automotive. For most of those businesses, no other programming language has displaced COBOL and it remains as the back-office business language of choice.
COBOL is Extremely Portable: From the outset, COBOL was designed to be operating system agnostic, meaning the same applications developed under it could run unchanged across many different platforms. That allows COBOL developers to focus on building applications, instead of worrying about the intricacies of operating systems. That fuels DevOps and agile by allowing developers to test and deploy across a wide range of supported platforms.
COBOL Continues to Evolve: It supports and integrates with numerous platforms and works with operating environments such as Linux, mainframes, Windows and UNIX. What’s more, COBOL also integrates with Java, C#, Docker containers, mobile, .NET and JVM as well as Azure and AWS cloud environments. It can be used today to build cloud, containerized and managed code apps. And continues to evolve to meet the challenges of the future.
COBOL is Easy to Learn and Understand: It was created with the objective of making it easier for programmers to work with computers and each other. That objective has translated into a language easy to learn and understand by using English phrases and commands. The readability aspects of COBOL make it self-documenting, along with an ease of use not found in other languages. What’s more, the language costs less to maintain and its readability means it is easier to maintain.
COBOL is Future-Proof: It has continually evolved and now works with industry-standard IDEs, meaning programs can code with COBOL using familiar tools that support teams. COBOL developers are able to use the language alongside contemporaries, without having to forgo the latest IT tooling and processes.
While many in the DevOps world sell COBOL short, there are many reasons why the language remains popular today. It continues to meet the needs of business and embraces many of the changes the cloud and new techniques can throw at it. COBOL is even now embracing APIs, micro services, the cloud and distributed platforms, making it a worthwhile tool for business today.
The Eclipse Foundation today announced the general availability of Jakarta Enterprise Edition (EE) 8 Full Platform and Web Profile specifications and associated technology compatibility kits (TCKs).
Announced during the JakartaOne Livestream virtual conference, Jakarta EE 8 is the follow-on open source platform to JavaEE that provides a foundation for building cloud-native applications using a familiar Java construct.
Mike Milinkovich, executive director of the Eclipse Foundation, said the availability of Jakarta EE 8 represents a milestone in that it is the first official release of a full Jakarta platform since Oracle agreed to give up control of Java EE to the Eclipse Foundation.
Its specifications are fully compatible with Java EE 8 specifications and include the same application programming interfaces (APIs) and an instance of Javadoc using the same javax namespace. Its TCKs are based on, and fully compatible with, all Java EE 8 TCKs. Jakarta EE 8 will not require any changes to Java EE 8 applications or their use of javax APIs. The specifications were developed under the Jakarta EE Specification Process, which replaces the Java Community Process (JCP) for Java EE.
The Eclipse Foundation is announcing the certification of Eclipse GlassFish 5.1, an open source compatible implementation of the Jakarta EE 8 Platform. Eclipse GlassFish 5.1 is fully tested under the open source-licensed Jakarta EE 8 TCKs for the Full Platform and Web Profiles.
IBM today also announced that Open Liberty, an open source implementation of the WebSphere Liberty application server, has been fully certified as being compatible with Jakarta EE 8 profiles. All vendors in the Jakarta EE Working Group, including Fujitsu, IBM, Oracle, Payara, Red Hat and Tomitribe, have committed to certifying their Java EE 8-compatible implementations.
Milinkovich said Jakarta EE 8 should drive a wave of innovation as more than 10 million developers who already know Java employ the platform to build cloud-native microservices that can be deployed using containers on Kubernetes platforms. In fact, he said, the number of cloud-native applications based on microservices that will be built and deployed in the enterprise will soon accelerate. As that transition occurs, the number of organizations embracing best DevOps processes to manage those applications also should significantly increase because the rate at which Jakarta applications will be built will be faster than Java applications historically have been built.
Collectively, Milinkovic also noted that despite the rise of rival programming languages, these and other forthcoming efforts will drive a resurgence in interest in Java programming languages that will ensure Java’s continued dominance of enterprise IT environments for many years to come.
Of course, the primary reason IT vendors are excited is they no longer need to pay royalties to Oracle. It’s not clear how much of those savings might be passed on to IT organizations. What is apparent is that organizations that are required to employ open source technologies whenever possible are going to be a lot happier now that Jakarta EE 8 has finally arrived.