Posted
by
timothyon Tuesday June 25, 2013 @01:18PM
from the enjoy-your-tab-diet-beverage-too dept.

jfruh writes "COBOL, it's finally becoming clear, isn't going away any time soon; there are far too many business-criticial applications written in it that work perfectly well for that to happen. This reality could be a career boon for IT staff. Need to learn the ins and outs of COBOL? Your employer may well pay for your training. Just getting started in IT? COBOL can provide a niche that gets you a first job."

OpenCOBOL translates COBOL into C and compiles the translated code using the native C compiler. You can build your COBOL programs on various platforms, including Unix/Linux, Mac OS X, and Microsoft Windows.

COBOL, which is compiled, doesn't need another language to run. It does, in many implementations, require a run-time library to supply common functions which are called by the compiled code - for example, the DISPLAY verb may be implemented as a common subroutine. On IBM mainframes, the run-time library support for many languages is provided by the Language Environment product.

If you mean solving business-related information technology problems in a concise and maintainable way, I think you're very, very wrong. COBOL is a horrible, wordy language. If you mean wearing out developer's keyboards, you are more correct. COBOL is too verbose to be easily legible. I'm of the opinion that there is an ideal level of information density when it comes to conveying the intent of a piece of software. At one end is assembly, and at the other is COBOL. neither are good. C approaches it from one end and probably something like Python from the other. Both are for more usable, maintable, and flexible languages.

I'm of the opinion that if you enjoy writing code in COBOL you either haven't used anything else or you're a masochist.

I will also add that the reason it's so hard to get rid of is that most software written in COBOl tends to be a tangled mess that can't be easily split up and decoubled, replacing parts with more modern, usable languages. It tends to be an all or nothing venture. It has very little, if anything to do with it being the best language for the job.

