COBOL Leads Us Back to the Future (2015)
informationweek.com
informationweek.com
Not too long ago I overheard a conversation among a group of college-age artists chattering about the merits of silver-based vs. digital photography. Basically, in their eyes digital was old hat, the familiar way to make images while film photography was intriguing, exotic by comparison.
Of course as a genuine old guy I found their view amusing but refreshing. Having used film, and spending way too many hours in stuffy darkrooms I knew all about the subject. It was fun to talk a bit with a few of the students, but I understood they wouldn't hear it from me. No, they'll have to learn for themselves about the merits and tradeoffs of the old ways vs. the contemporary.
In programming as in all other arts, it's good once in a while to revisit the trails our forbears traversed. We should all travel there as part of an education, it gives us a greater appreciation of what we have now. And sometimes even us old hands will have the urge to revisit the dusty past, though likely choose not to linger there.
Once in a while we should touch ancestral ground, it's a worthy ritual to honor our ancient heritage, lest we forget how far we've come.
Revisiting ancestral ground in programming actually makes you think how little we've come, not how far.
Yeah. I really like the way you put this, and would add...
There are merits in the past ways of doing things. Here's a simple, non software related example:
Unfolding sheet metal parts. This basically is calculating the flat sheet shape needed to produce a bent part of the proper dimensions. Metal stretches when bent, meaning the flat shape is not a 1:1 representation of the 3D bent part.
Modern software does this with solid models. We make the part we want, and then the software produces a flat pattern for us. While this process is very simple, it does require one to have software, model in solids, and so forth...
What gets lost here is the actual dynamics of the metal.
Further, the analytic geometry methods go unused in most modern solutions, which actually makes unfolding more complex, organic shapes difficult and CPU intensive as they get broken down into polygons...
Don't get me wrong, much is gained too. Analysis, ability to work in context, and automation come with new methods. In the vast majority of use cases, these gains make the overall current path superior.
However, going back to analytic geometry and manual pencil and paper means to produce these parts allows for some extremely efficient workflows and it gives people the means to check their software work, debug problems, and in the case of just wanting to make something quickly, the ability to do so by hand with only basic tools.
The most interesting part about this transition for me, as I was there doing it old school and transitioned to new school, is the demand for the basic methods comes up time and time again, despite the software being capable. People just don't always know why, just what.
From time to time, I teach mechanical CAD design. When this topic comes up, I go to the white board and show them the classic methods and basically produce a complete part on a white board with no computer assist. Once they see the why, a whole lot of software use issues go away and trust / confidence in the tools goes way up.
For this particular discipline, it's not taught, but can be found in old books, or from manufacturing people who have learned it from others.
For most engineers, going through this grants them the ability to visualize the sheet, and or catch a lot of simple errors without having to employ verification software. "It just looks wrong" becomes part of their tool set, and we all know how valuable that basic intuition is.
The same can be said for most manufacturing techniques. Going back to the manual, hands on means and methods explains so much about what we do today, even though the methods themselves may not be viable in the context of modern automation and production.
We have come a long way indeed! And on a basic level, just experiencing that perspective is gratifying sometimes.
In a way, this verbosity of which he speaks is the antithesis to the current 'Learn to Code' fad. And COBOL is a perfect example of a language that was intended to be so easy and intuitive to read and write, business people could do it (as it was promoted in the early years). COBOL has sections, paragraphs, and sentences, verbs and variables are nouns. Control flow is either via goto or 'perform'ing paragraphs or sections.
Awesome in theory, for simple programs, the idea that anyone can write/read it may even be true. But the devil has always been in the details. Logic in the perform/goto world quickly spirals out of control/comprehension, and for any non trivial COBOL application, there are multitudes of programs, flat files, indexed files, etc.
Not to mention the complexity of batch cobol (if you haven't lived the horror of mainframe JCL, I envy you) and wiring together green screens in the CICS environment are all very involved, the definition of platform specific.
>>The first reason is employability. As noted, there are still plenty of companies running applications built on COBOL. And not all of those applications are archaic: Since 2002, COBOL has had an object-oriented framework.
And most of them have off shored most or all of their development. One prominent local employer of COBOL programmers has a skeleton crew of COBOL developers after once employing thousands. Additionally, I'd have to see some stats that anyone has upgraded to the 2002 standard to believe anyone is actually using object oriented COBOL in production.
Having said all that, COBOL was designed in a time of scarce resources and does make excellent use of system resources. COBOL is close to the metal in a way that C is not; COBOL is more like verbose assembler than C. In COBOL all storage is statically allocated (memory allocation is possible, but not typical), and there is no call stack. This mean COBOL programs never experience stack overflow exceptions, out of memory errors, buffer overflows. Characteristics that make it 'safe' from a security and multi tenancy perspective.
I can agree that there will still be COBOL in 50 years, but the impact becomes smaller every day.
Building a career is a thing of 25 years + 5-10 years of education. You can't build that around a technology that is dying already for a decade or two.
My employer actually still uses HP 3000 COBOL, even though the HP 3000 boxes are long gone. We now run on top of AMXW[1] and Ti2SQL[2] which are like mainframe emulator frameworks, so that we can execute 35 year-old COBOL code on UNIX hardware and a SQL database. No point in upgrading it to COBOL 2002. We're porting it to Java instead.
[1] http://www.freschelegacy.com/en/data-sheets/amxw-one-stop-so... [2] http://www.ordat.com/en/solutions/tisql/
Disclaimer: I worked for a company in the early 90s that made products to port (System/36 & AS/400) RPG + OCL to unix (and a few other) systems. We used C, rather than Java, as the target for cross compiling, but same sorts of ideas.
I'm always looking out for an implementation of language X on iOS, and COBOL is not what I expected to materialise there :) Still, it might be fun to play around with — you can never know too much and I'm curious as to how compiler output looks like (though I probably won't see that on iOS).
As someone whose first job out of uni almost 20 years ago was in a mainframe environment, I have no desire whatsoever to go back to it and would strongly recommend against working in COBOL if you can make a living using tech that was developed in the last 40 years.
I don't think there is an advantage in general - the mean salary is probably going to be lower compared to enterprise Java, just the tails on the COBOL jobs can be lucrative. I don't think it is particularly satisfying intellectually, but that might be my bias (I don't enjoy digging through reams of code to try to figure out how to glue things together - it is a challenge).
I did my time on big iron and JCL - Do. Not. Want. Of course, these days a human is probably not walking your stack of tapes to the tape readers so you can find out you have something misconfigured .... Sometimes I'd get 2, maybe three runs a a day if the operator was really spritely!