It’s COBOL all the way down
increment.com
increment.com
- Generate native windows interfaces with COBOL, to the point where only a few lines of code create a control like a data grid, button or text entry with rich functionality. You’d never know these snappy native apps, with features like visual data validation and asynchronous menus/context popups, are COBOL.
- Render rich web pages with COBOL using a in-house DSL that automatically become somewhat responsive between devices. The presentation information streams over a web socket so it’s snappy and as responsive as the above desktop application
- Perform complex queries and rich data validation. A few lines of code can automatically be linked to grid view that has HEAPS of built-in functionality like export or data side-view (link applications/side panels to the currently selected row), app row highlighting and styling, auto pagination with range expand, column sorting, reorder, filtering, conditional highlight and more.
So yeah, COBOL isn’t dead. It’s actually the coolest damn thing Ive seen in a while. Because it’s pretty high-level we can build whatever we need on top as a runtime and the same apps can run on the web, native desktop, handheld tablet or on an old VT100 over SSH.
https://www.scopesystems.com.au/whats-new-pronto-xi-740-scop...
I ask because your parent comment certainly rings true if this is all COBOL!
You just couldn’t write them all over again, there isn’t a team on earth that could, even with infinite money. You’d be talking, I think, more than high double digits, millions of LOC.
JavaScript by comparison .. today it’s React/Angular, but it is very fluid. Not much code will be practically reusable in 5/yr from now.
Love the insight. Established businesses like banks look for this kind of stability. And upstarts who build from ground up to challenge status quo, they go on to figure out ways to win with es6 and their friends.
Is that really true? If you look at a lot of JS from 5, 10 or even 20 years ago it still works. The main things that stop it working are security changes, which is arguably a good thing. I don't see why many of today's JS libs will stop working in the future unless there's a good reason why they should.
1. They are already in place and in use.
or
2. Vendor/consultant is aware of them.
> console.log(0.1 * 0.1)
0.010000000000000002Incidentally, this was actually faster than binary floating-point on the machines for which COBOL was designed, which used EBCDIC and had special circuitry for arithmetic on binary-coded-decimal numbers. You could operate directly on the decimal representation without having to do any conversion for I/O.
A current issue is that a lot of programmers are bad at integer arithmetic. It isn't really taught in school.
- COBOL has no stack and no dynamic memory allocation. The memory cost of a procedure is known in advance and you cannot leak memory. There is not much room to be smart, and in the long run it's likely a reason for success. You would not want people with a three month training editing 20-yr old C code.
- COBOL procedures are damn CPU-efficient at what they do
- COBOL works in symbiotic relationship with DB2. A lot of things that are complex/tiring to do in COBOL (like e.g. working with strings...) can be done in SQL. And when you have SQL you can do pretty powerful things.
- COBOL procedures do not usually sent SQL queries as strings to the database. They compile down to a procedure that does physical, low-level handling of database tables. If you change a table, you have to recompile all procedures that depend on it (and it may take hours to days....) but again is damn efficient in production.
- mainframes run constantly at a CPU usage of over 90-95%. There is a huge amount of procedures constantly running to maximise the return on the system.
So no function calls?
Maybe someone who writes cobol could chime in on this.
Do not forget that when COBOL was created mainframes were less powerful than today's microcontrollers.
Modern Cobol doesn't seem to have this limitation, eg http://publibz.boulder.ibm.com/cgi-bin/bookmgr_OS390/handhel.... When Cobol originally appeared, call stacks weren't standard, Lisp didn't exist yet, and neither Fortran nor Algol supported recursive functions; it made sense at the time.
Gosh, thanks. I sometimes hold historical technology to unfair standards because I'm not thinking about the continuity of it all.
Crazy to think twenty-somethings are out there hacking COBOL!
No recursive ones. If you forbid (direct or indirect) recursion, then a function's local variables can all be static rather than stack-allocated. Similarly, each function could have a hidden, static "return address" variable (since all parameters are static, it's really just a hidden parameter) that is set behind the scenes when a procedure is invoked and jumped to when it exits.
edit: I was just guessing how you'd do return addresses, but it looks like that is how they used to work. From Wikipedia: "Machines before the mid 1960s—such as the UNIVAC I, the PDP-1, and the IBM 1130—typically use a calling convention which saved the instruction counter in the first memory location of the called subroutine. This allows arbitrarily deep levels of subroutine nesting, but does not support recursive subroutines."
Ancient Fortran also didn't support recursive procedures, and they were only sneaked into Algol 60: https://vanemden.wordpress.com/2014/06/18/how-recursion-got-...
What it doesn’t need (and didn’t support) is recursion, and without recursion, the maximum depth of the stack can be computed at compile time, so that a program can refuse to run if there isn’t sufficient room for a stack that size. (The first FORTRAN’s were similar in this respect. If you wanted your program to support larger arrays, you recompiled it)
Just did a migration from a mainframe to Java microservices. We were lucky to have subject matter experts on hand so we didn't have to delve too much into the COBOL code. Used JHipster Domain Language Studio to quickly go from a Bachman diagram to an entity domain model.
One quirk was that we were not permitted to use a modern UI; we had to emulate an IBM 3270 screen! The client ran out of money for retraining users so we had to do a lift-and-shift of the UI.
Good points of Cobol:
- No boilerplate
- You could understand the use case just by reading the code
- Never seen such a fast processing of millions of records (this was done with VSAM files)
But the most important and a real eye-opener for me:
- Any developer can easily learn how to program in Cobol. You don't need superstars 10x programmers and ever changing frameworks and paradigms. There were grandmothers working as developers in the bank. I've actually never seen such a diversity in IT (not only age but also gender diversity). And you know what, that made it a real nice place to work
One thing I really love about this environment is you learn a lot about the business area when working with COBOL, since the business logic is so plainly written in many programs. I don't like using the term "self-documenting code," but COBOL is really close to that.
"The guy who wrote it left and nobody knows what it does" is a poor excuse with a self-documenting language like COBOL. How much sense do you think your tangled mess of Java will make in 50 years?
Adoption and ease of learning should always be considered when selecting a tech stack for a solution. COBOL's semantics are so foreign to modern programming languages that it makes the language pretty inaccessible.
Also, COBOL's strength is in the generation of reports, but in the end, it's no more expressive for that purpose than any general-purpose programming language coupled with a nice report generation library.
Do you? Lack of programmers, aside, it was created and evolved exactly for the kinds of jobs its used in.
I would also disagree with GP that COBOL's semantics are really very foreign. Variable declarations, assignments, expressions, loops, conditionals, etc. are not that different from other imperative languages. More verbose, certainly, but not foreign.
JCL on the other hand....
My guess as to where that came from:
1. Tech companies stay relevant by reinventing new markets via new languages / frameworks. 2. New programmers can side step the "rookie" condition by adopting a new language thus leveling the playing field for that language / framework (i.e. everyone is a rookie). Plus whatever is new is hot, and everyone wants to know what's hot. 3. Because of this, few are interested in old languages. I was in college in the 1990s and COBOL was pretty much out as far as anything anyone wanted to learn. It was all Windows.
So based on 1-3, the reason "we must replace it because it's old!" mentality is out of necessity. The older the system / language, the harder it will be to find people to work on it. This has inherent risk. Of course these banking systems have decades of business logic, acquisition logic, and government regulations built into them, rewriting it has it's own massive risk.
Something I wonder about all the time is why software has to be so fragile. We always put so much work into maintaining things downstream because things break upstream so often it's frustrating.
As valued employees, pairing with the Java devs on code, attending team lunches and other functions, generally integrated with the teams to which they were passing on their life's work?
Because to be honest I'm struggling to believe they were being treated as equal members of a team if they were behaving like that.
Just sayin', I wonder what the tale from the other side of the table was in this story.
And then weeks debugging the phantom problems caused by the overuse of global variables that COBOL more or less mandates... I feel your pain, brother.
I’m sure for a lot of these companies, due to the sheer size and often mission-critical nature of these systems, the cost analysis still comes down on the side of keeping the COBOL/&c. systems and just using new tooling around them, like static analysers, integrations with frontend frameworks, ways to interoperate with relational databases, and software emulation of mainframes.
An alternative would be not only difficult to build but hard to sell. There’d probably be a lot of money in it if you had a team with the financial runway, technical skills, and market connections to do it, though.
I have written an RPG3 interpreter with all the Record Level Access operations working on a noDb/flatfile in C#, but lost the source after replacing a hard disk. I have also tried writing a RPG4+ (only free format) compiler for .NET, but it started getting tricky when starting to write the RLA operations because they relied on a database. I have the code still, but it's ugly so I never released it.
Would be a fun project, for sure. Not enough hours in the day.
If I could get a cent for every money transaction done on floats and incorrectly rounded, I'd be a billionaire.
I'm also a fan of COBOL's use of '.' as a statement terminator instead of ';' like the ALGOL languages.
I met with manager to, what I thought was, to discuss the project and I brought up that tokenized PANs were our opportunity to transition off the mainframe and that we missed the boat. It fell of deaf ears because our meeting was actually to discuss how I was being reprimanded for using an SSH connection which the company couldn't perform a MITM attack on. It was at that point I knew I could not advance my career there.
It's the Corporate IT equivalent of the security theater that still gets consumers to buy Norton/McAfee/etc products when Windows Defender and Windows Firewall are more than adequate, free, built-in, but "too quiet" and not enough slot-machine like glowing green "Safe" spinners.
They weren't MITM attacking people outside the company, just MITM attacking their own employees.
I feel that pain, quite often (and am slowly losing a war on it at my current employer, sigh). TLS/SSL Interception Proxies are scum that make the internet overall less secure for a weird sense of security by corporate IT departments.
As a software developer, it's my job to make sure that no one is MITM attacking me so that the code I download to incorporate into projects is safe and secure. I can't check if a bad actor is MITM attacking me when my own employer is MITM attacking me.
Right, that was what I thought too, this is honestly why I'm turned off from applying to work with more bureaucratic companies (soon to be fresh graduate), I understand the reason for sensitive informations being leaked. But this seriously causes a lot of productivity loss...
I've interned with a small company that needs to SSL into government/companies servers to do work. (I don't do them, just on local company machine for testing etc. Also maybe why they can't let me do live site related stuffs) It'll be a big pain to not be able to SSL remotely and do work.
I wish he was interested in writing a blog post of war stories.
I pretty much do what he does except with xbase (dbase, foxbase/pro and clipper) on PC's. There are millions of lines of code written in the 90's still happily running.
In fact, the only "tech" I see from the 90's that's pretty much dead and buried is Netware and Vines.
Damn shame too, cause I loved Netware. Ol'well. :)
We're both old farts, compared to most of you guys. He's 64 and I'm 55.
But I do remember MS pushing Access (which was and probably still is utter trash, compared to FP). And then VB6. I hate VB. I have nothing against the language itself. I'm just still bitter at MS replacing FP with VB.
I am involved in a project that is replacing FP with Python. Now Python I like a lot.
I'm no fan of Access or VB, either. I do everything outside the main application in Python, too.
SAP business logic is written in ABAP, a descendant of COBOL.
Oracle Core Banking was originally I-Flex, which was spun out of a Citibank internal IT organization in India - dating back to the 1980s. There’s got to be some COBOL in there somewhere, though they are also committed to making Java the next COBOL.
This is funny to me, because the where I'm working right now, they have teams building entirely new projects in COBOL. The reason is that it's a company with a very high average age and incredible secondary benefits for baby boomers (old contracts, young people get ripped off), so they have an army of COBOL developers while there's a shortage for pretty much every other type of dev.
* persuaded to come: tough sell for Cobol
* 99% internally trained cause the pool of Cobol devs is probably similar to that of Elm devs :)
And despite what we may think, except for the big tech companies, everyone else doesn’t really hire generalists. You could have 20 years experience as a programmer in 10 different languages, HR still wants a Java programmer with 5 years of Java experience.
I was in ECE in college (graduated in 2017) but do full stack software engineering for a bank now. AFAIK it's still C, but I wouldn't be surprised if Rust picked up due to the emphasis on memory safety- dynamic memory allocation and recursion are usually avoided in embedded.
Some of the lessons I got from embedded have carried over to my place of work- I found a repo that used floating point for money and immediately knew why that was a bad idea, because my embedded systems professor had spent an almost an entire lesson explaining why you don't use floating point for money or time.
side note: Said professor (Phil Koopman) was an expert witness in the Toyota unexpected acceleration lawsuit, he has a talk on it that can be found at https://betterembsw.blogspot.com/2014/09/a-case-study-of-toy....
Choose the process you want to control and then go work at a place that has that process or a consultant that supplies equipment or services to the owner/operator of the plant. Then you will learn how the process operates and how the software controlling it works, and how it could be improved.
1. it would run on a modern environment instead of a weird mainframe OS using a weird database
2. it would use modern coding conventions such as local variables and control structures instead of goto
3. it wouldn't be x million lines after you remove all the dead and duplicate code. These are codebases have been developed for 3 decades with the principle "we don't know how any of this old shit works, don't touch anything you don't need to"
But yes, you would also get a lot of advantages from porting everything to a modern programming language with good tooling.
We were working, around 2000, on partially porting a Cobol+Fortran insurance system (which was an 'integration' of systems acquired by acquisition over the years) to Java (yes, EJBs..... ..... ..... the sins of my youth...). The work was mostly 20 people working for months on creating all the encoded rules into spreadsheets and, in a much shorter time, us translating those to Java. This particular piece was done because the company wanted to webify that part of the system. I am not sure if the modern versions of 'software mainframes' or modern hardware mainframes would be fast enough to handle web with the old code running?
http://www.fujitsu.com/global/products/software/developer-to...
The banking processes and environment are not though.
EDIT: I think this is the COBOL Covboys discussion I referred to above: https://news.ycombinator.com/item?id=14083214
A lot of the big mainframe software companies like CA Technologies, Rocket Software, or BMC hire people with no mainframe experience (often straight out of college) and then train them.
If you're willing to pay for it, IBM offers classes in Dallas, TX for beginners as well. They are not cheap.
Marist College (located in New York, I think) also offers some z/OS certificates and classes. Unfortunately, I don't think they are online. I could be wrong about that though. http://idcp.marist.edu/enterprisesystemseducation/zosprogram...
It will literally take you months to do something in COBOL on the mainframe that would normally take you a week in anything else. Trust me, you take for granted all the conveniences of modern programming environments. COBOL is very much a product of it's time and it's time was decades ago. The success of these old environments rests entirely on extremely well defined (and tedious) processes, not the technology.
No matter how much they pay you, you probably still won't want to do it -- it's just not intellectually stimulating enough and you will constantly be frustrated.
Fixed that for you.
The environment is also terrible but separating COBOL from the environment is pointless.
You're talking about Javascript?
[0] Balzano, V. and Zak, D., “Event-driven James Webb Space Telescope Operations using on-board JavaScripts”, SPIE Conference Proceedings, Vol. 6274, 2006.
So no, James Webb space telescope won't be in operation for decades.
You know, I just finished a COBOL class at university and this makes sense. One of the main things I hated about cobol was how strict and weird the syntax was. It uses so many full verb identifiers rather than just operands. The language just really feels like it was built to be rock solid.
The developers who didn't want to code in JavaScript, solved the problem of having to deploy JavaScript by creating other languages that compiled to JavaScript: CoffeeScript, TypeScript, Elm, ClojureScript, etc. And, more recently, by just turning the JavaScript interpreter into a glorified low-level VM, through WASM, so that it can be programmed in any language.
Why hasn't this approach been taken with COBOL?
With such a language in hand, you could take existing codebases (or compiled binaries) and write a decompiler that would convert them to your language of choice, so that the whole project could exist in the new form. Or, more simply, you could just write new modules (and rewrite any modules you have to change) in the new language, leave old modules as COBOL, and then link them together.
Not sure you can say they are 'happily' using the agglomeration of bolt on systems that they have pulled in over the years.
There's remnants of Cheltenham and Gloucester, Halifax, Bank of Scotland, TSB (now spun out), Scottish Widows, Standard Chartered Bank (IIRC) and I think some parts of Abbey National.
Those are just the one I remember and some of those are comprised of a mish mash of prior systems.
Keeping all that going is likely a huge burden. Indeed, they charged TSB £100 million a year just to emulate TSB's part of the system so TSB could just keep using that until their subsequent merger.
> You can’t just rewrite the whole thing.
Is it that bad? I guess I'm being crazy thinking I can do it single handedly in 5-10 years for a couple million.
I'm not saying I'll do things the conventional way. Once you give up the conventional way, it becomes a different ball-game.
And it has complex, undocumented connections to north of a hundred other systems. Screwing up any one of which could have hugely impactful effects on the business (or not, who knows?). So you're going to be coordinating testing with 30-40 teams in diverse parts of the organisation (and externally).
And your couple of million won't pay for the redesign of all those feeds. Hopefully they won't take the testing costs out either or you'll be broke in 2 years.
See, the thing with extracting these old, large systems isn't really the language they're written in, or the hardware they run on. Though those are nasty, ugly problems. It's the coupling. What will almost always defeat you, unless you give the problem the respect it deserves (and often even then) is the coupling.
As for the couple million, that's for me :) But I guess if you factor in cost of supporting hardware/software/infrastructure, it's really past 5 million (maybe 10 million), just as an estimate.
To elaborate on my 'unconventional way', I'm talking about using all of:
- complete view of the source code,
- runtime behavior on the screen (even recorded with cameras, or even better, display debug hooks)
- runtime storage logging,
- runtime network logging,
- modern inference methods beyond parsing (semantic inference, logic programming, maybe even some statistical analysis).
- But most importantly, automation-first approach (no, we're not doing things by hand. 'The Machine TM' will do the work for us). E.g., I won't be reading the COBOL code line by line. The code, plus the runtime behavior, would be the input to the inference engine, the output would be 'explanations, documentation, etc'.
- and so on
It would be a very challenging project, hence the 5-10 year timeframe. But I'm not convinced it's intractable. And I'm not convinced the cost is in the billions.
For every 1 programmer working on a Cobol system who would and could rewrite it, there's another 3 who actively resist rewrites to keep their jobs and put bugs in the system to generate overtime-paying after-hours callouts. There's yet another 6 programmers who don't have the aptitude to program but who somehow managed to get into their job and are just productive enough to avoid being terminated. And perhaps they bring one of their kids to work for the day every now and then.
You don't get to do a Cobol rewrite single-handedly when there's 9 others on the team working against it happening.
But that also means the major roadblocks are sociopolitical and not technical (not saying technical challenge is not there, just that it's not the biggest issue).
I think (total speculation) that the root cause of failure in these projects is due to mismanagement and (maybe) the kinds of people who are pulled into the projects. To the latter point, it's really hard to attract great developer talent into such a project, same goes for medical systems and government contracting. There's better money, and way better work environments in other sectors. (Just my 2 cents.)
So much different than all my other CS classes, and gave insight into an important part of IT that isn't really taught anymore.
When I hear about the COBOL line count it always makes me think that someone should write a program that eats COBOL as input and spits out Java/C++/LangDuJour as output. Might make a good company. Mind you, it may already exist, or, be impossible because of some aspect of the COBOL language I don't understand.
Issue is that cobol often relies on intricacies of specific mainframes or cobol implementations so it's never quite that simple.
Also a lot of cobol directly interfaces with databases with side effects which makes it ever harder.
Root cause on something like this is problematic: management instituted a hard deadline despite signs of serious problems early on, and there seems to have been some monkey patching being applied to live systems as they try to get it working. But a big factor has got to be the huge problem of figuring out what all those old legacy systems actually do.
Some bad sidess * The language is old, in a bad way. Reading cobol learns you pretty fast why todays practices are better than the multi million spaghetti monster of the past. * IT practices are old. They havent yet embraced lower case. I trieds to tell one of them about UTF-8, but the whole idea that 1 char=1 byte might not be an universal truth was so far out she immediately rejected me as insane. * IT tooling is unique. These guys did CI/CD in the 80ies, but did it with a whole custom stack. They wrote their own source code control, and added an engine wih auto compiles checked in code, rejects code not according to the very strict rules, does some testing, and manages promotion from dev to test to preprod to prod. * The database consists of 12 files (we would call them tables). Each of them has exactly 1 index. You either do a full read or an indexed lookup. There are no more files left, they are used up. Quite a lot of nightly batches exist for looking up data not reachable by the index by doing a full read for each record. See it as a kind of manual join. * Security practices are old. There is no isolation, every application has full access to everything (There is 1 mainframe shared between user data, HR data, payment systems, ...) . If an application crashes, it dumps core. This is considered a feature, as the user can restart without much trouble. The idea that a dump might indicate some kind of exploitable problem is incomprehensible, so it is a continuous fight to keep these guys from connecting cobol straight to the internet.
But even if the technology side is horrible, they provide a lot of business value, especially compared to modern oracle/sap/tata/... 'enterprise class' applications: * The terminal application is quick, even if the learning curve is horrible. You just type as fast as you can. If cobol cant follow, you'll see a pause on the screen, but don't let that slow you down, the mainframe will catch up. * There is no sexism here. The male/female mix is approx 50/50. * These guys know their business. Every edge case of an edge case is known. Compare that with the enterprise applications, where every release proves within a week to be hopelessly unfit for business purposes. We have to throw millions at the new applications just to keep them limping along. * There is no hubris here. No Architect, no Consultants, no expensive management ideas. A recent migration from cobol to oracle OSB+gui actually required us to add 1/3 of personnel to account for the slowdown caused by people . Yeah we all saw it comming, those wo reported problems were not given raises until we got the message. But cobol culture is 'That can't be done', after which the Architects recoil in horror and let them be.
All in all, Im not sure if this post is an argumant for or against Cobol
It has caused me problems a couple of times, and I don't ever think I have needed anything outside of ASCII for source code, with the exception of entering some foreign names in to a database via a script.
I want UTF-8 in the database, not the source files. This is Europe, user data has accents aplenty.
This once ran on a real mainframe, but was then migrated. So it has the common subset of win1252 and some ebcdic variant, minus lowercase. No euro sign on the financial report anywhere ;-)
---
My company has plenty of Cobol. While I am not on their part of IT, I used to work together with them for integration. I left with very mixed feelings.
Some bad sides:
-The language is old, in a bad way. Reading cobol learns you pretty fast why todays practices are better than the multi million spaghetti monster of the past.
-IT practices are old. They haven't yet embraced lower case. I tried to tell one of them about UTF-8, but the whole idea that 1 char=1 byte might not be an universal truth was so far out she immediately rejected me as insane.
- IT tooling is unique. These guys did CI/CD in the 80ies, but did it with a whole custom stack. They wrote their own source code control, and added an engine with auto compiles checked in code, rejects code not according to the very strict rules, does some testing, and manages promotion from dev to test to preprod to prod.
- The database consists of 12 files (SQL would call them tables). Each of them has exactly 1 index. You either do a full read or an indexed lookup. There are no more files left, they are used up. Quite a lot of nightly batches exist for looking up data not reachable by the index by doing a full read for each record. See it as a kind of manual join.
- Security practices are old. There is no isolation, every application has full access to everything (There is 1 mainframe shared between user data, HR data, payment systems, ...) . If an application crashes, it dumps core. This is considered a feature, as the user can restart without much trouble. The idea that a dump might indicate some kind of exploitable problem is incomprehensible, so it is a continuous fight to keep these guys from connecting cobol straight to the internet.
But even if the technology side is horrible, they provide a lot of business value, especially compared to modern oracle/sap/tata/... 'enterprise class' applications:
- The terminal application is quick, even if the learning curve is horrible. You just type as fast as you can. If cobol cant follow, you'll see a pause on the screen, but don't let that slow you down, the mainframe will catch up.
- There is no sexism here. The male/female mix is approx 50/50.
- These guys know their business. Every edge case of an edge case is known. Compare that with the enterprise applications, where every release proves within a week to be hopelessly unfit for business purposes. We have to throw millions at some of the new applications just to keep them limping along.
- There is no hubris here. No Architect, no Consultants, no expensive management ideas. Compare that with a recent migration from cobol to oracle OSB+gui: It actually required us to add 1/3 of personnel to account for the slowdown caused by people having to fight the new-and-shiny application . Yeah we all saw it coming, those who reported problems were not given raises until we got the message. But cobol culture is 'That can't be done', after which the Architects recoil in horror and let them be.
All in all, Im not sure if this post is an argument for or against Cobol
Not complaining, just surprised: I thought that HN deduplicated within a few days or weeks.
I suspect that this says something about COBOL.
When judged by standards of the day COBOL wasn’t bad. It was one of the first examples of a high-level language. People’s experiences with it (and large undocumented spaghetti logic programs) helped inform the next generation of languages.
Later our (ongoing) experiences with the unsafety of C led to Java, C#, and D among others. Further reactions to those are Swift and Rust.
I’d argue we wouldn’t have any of those languages in the same form without COBOL.
Compared to LISP?
You can't compare the languages like that, they were created to fill very different roles, and both were very successful at what they did.
Cobol was first (or close to it) so it had to discover what “wrong” meant in the context of programming languages.
They had no way of knowing back then that having a programming language for non-programmers is a hard problem, close to impossible. Same goes for the natural language bit.
With the benefit of hindisght, yeah, we can make fun of it. It doesn’t make us right, though.
>They had no way of knowing back then that having a programming language for non-programmers is a hard problem, close to impossible
They had a very easy way of knowing this. Ask an actual non-programmer to write code. And do this during the design process.
>Cobol was first (or close to it) so it had to discover what “wrong” meant in the context of programming languages.
They had to discover that ignoring all of the existing computer science literature on language design would lead to poor language design? And that employing an untalented design team would lead to a poor spec? Sorry, but I don't buy it. I certainly don't see some grand lesson that anybody learned from it that we didn't already learn from the previous hundred years of research and design.