Some interesting news from the world of computer programming. A company that provides products to improve code studied a bunch of programs and evaluated how badly they were written. Cobol programs had the lowest rate of bad code, while Java the highest. Part of this is because Cobol programs are all old and have been revised and fixed up quite a bit, but it was also suggested that Java programs relatively suck because modern programmers relatively suck. For this reason, maybe Microsoft’s latest Evile Corporate Decision makes sense: The new Microsoft 8 App Store deal allows Microsoft to kill any of the apps you buy if they feel like it. You agree to that when you buy apps there. And all this is rather interesting in light of a recent commentary suggesting that what is needed to keep software development going is the invention of new programming languages because existing languages can’t easily be upgraded beyond a certain point, so it is better to create entirely new ones.

Comments

  1. #1 Eunoia
    December 9, 2011

    Greg,
    also really scary is the number of undocumented spreadsheets being used out there, some of which are business-critical applications.
    I was first shocked by this during our Y2K effort and – be assured – they haven’t got less.

  2. #2 Lyle
    December 10, 2011

    Let me suggest that Cobol and likely Fortran programs are better because they don’t and the complexity of interactivity. You enter the data, the program either accepts or rejects the data, and you try again. None of this event driven loop business, or let alone talk about the complexity of information sharing between programs that run at the same time such as OLE and its children, all be it that much of the boiler plate is now machine generated.

  3. #3 lyle
    December 10, 2011

    Oops typo I did not catch it should be add the complexity

  4. #4 Andrew G.
    December 10, 2011

    Another possibility is that the figures weren’t corrected for language expressiveness – if you just count bugs per kloc, then cobol wins simply because it takes more lines of code to express the same process compared to other languages.

    (Whereas in, say, APL, you’d have to count bugs per 10 characters, or something like that.)

  5. #5 Who Cares
    December 10, 2011

    ‘Old’ code was more thoroughly checked. A bug fix wasn’t that easily sent to a client as is these days. Add in that these days restrictions on what a computer/code can handle are vastly increased (though that didn’t stop people from writing crappy code) so people don’t have to prepare as much to start coding anymore..

  6. #6 Sarcastico
    December 10, 2011

    Google recently released a new programming language (Dart) as a replacement for Java Script for the reason you mention. It is better to replace a language than upgrade it. Comparing COBOL and FORTAN with Java is just silly.

  7. #7 NewEnglandBob
    December 10, 2011

    Having been involved in software since 1969 in various positions up to VP of software, I can say from experience that programmers being poor at their job is NOT something new.

    I have been at companies with up to 200 programmers. Of that group about 5 or 6 were excellent programmers, 30 others were OK, if you give them specific short tasks to do that were well specified, and the rest of the programmers might as well have been living on the moon and were useless.

    The same ratio seems to hold for software consultants too. A few are worth up to $100/hour because they get a lot of work done in a short time and do it with quality. The rest are a waste of money.

  8. #8 phayes
    December 10, 2011

    “…what is needed to keep software development going is the invention of new programming languages because existing languages can’t easily be upgraded beyond a certain point, so it is better to create entirely new ones.”

    &_&

    Perhaps the “Blub”* programming language factories really do need to keep churning out these horrors…

    “We were not out to win over the Lisp programmers; we were after the C++ programmers. We managed to drag a lot of them about halfway to Lisp.” –Guy Steele.

    …but it sure as hell isn’t for the reasons McAllister gives. ;-)

    * http://en.wikipedia.org/wiki/Paul_Graham_%28computer_programmer%29#Blub

  9. #9 murrayphobbs
    December 10, 2011

    Been programming since 1978. Studied the math of it before that. Nerd. FORTRAN, APL, Pascal, C, LISP, Prolog, C++ Objective C, C#, SQL, and played with lots of other languages. Cut maybe 1 million lines of code i guess or more. Degree in Com Sci with some post grad papers – straight A’s.

    Languages suck because they allow programmers who suck to write code. Or programmers who are tired, stoned, pressured, angry etc etc.

    When functional languages started to emerge there seemed to be some hope but the hardware was never up to it and let’s face it, if every programmer had to be a mathematician most of the code out there would never have been written

    As well, it seem pretty clear that some people, no matter how hard they might try and no matter how long they have a go at it – will never be able to program – their brains just don’t seem to get it. Sure they can do a mashup or a spreadsheet or tinker with some BASIC but they just don’t have the combination of creativity, vision, tenacity, math, obsessiveness or whatever it is to do it well

    All that being said the biggest contributor by orders of magnitude to bad programs is bad managers and bad project leaders. Because they don’t “get” the consequences of their shortcuts they direct things to be built that evolve to a point where the cost to maintain them exceeds the cost to rebuild them from scratch and the available budget.

    I used to do high level consulting where i’d be asked to look at existing systems and then give them a bottom line.

    Whenever i said “it’s crap you have to start again and it will be expensive”

    The usual response was to pay me and pretend i never existed. I’d watch those companies struggle with reality as time passed – usually if they did not go belly-up they’d at least loose market share and lag way behind until they did address the issue.

    Things built by bright com sci trained people seem to do a lot better than things directed by managers who have neither understanding of code or trust in opinion of their best programmers.

    But that’s the nature of things – consider how absolutely ugly MS Windows was from the very start and understand that the death of MS in the mobile and embedded device market is because the only thing they seem to have left is ~30 year old DEC OS structure that suits big boxes but little else.

    People rush things to make money and those things have a lifetime based on how ugly they are under the bonnet

    no matter how good a programming language is it’s not going to do much to stop that

    pop

  10. #10 MadScientist
    December 10, 2011

    They’ve got something to sell, and wouldn’t you know it, they say you need what they’ve got.

    COBOL is an awful language but unfortunately is likely to hang around for a long time yet. JAVA has its uses but in my opinion is highly overrated and has some truly awful features that have you doing calisthenics to accomplish what should be a straightforward programming task. I’m astounded that JAVA sees such widespread use in big businesses – Sun sure had some good sales people.

    Once upon a time people created new languages primarily because of the limitations of other familiar languages. These days I think most new languages are created for the hell of it. It’s getting quite ridiculous – the Python camp is at war with the Ruby camp etc.

  11. #11 NJ
    December 10, 2011

    Oh, the Pythons hate the Rubys

    And the Rubys hate the Pythons.

    And the Perl-ers hate the TCl guys

    And everybody hates C#!

  12. #12 InvincibleIronyMan
    December 11, 2011

    F# is my current favorite language. It’s really sweet. Coding in functional languages is quite lovely. I learned Haskell many years ago by working through Simon Peyton-Jones’s book, Implementing Functional Languages. It’s got some tricky problems for the functional language beginner, and I remember meditating on one particular problem for hours, and when it finally “clicked”, being moved to tears by the beauty of the code.

  13. #13 bks
    December 11, 2011

    The article in Computerworld is unreadable, starting with the headline. “Cobol Apps”? WTF does that mean? Is there a link to the actual study rather than to this mishmash?

    –bks

  14. #14 Aki
    December 11, 2011

    “Humans are allergic to change. They love to say, “We’ve always done it this way.” I try to fight that. That’s why I have a clock on my wall that runs counter-clockwise.”

    –Grace Hopper

    http://en.wikiquote.org/wiki/Grace_Hopper

  15. #15 Greg Laden
    December 11, 2011

    bks: Reference: The Crash Report – 2011/12 (CAST Report on Applicatoi Software Health). CAST, NY, NY.

    Their site is here: http://www.castsoftware.com/default.aspx

    You can probably get the report there, or let me know and I’ll email it to you.

  16. #16 Aki
    December 11, 2011

    Hardly possible in COBOL…

    International Obfuscated C Code Contest

    http://en.wikipedia.org/wiki/Obfuscated_C

  17. #17 bks
    December 11, 2011

    Searching the website says the study should be here:
    http://www.castsoftware.com/news-events/2011/12/09/java-apps-have-most-flaws-cobol-apps-the-least-study-finds

    But that URL is 404.

    No big deal.

    –bks

  18. #19 MadScientist
    December 11, 2011

    @InvincibleIronyMan#12:

    ‘… and when it finally “clicked”, being moved to tears by the beauty of the code.’

    See, many language designers would see that as a fatal flaw (obscurity of code) rather than something wonderful. In the end people use whatever language they want (even though it is ill-suited to the task) and you’ll always get some people defending a particular language. One of the worst languages I’ve seen is ADA – it’s so bad that the designers later tweaked things to put very severe limits on what any one module can do – and now the horrible mishmash is touted as being ‘reliable’, ‘maintainable’, and ‘encouraging correct coding’.

  19. #20 InvincibleIronyMan
    December 11, 2011

    @MadScientist Jeez, what do you take me for, some kind of masochist? Take it from me, Haskell is nothing like Ada! Neither is F#. I know Ada, it’s like Pascal for anal retentives! Haskell is incredibly terse and powerful. Using it, you really feel like you are thinking about the problem you’re trying to solve instead of struggling with how to express it in code.

    F# is really nice because you get all the power of a functional language, but you can write in pretty much any style you like. Functional, imperative, object-oriented. It’s strongly typed, but it has built in generics and type inference, so you can use it like a dynamic scripting language for rapid prototyping. Then, when it comes to writing a final product, you can flesh out your program and give it a properly rigorous and formal structure. And it’s .Net, so you have that whole class library to work with right off the bat, whether your coding under Windows or on MacOS or Linux using Mono, the open source version of .Net. I really sound like I am trying to sell it to you don’t I? Believe me, I am usually pretty hard to please!

    If you are interested in taking a look at it, the introductory videos by Dom Symes a a pretty good place to start: http://channel9.msdn.com/Shows/Going+Deep/C9-Lectures-Dr-Don-Syme-Introduction-to-F-1-of-3

    Are you a Python programmer? You sound like you might be. Gotta love Python.

  20. #21 Greg Laden
    December 11, 2011

    I have only one requirement for a computer program that as yet no regularly used program has implemented, and it is very very simple. It would make programming so much more error free, effective, and cool.

    I’m not sure how much money I require to pass this on. Waiting for offers from Microsoft, Sun, all the big guns.

  21. #22 InvincibleIronyMan
    December 12, 2011

    Screw the big guns. I’ll volunteer to help you implement your idea for for free if it’s any good, so long as you agree to Open Source it and give it away for nothing.

    I made applications and websites for years for people like BT, Reuters, Lloyds Bank, Marks & Spencers et al. and it turned something which I love, programming, into an annoying, painful torture. I am not going to do it again unless it fulfills one requirement: it must be a good project that helps people and is worth doing for it’s own sake, commercial considerations be damned. I’m not going to help these people ever again, and if I could help to undermine them then so much the better.

    I must say, the title of your post really caught my eye since it’s something I’ve been saying for years.

  22. #23 Greg Laden
    December 12, 2011

    Some day I will write up the specifications for my project. It applies to allmost all programming languages but is especailly relevant to text processing and would need to be implemented in shell programming as well.

  23. #24 Dunc
    December 12, 2011

    All that being said the biggest contributor by orders of magnitude to bad programs is bad managers and bad project leaders.

    Good points, but you’re still missing the real biggest problem: fucking customers. “Yeah, we’d like you to write some software to implement a business process that we don’t even understand ourselves and which changes more rapidly than our understanding of it does. We’re going to give you a bunch of contradictory requirements that we’re going to keep changing at random for no apparent reason and with no regard for any knock-on effects. Oh, and we’d like to complete the project in half the time you said it would take, and the go-live date is set in stone because Marketing have already distributed a bunch of literature…”

    Bastards. ;)

  24. #25 Software Outsourcing
    January 4, 2012

    I do a lot of programming and from time to time I hear (or even say) “Language X Sucks for reasons A, B and C” but I’ve come to realise that 99% of the time it’s not languages that suck it’s the programmers that use them.

Current ye@r *