It didn't have to be that way. When I was still in school a millennium ago and took my one and only COBOL course, I recall devising a pseudo-structured way of using the language that the instructor had never seen before, yet my code was no less capable than the more typical approach(es). It obviously caught him quite by surprise by his reaction, which I've never forgotten (I've forgotten every detail about my technique). Perhaps it made my code more modular and maintainable.

You are spot on. If the creators of the Internet knew what it would grow into, they would have designed it differently. Consider the debates and frustration surrounding HTML5 or IPv6. Sometimes you have to declare you have done your best and release it, and then adapt as you learn.

The determined Real Programmer can write FORTRAN programs in any language. The determined idiot can make unmaintainable spaghetti in any language. If people can make maintainable assembly code (and for embedded applications, good embedded programmers *do* write maintainable assembly), then a good COBOL programmer can write maintainable and comprehensible COBOL programs. Things like variable naming and jump/goto/label naming discipline are a pain in the ass when you've grown up with C and Java-style scoping

You don't have to do this. There are modern structured constructs in COBOL. The problem though is that if the program you are working with wasn't written using them then you have to deal with the mess. And there are a lot of COBOL programs written using GOTOs and the like.

These problems exist in every language, but they tend to be more common in COBOL and Fortran because those are some of the oldest languages around. Thus you have to deal with decades old code that still has to work; plus the programmer

With COBOL you can change the destination of a GO TO on the fly. Some call this self modifying code, but it's more similar perhaps to Fortran's computed GOTO. So you can really get some convoluted spaghetti code this way, much more than if you just had a simple GO TO. Especially if when the program was written in older dialects.

You can also do perfectly structured programming using GOTO instead of for and while loops - because for and while loops are effectively just macros around GOTO.

I did assembly programming for 5 years, and the programs I wrote were arguably more clearly structured than what I've written since, as without the language helping you it paid to be obsessive about it.

It has very little, if anything to do with it being the best language for the job.

That depends on what "the job" is. If the job is to implement a completely new, problem-free and infinitely maintainable system for managing financial transactions with no budget or time constraints, then the answer is "No". Actually, it's a much longer answer that starts with "HELL NO" and includes phrases like "If I ever catch", "Then I'm going to" and "With a frikkin' caber, that's what", but the general sense of it is "No".

If the job is to keep the horrific monstrosity which runs the entire bank lumbering along for another few months while still complying with the latest round of new regulations before it drives you irredeemably mad then the absolute best language for the job is COBOL, because that's what code-thulhu is already written in.

And of course languages like Javascript, Ruby, PHP, and so on don't make tangled messes? Lest we forget Objective C or even C++. The only languages that I would think where most people would agree to that are "clean" would be C#, Java, and Smalltalk. I don't want to get into the functional paradigm because it is not IMO a tangled mess if you understand the paradigm.

Anyhoo, if messes were the basis of whether or not to adopt programming languages we would not be writing any programs. Ever try to figure out WTF a Java Spring or Java EE app is? Its a bleeding mess!

The thing is that Cobol applications work! Yes they work, and they perform oodles of calculations without having to do anything major. Let's not forget that at the end of the day most things don't change that much. Thus why rewrite? And the answer, "oh but this is a new shiny toy" does not count.

Admiral Grace was very aware of the current available technologies, and their direction. I think that if you had ever talked with Admiral Grace, you would have found her insight to be very compelling; but I speak from personal experience.

Most software written in COBOl tends to be a tangled mess that can't be easily split up and decoubled.

More modern languages have done little, if anything, to reduce a programmer's ability to create a confused mess. Goto may be gone, but inheritance has tremendous power for cryptic obfuscation, and I have seen way too many cases where a programmer has used this capability to the hilt. Perhaps most frustrating are the cases where a rewrite has ended up no better than the original.

If you mean solving business-related information technology problems in a concise and maintainable way, I think you're very, very wrong. COBOL is a horrible, wordy language. If you mean wearing out developer's keyboards, you are more correct. COBOL is too verbose to be easily legible. I'm of the opinion that there is an ideal level of information density when it comes to conveying the intent of a piece of software. At one end is assembly, and at the other is COBOL. neither are good. C approaches it from one end and probably something like Python from the other. Both are for more usable, maintable, and flexible languages.

I'm of the opinion that if you enjoy writing code in COBOL you either haven't used anything else or you're a masochist.

COBOL is a domain specific language. You're a masochist and a fucking idiot if you use COBOL to design an operating system, or a control system for a nuclear plant. COBOL is designed from the start for business applications. And that's what it's good at. The syntax is what it is, but 100 times better to design business programs in COBOL than in fucking JAVA. There's a reason why languages come and go but FORTRAN and COBOL are still there. Think about it.

COBOL was breated not to be the perfect language for business, but to be a language that was easy enough for an average 'business-person' that was not a programmer, to write programs. The end result unfortunately was that lots of average 'business-people' wrote software. In general, it ended up being a tangled mess that is still (barely) running many years later and few know how to maintain or replace it. Be careful what you wish for,

I think you have confused the term "domain specific language" with something else. And besides, what's generally considered as a nice language is that it's easy to extend it (using the language itself) so that you can USE it as a DSL. Not so much for COBOL.

Today, it would probably make more sense to use a modern lisp dialect to write business applications, at least from the DSL point of view, andits an even older language.

Whats keeping Fuckin' COBOL alive is the fact that it's running in a well define

Being verbose is often considered bad, yet languages like VHDL and Ada do it as well. The latter two combine it with a very strict syntax. As a result Ada and VHDL code that compiles/synthesizes has a larger chance of working on the first attempt. More keystrokes isn't exactly a problem. I'm not sure about you but my typing speed isn't the limiting factor in writing programs. The days of planning, flow diagrams, etc. are.

COBOL has some features rarely seen elsewhere, except in libraries. A wide variety of data types including built-in fix point and decimal for example. It is also relatively simple, there's no way to do fancy tricks with it like with C, you won't have complex data structures, what you see is what you get and that helps maintenance. Now maybe there are better business oriented languages but they just aren't that popular or portable.

Of course it has bad stuff too. Like Fortran it only added structured prog

No, it isn't. Your ignorance is showing. Decimal types mean you have decimal data. So you can have two records with EBCDIC/ASCII decimal fields in them, read those records in (without doing ANY parsing or translation of the records, add two fields together and write the results. Excluding the actual IO operation, that can be done in only 7 instructions (PACK, OI (to set the sign) for both operands, ADD PACKED, UNPACK, OI). Note that the compiler is using DECIMAL instructions to do that.

Ada is wordy, but for the few months I tackled it I found it powerful, intuitive and very readable. I looked at Cobol source code for sheer kicks and got cold sweat worse than any horror film or girlfriend saying "I'm late".

Programs should be readable and understandable by humans. In the end it's humans that maintain software, not the computer. Computers only have to execute code, but we, we have to read code. So a verbose language that conveys all the information explicitely is much better than C or C++ where you're almost constrained to obfuscate by default. That's the nature of those languages. So yes in an e-peen contest, C or C++ may win over COBOL; but start maintaining large software and clarity is paramount. C or C++ p

Verbosity isn't better for humans. Humans can only retain and manipulate fairly short lists which means the number of things in any block of information has to be small. The more things the more levels need to be in the hierarchy.

Look at human languages. The density of Perl came from just starting to import even some of the density features of human language into computer languages. So no. If computer languages were more like human like them to be they would:

Yes, COBOL is wordy, but for the most part you can accomplish the same thing in the same number of lines. Unless of course you write C or C++ where you are packing as much as you can into a line. Yes, I wish I could do "running_total =+ current_val" instead of "compute running-total = running-total + current-val", or do "last_val = current_val" instead of "move current-val to last-val". My real issue being 'verbose' is when it causes extra lines, which makes logic harder to follow.

Sure, and like the article says, learning COBOL might get you a first job. But someone hiring for a Java position might be as likely to take a new college grad who has education in Java over an experienced COBOL programmer, since the worlds are quite different.

I think the logic holds up as long as COBOL holds up, and as long as you continue to educate yourself and keep yourself relevant.

Record (file) handling. To process a record-composed file in C you have to write a lot of boilerplate code (just parsing the records into its components and re-creating the records by parts) requires probably to write a specific function to do that. In COBOL you just declare the structure mapping the physical record and you are done.

By the way, the languge has all the control structures needed to write decent code since COBOL-81. Before that (COBOL-74) it was a really ugly mess, but the modern COBOL (yes, i

People don't do that because it is stupid. C makes NO GUARANTEES about the layout of structures. If you only have one compiler, and are not sharing your data with any other system you might get away with it.

But then you need to get rid of all politicians, federal, state, county, and city. Because those guys tend to change the rules all the time so that the code needs to be continually maintained. Maybe fire the bosses also, because they keep changing rules or wanting the program to do something new.

COBOL is one of the few languages that is completely standardized. IO, formatting, everything works the same EVERYWHERE. Certainly, the column nature of coding in the language is annoying, but not much more than BASIC was with it's numbering scheme. As far as the programs that chug through industrial-sized databases go few touch as many records as COBOL does.

COBOL is one of the few languages that is completely standardized. IO, formatting, everything works the same EVERYWHERE. Certainly, the column nature of coding in the language is annoying, but not much more than BASIC was with it's numbering scheme. As far as the programs that chug through industrial-sized databases go few touch as many records as COBOL does.

This comment was found in a time-capsule we buried 35 years ago in 1978, along with a six-pack of Shlitz.

Sad to say, the beer had gone kinda skunky, but I think the comment is still good, isn't it?

Procedural languages are OK for > 90% of needs. You don't really need an OO language nor a fancy framework to read a sequential file and summarize its records to generate a payroll... Oh, and the fixed-column format is optional in the modern COBOL compilers.

COBOL is one of the few languages that is completely standardized. IO, formatting, everything works the same EVERYWHERE.

Hahahahaha!!!! No way. I work in a COBOL conversion shop (simple explanation, anyways) and I've worked with COBOL on several types of machines, and not even all the A series machines act the same with the same code. You would not believe the crazy, undocumented crap that programmers use to make their programs work.

Sure, the basic "COBOL" language is mostly standardized (once you pick your variant) but real life implementations are not coded that way and everyone manages to find the little things that make

not a lot of fun to program in. It's wordy, it's procedural...generally kind of boring. But...it's imbedded in so many mission critical systems. The ERP system that I work on is chock full of COBOL stuff, mainly in the Payroll processing modules. It works, it's really fast, and nobody wants to mess with it. Sure, you could rewrite it in Java or some other language but it represents risk that many companies are not willing to take.

COBOL programmers are in big demand now and it's only going to grow. I'm not sure how many schools still teach COBOL but I suspect it's not many. So if you can put up with having a little less glamorous coding to do it's a great job opportunity.

I feel that COBOL is the exact opposite of Perl. People call Perl a write-only language because you can write code in it that is really, really hard to read and understand. Meanwhile, statements like

MULTIPLY X BY Y GIVING RESULT

are easy to read and understand exactly what is happening, but I'll be damned if I can ever remember to write that twisted bit of English without looking it up in a reference (and I use this statement as an example every time I make this point about COBOL). For me, COBOL's att

COBOL stands for COmmon Business Oriented Language. It's syntax was suppose to be English readable to allow bean counters, actuaries, businessmen, etc to read, write, or at least understand what it was doing using terminology that they would use.

My dad programmed COBOL from the early 70's until he retired. He always came back to this point. You get an auditor comes in and wants to really know what your program is doing, he'd actually look at the listing. He wasn't a programmer, he was an accountant, an auditor. He could follow what you were doing without feeling like you were pulling the wool over his eyes. And if you don't think keeping an auditor happy is important, you haven't been audited.

My dad programmed COBOL from the early 70's until he retired. He always came back to this point. You get an auditor comes in and wants to really know what your program is doing, he'd actually look at the listing. He wasn't a programmer, he was an accountant, an auditor. He could follow what you were doing without feeling like you were pulling the wool over his eyes. And if you don't think keeping an auditor happy is important, you haven't been audited.

One of the reasons so much IT outsourcing in mainframe shops is happening is because new workers have little exposure to the mainframe culture. I work in an industry highly dependent on mainframes, but not directly with the technology. However, I do see the fundamental difference between mainframe systems work and Linux/Windows on Intel systems work. For someone who doesn't "get it," mainframes look completely inflexible and definitely a legacy technology. When you're talking about a system that still has r

Whole departments exists, inside or outside companies, just to run sql servers, web servers, java application servers, virtual windows machines, etc etc, that's used just for developing and testing, and to get something done with them, like restoring a database backup from before your script messed it up, you need to file a "work order" and hopefully, some dude, possibly in another country, would find the time, within a couple of days, to restore it for you, because, you know, it's *clearly* cos

It's hard to find anyone thats faster than a bunch of old COBOL geezers to rattle out untested code - or rather code that's not been even run even once - into production systems. But I guess they use changeman to do it, so they do at least know *what* code that's currently is running.

I've got a pile of various degrees, none in CS, yet I keep ending up coding shit for a living. None of it is all that great - I'm a massive generalist and not a programmer. It's tempting to just get a good intro to COBOL and then dive into it for a career. It's one of those languages that doesn't change much and isn't about to get replaced with the newest and greatest.

After half of my career switching jobs every 3-4 years, I'm thinking about settling down. Compared to what I've had to code so far in life, C

COBOL is plainly superior... from an evolutionary standpoint. It propagated and survived. Nevermind that it feeds on the souls of developers. That's irrelevant. Evolution only cares about propagation and survival.

At my work we're just starting a multimillion dollar project, mostly in COBOL, on a mainframe. And I'm not talking about modifying old code, we're developing a new system. So we'll need about 30 new COBOL programmers very soon. It's far from dead!

MOVE CORRESPONDING. Try doing that right in any other language. Try figuring out where each different C compiler put your bits and bytes, and what size it made your integers, and what other random changes it made with alignment and ordering. I cannot believe that anyone on/. honestly loves a language that defines which of its behavior is undefined and unpredictable.

You can write both garbage and poetry in any language. Cobol at least *tried* to make some things clear.

In the late 90's COBOL consultants were paid big bucks to fix the Y2K (non) problem. Now they get good money for replacing all of the retiring baby boomers. And since nobody in India seems to know the language (and there's zero interest in universities teaching it), I think job security would be excellent. It's a great niche to fill.