top | item 26475331

Why COBOL Isn't the Problem

75 points| Addono | 5 years ago |lucidchart.com | reply

57 comments

order
[+] watertom|5 years ago|reply
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.

That's just the way it is.

[+] Pet_Ant|5 years ago|reply
> 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.

[+] nonameiguess|5 years ago|reply
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.
[+] smnrchrds|5 years ago|reply
It's state government. Everything is a cost centre.
[+] kimi|5 years ago|reply
There are a few things that the author forgot:

- 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.

[+] wtetzner|5 years ago|reply
> 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"?

[+] 908B64B197|5 years ago|reply
> 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.

[+] brogrammernot|5 years ago|reply
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”.

[+] marktangotango|5 years ago|reply
>> 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.

[+] tyingq|5 years ago|reply
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.
[+] commandlinefan|5 years ago|reply
> Actually providing the programmers the time and money to make sure

In my experience management sidesteps that problem by insisting that you're an incompetent fool if you need time and money to accomplish anything.

[+] DocTomoe|5 years ago|reply
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.

[+] dwheeler|5 years ago|reply
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:

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.

[+] maxharris|5 years ago|reply
> 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.

[+] bregma|5 years ago|reply
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.
[+] Deukhoofd|5 years ago|reply
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.

[+] 7thaccount|5 years ago|reply
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.
[+] yetihehe|5 years ago|reply
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.
[+] pullmn|5 years ago|reply
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.
[+] txdv|5 years ago|reply
Also hiring people for a language that nobody knows anymore will be much tougher.
[+] JanneVee|5 years ago|reply
As I see it that this was a organizational culture failure where he tries to explain it with a technical debt problem.

I see the fingerprints of almost feudal organization structure the other aspects when I first read about the New Jerseys problem with COBOL.

[+] greatquux|5 years ago|reply
He's trying to explain that the reason you end up with so much technical debt in the first place (after explaining to a layperson what that is) is /because/ of organizational cultural failures.
[+] hypermachine|5 years ago|reply
> Programming languages are easy to learn

From our experience with VBA users, this is only true for non-technical (as in STEM background) users when it comes to languages with a close-to-English syntax together with tightly integrated IDE/editor. Lua, Python (and occasionally Ruby) are two other languages that are quite "easy" to learn. The curly braces languages? Not so much. Java is especially bad due to its poor error messages and opaque package management/build tools. However being easy to learn for the users doesn't mean the users are capable of writing good code. We found that code written by amateur users tend to be rather unstructured and incoherent. On the other hand some of the cleanest codebases I have read (from those without formal instruction or experience in software engineering) are by mathematicians and electrical engineers.

In terms of tooling Glitch.com and Repl.it are best in for zero-config workflows.

[+] weitzj|5 years ago|reply
Funky idea:

Serverless is Mainframe(COBOL) without transactions

[+] p_l|5 years ago|reply
Specifically, CICS, minus a lot of very useful stuff
[+] fouric|5 years ago|reply
> programming languages are really easy to learn

> For evidence of how easy it is to learn programming languages, one of the authors of the current paper has, over the course of his life, learned 18 distinct programming languages. His father, a physics professor, claims to have used 20 and 30 programming languages. A quick poll of engineers at Lucid Software showed that this was not unique, with all of the engineers having used at least two programming languages, and the majority having used somewhere between 5 to 20.

I'm curious as to how different the languages that they're referring to are.

Python, Ruby, Perl, PHP, C, C++, D, and Java are all really similar to each other relative to the differences between them and Coq, Haskell, Lisp, Erlang, Prolog, Io, Spiral, FORTH, or Chapel.

[+] ravi-delia|5 years ago|reply
I mean, the similarities between languages are a big part of why they're easy to learn. Obviously if you only learn within one cluster, you operate best in that cluster, but one or two archetypical languages in each are probably enough to use any of them.

   |Functional|Prodedural
Strict | Haskell, F# | Rust, Java, C

Loose | Elixir, Lisp? | Ruby, Python

No idea if that rendered right at all, such is life. Seems like Lisp-esq languages are kind of a category on their own, but what's an oversimplified taxonomy without some really forced placements?

[+] protomyth|5 years ago|reply
I still wonder what would happen if IBM sold a IBM i for $499 only licensed for developers. It's not like the thing really needs high end specs. I wonder how many programmers would go for it on a fluke. Would be good for schools too.
[+] crb002|5 years ago|reply
Version control is COBOL's problem. Testing mainframe COBOL not in a modern version control is YOLO PITA.
[+] yawaworht1978|5 years ago|reply
Are the cobol devs from the past the equivalent of the modern day vbs and excel script persons?
[+] goatinaboat|5 years ago|reply
Are the cobol devs from the past the equivalent of the modern day vbs and excel script persons?

No, they were writing the typical corporate applications - an interface to enter data into a database, or to run a query and generate some nicely formatted output. They were the equivalent of a modern day webdev.

[+] 7thaccount|5 years ago|reply
You can still get a lot done being a scripting guru for an organization. I view it less as a specialized role and more of something nearly all employees should be able to do now of a technical company.
[+] Annatar|5 years ago|reply
To COBOL's defence, the compiler generates very fast machine code, so COBOL is all right in my book id est screwing around with the intricacies of that language is okay since the end result is a fast, small program. Based on these two criteria, I conclude that it's well worth the effort on the programmer's part.
[+] goatinaboat|5 years ago|reply
it's well worth the effort on the programmer's part

It's worth it if you have all the supporting pieces in place. For example if your OS provides record-oriented I/O and your hardware platform provides dedicated processors for accelerating I/O, then you can write a very small, efficient program to, say, calculate today's interest rate and apply it to millions of accounts. But if you don't have those things then you need to write a lot more code and/or have another program (e.g. a database server) to try and emulate them in software, and it will be slower because it has the overhead of calling between components rather than being tightly integrated.