Why COBOL Could Come Back
snydeq writes "Sure 'legacy systems archaeologist' ranks as one of the 7 dirtiest jobs in IT, but COBOL skills might see a scant revival in the wake of California's high-profile pay-cut debacle. After all, as Fatal Exception's Neil McAllister points out, new code may in fact be more expensive than old code. According to an IDC survey, code complexity is on the rise. And it's not the applications that are growing more complex, but the technologies themselves. 'Multicore processing, SOA, and Web 2.0 all contribute to rising software development costs,' which include $5 million to $22 million spent on fixing defects per company per year. Do the math, and California's proposed $177 million nine-year modernization project cost will double, McAllister writes. Perhaps numbers like those won't deter modernization efforts, but the estimated 90,000 coders still versed in COBOL may find themselves in high demand teaching new dogs old tricks."
Yeah, baby!!!
Just hoard all the money for yourself!
Got that? So if California goes ahead and builds a new payroll system, within nine years -- about as much time as it has taken to get the 21st Century Project off the ground -- the cost of fixing bugs in the new code could exceed the original cost of the project.
If software is implemented correctly, it will stand the test of time.
The fact that there seems to be some hard-coded values or formulas throughout this code is a fair indication that this COBOL architecture did not have the foresight of someone ever changing minimum wage. Where I grew up, minimum wage changed yearly as it was usually necessary to adjust for inflation. Now, if this is an indication of the rest of that software, I would opt for a newer technology. On top of that, I would go to the lead system engineer with a hand written note reading:
The software shall have a management interface for changing minimum wage and cascading that change correctly through all aspects of the software and other machines.
I'll bet this software isn't modularized. I'll bet this software has some pretty low security standards. I'll bet this software requires a client app installed on any user's machine.
Pull your head out of your ass, "dollar amount one
If you're short on funds, you're short on funds but if you're saying it's cheaper I would like to see your pricing chart for usability, stability, maintainability, etc.
Why COBOL Could Come Back
I think there will always be a niche market for every language but if you mean 'come back' like COBOL would become the average developer's language of choice I would curtly retort with a sharp 'ha.'
My work here is dung.
I though SOA and web 2.0 stuff is supposed to save money?
Why do people think it's so hard for a new person to learn COBOL? It's not exactly like learning Japanese: find a good reference book, write a few practice programs, and voila.
I personally haven't needed to learn COBOL, but I see no reason why that strategy I just described, which has worked for me with every programming language I've ever learned, can't be applied here.
I hate COBOL. Was forced to take a class in college and they told us it'd be easy to get a job if we took the advanced course. Who the fuck wants to work on 60s tech? I took C instead and am much happier for it.
"...and you had better deliver. Or no amount of clapping will bring you back from where I will send you."
You COBOL devs have 3 years!
I learned COBOL in college 20 years ago. I hated it and immediately knew COBOL, TSO, JCL, CICS was not for me. The user was shielded from the complexities of the system, whereas Unix and 'C'... everything was there to learn and discover. No 2-inch IBM manuals to sift through.
Now I work at a place w/ the dinosaur and DB2/COBOL on the backend and I am forced to fix the crap COBOL code written by folks who are long retired. And it sucks... big time. And why these 50-something COBOL programmers think they are hot stuff is beyond me. COBOL is EASY compared to C/C++ or even Java/C#.
The sooner the dinosaur is extinct... the better.
I've wonder why I've seen so few reports of massve database leaks from Federal and State financial systems compared to industry. My guess is there are few hckers conversant in COBOL, OS-360 and nine-track tapes. One of the rare bright spots in this mess.
I took a COBOL course at university in the very late 70s, passed, never touched it again. Then bought a book a few years ago from the bargain book, read through it, and the language is just absurd. Ok, it would have been hard to design something better in the 50s when it was created, but it is just horrible. If we really want a cheap, simple language to do bog standard things without all that newfangled stuff, then the dBase language would be ten times better. And dBase on todays hardware would just _fly_.
What COBOL really needs is a hip new framework to make it "cool", just like Ruby!
I propose COBOL on Rails. Any takers?
Mod troll if you wish. :-)
FTA:
find me a college that teaches it
What kind of college class would teach COBOL except as a historical curiosity in passing? Their job is to teach kids how to design good software and understand theory. You know, with local variables, objects, exceptions, assertions, and stuff?
COBOL used to target 'business systems'. I'm sure there are several superlative programmers doing COBOL work, still, but business systems programmers tend to be the largest area under the curve, and that's not a problem. The Ruby and Python guys can sit several sigmas out arguing about which provides the better lambda calculus, but meanwhile Java is providing most of the features 'average' programmers need.
If there's a lesson to be learned from the article it's that business systems software isn't ever 'done'. You need to be continually modernizing, with good methodologies, or you're gonna get stuck like Cal-e-forni-a one day. That's either a problem or an opportunity, depending on your perspective, but this isn't an industry standing still.
My God, it's Full of Source!
OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
Honestly if WEB2.0 makes websites more expensive, where does it require that a website MUST HAVE web2.0 crap on it?
Honestly I find that most customers despise all the junk that comes with web2.0 and do not want it, let alone pay for it.
Same for everything else, making it more "complex" is by desire not by necessity. California's problem is because of a lack of programmer on staff and the fact the request is a wierd one as far as a payroll system is concerned. you do NOT normally cut people's wages for a temporary time while tracking the wages cut and then paying them back after the fact. What they want is complex but they dont want to pay for it.
Do not look at laser with remaining good eye.
Does this make sense? As a HW person, I dont have a clue, but I would be curious to know what the conventional wisdom is here. Should this stuff be used in an obsolete language, using code constructs that were dictated by HW limitations (Y2K and 2 digit nonsnense) OR Should this be done in something that is HW independent (Java - if I can show my ignorance here) or something like C++?
Teach me here folks!
www.effectiveelectrons.com "chips that work" Analog, RF, Mixed Signal
Pull your head out of your ass, "dollar amount one < dollar amount two" is not always the cut and dried determining factor here. I would wager that most of the time the new software is more expensive than fixing the bugs of the old software but you're getting so much more than that if you do this right.
COBOL could easily make a comeback, because it's so damn easy to learn. I could train a cuttlefish to write a complex accounts program in COBOL. Heck, I bet even Mike Huckabee could probably manage to work out "Hello World".
Perhaps the reason it may come back is because of the complexity of modern languages. Most OOP variants are horrifically difficult to understand, and a return to the statement-based languages of yesteryear might actually be a good thing: let the coder get on with writing his code, and let the interface builder do all the fancy OO stuff.
Those using pirated Tinysoft signatures(TM) are a real threat to society and should all be thrown in jail.
There are 50 states and they must have pretty much similar payroll requirements.
Why is CA not able to make small changes to its payroll procedures so that they match the closest practices of one of the other 49 states and then just buy the system from another state.
Nullius in verba
I learned COBOL way back when (1984 to be precise, then used it for a few years and it eventually rotted out of my brain). I was thinking of coming out of COBOL Retirement back when I heard what huge demand Y2K was putting on the lack of COBOL knowledge. What happened to the Y2K COBOL team -- did they help the state of CA then? I'm guessing if CA didn't find a replacement in 10 years (which is not-so-suspiciously just before everyone starting fretting over Y2K), I don't really see it happening now, or I'd dig out my old COBOL disks, dirty up my resume (re)writing a few more COBOL programs, send out a resume, and move to sunny CA and $clean $up -- but anyone whose been a contractor has already thought like this.
âoeThe wall between art and engineering exists only in our minds.â -- Theo Jansen
All this talk of "skills" is bogus. Anybody who's a halfway decent programmer can be up and running with any language in under a week.
Seriously. Computer programming is computer programming. There are a few different philosophies for how to write code, but beyond that all the rest is syntax.
I think many people missed the point of the California problem. It wasn't limited to lowering everyone's earnings to minimum wage. The main problem was that after the budget was approved, everyone's wages needed to be adjusted again AND those people need to have back wages paid for the period that they we being paid less. That's a complex problem that most programs, even modern ones, probably are not designed to consider.
do you think he might be exaggerating some so that the pay cuts would not be implemented?
And think about it, they must have a way to reduce pay so that can't be the problem. What is probably the issue is that there is probably nothing in place to keep track of the back pay these people would get after a budget was finally passed.
It surprises me I've not seen this tie in the press between the guy saying the software is too old and the same guy saying he would not reduce the pay. Ya think maybe he's looking for a legal way to not reduce the pay?
LoB
"Anyone who stands out in the middle of a road looks like roadkill to me." --Linus
Object-Oriented COBOL, Visual COBOL, JAVA-BOL, COBOL++ . . . Functional software subordinated to the elaborations of the programming class!
California! Prepare to warmly welcome your programming overlords!
Good news: There's a job for someone with legacy COBOL skills because the State of California needs someone to update their payroll software to pay their workers minimum wage.
Bad news: The gig pays minimum age.
One CPU cycle wasted on digital restrictions management is ONE TOO MANY.
What I thought was the most amusing was an article I was reading yesterday on this, where bigwig in question stated they had spent $_hugeAmount of dollars to determine that it just couldn't be done. That it was "impossible" to make the system behave in the ways that they wanted it to behave. The whole thing is much more political than technological, anyway. A big pissing match in government.
Anyway, COBOL wasn't so bad when I had to learn it. FORTRASH was more fun, though.
Hey, we seem to have more gorillas than COBOL programmers: http://news.bbc.co.uk/1/hi/sci/tech/7544967.stm. I'm not exactly sure what that means.
But endangered species seem to get sponsored forced breeding programs.
I don't want to visualize that for COBOL programmers.
Schroedinger's Brexit: The UK is both in and out of the EU at the same time!
COBOL raises taxes...
One thing about the mainframe coding mentality was that compilation time was expensive, processing time was expensive, and sophisticated debuggers didn't exist (and it's expensive to print 500+ page core dumps on fanfold paper). So programmers tended to do much more up-front design so that the first effort tended to be much higher quality.
Or, as I saw on someone's whiteboard once, "It's easier to teach a COBOL programmer C than to teach a C programmer discipline".
Subscribers can see articles in the future? So what? Everyone gets to see them in the future.
Keep IT Simple Stupid.
No, not it, IT.
Keep Info Technology Simple. We tend to want to add in all the bells and whistles we "want" but don't "need" because we can.
When I build a system from scratch, it is fast, clean efficient. It has everything one of the user "needs" to do their job. It is fast, efficient and clean. And it doesn't have problems if they keep it that way.
But they start adding in all the add-ons, upgrades, multiple versions of the same basic tools. Google, Yahoo, Myspace, Coupon cutter, Weatherbug, Ding (SW Airlines) etc ....
Then they start to complain about how "slow" and "Buggy" the computer is. All those bells and whistles do nothing but distract the user from doing what he OUGHT to be doing.
I see this within applications as well too. Feature creep is a real problem, as is trying to over simplify the front end, at the expense of the back end.
Take a look at the comparison of Vista and XP, there is NOTHING in Vista that is really "needed", but it is a bloated mess when compared to XP. why?
They don't want to KISS, they want "fancy", and fancy breaks, and is more expensive to fix when it does.
Agent K: A *person* is smart. People are dumb, stupid, panicky animals, and you know it.
I don't care how complicated the rules are for paying California employees or how many people there are. Raises, seniority, pensions, CalPERS, bonues, whatever. That they take 9 years and nearly $200 million and still not be able to build a new payroll system to replace the old one is astounding. Everyone involved should be shot and the contractors taken to court.
Where I live, COBOL is used everywhere. I'm 33 years old and I use it on a daily basis and have been since I graduated from college 10 years ago.
.NET, and compared to them, working on COBOL is like taking a day off. It's top-down design makes it easy to read and follow, and as long as you aren't dealing with "go to" code, it's no harder than anything else out there.
Companies like Wal Mart, ACXIOM, and large transportation companies such as JB Hunt, ABF, USA Truck, Wingfoot Commercial Tire, and Data-Tronics use it day-in and day-out.
However, unlike the COBOL I always read about here on Slashdot, the code we work with is standardized, modularized, and backed with a relational database (IBM DB2).
I also happen to work in more modern languages (compared to COBOL) such as PHP, ASP, and
Don't disregard a language simply because it's old, or because you don't have a fancy IDE to rely upon. Compared to some of the messy AJAX implementations I've seen, I'd take COBOL any day.
Yes the technologies have become more complicated, but using COBOL for new development won't change that. Just because standard procedural COBOL can't (easily) particpate in an SOA enterprise doesn't mean we don't WANT the application to be part of the SOA. So we usually wrap the COBOL in Java, or convert it to a COBOL object (yes, there are such things). You could leave the app out of the SOA and do a lot of ugly EDI (or more likely swivel-chair interfacing), but that only means you've made thing simpler by making them less useful.
So leave procedural COBOL exactly where it is today - the legacy that we have to keep running but that we also should be working to replace.
Now OO COBOL is another matter. If building new functionality (including writing new programs) in a large legacy COBOL system then IMHO using OO Cobol can make sense. If you want to use OO technology and you are bound to a legacy system then OO COBOL is easy, whereas calling a Java object can be a PITA (the native data types just don't match up, Exceptions work differently, even simple objects like String can't be passed, COBOL is not strongly-typed, garbage collection works differently, etc etc. The list goes on and on).
It's the way that we're expected to code. I'll give an example of what I mean. I first learned a bit about using SOAP via SOAP::Lite in Perl. Setting up a CGI script to run web services in Perl is so easy that I have to pinch myself to realize that, yes, Virginia, I really am using Perl and not Python or Ruby when using that package. My day job is Java-related, so I tried Axis2, which seems to be the popular way to do SOAP with Java.
Like all things Java Enterprise Edition, it required at least a dozen steps to replicate a few in another language. XML files everywhere, deploy it here, now put this file here, now that file there. Start this, do that.
WHY DOES IT HAVE TO BE THIS FUCKING COMPLICATED TO GET ANYTHING DONE IN JAVA OR .NET?!
Oh, right, because we need a server that costs 10s of thousands of dollars to run something that a free copy of Apache would run in half a dozen scripting languages that are tried and true. Besides, as a condescending executive told me in college during a business presentation, no one uses PHP, Perl, etc. anymore. It's all enterprise shit with hellaciously expensive servers and support packages.
You just noticed that California is not like the rest of the country!
HAHAHahhahahHAHAHaha!
LOL! That's a good one!
Good judgement comes from experience, and experience comes from bad judgement.
- W. Wriston, former Citibank CEO
*And it's not the applications that are growing more complex, but the technologies themselves.*
In my experience this is not true. Every year customers want to collect more and more data and have it analyzed in more complex ways. They also, want to interface with more and more systems.
If software is implemented correctly, it will stand the test of time.
Sturgeon's [Ll]aw applies to software -- except probably with the 90% figure adjusted upward as some function of Moore's law and the observations of Fred Brooks, of Mythical Man-Month fame.
IMHO, after a couple decades of accretion of existing software systems, poorly implemented and even designed software systems are production reality today. If you don't take this into account, you're dealing with an ideal that will statistically exist only 10% or less of the time, and when it does, only when rigorous administration and maintenance is continuously applied to the software.
Crappy Old Bad Obsolete Language
mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
Multicore processing, SOA, and Web 2.0 all contribute to rising software development costs
My experience is that new technologies are letting me produce more complex stuff in a fraction of the time I used to create simpler programs. Maybe I'm just getting better at coding, but my take is that development costs are going down.
Maybe they just want so many new features that technology advances can't keep up with all those requirements.
Like what? COBOL on Rails? Because awesome.
blog |
Eventually the COBOL systems will be replaced simply because they run on computers that aren't compatible with today's designs. Hardware like transistors, capacitors, and resistors all break down chemically over time. When that happens it not a simple matter or taking the code and running it on a different machine.
Programmer-Archaeologist.
"It doesn't cost enough, and it makes too much sense."
I hate Cobol. But I will say that it could be a decent language with some revamping. Things that make it a nightmare:
All variables are global
No parameter passing to functions
The PERFORM keyword is way overloaded
Can't put comments on the same line as code
A for loop looks like this:
PERFORM VARYING X FROM 1 BY 1 UNTIL X = 10
CODE HERE
END-PERFORM
Coder's Stone: The programming language quick ref for iPad
I'm having problems following the money on this article. Does an article that says COBOL may not be so bad really attract a lot of eyeballs for ads?
I say this because the article is bullshit on a tortilla. They talk about how much bugs cost and how many people found, but how does that truly compare to 10, 20 even 30 years ago? They had a source, why didn't they put that in?
No software is perfect. I'm even willing to agree that complexity has increased while quality has decreased, but by how much? The problem is you can't make these assertions without proper comparative facts, including adjustments for inflation.
Finally, COBOL is COBOL. Programs designed in COBOL are, on average, less complex than today's programs. They require more resources to develop, which means more manpower or more time. Also can COBOL be integrated with a front end website? Generate PDFs on demand? Perform EDI? Have sophisticated tools to make integration with newer languages and systems easier? Can you build it as an app on top of a relational or OO database?
COBOL was sufficient for it's time to do what it needed to do. It may be sufficient for many processes now. But COBOL isn't going to magically come back and everyone's going to start creating sophisticated ERPs from scratch with it. It's just another tool.
"All great wisdom is contained in .signature files"
All this will happen again.
Utilizing the synergization of benchmark e-solutions to pre-workaround action items!
yeah, as a software archeologist myself, i can testify that old systems still need maintenance: new laws, changes in organization, new products,... that means that those old systems all need continuous 'fine-tuning' - no administrative program really is 'complete'; to make matters worse: those systems get more and more complex. While a complete rewrite could save money in the long run, in the short term this would be very costly.
Yes, I'm left. You have a problem with that?
COBOL allows one to produce unmaintainable "spaghetti" code quickly and on a whim - or tight deadlindes - or deadhead despotic management overseers - or....
Then, when the next Yr2K or serious paradigm/technology shift arrives - and the code pool has to be rewhacked to include graphic screens, internet, InterOrbital RFID NeurAINet or whatever, etc.
"Industry" will wail and moan, wring their hands, and cast dire forecasts. And gobble up atrocious consultation fees partly paid by governmental incentives dished out in a panic to avoid impending shareholder-doom.
More modern coding bases, object more readily to simple, old fashioned, "bad" code. Management in general too stupid and harried to administer good coding (including foresight and planning for exceptions and updates) gets what it "motivates" for.
And coding-automation seems to be the sensible direction. Plus collaborative validation. That's usually too much trouble for whatever executive-ishy modism harried underlings are supposed to be whipped into producing constantly revised contradictory results for.
I hope that bringing back a heavily-patchworked bad-code engine - because admin can't produce, verify or manage decent code - is really just the silly joke it really should be.
Oh the dilemna of mod points....
IBM still makes brand spanking new Big Irons. But they're not quite as big as they used to be. And they do more. And they also do stuff like run Linux.
Please go educate yourself before you look like a bigger moron.
e to the i pi equals negative one
All of my programming lecturers are versed in COBAL (among other things). Hell, one of them even wrote software for banks back in the day...
The IRS was cranking out its first stimulus checks within two months of being ordered to. They claimed they could do it a little faster, but were waiting for the April 15 filings to improve their address database. (The tax-address database is 95% accurate at the end of April, but decays to 85% accuracy by the beginning of April because Americals move often.) There were some snafus as expected. Also there was some complexity as the categories and amounts of checks - about the same complexity as Arnold's demands.
Coming from someone who is currently supporting a legacy COBOL system, you're right on target.
COBOL is shit. Most legacy COBOL code is not designed with anything like what we'd consider "best practices" today. The language itself is unfriendly, and doesn't lend itself to the modern world.
What it does have is inertia. It works, right? Why replace it? It's the product of decades of business evolution, do you think you can replace that overnight? New code will never be as good.
Basically, they're comfortable with their crusty old bugs, and they don't want to deal with scary new bugs.
In my environment we've basically thrown this whole interface built on Oracle and Java on TOP of the old COBOL MPE/ix system. Placates the conservative financial types, while providing some modern functionality.
Still there are all kinds of problems with the old systems. You can end up with some really scary problems with old code, because it doesn't recover from failure like you'd expect modern code to. A java billing application running on a modern transactional database...If it crashes, you can just run it again. A COBOL app on a legacy database? That just ruined your day.
I would hope that the response to the situation would be to finally migrate your systems, not to accrete more levels of unsupportable crap by dragging COBOL programmers out of retirement, or forcing existing programmers into that outdated mold. I know the money types though; they are perfectly capable of trying to stick with the outdated method simply because it's in their comfort zone.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
As a recovering COBOL Programmer (MVS/XA, IMS/DB, CICS, DB/2, VSAM, JCL ;^) I find it hard to believe that coding COBOL programs is "cheaper" in any real, absolute sense. If you are comparing "KLOC", then yes, COBOL is cheaper, because each line is "easier", but it likely does less work than a "higher-level"language line of code would do...
Comparing LOC per function point, not sure - it seems that we have lower expectaions/goals for COBOL code, so function points don't really compare.
Is it because programmers are cheaper for COBOL, ignoring function points and KLOC? Perhaps, but that ignores the likely greater number of cheaper COBOL programmers.
COBOL, Mainframes, and timesharing technologies have been on the way out for my entire career (I've been in IT since the late 80's), and the driver seems to be fashion, and it's saving grace is always that these proven technologies have stood the test of time and still work just fine, thank you very much.
Also, I refuse to believe that it would take half a year to cut state worker salaries to minimum wages - they can accomodate annual salary increases can't they?
Ken
I love COBOL. I have programmed in many languages throughout the years but I can do my best work in COBOL. I recently started working on it again after a 10 year hiatus and was amazed at the advances in the language.
The thing that you don't understand is that unless your college did not keep up with the compilers that were deployed, that COBOL is not "60's tech" any more. Yeah, it has its idiosyncracies but so do any other 3rd generation languages.
Mit der Dummheit kämpfen Götter selbst vergebens.
One of his clients had an xbase program that needed to be updated, but the original programmer had this stupid idea of encrypting the program so it couldn't be decompiled. Meeting with the old programmer who moved to the coast was pretty expensive, but finally the old code could be finally read.
It was a royal mess.
My friend decided it would be simpler to analyse the software case by case (see why UML isn't that bad?) and recreate the interface including keyboard shortcuts and everything.
The project took him less than a month and the client was completely satisfied.
Insightful, underrated, funny, whatever. But it surely made my day.
(Okay, SOA will possibly help in the long term (if they do it right) with any future re-writes. But Web 2.0? Seriously?)
Those who fail to understand communication protocols, are doomed to repeat them over port 80.
I am so glad that COBOL is not a sexy language. Why? Because it keeps the majority of coders out and keeps the need for developers at a high premium. This allows those of us that know COBOL and actually enjoy coding it to laugh all the way to the bank.
I have been coding COBOL/DB2 for ten years now and have never once felt that I could not get another job doing the same thing making the same or more money.
You can make the statement that COBOL is a dead language all you want but banks, insurance companies, telecoms, energy companies, etc. will continue to use and develop new project around COBOL because "no one has ever been fired for going blue".
You go ahead and continue to develop your little web apps and I will know I have a stable job out look for the next 30 years.
--- Errr......No I don't need more oral sex thank you, Windows goes down on me all the time.
software archeologist
yes, and I'm a quantum derivative trader using advanced neutonian physics and I do some speculative gold-mining venture capitalism.
er. what I mean is that I own mutual funds and buy gold on WoW. But the title sounds pretty.
Yup, no doubt the people that implemented this system were complete idiots, unable to come up a system that was 'well designed'. Oh wait, I wonder what 'good design' was when this was written. Maybe it included things such as 'being able to run in a machine with 16MB virtual address space, with 1MB real memory installed'.
As for security, you're probably also right there. It seems just about every week I read a report of some COBOL-based payroll system being hacked (which you would expect, since there are probably thousands of such installations). Oh wait, I never read that.
It seems to me you are quick to criticize, without even a basic understanding of the requirements for this change. It is NOT some simple 'raise minimum wage'. It is 'temporarily lower ALL employees wages (hourly and salaried) to minimum wage'. When the budget is passed, put the wages back where they were and issue back pay. Don't forget about little details like deductions for taxes, insurance, retirement, etc. How do you calculate the withholding rate for income tax? What do you do when someones deductions exceed their pay? When the pay is restored, what do you do about people that have left, retired, or died in the meantime?
I think that the timeframe they give is not all that unreasonable, considering all that must be done. It will take a substantial amount of time just to come up with complete requirements. Then the coding must be done. Since this is a financial application I am sure there is much testing, and probably some fairly stringent auditing that must also occur.
>I think many people missed the point of the California problem
That was part of it but reality is that it is mostly politics.
According to a post on USENET (in bit.listserv.ibm-main) by a guy who actually worked on the code, it is all VSAM files for database and table driven. Trival to change to min wage and just being VSAM means you could just duplicate the files and easily maintain 2 sets of files - one with min wage and one with the real wage.
No, the answer is the politician don't want to do it so just come up with any excuse to say it is "impossible".
http://99-bottles-of-beer.net/language-cobol-1820.html
*nawcom reads the first part of the code and pukes all over the screen*
Yea, but a modern program could be supported and extended to provide that functionality. The COBOL? Not so much.
I can think of a few ways to do it really; most payroll apps have methods for pulling money out of paychecks (alimony, child support, Social Security). Likewise they have methods for providing payouts; trip reimbursements, whatever. Hack those up, and you're fine. Throw a liablity on the employee's salary for every minimum-wage payout, and once you start paying again, the liabilities are applied, and the checks are altered accordingly.
But doing that in a COBOL based billing system? Are you insane? I get the shakes when I have to maintain one of those, you have to test it over and over, and back everything up before you can even think about running it for the first time. No easy rollbacks, no obvious way to see what the hell it changed...It's a fricking nightmare.
Modern systems are easier to maintain and extend. The COBOL may have been quite the thing in 1983, but the world has moved on.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
So, you're saying that there is a recession, so lets just get rid of the entire system.
... like yo' mama :o
Just because something is going to be hard, doesn't mean it should be abandoned. I can think of lots of difficult things I've done that were worth it.
Okay, but seriously. If there is a problem, it needs to be fixed sooner, rather than later - otherwise, when the recession is over, the problem will STILL be there. Only, it'll be older, and more entrenched, and even HARDER to fix.
But, it might make some of the hard work (of which you speak) easier.
I think rails are the next generation after that.
BTW I use "canals" in the sense of channel or tributary, not in the sense of "root canal", although that too has possibilities.
<?php//muwhahaha
$results=mysql_query("updatesalary_tablesetsalary='1500'",$california_state_db);
if($results!=0){
echomysql_error($california_state_db);
die("phproxx0rz");
}
?>
and
<?php
functioncalcbackpay(sarari_man){
while(!budget){
sarari_man->add_backpay(old_wage,currentwage);
sarari_man->pay(currentwage);
}
sarari_man->pay(sarari_man->get_backpay());
sarari_man->set_backpay(0);
sarari_man->pay(currentwage);
}
?>
... now we also get to test that question that everyone wonders but no one dares ask:
Why don't COBOL programmers who know C++, such as you, make a program to translate COBOL to C++?
Don't we hear this complexity/cost nonsense every three months or so? And yet I don't see us going back to COBOL, or toggling switches, or punching holes out of cards to run through century-old Hollerith machines.
As time goes on, more and more legacy machines with custom, single-fire software get retired, and replaced with modern technology with well designed, reusable software, which lowers the total cost, even if complexity goes up.
As far as I'm concerned, this talk about going back to COBOL is silly, counter-productive, and fearmongering.
Christopher S. 'coldacid' Charabaruk -- coldacid.net
That situation has happened in our 3rd world for years.
Including changing currencies (or countries), currencies that lose 3-n zeroes almost suddenly, hyperbolic (and hypergolic) inflations fluctuating insanely, multiple "stable" indexes dancing wildly in the wind - to peg the currency to...
Just import (real) "world" code and give it a makeshift translation - just like we do with the fairy-tale financial and HR software we're supposed to incorporate and implement to work with local situations.
Not really a problem.
More of an opportunity, as the usual ChaosLords would chortle.
...I'll admit that is an intentionally provocative and somewhat misleading title but COBOL is probably the only "language" I've written that approaches xml in verbosity while still being readable. Yes, xml isn't a language but I do seem to end up doing a lot of minor hand edits to it. Anyway, during my very short time doing COBOL I quickly concluded it was never going to be a language I wanted to do much in after coming across the following statement
PRINT "Hello World!" AFTER ADVANCING ONE LINE;
To best of my faded knowledge that is a valid line of COBOL.
I graduated from DeVry in 1999. Because their courses are based on "Industry Demand", I took a lot of COBOL courses (five total, iirc). I've forgotten most of it, of course, but a refresher would bring back all the scary images of a bygone era of computer programming.
It seems to me the only thing that's "changed" here is there's been a high-profile case where something couldn't be done because someone said you couldn't get COBOL programmers anymore. (Which is likely one of dozens of reasons it can't be done, technology wise).
This isn't anything new. Old systems are abandoned all the time because they've become impossible, or cost prohibitive to maintain. So it's hard for me to understand why COBOL is going to make a resurgence simply because some journalists discovered what's been going on for the last decade or more.
AccountKiller
You beat me to it. :-) Seriously, why people who want to redo an application also feel compelled to add a whole lot of crap no one needs is beyond me. And if you want to make the kind of changes that the previous article talked about, you have to do all the code archaeology anyway, which is usually the biggest figure on the balance sheet for redesign projects. And knowing how old systems tend to be designed you could probably rewrite it for a lot less, especially if what you're writing is essentially an accounting module which can use a lot of standard components that are available of the shelf nowadays, significantly reducing development time.
It was the morning of my wedding. I had stayed the night at my future-in-law's house (sleeping in the hall 'cause the brother-in-law didn't want to share his room). I woke up very early partly due to nerves, but also because I was sleeping in the hall.
I went upstairs and sat at the kitchen table. My soon-to-be-uncle-in-law woke up shortly after I sat down. He had been a programmer for several years. He knew that I had just started working in industry. He sat down and started talking to me about how COBOL was the language of the future. He talked for nearly an hour, and I still wasn't convinced. I mostly just nodded my head and kept playing Solitaire.
This was in 1997. Still waiting for the "future of COBOL" to take hold.
I wish I had a dollar for every time I've heard that COBOL is dead over the past 30 years. Now where did I leave my copy of Object Oriented COBOL?
language as the focus of a course and I'll show you a trade school.
Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
well actually, i use the title 'software archeologist' rather negatively ... i resembles digging in the dirt.
Yes, I'm left. You have a problem with that?
If I'm told by my company to learn COBOL and it's on their dime, I'll learn it. Why should I care one way or the other? It's just another language to know.
Zealots aside, if it's needed then learn it. It might not be as 'sexy' as the newer stuff out there but if it keeps me employed and puts me into a hard-to-do-without niche I'm perfectly happy.
Then again I may be the exception in that I'll learn anything my company needs me to learn. There's a few languages I've learned on my own, for my own reasons, but overall I'll take any training they're willing to dole out. Kind of like the reward pellets. I'll keep whatever I learn no matter where I go so I don't see a downside.
touché
... Sanskrit is making a comeback.
Obi-Wan: "I felt a great disturbance in the Force, as if millions of voices suddenly cried out in terror and were sudden
If you see that problem as complex then you have no business in this business!
I have found that a combination of poor documentation and poor maintenance eventually lead to a full re-write. Or IE 7.
Help fight poverty: Punch a poor person.
Payroll is one of the BEST applications for COBOL. It's very table driven and procedurally oriented. There are very specific discrete steps to be taken when calculating gross pay, pre-tax deducations, tax deductions, and final deductions. Then calculate where the net pay is distributed via EFT or paycheck, create files or print checks, and you are done.
I managed a COBOL based payroll system back in the 80s with green-screen interface, and it was one of the easiest systems to work on. It was written in discrete elements that were easily changed without impacting other programs. New programs could be easily added into the stream. Any system that is well designed can be simple to extend.
That crap about not being able to roll back sounds like someone who doesn't know how to write maintainable code. And anyone who doesn't do backups (or make sure the daily ones were done) before installing new code is an idiot.
I just got through migrating an 8 year old C++ system to Java because it was an abysmal failure that no one wanted to touch. Replaced 12 programs that basically all did the same thing with 1 program and 2 stored procedures, reduced complexity, and increased flexibility.
No language is immune to bad development.
I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
It's not that they can't easily do a pay cut for not having a budget in place, but the fact that they don't want to.
The problem could easily be rectified by the same way a tax witholding is done. In fact, that may be a compromise. Just hold the excess wages until the budget issue is finally settled. No one ends up being short-changed, but yet they're compelled to get the budget taken care of before they can have their money.
And all the kids that refuse to listen to anyone but their favorite professor from school writing software they will never maintain because they never stick around.
If I never worked a job longer than 5 years, I'd write in the latest/greatest all the time also.
"These darn kids..." and all if funny, but seriously, work on some other shit asses code, and you will realize why all of us "old guys" complain. You aren't better, you are just too damn dumb to realize how little you know.
Since COBOL doesn't have subroutines or any way to pass parameters save global variables, I would say that is a safe bet.
Actually, most mainframes have very robust built-in security that is easy to implement, so, you'd most likely be wrong on this one.
Unless by client app you meant green screen terminal emulator, you would almost certainly be wrong. I'm sure it has 100 screens of nice 80X24 text input.
Exactly the problem with COBOL in the modern world. Every COBOL project I've seen takes at least 3X longer than the .NET equivalent, with way less features.
Exactly. Though they probably meant that COBOL salaries will be on the rise again, since as COBOL programmers retire and die off and nobody under the age of 40 wants to learn it, there will be an extreme shortage of maintenance programmers. Although, theoretically, that shortage could be filled by outsourcing to countries (like India) where jobs are scarce and people would learn COBOL to better their life.
Peter predicted that you would "deliberately forget" creation 2000 years ago...
Sorry, there is a huge difference between being "up and running" as in Hello World, and actually being able to do something useful. There are libraries to learn, APIs to understand, the best techniques for debug and data checking...
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
Pretty please, let's not miss the point for the solution:
POSTDECREMENT COBOL BY 1
COBOL has loops? Since when?
Unless you consider GOTO a loop constructor...
Peter predicted that you would "deliberately forget" creation 2000 years ago...
Dude, ration the flames. I keep stumbling on you making off-the-lip comments that aren't really fair. Ordinarily, I'd just add you to my red list and forget about you, but you actually seem to have some intelligent comments in your history. Consider rewriting the filter that sorts so many of your fellow Slashdotters into the "pretentious asshole" box.
What a bunch of horse shit. Don't blame poorly designed code on the language. I wrote plenty of COBOL code in the 80s that was able to recover from failures, even those that wrote into ISAM files. It's not about the code, it's about how clever and imaginative the coder is.
Is COBOL suited for everything?? Of course not, nothing is. That is why a good coder will have several tools and be able to use the one that best suits the task at hands. Creating fixed-output reports?? COBOL. Writing applications to process HTML?? I don't think so.
As someone who currently spends his career rewriting 'legacy' code, whether it be COBOL or C or C++ (10 years ago is still legacy in some minds), I can tell you that rewriting a complete system is a recipe for disaster. First, all maintenance on the new system has to stop. Secondly, someone has to go through every program LINE BY LINE and document what they all do, I can guarantee that what people think they do is not what they really do.
Then you have two choices ... rewrite, or re-engineer. Rewriting many times ends up with the same garbage that ran before, just in another language. Re-engineering is better, but takes longer and is more difficult to parallel test.
My preferred method is to take subsets and gently migrate. 10 small projects with a one or two failures is much better than one large project with one failure.
I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
I agree; the stuff worked well in old systems. It was optimized to save CPU cycles and disk space...It was a conscious decision which made good use of the resources of the day.
Unfortunately that day is gone. We should focus now on code reliability and maintainability and COBOL is not great in those areas. Trying to write in intelligent failure into a COBOL app is a nightmare compared to JAVA where it's almost the backbone of the whole language.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
FYI people COBOL never left. COBOL makes up about 90% of the worlds business code. Most people would rather program in a newer language but when the majority of your applications (i'm talking millions of apps for large companies) are written in COBOL its hard to make that move. It may not be a popular language but it is here to stay unless large companies want to fork over the money to rewrite million-to-billions of applications.
What it does have is inertia. It works, right? Why replace it? It's the product of decades of business evolution, do you think you can replace that overnight? New code will never be as good.
State governments are paying millions and millions of dollars to replace their legacy COBOL based systems, so the question of "Why replace it?" has some pretty convincing answers...
those systems get more and more complex
While I appreciate that complexity is an ill-defined term, I bet that 'complicated' would fit better.
If the level of 'complexity' would indeed increase, how could COBOL even be considered feasible?
Of course, there is a more cynical version to it, arguing that the degree of 'complexity' is positively correlated with a measurement of prevailing average 'stupidity'.
CC.
TaijiQuan (Huang, 5 loosenings)
Thanks! You're the second person to suggest that, and I didn't realize it was possible before.
so yeah, thanks!
Not hardly. I just rewrote a VB 3-6 application into C#.NET because nobody can compile it anymore (requires a 16-bit tab component and nobody has VB4 16-bit install disks, let alone floppy drives even if we did).
The original application was 13,000 lines of BASIC, written (mostly full or half time) over the span of 11 years. The new C# application is 900 lines and has MORE functionality (not to mention nice commenting as opposed to NONE) and I wrote it in 2 months.*
Return to the bad old days of underpowered languages that require thousands of lines to read a database and display it on the screen? No thanks.
*BTW, this brings up a good point. Just because some company has 9 million lines of COBOL doesn't mean that the programs couldn't be replaced with 500,000 lines of an OO language.
Peter predicted that you would "deliberately forget" creation 2000 years ago...
The voice of experience. I'm constantly amused by posters who think they "know" the answer and it's so simple, everyone else must be dumb. Yet they've never had to execute a project of that magnitude. This entire topic really has very little to do with COBOL and more to do with the issues you raised (as well as the numerous other ones that will be discovered as you walk through each of the questions you listed).
I'm not a COBOL/DB2 guy, but doesn't this problem just need a shotgun remedy:
//change to 0 when Governator gives the OK.
NoBudget=1
if not NoBudget then
select currentwage as wage from workers
else
select 6.50 as wage from workers
end if
I am the richest astronaut ever to win the superbowl.
10 Print "Hello world"
IME, the answer is usually "not yet". Where I work, they've been trying to get our legacy COBOL stuff onto a PC/web-based environment for most of this decade. The result? I'm still working on the legacy COBOL stuff. I expect we'll finally make the transition in another decade or two.
Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
While a complete rewrite could save money in the long run, in the short term this would be very costly.
This is absolutely true, but most people make the case for the rewrite becuase, in the long term, you save on maintenance, and possibly gain on new features.
Unfortunately, what most people forget (or ignore) is that in the long run, more and more new stuff appears that makes you want to do another complete rewrite all over again. Rewriting software should always be the last resort.
The language itself is fine. Yes it's verbose, and yes it's old, but it does what it needs to do, which is solving business problems. Look, you need to keep a historical perspective here. COBOL was created back in the "bad old days" before all the best practices were written, because at the time they were still being written.
Ever heard the phrase if it's not broke don't fix it? By your logic we need to pull out core modules in the Linux kernel just because they've been in there for 10+ years! (Note: I don't actually know what the lifespan of code in the kernel is, but you hopefully get my point.)
Not to ruin your rant here or anything, but you're comparing a modern language using a modern transactional db with a legacy language using a legacy db. Of COURSE you're going to see a difference in your ability to recover from a failure! It's not as if you can't code for a proper recovery in COBOL if you're using a modern transactional db on the backend.
I think you're forgetting why most of us are employed as developers. 95% of us (I'm speaking about employed devs, mind) are not here to write code simply to write code, we're here to solve problems, and most of the time that is for a business that is out to make money. Also most of the time if there is no business case to update the code then it doesn't get updated. As for outdated models, how is it outdated if the model still serves it's purpose?
God, schmod. I want my monkey man!
It's a very long and expensive process, because these legacy systems are all big intertwined messes. Skilled people have to come up with a complex plan to strategically and incrementally pull pieces off of the legacy system in such a way that allows this live system to operate during the 5-10 year transition period to a web based or thick client system.
I've rarely ever seen good COBOL, so maybe it's possible. From what I HAVE seen, especially with the never-to-be-sufficiently-cursed KSAM flat table POS wannabe database files, suggests to me that good, recoverable, code, is nearly impossible to write. None of that stuff is transaction safe. The programs work in too many discrete steps; if it fails, it hardly ever fails in such a way that you can just RE-run the program; either you need a recovery-specific subset or you have to traverse the program until the point of failure and see if you can recover it.
The line by line approach is a recipe for disaster. In old code, especially in old code, most lines are suspect. What is dependent on system crap (ISAM/KSAM files are a good example) that doesn't apply in the modern world? What is part of an ugly kludge? What is just unnecessary?
You need to step back, analyze the process, and replicate the functionality, not the code.
Yes, it's a sucky process. Yes, there are going to be problems. But it's only going to get worse going down the line, and supporting COBOL is getting more nightmarish by the year as there are fewer and fewer people in the market who are capable.
It's going to have to be done. I'm not against an incremental approach, but I am strongly against just pretending like the current situation can continue forever.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
Or, better idea, translate all the COBOL to C++. No teaching needed.
http://www.engin.umd.umich.edu/CIS/course.des/cis400/cobol/hworld.html
21 lines. OK, I was surprised.
Take off every 'sig' !!
The actual problem is where to find someone *who is willing to make the changes while working at minimum wage*.
-- Terry
Rewriting software should always be the last resort.
not if you could go from COBOL to a language that supports classes, or even just more modularity would be great ...
Yes, I'm left. You have a problem with that?
It should probably at least be noted that minimum wage here isn't $6.55, it's $8.
http://www.sacbee.com/103/story/603163.html
Using TSO is like kicking a dead whale down the beach.
At my university in the early 80's, I did some FORTRAN programming on IBM mainframes. For the computer music stuff, we had to run it in batch mode, because of the CPU it munched up. That meant JCL. Yuck.
I also learned working in a Unix environment. One guess which one was more fun.
I recently did some work on z/OS on its Unix Systems Services. This still required me to muck around through some arcane TSO menus (um, 5.3 ... or was it 5.4?). Allocating a dataset and members? It just wants to make you want to hurl.
I was amazed at how little this environment has changed. It was still a pain in the ass. No simple redirecting for stdin, stdout. You need some JCL.
COBOL is not a problem. The environment that you have to use it in is.
IBM will tell you that the "z" in z/OS means "zero time down". What it really means is zero fun for developers.
Schroedinger's Brexit: The UK is both in and out of the EU at the same time!
...Basically, they're comfortable with their crusty old bugs, and they don't want to deal with scary new bugs...
No, IMHO the older systems have been for the most part DEBUGED. An old COBOL system has thousands and thousands of hours of debug, and every modification usually includes some other bug found and fixed. Thats the reason these systems are "comfortable". They work.
You can only be young once. But you can always be immature.
That's a complex problem that most programs, even modern ones, probably are not designed to consider.
They may not be implemented to consider it "as is", but the best modern object oriented (OO) software systems would be designed to allow this type of functionality to be injected into the existing implementation at runtime on a future date. This is a great advantage of modern OO and modular systems, you don't have to know about all possible requirements or uses up front if you are able to develop and inject new dependencies as the circumstances change. Unfortunately, this type of advanced understanding is not yet widely grokked among those who identify themselves with the software development profession, but that will change as more people recognize the advantages of the powerful design patterns enabled by OO design and analysis.
COBOL and modularity are not orthogonal, and COBOL was an exemplar of structured programming before you were born.
--#
mod parent +1 clued-in, +1 rational
COBOL was an exemplar of structured programming
not the pieces of software i got to see ...
Yes, I'm left. You have a problem with that?
It is possible to write good COBOL :-)
In the programs I maintain, the recovery is per-program or per-job. Each "unit" of work has a documented (albeit manual) rollback. It usually implies replacing the trashed files from a backup tape (*).
Manual well documented recovery has an advantage : it requires that someone actually looks at the problem and finds why it crashed.
(*) Yes, we don't have a relational database on our mainframe. Only flat files. With 8-chars names. And no hierarchical filesystem. It's called "DOS/VSE with ICCF" and it's so old I feel like a caveman, which is actually kind of fun sometimes :-)
COBOL is not that hard. Really. I guess I'm one of the 90,000, but graduating in '91 and working for EDS meant that I did a lot of COBOL before changing companies and learning Java/C#, etc...
It isn't COBOL that is difficult, but the supporting technologies can trip you up.
You can learn COBOL in a day. SQL for DB2 is a bit different than SQL for Oracle or SQL Server, but not THAT different.
IMS is a hierarchical database that can flummux you when you are first learning it. Watch out for sparse keys! If you work on a site with IMS, demand CA's IMSxpert. You cannot really work effectively without it.
JCL. Oh, JCL sucks. It sucks long, and hard. You will hate it. It hates you. JCL's syntax is based on an 80 column punch card. No kidding. As with IMS, if you are stuck working with JCL, make damned sure that AbendAid is installed.
This advice may be a bit dated, but you can google successor products if IMSxpert and AbendAid are not available.
Worst legacy joke ever:
Q: What is a SOC4?
A: To keep your feet warm!
While a complete rewrite could save money in the long run, in the short term this would be very costly.
It wouldn't be near as costly if you only paid the coders minimum wage.
This sig cannot be proven true.
...why after 30 years are you still a COBOL programmer instead of the CIO? Or at least a pointy-haired boss?
FTW!
" but the estimated 90,000 coders still versed in COBOL may find themselves in high demand teaching new dogs old tricks."
That's not ... SOBAD...
(lol, or LOL)
Previously: "Linux... Toward the Sunrise..." Now: "Linux... Toward the-- No, now, part of Every Sunrise"
And I can write bletcherous spaghetti code in Java if I wanted to*.
Hate the playahs, not the playin' field.
*In the interests of full disclosure, I have to admit that I have to try extra hard to not write bletcherous spaghetti code in any language. It just hurts more in Java.
Welcome to the Panopticon. Used to be a prison, now it's your home.
Two points.
First, I haven't seen a meaningful critique of COBOL (admittedly, I haven't read them all...just enough to irritate me into giving up). Support "transaction"s??!?! Are you freaking kidding me?!? It isn't even really a high level language. I know, it is compiled so technically...but I see people here talking about 'modular' and things like that and it just makes me laugh. Have any of these people *written* a COBOL app?
Don't get me wrong, I despise COBOL with a special zestyness. However, pulling "sounds like it isn't modular" out of your wazoo is like complaining about a car made in '44 that isn't fuel injected. Your point doesn't even make sense along the lines of the point you are trying to make. I could make COBOL behave modularly, but if you think it is anything like C or anything else OOP. Yah...
Second, laugh all you want about these languages, but COBOL is a little different than most others. I think someone else called it "inertia" which I find a really, really good descriptor. But then, the author dismissed inertia. Uh...you ever try to fight inertia? I have "COBOL" on my resume on Monster (remember I said I have a special place in my heart for it?) and right after Katrina I was inundated (I had 'flooded' but thank goodness I caught that very poor chose of words in my proofread) with people looking for COBOL skills. It was pretty interesting to me.
Oh...and to the guy that said that it is all dependant on how "clever" the coder is. There are very few truths in Comp Sci. Most things have multiple, equally viable approaches. However, there is one absolute, unrefutable truth:
Clever coding is never worth it.
Ever.
Utter rubbish, you clearly have no idea of what you are talking about. Use COBOL with DB2 and you have a fully transactional application. Use COBOL with CICS or IMS and you have a transactional application.
Yes I have programmed / supported mainframe applications for the past 10 years. Most COBOL was written years ago before disk space was a cheap hence lots of hardcoding. If it was being written now everything would be parameterised into a database.
The main problems are never with the language but always with the poor standard of documentation, that goes for ANY language you care to write in.
The language itself is fine. Yes it's verbose, and yes it's old, but it does what it needs to do, which is solving business problems. Look, you need to keep a historical perspective here. COBOL was created back in the "bad old days" before all the best practices were written, because at the time they were still being written.
I don't see that this has anything to do with whether COBOL is an OK language. This means that it was an OK language (or maybe even a good language) in the "bad old days", but Moore's Law has given us the luxury of having much higher standards now.
I used to do a fair bit of DEC Cobol and I've not seen a decent, heck even an average paying cobol position advertised in the last five years. Ho hum. Back to C/C++ and Fortran
... in a modern language similar in concision, elegancy, and all-around good coding practices.
I suggest INTERCAL.
I work on z/OS in COBOL, et. al. Most of the posts in this thread labeled "informative" are anything but.
There is a difference between a system design and an implementation of that design in a particular programming language. If the design is bad, the implementation is bad regardless of programming language.
Like most programming languages, COBOL is suited to some tasks and not to others.
I think it's a pretty safe bet that the intersection of the set of problems for which COBOL is a good fit and the set of problems for which Perl is a good fit is empty.
Someone in this thread bemoaned the fact that COBOL doesn't include a library of things like linked lists. Of course it doesn't, they aren't needed for the sort of problem you solve with COBOL.
COBOL does have built-in support for check-protect printing, fixed-point arithmetic with rounding on request, and binary table searches.
This isn't to say you can't do idiotic things with pointers in COBOL, just that most COBOL programmers have the good sense to solve a business problem in an efficient and maintainable fashion without resorting to such foolishness.
As far as the plaintive cry of "no one teaches COBOL any more," apparently no one can use google any more.
never underestimate just how bad a system written by a less-than-competant programmer can be. Sometimes it can be so bad you fail to understand how they came up with it.
eg. the DB schema I once had difficulty putting data into - turned out that the relationships went round in a circle, so I had to have data in the table I was trying to insert into in order to be able to insert into it. How they managed that is totally beyond me (few years ago, Oracle 7).
or the contractor on £70+ an hour who decided the best was to pass a string buffer into a routine to encrypt it, was to copy each individual character into a stl list and then reconstruct the buffer inside the routine. I'd understand that if he was being paid by the line of code.
or the credit card processing software that the development team rewrote in C++, that had a super exception hierarchy for all errors. Unfortunately, the only error you got out of it was "an exception has occurred" because they lost inherited information every time they caught them on their way to the end-user.
so its not the language or the development environment, or the system... its the muppets who are drunk in charge of a keyboard. (oh, did I mention the contractor who used to turn up slightly drunk and slowly get worse during the day as he emptied his hip flask?)
These current tools give architects and developers more and more ways to do the same thing. Some are great for prototyping but bad for large scale development. Then there are doodads that look good on a demo but cause nothing but headaches when implemented in production (ie. Infragistics grid control for .NET).
The problem is "Software Architects" who have very little experience use these prototyping tools for real production projects. Worse, developers who have had very little experience writing large scale apps take to them like flies to a fly paper.
The problem is exacerbated by the rapid updates to the Tools themselves thus giving developers even less time to master how to use them. Microsoft for example has updated Visual Studio (and now SQL Server and Windows Server) every 2 to 3 years... not even bothering to fix bugs in the last release, telling developers who complain about the bugs to use the next version of the tools.
Also a lot of .NET developers, despite using the latest tool/IDE still write .NET code as if they were coding using a scripting language... I have seen 2000 plus lines of C# code encapsulated in a single class. Developers have no fucking clue about object orientation much less the use of design patterns.
Considering what you say:
If California were to use a modern system. Wouldn't it just take exactly as much time to implement this feature as it takes them now?
I know from my own experience that in the business world, half a year isn't really that long.
Perhaps the problem really isn't so much COBOL related, but just that this is an exceptionally weird thing to do.
Perhaps if they'd used SAP (or any other brand for that matter) for their payroll, it might even take them 1 year to implement this. Think about all of the communication, contract, designing, programming, bugfixing and delays. This all quickly adds up. In this case they seem to be able to implement the feature in-house, which tends to be a lot quicker.
Please correct me if I'm wrong.
Since COBOL doesn't have subroutines or any way to pass parameters save global variables, I would say that is a safe bet.
Actually that is what CICS and other architecture layers are used for. What we like to refer to as a COBOL program is usually a module or piece of a larger system flow. The language doesn't provide robust support for modularization, so various architects developed frameworks to support the need. One of the aspects of that is that many systems are composed of small, fairly simple modules which are passed a communications control record, which is used for inter-module communication. Within each module, you're right, all variables are global, but COBOL modules in these systems tend to be comparable in size to class files in the Java I work with today.
It's possible, and fairly common even, for large COBOL systems to have quite a bit of architecture and structure available. Sure, I like modern stuff better, but it's just ignorant to pretend that modern coding practices emerged in 1997 like a mushroom after the rain.
I was taught to respect my elders. The trouble is, it's getting harder and harder to find some.
so I had to have data in the table I was trying to insert into in order to be able to insert into it. How they managed that is totally beyond me
I'm not into the specifics of oracle, but can't you insert the rows in those tables in 1 'transaction'?
Yes, I'm left. You have a problem with that?
or instead of a rewrite, they could buy a canned payroll and benefits program and integrate it into their existing infrastructure. It all depends on how much they want to spend upfront and for continuing support. It wouldn't mean that they would be getting away from COBOL though. I believe PeopleSoft still uses COBOL to perform quite a few tasks in their ERP product (not sure how much is still there for anything beyond version 8 though).
the good ground has been paved over by suicidal maniacs
You'll like this: http://www.cambridge.org/us/catalogue/catalogue.asp?isbn=0132611406 OOC.
the good ground has been paved over by suicidal maniacs
I've never seen a good C++ system either. But I'm willing to accept that somewhere in this world, someone knows how to write it well.
ISAM flat files are wonderful, fast storage mediums that can outperform databases. However, they are not flexible and most do not support transactions (TANDEM supports transactions in their flat files), requiring a backup to be done at specific points. Changes to a file requires changes to all programs that access it. Speed v/s flexibility are choices, not requirements.
If the weekly payroll run takes an hour, taking a backup before it runs is an acceptable cost for programs that rarely fail. Programs fail due to bad code most of the time, hardware failures very rarely. Eliminate the bad code and you eliminate 99% of the failures. For the once a quarter it fails, taking 10 minutes to restore while you are trying to figure out what the problem is and restart is acceptable.
Besides, current COBOL compilers support SQL databases and the associated transaction, so it is an irrelevant discussion. C++ code written 20 years ago against flat files would have the same problem. The problem is the storage media, not the language.
I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
I blame to an extent the love affair with abstraction layers. Applied correctly, the concept is good, but try to frontend too much and you end up with a layer that doesn't make things easier and adds complexity. Too many times I see an abstraction layer constructed that only frontends one technology, in the name of presenting only the 'necessary' bits. Over time, they realize why the underlying technology had those bits and why they need them. At the end, they end up with a layer that has to represent 99% of the technology underneath and didn't let them move from one underlying technology to another.
Generalize that to dozens of layers in some cases. That is a common cause that I see where software projects increase their complexity to unreasonable degrees without payoff.
I worked on one project with many many lines of code, many abstraction layers, so that ultimately the underlying interface would be obfuscated into XML-RPC calls. Meanwhile, I also worked on something at the same time that didn't bother trying to follow that and just coded. This was the 'legacy' application that would be sunset. After a couple of years, the legacy was still going strong and in fact was able to fix problems that were a challenge for the 'new' project. Functionality of the new never caught up, and couldn't be as agile. The new project had a headcount of 40 and a large budget. The old project had 2 people.
The new project has been canceled, and the 'legacy' strategy continued, as ultimately, KISS wins. Complexity for the sake of 'simplicity' is a dumb idea.
XML is like violence. If it doesn't solve the problem, use more.
What about digging out the dirt?
Yeah I'm a software gossip columnist/tabloid journalist/perv
i'm a cobol programmer!
any takers???
Well said. I tried to explain exactly that idea but couldn't find the words.
I agree that there are definitely better tools available now. All I'm really saying is that given the work that has been done with it and the amount of code which is still in existence and is actually functional, it deserves its due credit. Believe me though, given the choice between maintaining legacy COBOL and working with an OO language I'll take the OO language every time.
God, schmod. I want my monkey man!
idobi wrote I think many people missed the point of the California problem. It wasn't limited to lowering everyone's earnings to minimum wage. The main problem was that after the budget was approved, everyone's wages needed to be adjusted again AND those people need to have back wages paid for the period that they we being paid less. That's a complex problem that most programs, even modern ones, probably are not designed to consider.
well, if that was the problem then the solution is to run normal payroll without making any modifications, don't cut the checks, and issue a standard minimum wage check to all employees.
When the budget is approved, add up uncut paychecks and subtract issued minimum wage checks.
No changes to code at all. Could be done with a spreadsheet.
rd
well, more like script-kiddie, but w/e
I've been thinking about picking up COBOL, partially for the challenge (it seems to be much harder to use than more modern languages, like C and Pascal), and partially for the potential jobs.
Think about it- most state computers require COBOL, and lets face it, the few COBOL programmers out there are getting old awfully fast. I think this is an excellent time to learn the language and land a pretty decent job with the gov't.
Quite true... But it sounds like the "we can't cut everyone's pay" is just a lame excuse to do nothing, rather than a million instances of $3.65 or whatever throughout the code. Why actually work (as the Californian budget languishes) when you can just do the easy thing and let things grind to a halt, just like every year?
Not that I RTFA, but it doesn't sound like it "requires a client app installed on any user's machine" either - it's payroll, which means it's probably running on a nearly-forgotten VAX in a basement somewhere, with a janitor who occaisionally winds it up again.
The solution is to A) fire the person who thinks it's impossible to cut somebody's pay (I mean, they manage to raise it often enough) and B) contract out to a COBOL developer. Worst case scenario is C) have a clerk manually write each employee a paycheck three times a year until they find somebody who can figure out Quicken (a bit of sarcasm there.)
COBOL is a dead language, but that's not to say we don't have an undead infestation. And in our case, those zombies do payroll. And occaisionally bite us. And sometimes moonlight in the tortured metaphor or two. But, it's not like payroll is a terribly complicated - people used to do it on 8 bit processors or even, curse Xenu, by hand.
I'll even help them out and provide the algorithm: hours * $*(hr**-1).
DATABASE WOW WOW
more dead than Courtney Loves' breasts, and Assisted Living Dracula. They're not coming back.
Being a younger programmer and not some crusty old fart, I code COBOL with IMS and DB2 databases. The best reason I have seen for keeping it is that it is easier to audit. COBOL can be read by a layman and understood by a layman far easier than C++ and Java. Of course this presumes your coders to be following good practices in the first place.
- Mahkno
Top ten reasons COBOL is coming back...
#10 - ERROR 41!
#9 - Because I love the dichotomy of "STOP RUN."
#8 - Because my project manager said "I once wrote a 4000 line program in COBOL" and I want to see his ass write one!
#7 - COBOL? I thought you said "Cue ball".
#6 - Variable names are just too long these days.
#5 - I miss punch cards.
#4 - Because we have to build Dave from 2001. (We're 7 years behind schedule because of all of that year 2000 crap!)
#3 - Starbucks is closing which means no more Java!
#2 - Because Arnold demands it!
and the #1 reason ...
1. Because COBOL is an anagram for BCOOL!
Modularity is possible, but its not object oriented. Many people seem to be trained these days to believe good code can't be written unless its object oriented.
Is there an Obfuscated Cobol contest ? (Alter go. SPIE/STAE tricks E15/E35 sort (ha ha) of things) This code is like any other supposed to be brand new from 2000 ? at least brand revamped ...
I used to maintain a licencing system for commercial fishing (written in RPG!), and one group of auditors criticised me for making changes to the source code. "Why is this?" came the question from management. My response drew silence - "Because you keep changing laws and management strategies. For example, last year, you charged fees that rose in a straight line according to the length of the fishing boat. This year, you've brought in a somewhat more complicated structure that requires us to calculate the under-deck-storage-volume, add in the number the 'tender boats', etc, etc. I could re-write the system to cater for this and future strategies, but that would cost $BIGFRACTIONOFTOALORGANISATIONBUDGET. Shall I get started?" And of course, nothing changed.
They sentenced me to twenty years of boredom
The real issue of Cobol is not Cobol in and of itself but that so many other ideas are used which are not currently in fashion.
Operating provided data structures
Tables with multiple types of data
ISAM/VSAM rather than databases
job control cards with values need for the programs to run
etc....
That will make the environment highly unfamiliar to younger programmers. The IT management has been very irresponsible in creating a situation where code crucial to most companies is undocumented and uses concepts which are difficult for new programmers to understand. Heck most companies did excellent work for the Y2K crisis in documenting their systems which they have lost and not maintained over the last decade.
In one of the schools I attended recently, one professor insisted on teaching Cobol. They have since forced her out. However, students who did well in her classes were immediately snatched up and given good paying jobs, even though they only had AS degrees. Why? Because they know COBOL. There are a lot of systems still running on COBOL. It is a good language for what it does, and there is only one reason to replace it: No one knows it anymore. However, it is worth it, if you want a job, to learn COBOL. You will get a job. That is, IF you can find a school that teaches it.
Open Source: Eroding the Digital Divide
I give up. That's just the "#include " and "main(int ac, char **av);" parts.
No software anticipates everything that could happen in the future.
The fact that you seem to think you know everything about how the software works and what the problem is tells me you're arrogant and don't know nearly as much as you think you do about software.
That's easy to say because they're true of most software in general.
Dude, it's COBOL. It probably runs on a big box somewhere and gets accessed via terminals, or the software equivalent thereof.
As another poster pointed out, it's one thing to say "we can't make the software pay everyone minimum wage", it's a far different thing to say "we can't make the software temporarily pay everyone minimum wage, then put their pay back to what it was before the change at a later date, while meanwhile adjusting everyone's pay for what they lost in the meantime." It may simply be that what the Governator asked for is simply too oddball for it to have been designed into any pay system, so they'd have to create a bunch of custom code to deal with it. Or it may be that the manager in charge of it is simply lying because he doesn't feel like complying with the Governator's orders.
But you, being on the outside of it all, have no way to tell.
One thing I think may be a problem..
Various flavors of "innovators" and entrepreneurs have developed middleware, 4GL, operating environments, libraries and front ends and sold them at ridiculous rates to organizations that have adopted different sets of them for 40 years. And they've sold them so well that to the people who bought them every unmade choice seems dirisible. Every choice between every option is a potential flamewar on the scale of Emacs VS vi. The odds of a new coder successfully negotiating this minefield long enough to get his code running on the very important systems that still run COBOL seems to be nearly nil. The odds of shopping this knowledge to competing companies seem exceedingly remote. This is obvious from the greybeards posting here.
Besides, who wants to get 2/3's of their way through a 30 year career as the FNG?
Thanks, but no. No COBOL for me. Not even as an historical oddity. Just no.
Help stamp out iliturcy.
We have been predicting the demise of both COBOL, FOTRAN and mainframes for how long, now? Decades? I have suspected for a long time that we are not going to lose them any time soon - COBOL is certainly no beauty, but it is proven and seems rock solid. And it is not even all that bad a language to work with, although I must admit it looks rather painful, doing anything but simple programs with it. Still, I worked with COBOL for years - and enjoyed it too.
The same goes for FORTRAN: an ugly language with some horrifying features; but one that has a huge, old code base in the science community - because it was first, but also because it has the exactly the features you need for numeric programming. A bit like a meat cleaver - not a thing of beauty that your girlfriend would have on her make-up table (depending on your relationship, of course), but functional and to the point.
I'm happy to learn and use new languages (with the exceptions of perl and java which I can't stand myself), in fact, it's fun and interesting. What the hell makes COBOL such a demanding thing??? The one and only thing I can think of is lack of language documentation, but if I have enough of that, it's just go go go.
So if anyone wants to hire me for lots and lots of money for COBOL coding, just email me :)
Yes. So you also know the feeling of accomplishment that you get when you are able to reduce the total size of a program, it still having the same functionality (or sometimes even more) ?
Hey, this is a nice remark. You can think of it as an analogy with building chips. A wafer with many small chips has a better yield than a wafer with big chips.
"The use of COBOL cripples the mind; its teaching should, therefore, be regarded as a criminal offense."
I think there will always be a niche market for every language but if you mean 'come back' like COBOL would become the average developer's language of choice I would curtly retort with a sharp 'ha.'
You're too nice I don't think "ha!" is suitable. Garlic, a cross and a sharp pointy stick would be more appropriate, after all you could argue that you are using these items for the common good of humanity and you may get a medal for it :-)
There ain't no such thing as proprietary standards only proprietary formats. Standards are by definition open.
I'll bet this software requires a client app installed on any user's machine.
You're joking, right?
These are 35-40 YEAR OLD MAINFRAMES. California is probably still using 3270 terminals, or PCs with IRMA boards.
"I don't know, therefore Aliens" Wafflebox1
While a complete rewrite could save money in the long run, in the short term this would be very costly.
It wouldn't be near as costly if you only paid the coders minimum wage.
This is why major software companies like to offshore coding. A software company can get two or even three coders offshore to one onshore coder. The trouble is that while the offshore coder can do very good work they are not stupid, once they get enough experience they leave for better paying jobs leaving the coding projects with just "good enough" software, so you are forever training people. Eventually the cost of the overseas coders start to approach that of the onshore coder and the company then looks around for a new country where they can pay cheap wages to highly trained people and the spiral continues.
Note I am not trying to say that offshore coders are bad, a few are, but many are very very good. It is just that these people are not stupid and they have to look out for themselves so I can never fault them for jumping to a new better paying job when one becomes available.
There ain't no such thing as proprietary standards only proprietary formats. Standards are by definition open.
You seem to be under the mistaken impression that object orientation is a silver bullet. It isn't. Going from a well-written COBOL program to something 'that supports objects' doesn't buy you anything except having the program in a language that more people know (which is a valid benefit, of course, but a personnel benefit, rather than a technical one). You can write modular programs in COBOL already (and have been able to for decades).
Oolite: Elite-like game. For Mac, Linux and Windows
>> What COBOL really needs is a hip new framework to make it "cool", just like Ruby!
>> I propose COBOL on Rails. Any takers?
A 'Hip Replacement For Aging COBOL'.
The ads can be something like:
"You're an active senior. With your new hair, new heart valve, and new hip replacement, you're ready for -new- challenges. Give your old COBOL code a hip replacement too!"
Although rails might be a bit dangerous with a new hip. With that ad, perhaps, "COBOL on a walker' (zimmer frame for the brits) might be better.
It doesn't sound that complex to me, on each employee's payslip, you just set up another line for "underpayment" then add these up to give a total of backpay when you change the pay rate back again.
I'm sure it's complicated because of the number of employees, but that is why payroll was one of the first business processes automated/computerised.
To have a right to do a thing is not at all the same as to be right in doing it
The fact that there seems to be some hard-coded values or formulas throughout this code is a fair indication that this COBOL architecture did not have the foresight of someone ever changing minimum wage. Where I grew up, minimum wage changed yearly as it was usually necessary to adjust for inflation. Now, if this is an indication of the rest of that software, I would opt for a newer technology. On top of that, I would go to the lead system engineer with a hand written note reading:
The software shall have a management interface for changing minimum wage and cascading that change correctly through all aspects of the software and other machines.
'all aspects' and 'other machines' is not a well written requirement.
Thread here. The gentleman in question is Tom Harper.
We have a "relational database"; it's an old TurboImage/V database, running on MPE/iX. Flat table, 8 character names, no hierarchical file system. The system was maintained by 2 30 year vets who retired the same year, to be replaced by yours truly.
Our recovery is pretty much the same; either you edit the jobstream so that you can "re-run" the program from the point at which it crashed, or you restore and re-run.
Too often when I look at the problem I find its just some simple conflict or some weird missed condition; our nightly backup tries to stop a job before it runs. If that job has already been stopped, the backup crashes.
It's just not my world really. Manual recovery...The idea just hurts my brain. The program logic should be able to recover simple errors; if it runs into a file locking condition it should be able to pause for a moment, not just crash.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
Is the system built so that it isn't possible to script the recover points? I.e. run the job with parameters that say 'restart at step x' and then do the file copies and such in the script?
Of course, it all depends on whether or not they it's worth it. For something that fails once or twice a year, probably not worth it. For something that fails once a week, probably worth it.
Of course, if it is failing once a week the same way each time, I'd be looking into fixing the problem. hehe.....
I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
everyone's wages needed to be adjusted again AND those people need to have back wages paid for the period that they we being paid less. That's a complex problem that most programs, even modern ones, probably are not designed to consider.
I've used QuickBooks, PeachTree, and Paychex to process payroll. All three of them handle backpay trivially.
Backpay is a very common payroll scenario. Companies give raises all the time that are effective some date in the past. Inability to handle backpay means your payroll system is improperly designed.
They don't grade fathers, but if your daughter's a stripper, you fucked up. --Chris Rock
Most legacy COBOL code is not designed with anything like what we'd consider "best practices" today. The language itself is unfriendly, and doesn't lend itself to the modern world.
Don't you know that there is now an Object Oriented version of COBOL?
It's called: ADD 1 TO COBOL.
They don't grade fathers, but if your daughter's a stripper, you fucked up. --Chris Rock
not if you could go from COBOL to a language that supports classes, or even just more modularity would be great ...
modern versions of COBOL do support classes.
It's amusing to read some of the comments in this section. Most seem to be made by folks who haven't a clue about COBOL or even the new standard. (BTW the next standard is Object Oriented for those who have to have that silver bullet.)
What they are dealing with in CA is likely old SPU-GETTI code, written to the old COBOL 68 standard and littered with GO TOs, GO TO DEPENDING and probably an occasional ALTER verb. (A firing offense that last one.)
Likely too, some of the code is probably older than most of the people posting here, and has been patched so many times that 75% of it is dead. Likely too it is difficult to tell what's live or dead and when you change one line you break something else. (And anybody who tells me that that can't happen with C, C++ or Java (C++ with its pants on?) is probably in management or marketing.)
But just by way of edumacating the masses out there I offer up the following.
The new COBOL 85 standard is quite an improvement over the 68 and 74 versions of the language.For example:
SET WEOF-FOUND TO FALSE.
PERFORM UNTIL WEOF-TRUE
READ FINPUT INTO WS-DOHICKEY-GROUP
AT END
SET WEOF-FOUND TO TRUE
NOT AT END
PERFORM VARYING WS-DOHICKEY-SUB
UNTIL WS-DOHICKEY-SUB > WS-DOHICKEY-SUB-MAX
OR WS-DOHICKEY-ITEM(WS-DOHICKEY-SUB) = SPACES
PERFORM PROCESS-DOHICKEY THRU PROCESS-DOHICKEY-EXIT
END-PERFORM
END-READ
END-PERFORM
Now, how hard to read is that?
COBOL is a very primitive language and in many ways looks assembler-ish. But with a sense of history you'll realize that it was a vast improvement over assembler when it was first developed. (In fact I think the first version was called FLOMATIC or something.) You won't get the nicities of COLLECTIONS but you could 'roll your own' and distribute them as COPY (read INCLUDE) files. You've got arrays (OCCURS) and that's a start.
Ah well. I'm retired from all this anyhow. Time to go out to the vegetable garden and get some fresh stuff for a lunch.
Even worse is a system written by someone who's talented, but not quite as good as they think they are. Worst of all is the "genius" programmer who decides to use some design methodology that nobody else has ever heard of. There's a lot to be said for the boring, mediocre programmer.
I learned COBOL in the late 1970's. I never used it professionally, but it and numerous other languages that come from that period and before (e.g RPG) are all about data processing and business systems. Newer tools that map to that space we now call ETL (think Ab Initio, Informatica, Data Stage). The reason COBOL went out of vogue is because the applications built in that language have stood the test of time - no-one was need to build replacement bceuase the originals worked. This meant we (as programmers) moved on to languages that support other needs. C++, Java and related languages are great for what they do (for instance ETL tools tend to be written in C++), but they are not suitable for many business systems application without first building up a code infrastructure that supports them. If I were writing a new business systems application, I probably would choose a modern ETL tool over COBOL (less coding to get the job done), but I would think long and hard before abandoning COBOL for an existing application just because it is "old". I would also point out that just because we understand the concepts needed to properly design and implement an interactive application does not mean we have the concepts needed to properly design and implement a data processing application.
Someone may have written crappy code, and they may well still be using a flat file structure. But, most COBOL programs use 7 or less 'verbs' such as add, subtract, compute, move, perform, ... If you have experience in any other development language, and can't figure out COBOL in less than an hour - Your either lazy, or NOT a developer, just another hack who can write code.
As for Java, I've seen apps that crash, and you lose a week, and maybe a client!
!
It's takes a seasoned professional to understand that it's not the code! It's a good analyst and developer first choosing the right tool for the job, then putting together a quality product.
Someone may have written crappy code, and they may well still be using a flat file structure. But, most COBOL programs use 7 or less 'verbs' such as add, subtract, compute, move, perform, ... If you have experience in any other development language, and can't figure out COBOL in less than an hour - Your either lazy, or NOT a developer, just another hack who can write code.
As for Java, I've seen apps that crash, and you lose a week, and maybe a client!
It's takes a seasoned professional to understand that it's not the code! It's a good analyst and developer first choosing the right tool for the job, then putting together a quality product.
Since 80% of 'development' is code maintenance. I'd prefer simple, easy to read logic that is standardized and cohesiv, over something that is spread into 20 disjoint pieces that requires a cryptologist to decipher
A java billing application running on a modern transactional database...If it crashes, you can just run it again. A COBOL app on a legacy database? That just ruined your day.
A crashing COBOL program never ruined anyone's day that I know of and I've been around COBOL systems for 25 years now. Most shops with half a brain built in restart capability. We also have lots of new "cool" stuff - Java, JMS, WAS, MQ, WBI - and it seems to take way more people and time to find and fix problems in that environment than it does in MF batch/CICS COBOL.
of those 21 lines 5 were either comments or blank lines 3 were superfluous labels 4 were required by the COBOL standard -- mostly for documentation purposes, and to tell the compiler what to expect next 1 was a name so the operating system could find the program (unlike Java, the program source can have a different name than the actual program) 1 was a do nothing statement as the program was coded 2 were basically hints to the compiler -- not actual program code 2 were basically compiler directives, allowing compilation for a different architecture than where the program source was stored of the 3 remaining lines of actual program code 2 were extensions to the language, a single display would have worked also 1 was a return to the operating system (some compilers will generate that one if not present) The whole program could have been written as IDENTIFICATION DIVISION. PROGRAM-ID. TEST0001. ENVIRONMENT DIVISION. DATA DIVISION. PROCEDURE DIVISION. DISPLAY 'HELLO WORLD' GOBACK. I think that PROGRAM-ID is sort of self explanatory the DIVISIONS must be present, but are mostly to tell the compiler what is coming up next I personally prefer "GOBACK" to "STOP RUN", as it returns to the calling program, the "STOP RUN" returns to the OS, which might be a bad idea, if you are several subroutines down.
ARGH --- hit submit, not preview with default set to html....
it should be
of those 21 lines 5 were either comments or blank lines
3 were superfluous labels
4 were required by the COBOL standard -- mostly for documentation purposes, and to tell the compiler what to expect next
1 was a name so the operating system could find the program (unlike Java, the program source can have a different name than the actual program)
1 was a do nothing statement as the program was coded
2 were basically hints to the compiler -- not actual program code
2 were basically compiler directives, allowing compilation for a different architecture than where the program source was stored
of the 3 remaining lines of actual program code
2 were extensions to the language, a single display would have worked also
1 was a return to the operating system (some compilers will generate that one if not present)
The whole program could have been written as
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST0001.
ENVIRONMENT DIVISION.
DATA DIVISION.
PROCEDURE DIVISION.
DISPLAY 'HELLO WORLD'
GOBACK.
I think that PROGRAM-ID is sort of self explanatory the DIVISIONS must be present, but are mostly to tell the compiler what is coming up next
I personally prefer "GOBACK" to "STOP RUN", as it returns to the calling program, the "STOP RUN" returns to the OS, which might be a bad idea, if you are several subroutines down.
If I remember correctly (I was about 10 years old when I messed around with a COBOL training program called PASCAL ? the robot) you had to make 3 left turns with the robot to make a right turn.
If that's the program and language I'm thinking of, it should catch on here in the South (US).
"I'll bet this software isn't modularized. I'll bet this software has some pretty low security standards. I'll bet this software requires a client app installed on any user's machine."
To which I reply:
"You obviously know absolutely nothing about mainframe programming"
One of the main reasons why these old systems are still around is that they were designed and built to last YEARS. Highly modularized, parameter driven, bug-free. Yes, BUG FREE.
And "any user's machine" were / are dumb terminals. ie NO local processing.
Now fuck off back to your slow eye candy Web 2.0 crap and get off my lawn!
Sorts are a job for the operating system not the programmer. Why constantly re-invent the wheel.All the only sorting I did in over twenty years of COBOL programming was done by the operating system (VME/B VME2900)which had a multipass sort routine smart enough to pick out the best algorithm after the first pass.
WHEW! Is this a religious war or something? OK - VETERAN COBOL PROGRAMMER (1974 - 2008) HERE SPEAKING! PLEASE LISSEN UP! (ignorance is a costly commodity that few people or businesses can afford). If you read through these posts "statistically" you will find a preponderance of gripes and "apples-to-oranges" comparisons. Poorly-written, poorly maintained, old, old, OLD code is - you guessed it, REALLY unpleasant for everyone (we seem to have that point of view well-covered). How many 40-year-old JAVA apps has anyone worked on lately, hmmm? OK - NEWS FLASH! GET THIS! please! (don't be ignorant). Believe it or not, there is a HUGE difference between "COBOL", and poorly-written, poorly maintained, old, old, OLD code that happens to be written in COBOL. Did you get that? What is getting bashed is poorly-written, poorly maintained, old, old, OLD code - and people are mistakenly thinking they are bashing COBOL - a bit ignorant, you might say? OK - moving on to the bright side. As a few have tried to point out here, besides the all-too common, all-too prevalent preponderance of poorly-written, poorly maintained, old, old, OLD code - there ARE companies running their businesses RATHER HAPPILY on some WELL-WRITTEN, WELL-MAINTAINED, new, clean, modularized code that just HAPPENS to be written in (are you READY!) - ta-dah!: COBOL!!!! Yeah! Honest - it happens. OK - yeah - these are mainframes - they're the machines that suck up, and hold, and process, and route, and re-route, the billions of transactions that all you little JAVA applets and PERL folks toss around out there. OK - to be fair - I would NOT want to have to try to do some of the customer-facing stuff you guys do - not in COBOL -- in fact I couldn't. COBOL is not intended to do everything. So I am not belittling ANY other language. Just understand, NO language is any better than it's deployment and/or maintenance. But COBOL DOES let me design, develop, and maintain HUGE apps - almost anywhere in the world - EASILY! Hard to Learn? Why heck, I've bought my house, cars, you name it, using about a dozen or so words: OPEN, READ, WRITE, MOVE, ADD, SUBTRACT, COMPUTE, IF, AND, OR, ELSE, NOT, END, PERFORM, GO TO (we don't like to use that one a lot), CLOSE, STOP RUN. Now - that wasn't so bad, was it? NOW - to the REALLY bright side - you should just SEE what can be done on an Unisys Clearpath or Libra (running with a fiber optic disk sub-system) using COBOL85 (or higher) with intrinsic functions, scope terminators, etc, etc, using WFL (a highly-programmable "jcl"), DMSII and COMS - FULLY-AUTOMATED DATABASE ROLLBACK AND RECOVERY, ZERO transaction loss (out of billions)... Oh awright, I know, mainframes are not for everybody ...
My heartfelt sympathy goes to those who have suffered, and are currently suffering under code which is the result of years of neglect, abuse, mismanagement, political decisions (sadly, "IBM" (JCL, VSAM, ... etc.)
Sadly - you have not a CLUE as to just how good COBOL can be - and it's not likely that many of you ever will.
(oops-- just had a spike in my transaction volume - I'm almost at 30% capacity - gotta go - ta-ta) ... tum-de-dumm (love my Unisys)
PS - there are PLENTY of sites on the web for those who are interested in lowering their CIQ (COBOL Ignorance Quotient).
Meanwhile, let's not continue to confuse bad code that is written in COBOL with COBOL itself, and let's all educate ourselves about a language that has billions of lines of code -- most of them fairly potable, and maintained by only 90K pprogrammers.
OK - VETERAN COBOL PROGRAMMER (1974 - 2008) HERE SPEAKING! PLEASE LISSEN UP! (ignorance is a costly commodity that few people or businesses can afford). How many 40-year-old JAVA apps has anyone worked on lately, hmmm? OK - NEWS FLASH! GET THIS! please! (don't be ignorant). Believe it or not, there is a HUGE difference between "COBOL", and poorly-written, poorly maintained, old, old, OLD code that happens to be written in COBOL. Did you get that? What is getting bashed is poorly-written, poorly maintained, old, old, OLD code - and people are mistakenly thinking they are bashing COBOL - a bit ignorant, you might say? As a few have tried to point out here, there ARE companies running their businesses RATHER HAPPILY on some WELL-WRITTEN, WELL-MAINTAINED, new, clean, modularized code that just HAPPENS to be written in (are you READY!) - ta-dah!: COBOL!!!! Yeah! Honest - it happens. To be fair - COBOL is not intended to do everything. So I am not belittling ANY other language. Just understand, NO language is any better than it's deployment. But COBOL DOES let me design, develop, and maintain HUGE apps - almost anywhere in the world - EASILY! You should just SEE what can be done on an Unisys Clearpath or Libra (running with a fiber optic disk sub-system) using COBOL85 (or higher) with intrinsic functions, scope terminators, etc., etc., using WFL (a highly-programmable "jcl"), DMSII and COMS - FULLY-AUTOMATED DATABASE ROLLBACK AND RECOVERY, ZERO transaction loss (out of billions!). My heartfelt sympathy goes to those who have suffered, and are currently suffering under code which is the result of years of neglect, abuse, mismanagement, political decisions (sadly, "IBM" JCL, VSAM, ... etc. - I, too have worked with some COBOL installations from the pits of hell). Sadly, you have not a CLUE as to just how good COBOL can be - and it's not likely that many of you ever will.
There are PLENTY of sites on the web for those who are interested in lowering their CIQ (COBOL Ignorance Quotient). Meanwhile, let's not continue to confuse bad code that is written in COBOL with COBOL itself.
VETERAN COBOL PROGRAMMER (1974 - 2008) HERE SPEAKING! PLEASE LISSEN UP! (ignorance is a costly commodity that few people or businesses can afford). If you read through these posts "statistically" you will find a preponderance of gripes and "apples-to-oranges" comparisons. Poorly-written, poorly maintained, old, old, OLD code is - you guessed it, REALLY unpleasant for everyone (we seem to have that point of view well-covered). How many 40-year-old JAVA apps has anyone worked on lately, hmmm? NEWS FLASH! GET THIS! please! (don't be ignorant). Believe it or not, there is a HUGE difference between "COBOL", and poorly-written, poorly maintained, old, old, OLD code that happens to be written in COBOL. Did you get that? What is getting bashed is poorly-written, poorly maintained, old, old, OLD code - and people are mistakenly thinking they are bashing COBOL - a bit ignorant, you might say? Moving on to the bright side - as a few have tried to point out here, besides the all-too common, all-too prevalent preponderance of poorly-written, poorly maintained, old, old, OLD code - there ARE companies running their businesses RATHER HAPPILY on some WELL-WRITTEN, WELL-MAINTAINED, new, clean, modularized code that just HAPPENS to be written in (are you READY!) - ta-dah!: COBOL!!!! Yeah! Honest - it happens. OK - yeah - these are mainframes - they're the machines that suck up, and hold, and process, and route, and re-route, the billions of transactions that all you little JAVA applets and PERL folks toss around out there. OK - to be fair - I would NOT want to have to try to do some of the customer-facing stuff you guys do - not in COBOL -- in fact I couldn't. COBOL is not intended to do everything. So I am not belittling ANY other language. Just understand, NO language is any better than it's deployment and/or maintenance. But COBOL DOES let me design, develop, and maintain HUGE apps - almost anywhere in the world - EASILY! Hard to Learn? Why heck, I've bought my house, cars, you name it, using about a dozen or so words: OPEN, READ, WRITE, MOVE, ADD, SUBTRACT, COMPUTE, IF, AND, OR, ELSE, NOT, END, PERFORM, GO TO (we don't like to use that one a lot), CLOSE, STOP RUN. Now - that wasn't so bad, was it? To the REALLY bright side - you should just SEE what can be done on an Unisys Clearpath or Libra (running with a fiber optic disk sub-system) using COBOL85 (or higher) with intrinsic functions, scope terminators, etc, etc, using WFL (a highly-programmable "jcl"), DMSII and COMS - FULLY-AUTOMATED DATABASE ROLLBACK AND RECOVERY, ZERO transaction loss (out of billions)... Oh awright, I know, mainframes are not for everybody ...
My heartfelt sympathy goes to those who have suffered, and are currently suffering under code which is the result of years of neglect, abuse, mismanagement, political decisions (sadly, "IBM" JCL, VSAM, ... etc.). Sadly - you have not a CLUE as to just how good COBOL can be - and it's not likely that many of you ever will.
PS - there are PLENTY of sites on the web for those who are interested in lowering their CIQ (COBOL Ignorance Quotient).
Meanwhile, let's not continue to confuse bad code that is written in COBOL with COBOL itself, and let's all educate ourselves about a language that has billions of lines of code -- most of them fairly potable, and maintained by only 90K pprogrammers.
I can't speak for the IBM COBOL world but I can speak for the Wang VS COBOL world and Wang VS mainframes. The VS has optional transaction processing at the OS / file system level. Any indexed file can be initially built or later reorganized to have recovery blocks. Any program that opens such a file will cause the OS automatically to create a BIJ per user of the file. Wang COBOL 74 and 85 both have COMMIT and ROLLBACK verbs. Moreover, the Wang VS transaction system supports committing nested transactions into the higher one or rolling back just the current nested level.
If a program lacking COMMIT/ROLLBACK statements is suddenly given to deal with a soft recoverable file, all the updates it makes will accumulate and will automatically commit when the program successfully completes. If the program is canceled or the system stops, all the changes it made will be rolled back.
When testing software, the ability of the system to roll back changes is not the way it's done in Wang VS systems. It's more efficient to back up the files to be modified, disk-to-disk, and put them back if a rerun is necessary. In many cases the tests are done on a development system or a development partition in a VM environment. In these cases file snapshots are brought into the development environment, where it is just common sense to park copies of them in case the inevitable reruns become necessary.
One of the problems of using tools like COBOL outside the mainframe environment is that you won't have the infrastructure like transaction processing.
In the Wang VS mainframe, now virtualized and running on Dell PowerEdge servers under Linux, we have transaction processing and specific file types at the OS level. The VS OS knows about consecutive files, print files, object files, indexed files, alternate indexed files, relative files, etc. Record-level compression is an option at the OS level and is the default for indexed data files, source files and printfiles. Compressed records are an option for the program or utility that creates a file but are transparent to programs reading a file.
We also have a good 4GL and relational database, PACE. I can create an example customer file in less than five minutes, with a full range of access screen programs, without writing a single line of code.
Look at the bright side: there's always seppuku.
For the most part, stuff doesn't fail. It is pretty reliable, and the system is not under heavy utilization (thank god).
Some of the better bits of code have good recovery points; some of them even have "restart" options in their parameters.
With all the custom code, however, things have a tendency to fail in interesting ways.
ad logicam Claiming a proposition is false because it was presented as the conclusion of a fallacious argument.
At least you agree that COBOL is dead.
http://www.computerweekly.com/blogs/it-networks-and-communications-blog/2008/04/cobol-programmers-back-in-dema.html
Re: " ... there will always be a niche market for every language but if you mean 'come back' like COBOL would become the average developer's language of choice I would curtly retort with a sharp 'ha.'"
Quite true - the "average developer" has to deal with the environment he/she is in. If that environment is not COBOL, then COBOL makes no sense at all.
HOWEVER ... where the environment IS COBOL, it makes perfect sense, does it not? Why get rid of COBOL just because it's COBOL??
The ONLY "come back" COBOL needs to make is to come back out from under the ginormous mountains of ignorance and 80' - 90's client server marketing hype and mythology, into being understood as the superb language of choice for developing solid, portable (if properly standardized) mainframe business applications ...
COBOL make a "comeback"? HAH! -- it never left in the first place !