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."
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.'
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.
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.
>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".
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.
If software is implemented correctly, it will stand the test of time.
Sturgeon's [Ll]aw [wikipedia.org] applies to software -- except probably with the 90% figure adjusted upward as some function of Moore's law [wikipedia.org] and the observations of Fred Brooks [wikipedia.org], 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.
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.
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'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.
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.
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.
Basically, they're comfortable with their crusty old bugs, and they don't want to deal with scary new bugs.
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.)
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.
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 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.
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?
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 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.
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?
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).
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.
You get your Japanese reference book, study hard, maybe even get your 1-kyuu certification (I think four years of study for that is typical for non-native speakers?)
So you get a job translating. Your first project is to translate a recently discovered and unpublished early 1900's work written by someone like Touson Shimazaki or Mori Ougai. Good luck!
This is why I said learning a new programming language was NOT like learning Japanese. True, legacy systems use older versions of a language. But there are still a limited number of commands which are well-documented.
I work with legacy systems a little (but not COBOL) and I say this from experience: deciphering someone's shitty programming style in an antiquated language sucks. But it's doable with little training in the language.
It's actually no different than trying to decipher some code writen in a language you are already an expert in. I'm fluent in both PL/SQL and T-SQL and sometimes I look at a procedure and just have to rewrite it from scratch because the original author wrote horrid code. Sometimes I look at it and can trace through it to figure out what it does, crappy or not. Sometimes it's beautiful and pristine and easy to understand. In the end, I have to make a change to it and I figure out how to change it without breaking anything. Then I move on to something else.
If it were COBOL, I might have a slight hurdle learning the syntax, but already knowing how to code and knowing several languages (BASIC, FORTRAN, C, C++, C#, Java, PL/SQL, T-SQL, etc.) means that a loop is a loop whether it's a FOR i=1 to 15 type loop or a for(int i=1; i [lt] 15; i++) type loop. Syntax can be deciphered with a reference manual. Programming and understanding code is a skill.
I might have a slight hurdle learning the syntax, but already knowing how to code and knowing several languages (BASIC, FORTRAN, C, C++, C#, Java, PL/SQL, T-SQL, etc.) means that a loop is a loop whether it's a FOR i=1 to 15 type loop or a for(int i=1; i [lt] 15; i++) type loop.
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.
In my case, I've taught myself to use a couple of dozen programming languages over the years, and I've mastered several of them. However, I've never managed to make it all the way through the senseless boilerplate headers of any COBOL program before puking. Once the monitor is covered with puke, it's too hard to see the screen well enough to continue.
I'm a full-time COBOL programmer with a history in Java professionally and C/C++ and a number of other languages in my own company.
COBOL isn't hard to learn. It certainly isn't much more difficult than any other modern language.
The hard part is that COBOL really doesn't help you much. In most modern languages you can just grab a library containing a complete linked list or efficient sort algorithm. COBOL programmers actually need to know how stuff like this works. Now maybe you're an exception, but surprisingly many Java developers don't know the first thing about basic algorithms and memory structures like that. Add to that the need for high performance (the cost of running a COBOL program is often charged by the minute and measured in fractions of seconds), high stability (I've worked with code which could bankrupt a company if not fixed within a week or so) and the complexity of the typical Mainframe environments COBOL runs on, and you can see why it isn't trivial to start working with COBOL.
Like was mentioned in a previous reply, it's not JUST learning COBOL, there is also other stuff like CICS, that you have to know as well.
But you take something else like C. I can get gcc, and start writing code. Same thing if I want to do some web 2.0 project. It's almost trivial to get a LAMP setup up and running.
There's nothing that can simulate a working z/OS environment. There's no compilers to download. There's an emulator out there called Hercules for various IBM mainframes, but you can't get the OS to run on top of it. It's near impossible to go grab "COBOL for Dummies", and start firing up code. COBOL is also rarely taught in university anymore. So the only place you COULD get some exposure to the system, you aren't going to get it. Even if you COULD download the OS, setting it up is very nontrivial. And it's NOTHING like you've seen before.
And these systems aren't just 100% COBOL either. There's a host of mainframe type things like Natural for an ADABAS Database that you're NEVER have experience doing unless you already have a job doing it. You got to the point to where you wrote that program in COBOL, now do you know the JCL to set it up to run? Ok it ran, know what a SOC-7 error is? BTW, it's an uninitialized numeric to save you from typing it into Google.
All these things mean the vast majority of people out there now just don't have ANY experience in dealing with these things. It's hard enough to find people that can step into a team to support a major project. Add in those legacy requirements, and it's probably nil. Anyone qualified to do it, is probably 3 years from retirement from where they are at, and would probably have to offer 7 figures a year to make it worth their while to screw up their retirement options.
Cobol was never a good language, and computer scientists fought hard to move the industry away from it because the probability of writing defective code was extremely high. It is readable, but really only in the same sense Intercal is. There are many, many hundreds of programming languages out there with far more programmers in each than Cobol has ever had. Use what makes real sense, not what some medieval history teacher thinks ancient civilizations may have liked. Hell, ADA has more merit - and more support for modern capabilities. If people are really serious about Cobol, I'm going to write an Algol65 plugin for Firefox - see how people like Algolscript pages. Nyah!
You haven't ever needed to learn it, or, logically, ever support anything that was written in it, but you don't see why it's a big deal?
It's a big deal. Legacy COBOL is almost ALL scary code. It's not like it was sexy and clean and professional...The way they wrote that stuff is alien to modern methods. They told the COBOL person what the code needed to do, and he disappeared for a while, and came back and told them it was done. Documentation? Slim. Comments? You must be joking.
I've maintained COBOL code at three significant corporations, and there is so much "hero" code in there, it's hard to even convey to people. This 100,000 line application? It was written by one person, and no one who worked with him was capable of understanding it. No oversight, no review. When he kicked over dead it became a dark spot on the map labeled, "Here be dragons" and no one has touched it since.
Modern methods just don't work like that. In the old days, when you licensed a COBOL app from some company, they sent you the goddamn source code with it, and you could change it...Then the guy who made the changes left, and what is left behind is not supportable by the original company (and the company isn't the original company, but a company that has been bought by a company that was later bought by a different company).
So you need to bring people in, and you need to teach them this application which no one understands, and which isn't really documented, and which is written in a basically dead language, and is often written using the sort of spaghetti code methods we are all told over and over and over NOT TO EVER USE.
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#.
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 old 2 year school still teaches COBOL, RPG, and AIX classes (Southwest Tennessee Community College) and even offers a 2 year A.S. degree in those technologies. The University of Memphis used to teach COBOL in the MIS track, but I have a feeling they've jumped on the.NET bandwagon. I can't speak for the rest of the country, but Memphis, TN has a lot of legacy mainframes and one of my former employer still churns out around 10k lines of new COBOL code a year, at minimum.
What a lot of folks also don't realize is, you don't just rip out a multi-million dollar mainframe system and just replace it with something new. It's also not as simple as "just coding it in Java" and deploying on that hardware. Hell, even writing it in C has issues on many of these machines. The mainframe I was exposed to didn't support the full ASCII character set and you had to use trigraphs. You can't just "apt-get compiler-for-language-of-choice" on these machines, nor download a.msi and get an instant installer.
These are mainframes. They don't even have a filesystem that you would recognize, much less a bash prompt. JCL anyone?
The point is, it's not a simple matter of just porting the software into a modern language. You'll also have to build out the entire hardware system, write the software, test extensively, and then run both concurrently to ensure consistency, and all of that costs money. Lots and lots of money. If what you have works for what you need it for, there's no impetus to change until something like this comes along. However, I'd be willing to bet it's easier and cheaper to change *policy* (the laws) than to scrap the old system completely and rebuild it from scratch.
DeVry does, or at least did, a few years ago. I should know, I took the class. It was an upper level course, and part of a set of required electives. You had to take COBOL or (something) or (something). I don't even remember if the other two were languages or theory or what. But it was there. All campuses don't have to teach it, it is market driven. Having a very large and old telephone company not to far away means there is some demand for people who have had some exposure to the language.
As some others here have commented, COBOL is amazing. I learned programing through BASIC, HyperScript, C, Java, and other languages. COBOL is so primitive in so many ways. It feels a bit like trying to use your knowledge of Romance languages to decipher how to say something in Japanese.
Now this makes sense, as COBOL was designed so long ago for machines that only had punch-cards and such. But for most any student who learns programing these days to be given COBOL is going to be a huge logical shift.
And that doesn't include the syntax. Ignoring the special columns and such, no modern languages are very close to COBOL's syntax.
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++?
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.
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.
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.
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.
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.
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".
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.
When I build a system from scratch, it is fast, clean efficient.
Which makes me suspicious. Simple and efficient rarely go hand in hand. My first implementation is usually slow and stupid and simple, because stupid (=slow) is generally simplest.
On another point entirely, you say:
It has everything one of the user "needs" to do their job.
and:
Feature creep is a real problem,
The trouble is that COBOL is generally used for financial apps. They never do everything the user needs, because the apps are meant to last forever. Everything the user needs lasts about a year until the legislation changes, or organisational structure changes or various other things. These programs have to feature creep because features keep creeping in from the outside. You can't write a complete, finished financial program.
Generally as programs are incrementally modified, they get nastier as the original program was designed with a certain structure and dataflow in mind. Sooner or later, a new feature comes along which requires a modified dataflow, and that can be nasty to add. So, maybe a little global variable gets added to allow this data to be passed around. To do it "properly" would require a considerable redesign which may not be fesiable. Remember, these programs have to reflect the world right now, so features must be added in a timely manner.
Repeat that process for 40 years where multiple language standards have been ratified, programming styles have come and gone, the original developers are long dead and the employment structure and tax law is completely different and you have a real mess.
But that's not just complexity for the sake of it, and no amount of KISS will solve that problem.
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.
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.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.
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.
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.
I've seen it, sure, but... I dunno. I've got no reason to think the guy's lying.
You want everybody's pay cut down to six whatever? I can do that for you in/ten minutes/. Guaranteed. You say you want it to happen, I make it happen.
You want everybody's pay cut down to six whatever, recalculating all employees as if they were paid on an hourly basis, reclassifying employees as appropriate, comply in full with all labor codes while I do so, maintain an escrow account with the difference between their real pay and their current pay, pay that out at some undetermined point in the future -- and have all of it work, perfectly, the first time and every time, taking full responsibility for every employee of the STATE OF CALIFORNIA?
Man says six months, I'm not telling you he's wrong.
It's not just the COBOL aspect. It is the legacy PDP-11 that is running it, or the VAX-VMS, or whatever... The language is easy, but figuring out how to login, setup the build environment, decode the weird legacy build script, and then transfer the program load to the target computer can be a tall order for a noob.
And what hot young smart kid wants to learn all this for next to nothing pay and the prospect of never using the skills again?
It can be done, however, and whoever has these systems should make
>Eventually the COBOL systems will be replaced simply because they run on computers that >aren't compatible with today's designs.
Completely wrong. There is Cobol code from 1960s running on todays IBM Z10 processor. IBM is almost always backward compatible. IBM ain't Microsoft where the code breaks every couple years when MS releases a new windows or a service pack.
Who Cares What Language, It Reeks of Poor Design (Score:5, Insightful)
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.'
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Informative)
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Interesting)
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.
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Informative)
>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".
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Interesting)
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.
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:4, Insightful)
If software is implemented correctly, it will stand the test of time.
Sturgeon's [Ll]aw [wikipedia.org] applies to software -- except probably with the 90% figure adjusted upward as some function of Moore's law [wikipedia.org] and the observations of Fred Brooks [wikipedia.org], 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.
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Informative)
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.
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Insightful)
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.
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Insightful)
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.
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:4, Interesting)
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?
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Informative)
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.
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:4, Interesting)
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.
Parent
Re:Who Cares What Language, It Reeks of Poor Desig (Score:5, Interesting)
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).
Parent
I don't get it (Score:5, Insightful)
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.
Re:I don't get it (Score:5, Insightful)
To expand on your analogy a little:
You get your Japanese reference book, study hard, maybe even get your 1-kyuu certification (I think four years of study for that is typical for non-native speakers?)
So you get a job translating. Your first project is to translate a recently discovered and unpublished early 1900's work written by someone like Touson Shimazaki or Mori Ougai. Good luck!
=Smidge=
Parent
Re: (Score:3, Insightful)
This is why I said learning a new programming language was NOT like learning Japanese. True, legacy systems use older versions of a language. But there are still a limited number of commands which are well-documented.
I work with legacy systems a little (but not COBOL) and I say this from experience: deciphering someone's shitty programming style in an antiquated language sucks. But it's doable with little training in the language.
Re:I don't get it (Score:5, Insightful)
It's actually no different than trying to decipher some code writen in a language you are already an expert in. I'm fluent in both PL/SQL and T-SQL and sometimes I look at a procedure and just have to rewrite it from scratch because the original author wrote horrid code. Sometimes I look at it and can trace through it to figure out what it does, crappy or not. Sometimes it's beautiful and pristine and easy to understand. In the end, I have to make a change to it and I figure out how to change it without breaking anything. Then I move on to something else.
If it were COBOL, I might have a slight hurdle learning the syntax, but already knowing how to code and knowing several languages (BASIC, FORTRAN, C, C++, C#, Java, PL/SQL, T-SQL, etc.) means that a loop is a loop whether it's a FOR i=1 to 15 type loop or a for(int i=1; i [lt] 15; i++) type loop. Syntax can be deciphered with a reference manual. Programming and understanding code is a skill.
Layne
Parent
Re:I don't get it (Score:5, Funny)
I might have a slight hurdle learning the syntax, but already knowing how to code and knowing several languages (BASIC, FORTRAN, C, C++, C#, Java, PL/SQL, T-SQL, etc.) means that a loop is a loop whether it's a FOR i=1 to 15 type loop or a for(int i=1; i [lt] 15; i++) type loop.
Except that the second one only goes to 14.
Parent
Re:I don't get it (Score:5, Funny)
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.
In my case, I've taught myself to use a couple of dozen programming languages over the years, and I've mastered several of them. However, I've never managed to make it all the way through the senseless boilerplate headers of any COBOL program before puking. Once the monitor is covered with puke, it's too hard to see the screen well enough to continue.
Parent
Re:I don't get it (Score:5, Interesting)
I'm a full-time COBOL programmer with a history in Java professionally and C/C++ and a number of other languages in my own company.
COBOL isn't hard to learn. It certainly isn't much more difficult than any other modern language.
The hard part is that COBOL really doesn't help you much. In most modern languages you can just grab a library containing a complete linked list or efficient sort algorithm. COBOL programmers actually need to know how stuff like this works. Now maybe you're an exception, but surprisingly many Java developers don't know the first thing about basic algorithms and memory structures like that. Add to that the need for high performance (the cost of running a COBOL program is often charged by the minute and measured in fractions of seconds), high stability (I've worked with code which could bankrupt a company if not fixed within a week or so) and the complexity of the typical Mainframe environments COBOL runs on, and you can see why it isn't trivial to start working with COBOL.
The language is easy, using it is not.
Parent
Re:I don't get it (Score:5, Informative)
Like was mentioned in a previous reply, it's not JUST learning COBOL, there is also other stuff like CICS, that you have to know as well.
But you take something else like C. I can get gcc, and start writing code. Same thing if I want to do some web 2.0 project. It's almost trivial to get a LAMP setup up and running.
There's nothing that can simulate a working z/OS environment. There's no compilers to download. There's an emulator out there called Hercules for various IBM mainframes, but you can't get the OS to run on top of it. It's near impossible to go grab "COBOL for Dummies", and start firing up code. COBOL is also rarely taught in university anymore. So the only place you COULD get some exposure to the system, you aren't going to get it. Even if you COULD download the OS, setting it up is very nontrivial. And it's NOTHING like you've seen before.
And these systems aren't just 100% COBOL either. There's a host of mainframe type things like Natural for an ADABAS Database that you're NEVER have experience doing unless you already have a job doing it. You got to the point to where you wrote that program in COBOL, now do you know the JCL to set it up to run? Ok it ran, know what a SOC-7 error is? BTW, it's an uninitialized numeric to save you from typing it into Google.
All these things mean the vast majority of people out there now just don't have ANY experience in dealing with these things. It's hard enough to find people that can step into a team to support a major project. Add in those legacy requirements, and it's probably nil. Anyone qualified to do it, is probably 3 years from retirement from where they are at, and would probably have to offer 7 figures a year to make it worth their while to screw up their retirement options.
Parent
Re:I don't get it (Score:4, Interesting)
Parent
Re:I don't get it (Score:5, Insightful)
You haven't ever needed to learn it, or, logically, ever support anything that was written in it, but you don't see why it's a big deal?
It's a big deal. Legacy COBOL is almost ALL scary code. It's not like it was sexy and clean and professional...The way they wrote that stuff is alien to modern methods. They told the COBOL person what the code needed to do, and he disappeared for a while, and came back and told them it was done. Documentation? Slim. Comments? You must be joking.
I've maintained COBOL code at three significant corporations, and there is so much "hero" code in there, it's hard to even convey to people. This 100,000 line application? It was written by one person, and no one who worked with him was capable of understanding it. No oversight, no review. When he kicked over dead it became a dark spot on the map labeled, "Here be dragons" and no one has touched it since.
Modern methods just don't work like that. In the old days, when you licensed a COBOL app from some company, they sent you the goddamn source code with it, and you could change it...Then the guy who made the changes left, and what is left behind is not supportable by the original company (and the company isn't the original company, but a company that has been bought by a company that was later bought by a different company).
So you need to bring people in, and you need to teach them this application which no one understands, and which isn't really documented, and which is written in a basically dead language, and is often written using the sort of spaghetti code methods we are all told over and over and over NOT TO EVER USE.
Parent
No Thanks (Score:5, Interesting)
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.
Re:No Thanks (Score:5, Insightful)
COBOL is EASY compared to C/C++ or even Java/C#.
That's a strength, not a weakness.
Parent
Re:No Thanks (Score:4, Insightful)
Does that make it better?
Parent
What COBOL really needs (Score:5, Funny)
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. :-)
Re:What COBOL really needs (Score:4, Funny)
You mean like Cobol on Cogs [coboloncogs.org]? :)
Parent
Re:What COBOL really needs (Score:5, Funny)
First you need an Object-Oriented COBOL, aka ADD 1 TO COBOL GIVING COBOL.
Parent
Re:What COBOL really needs (Score:5, Funny)
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. :-)
You are right, COBOL probably does need a new hip.
Parent
"find me a college that teaches it" (Score:5, Insightful)
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.
Re:"find me a college that teaches it" (Score:5, Informative)
My old 2 year school still teaches COBOL, RPG, and AIX classes (Southwest Tennessee Community College) and even offers a 2 year A.S. degree in those technologies. The University of Memphis used to teach COBOL in the MIS track, but I have a feeling they've jumped on the .NET bandwagon. I can't speak for the rest of the country, but Memphis, TN has a lot of legacy mainframes and one of my former employer still churns out around 10k lines of new COBOL code a year, at minimum.
What a lot of folks also don't realize is, you don't just rip out a multi-million dollar mainframe system and just replace it with something new. It's also not as simple as "just coding it in Java" and deploying on that hardware. Hell, even writing it in C has issues on many of these machines. The mainframe I was exposed to didn't support the full ASCII character set and you had to use trigraphs. You can't just "apt-get compiler-for-language-of-choice" on these machines, nor download a .msi and get an instant installer.
These are mainframes. They don't even have a filesystem that you would recognize, much less a bash prompt. JCL anyone?
The point is, it's not a simple matter of just porting the software into a modern language. You'll also have to build out the entire hardware system, write the software, test extensively, and then run both concurrently to ensure consistency, and all of that costs money. Lots and lots of money. If what you have works for what you need it for, there's no impetus to change until something like this comes along. However, I'd be willing to bet it's easier and cheaper to change *policy* (the laws) than to scrap the old system completely and rebuild it from scratch.
Parent
Re:"find me a college that teaches it" (Score:5, Interesting)
DeVry does, or at least did, a few years ago. I should know, I took the class. It was an upper level course, and part of a set of required electives. You had to take COBOL or (something) or (something). I don't even remember if the other two were languages or theory or what. But it was there. All campuses don't have to teach it, it is market driven. Having a very large and old telephone company not to far away means there is some demand for people who have had some exposure to the language.
As some others here have commented, COBOL is amazing. I learned programing through BASIC, HyperScript, C, Java, and other languages. COBOL is so primitive in so many ways. It feels a bit like trying to use your knowledge of Romance languages to decipher how to say something in Japanese.
Now this makes sense, as COBOL was designed so long ago for machines that only had punch-cards and such. But for most any student who learns programing these days to be given COBOL is going to be a huge logical shift.
And that doesn't include the syntax. Ignoring the special columns and such, no modern languages are very close to COBOL's syntax.
Parent
A Question For SW developers? (Score:3, Interesting)
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!
Highly likely (Score:3, Insightful)
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.
Re:Highly unlikely (Score:4, Interesting)
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.
Parent
Same COBOL guys from Y2K? (Score:3, Informative)
Good news and bad news (Score:5, Funny)
Bad news: The gig pays minimum age.
The real skill is 'thinking before coding' (Score:5, Insightful)
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".
KISS (Score:4, Interesting)
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.
Re:KISS (Score:4, Insightful)
First you say:
Keep IT Simple Stupid.
Then you say:
When I build a system from scratch, it is fast, clean efficient.
Which makes me suspicious. Simple and efficient rarely go hand in hand. My first implementation is usually slow and stupid and simple, because stupid (=slow) is generally simplest.
On another point entirely, you say:
It has everything one of the user "needs" to do their job.
and:
Feature creep is a real problem,
The trouble is that COBOL is generally used for financial apps. They never do everything the user needs, because the apps are meant to last forever. Everything the user needs lasts about a year until the legislation changes, or organisational structure changes or various other things. These programs have to feature creep because features keep creeping in from the outside. You can't write a complete, finished financial program.
Generally as programs are incrementally modified, they get nastier as the original program was designed with a certain structure and dataflow in mind. Sooner or later, a new feature comes along which requires a modified dataflow, and that can be nasty to add. So, maybe a little global variable gets added to allow this data to be passed around. To do it "properly" would require a considerable redesign which may not be fesiable. Remember, these programs have to reflect the world right now, so features must be added in a timely manner.
Repeat that process for 40 years where multiple language standards have been ratified, programming styles have come and gone, the original developers are long dead and the employment structure and tax law is completely different and you have a real mess.
But that's not just complexity for the sake of it, and no amount of KISS will solve that problem.
Parent
COBOL just works (Score:5, Informative)
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.
New code isn't that bad (Score:3)
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.
a little refreshment of COBOL for all (Score:5, Informative)
http://99-bottles-of-beer.net/language-cobol-1820.html [99-bottles-of-beer.net]
*nawcom reads the first part of the code and pukes all over the screen*
Re:the guy wasn't going to reduce the pay anyways (Score:4, Informative)
I've seen it, sure, but... I dunno. I've got no reason to think the guy's lying.
You want everybody's pay cut down to six whatever? I can do that for you in /ten minutes/. Guaranteed. You say you want it to happen, I make it happen.
You want everybody's pay cut down to six whatever, recalculating all employees as if they were paid on an hourly basis, reclassifying employees as appropriate, comply in full with all labor codes while I do so, maintain an escrow account with the difference between their real pay and their current pay, pay that out at some undetermined point in the future -- and have all of it work, perfectly, the first time and every time, taking full responsibility for every employee of the STATE OF CALIFORNIA?
Man says six months, I'm not telling you he's wrong.
Parent
Re: (Score:3, Informative)
I can't tell if you're jesting, or if you simple don't know that most of the cobol variants you named actually do exist....
Acronym (Score:4, Funny)
Crappy Old Bad Obsolete Language
Parent
Re:Bah (Score:5, Funny)
I know COBOL programmers making 150 an hour that have been on the same contract for 10 years.
They work 40, and rarely are on call.
So there is a certain appeal. Plus COBOL is interesting.
I mean C? who wants to work on 1970's tech?
Parent
Re: (Score:3, Insightful)
And what hot young smart kid wants to learn all this for next to nothing pay and the prospect of never using the skills again?
It can be done, however, and whoever has these systems should make
Re:Cobol still runs on hardware (Score:4, Informative)
>Eventually the COBOL systems will be replaced simply because they run on computers that
>aren't compatible with today's designs.
Completely wrong. There is Cobol code from 1960s running on todays IBM Z10 processor. IBM is almost always backward compatible. IBM ain't Microsoft where the code breaks every couple years when MS releases a new windows or a service pack.
Parent