- Feature Articles
- CodeSOD
- Error'd
- Forums
-
Other Articles
- Random Article
- Other Series
- Alex's Soapbox
- Announcements
- Best of…
- Best of Email
- Best of the Sidebar
- Bring Your Own Code
- Coded Smorgasbord
- Mandatory Fun Day
- Off Topic
- Representative Line
- News Roundup
- Editor's Soapbox
- Software on the Rocks
- Souvenir Potpourri
- Sponsor Post
- Tales from the Interview
- The Daily WTF: Live
- Virtudyne
Admin
I can understand some hesitance to rewriting, though it depends on the size/complexity of the initial problem vs workload in keeping it intact. See JoelOnSoftware.com for an essay on the problems of rewrites.
I've worked (a while back) for a gov't research organisation where I
- rewrote a desktop application (C++ with terrible text-based UI into FoxPro 2.6 with a UI that was said to be impossible prior to FoxPro 3.0)
- ported a smallish simulation/forecast model from Fortran to C (and found & corrected a bug in the previous Vax to MS FORTRAN porting effort)
- was not allowed to attempt anything with a larger, more complex model which also was in FORTRAN.
There was much demand to use this latter model is a range of situations and other applications, but it was not easy to hook into while keeping it as a single lump. Instead of being "an implementation" of a mathematical model, it was actually the only existing expression of that model. Some years before me, a bunch of CS folk took on a complete rewrite using AI/KBS techniques, but made a complete mess of it and the resulting program was so slow it was unuseable. And they wasted a lot of time and money while telling everyone this thing would be great. It wasn't. So the idea of rewriting/refactoring, or using OO techniques on this model, turned into a dirty word.
Admin
I'm a developer in the Automotive space and even compete with morons like these. I actually do have code that is still running over 6 years later that the dealers won't let go of. Our DOS product was developed over 9 years and 40 of the 2000 dealers just won't upgrade to our new windows product...it works just great for them. I'm not sure if I could find the compiler floppies!
Sounds like UCS to me. Reynolds and ADP have been Unix Pick platform for decades...funny thing is UCS just acquired Reynolds! Misery loves company.
CodeMonkey
Admin
Wow! I'm amazed at all the responses to this... This company was definitely stuck in the dark ages... For the record, they did take SOME poetic license with some of the details. For example... all the changes, the compiler, the emulator, the debugger... really happened all around the same time... And I don't think I specified exactly which type of computer they used... I don't quite remember myself, I worked on Windows boxes... Anyway... say what you will about it being a bad place to work, but when you've been out of work for a while and you need experience, any port in a storm, and all... They didn't even pay decently. Oh, and it wasn't all that slow, actually... amazing what you can do with an up-to-date processor and 30 year old code.
Admin
Why would the customers not want to renew the maintenance? Because of the ugly UI? Ask some users. The last thing they want is a new UI as long as the existing one allows them to work quickly. Might be ugly as hell and ignoring all Windows UI conventions, but that's what they've worked with over the last 20 years, they know it by heart and every change means discomfort.
The real problem is that you can hardly win new customers with such an ugly beast, so your customer base will be slowly but steadily decreasing.
Admin
The assumption is that it would be cheaper and easier to maintain the system if it was rewritten to work on todays computers. It also may likey sell more copies if the program had an easy to use interfaces.
We aren't jumping up and down saying they should be using the the latest and greatest tools, just to use the new tools. We are saying they are wasting their time and money trying to maintain an old obsolete system.
The real WTF is regular posters entering a CAPTCHA
Admin
This is not true. Windows creates message queue for all windows, and application periodically asks if there is some message for some window in queue. Typical way is to send this message to handler of window then.
Admin
I think that if you talk to programmers under 30 about this stuff, they'll almost universally say "WTF?", but if you talk to programmers over 50 there's a much higher chance to hear them say "yeah, been there, seen that."
Admin
> But how does this company remain profitable?
My guess: By not gratuitously rewriting software that works.
Admin
nO i DON'T BELIEVE IT. I CAN TYPE NUMBERS JUST FIND WITH CAPS LOCK ON 1234567890
Don't blame Microsoft Windows because you had a cheap keyboard.
Admin
nO i DON'T BELIEVE IT. I CAN TYPE NUMBERS JUST FIND WITH CAPS LOCK ON 1234567890
Don't blame Microsoft Windows because you had a cheap keyboard.
Admin
But has anyone advise their management to send people to write a COBOL compiler for Windows (Much like MS Foxpro for Windows v2.5 to MS Foxpro for DOS v2.5)
I think it'd be easier to write efficient and debugable code that way. And best of all, they don't need to change the code that "No need to Change It!".
Captcha: clueless (What a coincidence!)
Admin
Lookee here, GNU COBOL:
http://www.gnu.org/software/cobol/cobol.html
Port, refactor to support common data formats, build a "service" front end, and implement the GUI in Java, .net, HTML, or some other relatively contemporary technology. Say what you will about COBOL - it's not intended for writing "fun" or "cool" software. It's for money.
Admin
My head just exploded.
Admin
Maybe the point was that dealerships weren't willing to buy an AS 400 to replace their ancient System/3 when they had a bunch of perfectly decent 286s with Windows 3.1 sitting around. I'm not sure what the exact time frame of the phase-out was, but it must've been along those lines. Still, a fuly functional System/3 ISA emulator on x86 is a shockingly bold advance in the state of computer science, that business could possibly have been moderately profitable (but they probably sunk millions into a bunch of phds for a few years and never saw a dime of direct revenue from it) if anyone had the vision to start a subsidary to sell it.
My question is why go to C? A company going out of business never stopped anyone using its compilers. The frankenstein they came up with is considerably more expensive to create and maintain than porting it to an x86 COBOL compiler. (Maybe someone said "C is faster"?)
This reminds me of those old futuristic movies where they had flat screens the size of a wall, and they ran a character based terminal client. GUIs would have given folks a heart attack in the 60s and 70s!
Admin
Are all seven years part of the same gigantic, horribly mismanaged project?
Admin
Actually a better strategy, IMO, is to upgrade while there are still developers who can effectively read the code of the original system whle also being able to effectively redevelop in the most modern development environment. If you still have a COBOL system, you need to upgrade to a modern environment soon while there are programmers that still know COBOL and also not something modern like .NET or Java. Once you miss that time window, you as might as well throw the original code away.
Admin
That's IBM Client Access/400. You're still running a 3270 terminal emulator to a real AS/400 (or an iSeries now, perhaps), but the "gui" elements are added to it. This WTF is different because the old IBM iron is gone.
Admin
Do you have a pathological aversion to being corrected? You were wrong-- 1952 is not WWII and neither is 1948. Besides, if you use that rationale the F-117 is a 1970s-era craft and the F-22 is a 1980s era craft. Let it go.
Admin
I work for Reynolds and Reynolds (now owned by UCS as of Monday). I know exactly what you mean. We're using an old system for the underlying architecture. Over the last several years, we tried to migrate to a Windows 2000 + Terminal Services solution and ended up writing off upwards of $97 million and going back to the old system. I'm sure there are a lot more WTFs that could come from my company.
Admin
I actually saw a similar situation at a former client around 2002. In a matter of weeks, they ported an entire financial leasing back end from COBOL / IBM Mainframe to Windows 2000 using a converter that picks up the COBOL code and generates Delphi forms and code (also unreadable) and it worked! I forgot the name of the product they used for the conversion, but in a way it was pretty impressive. As far as I know, their developers are still programming in COBOL, but it runs completely on Windows 2000.
I also remember that, when the product became available on Windows, users started to demand features like drop down lists and stuff and the developers needed to come up with weird tricks in their source code to make that work. I was glad to be part of the web front office development team, haha.
Admin
If you still have a COBOL system, you need to upgrade to a modern environment soon while there are programmers that still know COBOL and also not something modern like .NET or Java. Once you miss that time window, you as might as well throw the original code away.
Well, you know, many (most?) banking transaction systems are running COBOL today. While they may change these at some time in the future, most are not planning to do so anytime soon. So how do they find programmers? They train them. Teaching a good programmer a new language is NOT a hurdle. If that was the case, all new languages would be doomed as well. The only hurdle is making sure they pay enough to attract decent programmers (and some banks do this better than others). COBOL is still supported and used in several industries (just not the general software industry).
(Language experience is nice and all, but back in the day before there were a significant number of students learning these things in schools, companies actually trained people (shocking, I know!) to do things. Some companies, like banks, still do this).
Admin
A friend of mine had to take COBOL in college but couldn't stand the thought of actually having to code in it. So what did he do? He wrote a C compiler that generated COBOL code! Yes, this was the reverse of the COBOL-to-C compiler.
Admin
You're right! A few years ago I was the Chief Technical Architect on a big internet bank -we built a fancy new multi-product system, part of which was a current account for which we used our parent banks current account system. When they wrote it (in IBM Assembler) IBM hadn't finished their version of CICS, so the bank wrote their own - which they were (and still are) running...
Now the funny thing was that when we had 70,000 accounts in our swizzy J2EE (and stuff) app, our batch window was 13 hours. The main bank's 18 million accounts were processed in a batch window of 30 minutes...
Too young to shave programmers saying 'you must rewrite your app in my spanking new language' (perl or some other shite) and you listening to them - now that is a WTF!
Admin
So, you rewrite code from a programming language of the 1960's... in a programming language of the 1970's. :)
Admin
A few years ago I worked for a big Company that runs S/36 RPG-software on a RS/6000 using emulation software RS/36. I worked almost perfect.
Even the operating system SSP was ported without recompiling.
Admin
They trained their own COBOL programmers... had a whole FLOOR of them.
Admin
I'm not saying yes... and I'm not saying no.
Admin
I'm not saying yes... and I'm not saying no.
Admin
For those who think they may have made the right decision to not change: an engineer should be slightly smarter than a frog in a pan of water being brought slowly to the boil.
Admin
I guess the company will only be forced to change when they’re no longer able to employ COBOL programmers, or when they're eaten by competition using far more dynamic and reliable development environments that can more quickly adapt to changes in their customers business.
I have too often fallen foul of these types of projects. You convince yourself that the technical challenge is worth it, and you need the money and the job, so you do the best you can to make that "action queue" or "25x80 to WinForm converter", and when you do, you're actually proud of the elegant design and robust construction.
Your subconscious (or maybe even your conscious) tells you to ignore the bigger picture. You made this fabulous suspension mechanism, and you blinker yourself to the fact that it contributes to the manufacturing of a vegetable cart for the next F1 championship.
Admin
Rewriting code may seem like a valid option, but it can (and will) also introduce new bugs that may plague sales of the product.
Despite the relative "beauty" of converting this system from System/3 COBOL to Windows, there is probably no real reason as far as functionality goes, whereas converting will introduce very big risks.
As a programmer, it's sometimes difficult to understand that users don't really care that the code is in some modern language and they care even less for the fact that it uses a problematic event model. Performance is only an issue when lag is percieved. Whether an application responds in half a second or in a tenth of a microsecond really isn't important to users. And since the main business of a software company is to get money, you can't really blame them for chosing the cheapest solution. Afterall; it worked.
p.s. If System/3 is anything like z/OS machines, I can promise you the entire event model problems can be blamed on the programmers of the application or terminal emulator. On z/OS, user interaction is transferred a screen-at-a-time (somewhat optimized). z/OS terminal applications are triggered by the user and do not actively poll to check if input is given. It's probably a matter of badly written terminal emulator, not COBOL or System/3.
Admin
Well to be fair it's a lot more fun to write a COBOL to C translator and development environment than it is to write a car dealership system and I suppose programmers tend to produce far more and better code when they're working on something they think is kind of cool.
Admin
You hit the nail...but wait...they all look like nails to my hammer!
I confess: been there, done that. In banking business (and governments especially) you do not simply go and rewrite hundreds of work years mass of critical software. Even if you think you could do it overnight with your Visual Whatever. And even when your laptop could run circles (and it actually does) compared to some heavy iron.
I have yet to see large apps rewritten with modern tools modern style that run faster than their predecessors. But I have seen millions and millions wasted in state-of-the-art rewrites, ending up with truck loads of hardware running enormous pile of Java or something else that was the way to go. So the other end of this line is "no need to change it" and the other is "you have to change it everytime something new comes out". Fortunately, it's possible to see shades of gray, instead of only black and white.
The point: this kind of wtf is not really a software problem at all. You run till you run out of hardware to run. Then you port.
Admin
Been there, doing that. I support (several versions of) a product on an out-of-date version of an ancient language (OK, not quite back to Cobol). We also sell a more modern product. Then there's the upgrade process, consisting of several programs and scripts to convert the data. We work on multiple platforms & multiple RDBMSs. I leave it to your imagination how messy it is to maintain.
Even the 'modern' product is about to be rewritten. Life is getting interesting.
Admin
Nope.
Admin
I don't think that's quite right, unless you're talking about Windows 3.x. Since 95, applications don't poll the message queue in Windows; instead, the message queue signals the application.
Admin
To be fair, most Universitys here seems to work with Java, Turbo Pascal, C and Visual Studio. Maybe I am somewhat wrong.
Admin
Let's have a look at how applications DO poll the message queue:
which is Win32 code, and runs on every 32bit Windows that implements Win32. I guess that includes Vista.
However it is not polling in the traditional sense because GetMessage() is a blocking function (it does not return until you get a message in the loop).
Admin
Sarcasm meter needle is only flickering... Assuming you're actually serious, I've written stuff that has run continously for years, much less been recompiled. By that, I mean the same process is executing, not just the customers are still happy with it. For some uses, that's important. Reservation systems, banks, stock exchanges, credit card processors and so on, don't want to upgrade to the Linux kernel of the week, or the language of the year. They want to have a box over in the back that *just runs.* Old hardware like Series/1 or System/88 did that; it boots up, and runs your apps until you shut it down on purpose. It wasn't uncommon for either of those to have uptimes well over five years.
And screen scraping 3270 is conceptually the same as web services, just not as enterprisey. Screen scraping DOS apps running in a Windows DOS box, OTOH, is disgusting.
Admin
I can't wait to read the war stories in 10-15 years from the current generation of code monkey's on having to support legacy Java/C# mission critical apps...
Admin
I read this a couple of times, but I still don't understand why if the manufacturer that is developing your compiler goes out of business your compiler stops working?
captcha: wtf
Cheers, Mike5
Admin
Maybe the compiler makers company is somewhat integrated into the need to add/remove new components/librarys.
Its COBOL!, you know, the simple concept of a temporary table is doom-apocaliptical for him. Well the simple concept of a = a + 1 is also something of giganteous effects and revolution ripples. COBOL is hard as assembler, practical for writting code as natural lenguaje (so, near zero).
Anyway maybe is a "Alex mistake"/"anomization artifact", or something.
Admin
In support of the original poster, I would consider 1948 "WW2-era". ('52 isn't.) If "WW2-era" strictly coincided with "WW2", what would be the purpose in using "era"?
Admin
Like you say, that is not polling.
Furthermore, GetMessage does not retrieve messages from the "system" message queue.
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/aboutmessagesandmessagequeues.asp
Admin
It would also have run under Windows 3.1
It's certainly not the message queue signalling, though. You're going out looking to see if a new message is there. This is much closer to polling than any form of signalling I've used. The message queue is entirely passive - the active code is (a) the system code that delivers the message to your queue in the first place, and (b) your code that picks that message up.
True - if the message hasn't been placed in your message queue, you don't get to see it.
Admin
I wasn't going to reply to this but that takes the cake!
Most CS graduates can learn ANY language in a very short time. If they graduated with good marks, the whole point of CS is that you can code be trained to work in any language, for any environment in a fairly short period of time.
A more significant amount of time might pass, however, before any of the programs produced by these newbies have any sort of commercially feasible application in the language of their choice. And thats where it is. Working under an architect or a software engineer is fine- "do this, patch that, import this". Working for the client where the request is "sort it out. Now." Thats a different kettle of fish and it makes no difference weather you working with Java, COBOL, C, C++, FORTRAN, Scheme, Lisp, Python, smalltalk, Delphi or whatever.
"A bad craftsman always blames his tools" as the proverb goes.
Admin
Based on my interview experience, I would have to conclude that most CS graduates can't even learn one language :-( And yet I'm one of those people who insists that a professional programmer must have a CS degree. Go figure.
Anyway, the problem remains that COBOL is not a "cool" technology and is not going to attract outstanding young programmers. It's going to attract the mediocre ones who didn't get past the "computing = number crunching" barrier.
Admin
> A company that dosen't want to rewrite all their code every 2 years? They really think you can write a program that will
> "still work next year"???? Impossible. Does anyone have a piece of code still running that hasn't been recompiled in years?
Yes, there are companies around that have code running that hasn't been recompiled in years. Granted, most of these are for embedded applications, but they do exist. My company has customers still buying hardware from us and running software that is 12 years old. We stopped making recompiling this code 7 years ago. Granted, we have come up with designed advanced hardware and brand new libraries to accompany it, but our old hardware and old software hasn't changed in years and our customers are buying them -- and our customers haven't changed the code either because their customers are still buying their older machines too. Even though the revenue from these old customers goes down each year, and even though my company's revenue continues to grow each year due to new business with our new hardware and libraries, the old stuff that we haven't changed in over 7 years continues to bring in over 5% of our revenue.
Here's sone examples of embedded applications where code cannot be recompiled, but must run for years without being recompiled -- software for automobiles, DVD players, watches (yes, many of them run software), scientific calculators. And there are many, many others.
Admin
I'm at a company doing a similar thing (but not COBOL). And I can tell you, cost and complexity have nothing to do with it. It's all politics.
Management sayeth, We are not a software development company. Therefore, anything we use has to be off-the-shelf ... but we're allowed to customize it. Of course, after a couple years of this, our customizations almost completely hide the original app, are bigger and more sophisticated than it, and consist largely of working around bugs in it. Oh, and the off-the-shelf app has been discontinued. It would be easier to start from scratch, or even remove the original app and rewrite the parts of it we need from scratch, but that's verboten.
Admin
OK, I'm old. Really old, at least in terms of "IT". I am retired now, but I got started in the IT industry, then called EDP (Electronic Data Processing) in the 1960s. Yes, I worked on punched cards; I've punched my own on a real IBM 029 card punch, even an occasional 026 card punch, ancient even then. Hell, I recall writing "actuals" for 7010 machines. To write actuals, you used a big coding sheet, 17" wide. You coded assembly language in the space provided on the right hand side of the sheet, then hand assembled your own coding into actual machine language op codes on the left side. Then, you used the 029 to multi-punch your hand assembled code, the hexadecimal code, onto punched cards. The card deck was "booted" directly from the card reader using a "one card loader". I could regale you with war stories of all kinds, but I'll limit my story here to one similar to the WTF story here.
Once upon a time in the early 1970s, I worked for "A Big Bank" as a systems programmer. My assignment was to install a 7010 emulator onto OS/MVT (a predecessor to what later became OS/MVS). Why?
It seems that there was this application originally developed for tabulating machines, the predecessors to digital computers. A particular part of the original application was intended to be run on an IBM 407 accounting machine. When the physical 407 had to be taken out of service because it was no longer supported by IBM, the bank ran the application, in emulation on an IBM 650 Computer System. Later, when the 650 had been retired, the application was run on an IBM 1401 computer emulating the 650 emulating the 407, but slowly. When the bank got an IBM 7010 computer, a heavy weight variant of the IBM 1410 computer, itself an extension of the 1401 computer system, the application was ported to the 7010 emulating the 650 emulating the 407. When the 7010 was no longer supported, that's where I came in. My job was to get the 7010 emulator running on an IBM 360/50.
I got it running. The original 407 accounting machine application was running daily on a 360/50 emulating a 7010 emulating a 650 emulating a 407. That was about 1973, I think. When I left the bank in 1975, the 407 application was still humming along. Never mind that there was no 407 anywhere within the enterprise, nor anyone who could remember how to do the plug boards to "program" it. Nobody really remembered the 650 and I was one of the few to remember a real 7010. Somehow, I imagine that system still runs today, emulated by God knows what.
To say the least, the industry has come a long way. ... Well, sonny, back in the early days, we walked to school barefoot in the snow, up hill both ways, against the wind! ... Modern tools, sheer speed of computers, and the whole concept of computer science has grown to maturity, for some value of maturity, since I started in the business, did my thing and retired. You should have been there. You'd have loved it.
OldFart!