The problem is maintenance, it's a cost center, it doesn't directly generate revenue, so it's been eliminated.
NOBODY is willing to spend money for maintenance on ANYTHING, look at our infrastructure.
If it wasn't for the FAA making it illegal to not maintain planes, we'd be seeing the same thing with airlines and their planes.
We are seeing this with the Air Force right now, where they are now trying to reverse engineer parts for planes and then 3d print those parts, because no one was willing to spend the money to maintain documentation, maintain vendors, and parts inventory, etc.
Software is especially vulnerable to this phenomenon, because it's not physical so it's considered to be completely fungible, but in fact it's even harder to maintain than physical systems.
The same way Wall Street rewarded companies that closed factories, and outsourced physical locations, and staff, they've also rewarded companies that have eliminated maintenance.
> The problem is maintenance, it's a cost center, it doesn't directly generate revenue, so it's been eliminated.
It does (effectively), the problem is that it is on a long enough time span that the dividends don't appear until long after the decision makers are all long gone. Executives need to be compensated with annuities depending on the future performance of the company to disincentivise slash & burn profit farming.
This is about government, though. Nothing except tax collection and certain police activities are a source of revenue. That is the entire point of government. They're not doing things intended to make money or get rewarded by Wall Street.
- COBOL programs have history. They were changed in '77 and then the change was reverted in '79 and then again in '84. Nobody really remembers why.
- COBOL programs do what they do. They do not have specs, but if that's the way we have been computing account interests for the last 50 years, they are right. It's lawyers documenting them, not the other way around.
- COBOL programmers were often meant to be "less" than real programmers. More like junior accountants automating boring procedures, than C wizards. Wizards would not touch COBOL code with a stick. This often shows.
This said, the kind of things you could do on a IBM mainframe in the '70s (virtualization, data safety and efficiency, disaster recovery, even uptime) still run rings around the 90-core boxes with Linux that are in your datacenter racks.
> COBOL programs have history. They were changed in '77 and then the change was reverted in '79 and then again in '84. Nobody really remembers why.
I wonder how different it would be if they had a good source control system (and used it). Would you be able to look at the history and understand why the changes were made, or would you just get a bunch of commit messages like "made update" or "reverted earlier change"?
Having worked on the PL/1 and Assembler that formed the core accounting systems of a bank: yes.
Not only did I have source control I had flow diagrams of the entire system for all points in the chain. My code reviews had me doing line-by-line justifications. I wrote tests.
Just because the technology and practitioners are old it doesn't mean they don't know what they're doing.
Generally they invented whatever "you" are reinventing the first time around.
In my professional experience, code comments and commit messages only cursorily reflect the change in the business logic that prompted the modifications. I suspect this is because the knowledge of the client's business logic is concentrated in the product managers' domain and not in the programmers' domain. All of the back and forth emails with the customer don't get included in our SCM.
Imagine they used jira, confluence, and git. It would still be a huge no! Code archeology is a real necessity even on a <10 year old system. The best way to find out about something is to have a chat with a ‘historian’ who has been with the company for 10+ years.
There are teams which require all changes come via defined channel (like bug tracker or special email), and which put ticket # in each commit (like Gitlab -- see the "closes #..." at the commit message [0])
But many teams have no procedure, or the procedure is optional -- and there you can easily get "made update" commits.
I worked at 3 different companies in the mid 1990s that had teams actively working on COBOL systems and they were all using mainframe based version control systems.
I think the issue at this point is whether those version control systems are still being maintained and those orgs are continuing to pay for the licenses for those systems, probably during years where you weren't even planning on using them.
> COBOL programs do what they do. They do not have specs
And nothing around them is standard either. No database, no best practices, no comments in code. Combined with
> OBOL programmers were often meant to be "less" than real programmers.
you get programs that are completely unmaintainable. Contrast this with the first versions of UNIX or BSD (written around the same time) and you can still build and understand them pretty easily. That's the difference between programmers and software engineers.
> This said, the kind of things you could do on a IBM mainframe in the '70s (virtualization, data safety and efficiency, disaster recovery, even uptime) still run rings around the 90-core boxes with Linux that are in your datacenter racks.
All through obscure, proprietary APIs and along with a hefty support contract from IBM. Making sure nobody in academia or in SV could get within 500m of a mainframe sure helped them become more than a niche.
My father has been working in COBOL since the 80s, and his “reference” books are literally a couple of 4” 3 ring binders that he’s assembled over 40 years now of coding.
Everytime the bank tries to switch away from COBOL they run into problems ranging from code latency to lack of support for certain features in the new language among other issues thus far.
I really don’t know what the banks that run cobol mainframes are going to do as most have ignored the Father Time problem where cobol programmers aren’t getting any younger and the language, in my opinion, is miserable compared to the “magic” of newer era languages.
My pops also has made less money then I did as an engineer at a tech co with 3 years experience so banks aren’t valuing the work these folks do very much either.
I’ve told my pops he can do consulting once he retires and make a killing because there’s gonna be a major shortage of cobol folks and a massive amount of mainframe code out there that needs maintenance or a transition into a newer era language.
Edit:
- The author is wrong here
“If you need to change old programs, hiring experienced programmers and teaching them COBOL is the cheap part.”
There is not a surplus of developers or entry level folks willing to learn cobol over another entry level language, so it’s not cheap and it’s not “easy”.
>> There is not a surplus of developers or entry level folks willing to learn cobol over another entry level language, so it’s not cheap and it’s not “easy”.
Wrong, there are literally 10,000s of former cobol developers due to decades of offshoring. I know of several thousand in from one local company alone. Go look for these job listings, you won't find them because they're all offshore.
Offshore isn’t a realistic solution, the quality & language barriers that come into play significantly slow down any sort of production cadence compared to in-house.
Also, the program written in COBOL often comes with an ecosystem that can be harder to port than the code itself. Record vs stream oriented filesystems, batch job subsystems, file transfers, block mode terminals, and so on.
In my experience, telling them that hiring the wrong person for the job must have been their incompetence and walking out makes them reconsider their strategies quickly.
Rehiring talent costs - on average - an annual salary. If more of us grew a spine, we wouldn't see the management/IT-ops staging a recreation of the stereotypical high-school jocks/nerds conflict.
> Rehiring talent costs - on average - an annual salary.
That's best-case scenario - an ordinary cog in a big team supporting well-documented/tested and fairly generic, simple software. A friend of mine did a research paper and said it's more like 3 years annual salary in most companies because:
The article gets it: the problem isn't COBOL, the problem is lack of maintenance. The analogy is apt, too: if you never put oil in a car & it fails, the problem is not how the car the built.
There are materials for learning COBOL. Here are some materials from the Linux Foundation's Open Mainframe project:
While COBOL has its quirks, it's not that hard to learn. It even has some advantages, for example, it has built-in support for fixed-point decimal arithmetic.
In general, COBOL is the scapegoat, not the actual problem.
> if you never put oil in a car & it fails, the problem is not how the car the built
No, the analogy is perfectly apt. Electric vehicles are rapidly replacing gasoline vehicles. There is no oil to change in an electric car! Better languages have long since surpassed COBOL.
My takeaway: if New Jersey had decided they could save money by just never changing the oil in all their state-owned vehicles they would have been in the same situation as they were when they chose to save money by not maintaining their state-owned software.
I agree to some degree that learning a new language is easy, but learning a new language and understanding its intricacies that could cause issues in a program takes a whole lot longer.
It takes a whole lot less time for an experienced COBOL dev to understand a program than it takes for an experienced programmer who just learned COBOL to understand it in my experience.
Not just the language, but IBM mainframes and transactions and that while ecosystem. It's not like having your Python script query a SQL database. I'm sure I could learn to write sample programs like "FizzBuzz" or "hello world" in a very short amount of time. I'm not going to be comfortable writing bank software for years.
I don't know almost anything about cobol, but from what I understand, there are more intricacies than language in cobol, so yes, it takes long to learn it.
Yes, I think that this article missed the point to some extent. Knowing C quite well and C++ not very well, learning the Java 'language' was quite easy. Learning the Java 'model'/'runtime' was much harder and ultimately more important.
NOBODY is willing to spend money for maintenance on ANYTHING, look at our infrastructure.
If it wasn't for the FAA making it illegal to not maintain planes, we'd be seeing the same thing with airlines and their planes.
We are seeing this with the Air Force right now, where they are now trying to reverse engineer parts for planes and then 3d print those parts, because no one was willing to spend the money to maintain documentation, maintain vendors, and parts inventory, etc.
Software is especially vulnerable to this phenomenon, because it's not physical so it's considered to be completely fungible, but in fact it's even harder to maintain than physical systems.
The same way Wall Street rewarded companies that closed factories, and outsourced physical locations, and staff, they've also rewarded companies that have eliminated maintenance.
That's just the way it is.
It does (effectively), the problem is that it is on a long enough time span that the dividends don't appear until long after the decision makers are all long gone. Executives need to be compensated with annuities depending on the future performance of the company to disincentivise slash & burn profit farming.
- COBOL programs have history. They were changed in '77 and then the change was reverted in '79 and then again in '84. Nobody really remembers why.
- COBOL programs do what they do. They do not have specs, but if that's the way we have been computing account interests for the last 50 years, they are right. It's lawyers documenting them, not the other way around.
- COBOL programmers were often meant to be "less" than real programmers. More like junior accountants automating boring procedures, than C wizards. Wizards would not touch COBOL code with a stick. This often shows.
This said, the kind of things you could do on a IBM mainframe in the '70s (virtualization, data safety and efficiency, disaster recovery, even uptime) still run rings around the 90-core boxes with Linux that are in your datacenter racks.
I wonder how different it would be if they had a good source control system (and used it). Would you be able to look at the history and understand why the changes were made, or would you just get a bunch of commit messages like "made update" or "reverted earlier change"?
Not only did I have source control I had flow diagrams of the entire system for all points in the chain. My code reviews had me doing line-by-line justifications. I wrote tests.
Just because the technology and practitioners are old it doesn't mean they don't know what they're doing.
Generally they invented whatever "you" are reinventing the first time around.
There are teams which require all changes come via defined channel (like bug tracker or special email), and which put ticket # in each commit (like Gitlab -- see the "closes #..." at the commit message [0])
But many teams have no procedure, or the procedure is optional -- and there you can easily get "made update" commits.
https://gitlab.com/gitlab-org/gitlab/-/merge_requests/56794
And nothing around them is standard either. No database, no best practices, no comments in code. Combined with
> OBOL programmers were often meant to be "less" than real programmers.
you get programs that are completely unmaintainable. Contrast this with the first versions of UNIX or BSD (written around the same time) and you can still build and understand them pretty easily. That's the difference between programmers and software engineers.
> This said, the kind of things you could do on a IBM mainframe in the '70s (virtualization, data safety and efficiency, disaster recovery, even uptime) still run rings around the 90-core boxes with Linux that are in your datacenter racks.
All through obscure, proprietary APIs and along with a hefty support contract from IBM. Making sure nobody in academia or in SV could get within 500m of a mainframe sure helped them become more than a niche.
Everytime the bank tries to switch away from COBOL they run into problems ranging from code latency to lack of support for certain features in the new language among other issues thus far.
I really don’t know what the banks that run cobol mainframes are going to do as most have ignored the Father Time problem where cobol programmers aren’t getting any younger and the language, in my opinion, is miserable compared to the “magic” of newer era languages.
My pops also has made less money then I did as an engineer at a tech co with 3 years experience so banks aren’t valuing the work these folks do very much either.
I’ve told my pops he can do consulting once he retires and make a killing because there’s gonna be a major shortage of cobol folks and a massive amount of mainframe code out there that needs maintenance or a transition into a newer era language.
Edit: - The author is wrong here
“If you need to change old programs, hiring experienced programmers and teaching them COBOL is the cheap part.”
There is not a surplus of developers or entry level folks willing to learn cobol over another entry level language, so it’s not cheap and it’s not “easy”.
Wrong, there are literally 10,000s of former cobol developers due to decades of offshoring. I know of several thousand in from one local company alone. Go look for these job listings, you won't find them because they're all offshore.
Deleted Comment
In my experience management sidesteps that problem by insisting that you're an incompetent fool if you need time and money to accomplish anything.
Rehiring talent costs - on average - an annual salary. If more of us grew a spine, we wouldn't see the management/IT-ops staging a recreation of the stereotypical high-school jocks/nerds conflict.
That's best-case scenario - an ordinary cog in a big team supporting well-documented/tested and fairly generic, simple software. A friend of mine did a research paper and said it's more like 3 years annual salary in most companies because:
* Loss of productivity during notice period
* Onboarding time of new staff
* Negative impact on morale of rest of team
* Rest of team needing to support work
* Recruiters fees
* Time spent recruiting
* Customer frustration
* Replacing them with someone worse
* Extra mistakes
I cannot upvote this enough.
I haven't seen a company change mind so fast until 3/4 of a huge team (25-30 people) team left the company within 6-8 months.
There are materials for learning COBOL. Here are some materials from the Linux Foundation's Open Mainframe project:
https://www.openmainframeproject.org/projects/coboltrainingc...
And when there was a call last year for COBOL programmers to help some of these aging systems, a lot of people immediately popped up: https://www.techrepublic.com/article/ibm-linux-foundation-se...
While COBOL has its quirks, it's not that hard to learn. It even has some advantages, for example, it has built-in support for fixed-point decimal arithmetic.
In general, COBOL is the scapegoat, not the actual problem.
No, the analogy is perfectly apt. Electric vehicles are rapidly replacing gasoline vehicles. There is no oil to change in an electric car! Better languages have long since surpassed COBOL.
It takes a whole lot less time for an experienced COBOL dev to understand a program than it takes for an experienced programmer who just learned COBOL to understand it in my experience.