Slashdot Mirror


When Bugs Aren't Allowed

Coryoth writes "When you're writing software for an air traffic control system, military avionics software, or an authentication system for the NSA, the delivered code can't afford to have bugs. Praxis High Integrity Systems, who were the feature of a recent IEEE article, write exactly that kind of software. In "Correctness by Construction: A Manifesto for High-Integrity Software" developers from Praxis discuss their development method, explaining how they manage such a low defect rate, and how they can still maintain very high developer productivity rates using a more agile development method than the rigid processes usually associated with high-integrity software development."

103 of 489 comments (clear)

  1. nearly unlimited funding by demonbug · · Score: 5, Funny

    probably helps too :P

    1. Re:nearly unlimited funding by GileadGreene · · Score: 5, Interesting

      And yet the reports I've seen on Praxis claim costs and schedules the same or less than the development of software of similar complexity...

    2. Re:nearly unlimited funding by Coryoth · · Score: 4, Insightful

      In fact this is the whole point - Praxis manages to deliver software with several orders of magnitude less bugs than is standard in the software industry, but does so in standard industry time frames with developer productivity (over the lifecycle of the project) on par with most non-critical software houses. Praxis does charge more - about 50% above standard software daily rates - but then when you are getting the results in the same time frame with massively less bugs a paying little extra is worth it... you'll likely save money in the support and maintenance cycle!

      Jedidiah.

    3. Re:nearly unlimited funding by georgewilliamherbert · · Score: 3, Insightful

      I'm sure one could point to, for example, Fog Creek software as another example of somewhere that does a remarkable job with small teams.

      The key point is this: small teams. It's a lot easier to find the people who can produce 10x better (in terms of rate of writing, clean/bug free code, whichever metrics you care for) when you need to find 3 or 5 or 10 people. You can't staff a whole large application development project with the best gurus: there aren't enough out there in the world.

    4. Re:nearly unlimited funding by Coryoth · · Score: 4, Informative

      Yes, small teams help, but I think it really is worth taking a look at the tools and methods that Praxis uses because there are some remarkably good ideas in there. Take a look at SPARK Ada - the Wikipedia article has some basic examples, and Praxis provides sample chapters of a book on SPARK for download. Seriously, take a little time out of your day, sit down, and read a little about how they do what they do. There really are good ideas that go well beyond just "small teams" if you want to deliver correctly functioning code.

      Jedidiah.

    5. Re:nearly unlimited funding by SeaFox · · Score: 4, Interesting

      You can't staff a whole large application development project with the best gurus: there aren't enough out there in the world.

      And why aren't there? Geeks lament the fall of IT and Computer Science programs at institutes of higher learning, and wonder why people don't want to go into these fields. If there was demand for programmers of the caliber you mention and companies willing to pay salaries deserving of such abilities there would be more people studying towards such a position.

      But if companies are going to just throw up their hands and say "we can't hire competent people, there aren't enough of them in the world, they only doom themselves to a continued shortfall in talent, and an increase in buggy software.

      Nursing is a profession that is always looking for new people and folks who didn't make it through the four-year grind back when they were young are flocking to it because the jobs are waiting. If companies held their coders to a higher standard, they would trim some of the fat in their projects and have jobs open for people willing to do the work. The result would be more productive teams and better applications, a win-win situation.

    6. Re:nearly unlimited funding by Fulcrum+of+Evil · · Score: 2, Insightful

      But if companies are going to just throw up their hands and say "we can't hire competent people, there aren't enough of them in the world, they only doom themselves to a continued shortfall in talent, and an increase in buggy software.

      What they really meant was "we can't hire competent people at the same prices as Jimmy the mounth-breather." Take that as you will.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    7. Re:nearly unlimited funding by georgewilliamherbert · · Score: 3, Interesting

      While it's hard to argue with the above logic, such changes don't happen overnight just because a demand increases. When we're talking about properly educating people (and by properly, I mean both intensive CS background in theory and practice, and then practical coding in real world environments in quantity to become a good coder as well), it will take five or more years for a demand spike to produce a supply rise.

      The projects I am involved with today won't wait five years for programmers. This is business fact; if they aren't started now, and completed in an economical timeframe, then companies will go out of business and not be around to hire those better programmers in 5 years.

      If you shift the question around to "should we set project and programmer standards" and "should standards improve and evolve over time", and the statement to "current standards are inadequate and irresponsible" then sure, no disagreement.

      In many cases, development problems are the result of not even following what industry standards and best practices are in place now.

      And one thing I don't want to see is formal programming CS programs which produce CS professors exclusively ... though some of my CS academic aquaintences dislike me saying so, from what I see, few of their graduates go into coding in industry. That's a pretty unfortunate thing for the world. To be ultimately useful, these skills need to become things which take people out of college, into industry, and successfully into challenging industry projects.

      Nontrivial problems to solve. If it was easy, everyone would be doing this stuff right already. That obviously isn't true yet...

    8. Re:nearly unlimited funding by kassemi · · Score: 2, Insightful

      If there was demand for programmers of the caliber you mention and companies willing to pay salaries deserving of such abilities there would be more people studying towards such a position.

      Although you can teach a body all the skills necessary to program, you still need a certain level of competence that doesn't come from education. I could easily (with time) teach plenty of people I know how to program, but only a relative few will ever be able to actually invent on their own... Invention and innovation both being qualities I require the presence of when dubbing someone a guru.

      On top of that, most of the people who have such intuition and innovative qualities are generally located in a field that doesn't offer them much pay. Mathematics, physics and logic - to name a few - historically don't offer too much in the way of funds. These people love their jobs. It's not about the new car and the trophy wife, it's about discovering a new flag protein or integrating a difficult formula... It would be bad business for a company to pay more... They just don't have too.

      --
      What the hell's a "gewie?"
    9. Re:nearly unlimited funding by kimba · · Score: 4, Funny

      At any rate - there's no such thing as bug free software. Never will be.

      10 PRINK "HELLO WORLD"

      Damn.

    10. Re:nearly unlimited funding by qwijibo · · Score: 2, Interesting

      In order to get the more talented people, companies need to be willing to pay more. It's a chicken vs the egg problem. They can't get the proof that it's money well spent until after they spend the money, so they don't believe it's possible.

      In large organizations, there are already a lot of mediocre people and policies built to deal with that reality. People who know what they're doing face an uphill battle in getting anything done. There are large beaurocracies in place to tell people what standards they must adhere to, but nobody can explain why. Without knowing why, it's hard for the competant people to come up with solutions that meet the technical needs without violating some weird compliance regulations. Everything comes down to the lowest common denominator in large companies. Small companies can avoid this problem, but only until they reach some critical mass of mediocre people, which is when the downward spiral starts.

    11. Re:nearly unlimited funding by lp-habu · · Score: 4, Insightful
      You can't staff a whole large application development project with the best gurus: there aren't enough out there in the world.

      And why aren't there?

      For the same reason there aren't enough really good NFL quarterbacks for every team to have one, despite the money that is spent in trying to find them.

      People differ in ability in every field; the bell curve is real, and only the people who are at the high end of the curve can be considered one of "the best gurus". They will never constitute a large percentage of the group. Ever. Furthermore, there is usually a huge difference in performance between people who are in the top 10% of their field and those who are in the top 0.1% of their field. Most people would consider those in the top 10% as "the best gurus", but really it's only that tiny segment at the very top who deserve the appelation. Even then, you can expect a marked difference between those in the to 0.1% and those in the top 0.01%. Fact of life, folks.

    12. Re:nearly unlimited funding by drrobin_ · · Score: 2, Insightful

      Almost. What if standard out is a pipe that got closed? What if there's not enough memory to run the basic interpreter? What if it gets a kill signal from the kernel? What if it becomes a zombie process?

      As you can see, even the simple 10 PRINT "HELLO WORLD" isn't bug free. To make bug free software you don't need to catch most errors, you need to catch every possible error.

      --
      to accept the praise of personal wisdom is an affront to the very ideal i hold dear.
    13. Re:nearly unlimited funding by Ced_Ex · · Score: 2, Insightful

      Or "We can have three guys fresh out of college with really impressive degrees for the same price as this other person who is older, and therefore less likely to know about modern computing topics. We will therefore hire the three college graduates, who will then do three times as much useful work."

      Or on the other hand, "We could hire three college graduates, who will then do three times as much useful work in three times the amount of time required by the old guy with total experience greater than the three graduates put together!"

      Just because guys get old, doesn't mean they stop learning. Good ones are always updating their skill set.

      --
      Live forever, or die trying.
    14. Re:nearly unlimited funding by GileadGreene · · Score: 2, Insightful
      And one thing I don't want to see is formal programming CS programs which produce CS professors exclusively ... though some of my CS academic aquaintences dislike me saying so, from what I see, few of their graduates go into coding in industry. That's a pretty unfortunate thing for the world. To be ultimately useful, these skills need to become things which take people out of college, into industry, and successfully into challenging industry projects.

      Maybe we could start by not assuming that CS grads should be going into industry. CS programmes should be teaching Computer Science - you know, the stuff that prepares you for a career in research. Industrial coders should be going through a software engineering program, in which they learn how to apply the results of scientific research to practical real world problems.

      Just as with other sciences and engineering disciplines, there will likely be a lot of overlap in subject matter. But the fundamental focus is entirely different: there will be material covered in one programme that isn't covered in another, and the perspective taken on the overlap material will be quite different.

      Sadly, many developers are graduates from CS programmes instead of engineering programmes, and too many of the "software engineering" programmes out there have little resemblance to the engineering training found in other disciplines - which is, IMHO, one of the reasons the world of industrial software development is so screwed up.

    15. Re:nearly unlimited funding by zCyl · · Score: 2, Insightful

      If there was demand for programmers of the caliber you mention and companies willing to pay salaries deserving of such abilities there would be more people studying towards such a position.

      But if companies are going to just throw up their hands and say "we can't hire competent people, there aren't enough of them in the world, they only doom themselves to a continued shortfall in talent, and an increase in buggy software.


      Part of the problem is simply that the higher you draw the threshold, you start to get into areas of natural talent which seem to be more difficult to train. But an even bigger problem is the problem of identifying the people with the highest skills. When you're staring there looking at a resume, the best and brightest with the skills to write the most reliable code don't have resumes that look much different from everyone else's resume. Usually programmers can spot which other programmers have abnormally high skill in this area after working with them, so you can find these people by word of mouth, but this doesn't get automatically translated into resume content which can allow you to pick the correct employee out of the crowd.

      My best advice to anyone reading is, if you think you can code like this, and you want to seek out a high salary job based on your unique skill, then you can try proving your skill by releasing open source code which demonstrates this fact. This could give you a boost, but not always one comprehended by the people responsible for hiring at all locations.

    16. Re:nearly unlimited funding by bill_kress · · Score: 3, Insightful

      What a lot of people don't realize is that being a Guru is an art.

      What's the quickest way to paint the roof of the Sistine chapel? Are you going to be able to hire 30 artists with enough talent, or should you stick with the one that is qualified and a couple assistants and just wait a few years?

      Can you train 30 artists to be good enough to do the work? How about 300?

      After a point, being a super-coder is just as much of an art. You won't be able to produce these people, it's kinda in their soul. Great musicians pick up their first instrument and know it's what they are going to do--what they are made for. My guess would be that if you have had access to a computer for over a year and you aren't coding yet, you'll probably never be a really great coder--a real computer artist couldn't have resisted.

      Hmm, maybe a better word that Guru or Architect would be Computer Artist or Code Artist? It should convey the relative rarity much better.

      This should be obvious. Every other art has it's gurus, and they are usually the top 1%, 99% of the others in the field simply will never be able to do what the gurus do, regardless of training or experience. I'll never play the piano like a savant that started at age 3, period.

    17. Re:nearly unlimited funding by ivan256 · · Score: 2, Interesting

      That doesn't mean that CS grads shouldn't be employed in industry at all, just that the assumption that they are generally prepared for product development work isn't a good one.

      I don't want to say that you can't be a Computer Scientist without being a good Software Engineer, but I will say that you can't be a Good Computer Scientist without being a good Software Engineer. Every one of the skills a good software engineer needs together forms a subset of the skills required by a good computer scientist. Though perhaps you're confusing Software Engineers with Computer Programmers?

      all of the examples you've given are embedded software [...] It's also the software most likely to be written by people trained as engineers (electrical or computer), rather than CS grads

      How do you figure? As a developer of commercial embedded software, that hasn't been my experience. Teams usually consist of both, but code written by Electrical Engineers, well, let's just say it's notorious.

      Let's cut the bull though. My problem here, and why I engaged in this discussion is your implication that computer scientists make poor software engineers ("Sadly, many developers are graduates from CS programmes instead of engineering programmes"). Above all else, please save your judgement for the quality of particular education programs instead of blanketing an entire field with your views. Many of us went to engineering schools, and got formal engineering training along with our computer science degrees. The real problem is that it's too easy to get a degree and not actually take any benefit from the experience, not that computer scientists create crappy software. That's as silly as saying "Sadly most modern drugs are developed by molecular biologists instead of genetic engineers".

  2. Speaking of bugs... by zegebbers · · Score: 2, Funny

    You slashdotted stsc.hill.af.mil!

  3. No Bugs for NSA? by ChePibe · · Score: 5, Funny

    Uh... it's going to be kind of hard for the NSA to do its job without bugs, isn't it?

    *rimshot*

    1. Re:No Bugs for NSA? by GrEp · · Score: 4, Interesting

      Easier actually.

      http://www.rockwellcollins.com/news/page6237.html

      Rockwell collins designed a secure processor for the NSA that PROVABLY can run multiple threads where each thread can get no information about the others. That way they can run processes with different clearance levels on the same CPU.

      Model checking can make you big bucks if you can find the customers to pay for it.

      --

      bash-2.04$
      bash-2.04$yes "Don't you hate dialup connections?"| write USERNAME
  4. Whatever by HungWeiLo · · Score: 4, Insightful

    When you're writing software for an air traffic control system, military avionics software, or an authentication system for the NSA, the delivered code can't afford to have bugs

    I've been in this industry for quite some time and let me be the first to say that I wish I could repeat this sentence with a straight face.

    --
    There are a huge number of yeast infections in this county. Probably because we're downriver from the bread factory.
    1. Re:Whatever by Coryoth · · Score: 3, Informative

      I've been in this industry for quite some time and let me be the first to say that I wish I could repeat this sentence with a straight face.

      I was pitching for "how people would like to think things are" rather than how things actually work. In practice Praxis, at least, does deliver such software, and does so with extremely low defect rates. They are proof that it can be done, even if it isn't always how things work now.

      Jedidiah.

    2. Re:Whatever by xtracto · · Score: 2

      Man, do you work at Praxis or something?

      At least stop sucking that big pallus before you talk, so you can be understood.

      --
      Ubuntu is an African word meaning 'I can't configure Debian'
  5. Still can have bugs by Billly+Gates · · Score: 3, Interesting

    The only method I have seen with almost perfect reliability is where the inputs and outputs are overloaded to handle any datatype and can be proven mathamatically not to crash. I guess a CS degree is still usefull.

    The problem is to obtain it you need to write your own libraries and not use ansi or microsoft or any other products as you can not see or trust the source code.

    If you can prove through solid design and input and output types that the program wont lose control then your set. Its buffer overflows and flawed design that has not been tested with every concievable input/output that causes most serious bugs in medical and aerospace applications.

    However in practice this challenge is a little unpractical when deadlines and interopability with closed source software get in the way.

    1. Re:Still can have bugs by GileadGreene · · Score: 4, Interesting
      Did you actually bother to RTFA? Oh yeah, this is /. - stupid question. Allow me to suggest that you make an exception, and actually take the time to read TFA in this case. Praxis does not claim no bugs, they claim significantly lower defect rates than development using other methods. Which in turn means much greater confidence that the system will work as desired.

      No one can ever make something that is completely "bug-free" - even in traditional, non-software disciplines. All you can do is make the probability that the system will work as high as possible. Praxis has some techniques that can help developers create software with a much higher probability of working correctly than it would otherwise have. That's a good thing, even if it doesn't result in perfection.

      Its buffer overflows and flawed design that has not been tested with every concievable input/output that causes most serious bugs in medical and aerospace applications.

      It's the fact that Praxis relies on static checking far beyond anything you've ever seen (using a carefully designed subset of Ada that can be statically checked in all sorts of interesting ways) that helps to ameliorate this problem, since the static check is effectively equivalent to an exhaustive input/output test.

    2. Re:Still can have bugs by Coryoth · · Score: 4, Informative

      If you can prove through solid design and input and output types that the program wont lose control then your set. Its buffer overflows and flawed design that has not been tested with every concievable input/output that causes most serious bugs in medical and aerospace applications.

      Praxis uses a subset of Ada together with annotations in a language called SPARK to write most of their software. They also have tools which work with such code to do considerable static checking - much as type checking catches errors, checking the annotations catches many more just as efficiently - and generate proof obligations, which they can then formally prove. That means, for many of their projects, the actaully have formal proofs that buffer overflows cannot and will not occur.

      However in practice this challenge is a little unpractical when deadlines and interopability with closed source software get in the way.

      Again, this is where the tools and methodology matter. Praxis delivers code as fast as traditional development techniques, so deadlines aren't the problem. They can do this by using SPARKAda and the SPARK tools to do exceptionally robust testing on a regular basis for each incremental deliverable. This allows catching bugs much earlier, when they are cheaper and faster to fix.

      The only method I have seen with almost perfect reliability is where the inputs and outputs are overloaded to handle any datatype and can be proven mathamatically not to crash. I guess a CS degree is still usefull.

      It is pretty much this sort of mathematical rigor, injected into the development process as early as possible, that allows Praxis to produce the sort of defect rates that they do. And yes, that does mean that developers at Praxis are probably required to have stronger math and CS backgrounds that elsewhere. Given that, due to their ability to deliver almost bug free software in very reasonable time frames, Praxis charges 50% more than the industry daily rate, yes having a math or CS degree really does count for something - more money for starters.

      Jedidiah.

  6. economics by bcrowell · · Score: 4, Insightful

    The authors contend that there are two kinds of barriers to the adoption of best practices... First, there is often a cultural mindset or awareness barrier... Second, where the need for improvement is acknowledged and considered achievable, there are usually practical barriers to overcome such as how to acquire the necessary capability or expertise, and how to introduce the changes necessary to make the improvements.
    No, the reason so much software is buggy is economics. Proprietary software vendors have to compete against other proprietary software vendors. The winners in this Darwinian struggle are the ones who release buggy software, and keep their customers on the upgrade treadmill. Users don't typically make their decisions about what software to buy based on how buggy it is, and often they can't tell how buggy it is, because they can't try it out without buying it. Some small fraction of users may go out of their way to buy less buggy software, but it's more profitable to ignore those customers.

    1. Re:economics by ChrisA90278 · · Score: 2, Insightful
      "No, the reason so much software is buggy is economics. Proprietary software vendors have to compete against other proprietary software vendors."

      No, that's not it either. Bugs happen because the people who buy the software do not demand bug free code. I do write software for a living. When the customer demends bug-free software he gets it.

      I've been around the building bussines too. when I see por work there, say badly set tile, I don't blame the tile setter so much as the full ideot who paid the tilesetter after looking at his poor work.

    2. Re:economics by DeveloperAdvantage · · Score: 2, Interesting

      One reason the economics is slanted toward buggy software is due to the legal issues. I have seen very few cases where developers of buggy software actually are held responsible for the mess which they have delivered...actually, I can't think of any off the top of my head (although I am sure they are out there).

      In fact, often it is beneficial to the software provider to provide a product with enough defects so the software provider can get follow-up work or support contracts to fix them.

      Consumers of software services, or even shrink wrapped software, need to start demanding higher quality.

      Read through an end user agreement and you will see who bears the cost of defects.

      --
      FREE - Java, J2EE and Ajax Audiobooks for Software Developers - www.DeveloperAdvantage.com
  7. Bugs are fine... by Paladin144 · · Score: 5, Insightful

    Luckily, bugs are just fine if you happen to run a company that builds voting machines, such as Diebold. And if you think that elections aren't in the same category as air traffic control, I suggest you take a tour of Iraq. Elections are very important for your continued existance upon the earth.

  8. Here, here... by crimson30 · · Score: 4, Interesting

    When you're writing software for an air traffic control system, military avionics software, or an authentication system for the NSA, the delivered code can't afford to have bugs

    I've been in this industry for quite some time and let me be the first to say that I wish I could repeat this sentence with a straight face.


    That was my first thought, particularly with military avionics. A few years ago they put out a hardware/software update for the ENS system (Enhanced Navigation System) which led to frequent crashing... and it took over a year for them to come out with a message saying that it was a bug and not to waste countless man hours trying to repair it.

    It's sort of a new concept, though, as I'd never really seen such problems with traditional avionics systems (non glass-cockpit stuff). I've always attributed it to people being used to the behavior of MS Windows. And I'm not saying that to start a flamewar. I'm serious. Unreliable avionics systems should be unacceptable, but these days, that doesn't seem to be the case.

    1. Re:Here, here... by Raul654 · · Score: 4, Funny

      Could you clarify here. When talking about bad guidance software for planes, "crashing" is an ambigious term ;)

      --


      To make laws that man cannot, and will not obey, serves to bring all law into contempt.
      --E.C. Stanton
    2. Re:Here, here... by drew · · Score: 4, Insightful

      I've always attributed it to people being used to the behavior of MS Windows. And I'm not saying that to start a flamewar. I'm serious. Unreliable avionics systems should be unacceptable, but these days, that doesn't seem to be the case.

      Many years ago, I remember reading a quote from an employee at a major aircraft subcontractor along the lines of "If my company paid as much attention to the quality of our work as Microsoft, airplanes would be falling out of the sky on a weekly basis, and people would accept this as normal." I've heard many people, even programmers, claim that bugfree programs are impossible to write. They are not- they just cost far more in time and money than most companies can afford in this commercial climate. When success depends largely on being first to market and bugs and crashes are accepted as a normal fact of life, then they always will be a normal fact of life.

      Unfortunately, I think the blame lies at least in large part with the consumer. As long as people put up with programming errors in a $500 software suite that they would never accept in an $80 DVD player, we will continue to have these problems. Unfortunately, too many people still consider computers to be too much black magic that is out side of their (or anyone else's) grasp. Most people have little to know knowledge of how their car works under the hood, but they still believe that the engineer who designed it has enough knowledge to do it without making mistakes and expect the manufacturer to pay for those mistakes when they happen. Why should they believe any differently about the people who write the software they use?

      --
      If I don't put anything here, will anyone recognize me anymore?
    3. Re:Here, here... by Fulcrum+of+Evil · · Score: 2, Informative

      It sounds apocryphal, but I really want it to be true. :-)

      It really is true, but it happened in a simulator.

      --
      "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
    4. Re:Here, here... by rufty_tufty · · Score: 2, Insightful

      Actully part of designing a reliable system is coping with faulty hardware! If you're writing software for satellites (for example) you often can't rely on anything working.

      This is completely opposite to the state at the moment, where people assume perfect hardware and buggy software; it should be "hardware that can and does fail" and "software that expects this and deals with it" because software doesn't age or have different faults depending upon which copy it is.

      --
      "The weirdest thing about a mind, is that every answer that you find, is the basis of a brand new cliche" -
    5. Re:Here, here... by gronofer · · Score: 2, Interesting

      For the USA, these days, the war is never over. But a new model of jet fighter is hardly likely to make a big impact agaist drugs, or terror, or whatever it will be next year.

    6. Re:Here, here... by Kadin2048 · · Score: 2

      Also, people don't realize that keeping a computer in good working order takes a lot of work.

      Bull. I have a Mac and know a slew of basically unskilled users who also own them, and they work fine without any maintenance at all. Unless you count clicking "Install" on the auto-update utility "a lot of work."

      You change your car's oil because it's a consumable; there's nothing to compare in a computer (well, maybe the bearings in the fans, but those are probably good for several million rotations). A well-designed system shouldn't get slowly "messed up" just as a consequence of normal use and need to be "fixed." There is no reason why you should have to do anything that approaches "computer maintenance" if you are using the system within its design specifications and aren't doing anything that adversely affects it (installing shitty drivers or kernel extensions). There is no reason why you should have to defragment the hard drive, for example.

      --
      "Ladies and gentlemen, my killbot features Lotus Notes and a machine gun. It is the finest available."
    7. Re:Here, here... by Busy · · Score: 2, Funny

      That's the best description of the registry I've ever heard. "The sacrament of reinstall" part reminded me of the little girl in The Exorcist.

      Computer: Warning! Pressing 'Y' will erase all data on the hard drive. Do you wish to continue?

      Me: THE POWER OF CHRIST COMPELS YOU! THE POWER OF CHRIST COMPELS YOU!
      --
      Think of someone with average intelligence. Now think 1/2 the world is dumber than that guy.
  9. When bugs aren't allowed? by vertinox · · Score: 4, Funny

    Ususually when the software and the phrases "life support" or "nuclear weapons" are together in the same sentence.

    --
    "I am the king of the Romans, and am superior to rules of grammar!"
    -Sigismund, Holy Roman Emperor (1368-1437)
  10. the old axiom applies by User+956 · · Score: 2, Insightful

    nearly unlimited funding probably helps too

    The old technology axiom applies:

    High Speed, Low Cost, High Quality.

    Pick 2 out of 3.

    --
    The theory of relativity doesn't work right in Arkansas.
    1. Re:the old axiom applies by kahanamoku · · Score: 2, Interesting

      I guess you could always substitute Quality, with Stability / Robustness

      --
      ----- Concentrate on promoting more than demoting.
    2. Re:the old axiom applies by Angostura · · Score: 2, Insightful

      Whoops, well that just about wraps it up for open source then. I've always thought that Linux was the absolute exemplar of slowly developed high quality low cost code. ... Although I suppose The Hurd might be an even better exemplar one day.

  11. Not unlimited funding by david.emery · · Score: 5, Interesting

    The Master Money server done by Praxis was done Fixed Price, and with a warranty that says Praxis would fix any bug discovered over the net 10 years -for free-.

    How many of you would be willing to place that kind of warranty on YOUR CODE?

    dave (who's tried SPARK and liked it a lot, although proofs are much harder than they should be...)

    1. Re:Not unlimited funding by Fnord666 · · Score: 2, Insightful

      I do. Not intentionally, that's just how it usually works out.

      --
      'The tyrant will always find pretext for his tyranny.' - Aesop's Fables
    2. Re:Not unlimited funding by NormalVisual · · Score: 2, Interesting

      1) Rely on existing libraries and hardware as black boxes

      Don't forget tools - I have to do the majority of my work in C++ with Visual Studio, and there has been more than one occasion where I had to look at the generated assembly code to figure out what was going on when VC++ screwed something up ("WTF - where'd that JMP come from?!?"), and then spend a little more time coming up with an alternate way to express the same logic that the compiler wouldn't fuck up. You can mathematically prove the correctness of your code all you want, but if the compiler is not going to faithfully produce machine code that exactly mimics that behavior, you're still going to have issues to deal with even though your logic is impeccable. Being able to truly prove correctness means being able to account for every single machine instruction that will be executed, and every bit of data those instructions operate on. I can't do that with any system in the commercial marketplace right now, so while I perhaps can guarantee *my* code, I can't guarantee bug-free or uninterrupted operation .

      You can't expect to build something solid if your foundation is made of quicksand.

      --
      Please stand clear of the doors, por favor mantenganse alejado de las puertas
    3. Re: Not unlimited funding by Detritus · · Score: 2, Insightful
      That's your job. If a customer were able to build a clear set of requirements, then they would likely have the skills to build their own systems.

      Do I get to strap them down, put bamboo splinters under their fingernails, and inject them with truth serum?

      There isn't much that you can do when the customer is uncooperative and doesn't want to get involved or admit their ignorance.

      --
      Mea navis aericumbens anguillis abundat
  12. 2 defacto models of software development by MLopat · · Score: 4, Informative

    In the world of software development, there have come to be two defacto models.

    1. Get the software out the door ASAP - quite simply, bang out code as fast as possible that meets a loosely defined specification. Then once the product is adopted, parachute help in like no tomorrow to steadily improve the product.

    2. Engineer the software - not as a simple as it sounds. This requires that a specification be drawn. A plan be prepared. A team of solid engineers formed and lead by a competent manager. Then, throughout the entire development cycle, test and debug code.

    My company does the latter and to do date we have retained 100% of our customers. I'm shocked by the number of developers that approach our company for jobs that don't have the first clue about how to even write a test harness, let alone do any real debugging. Then again, they don't teach much of that stuff in school and it seems that unless your role was specifically in testing at a previous job, that you're not going to have too much experience in that area. Its economics and marketing that put the bugs in software, not computer science.

  13. You mean, it's not hard when... by No+Such+Agency · · Score: 2, Insightful

    It's not hard to produce nearly-bugless code when you have both the budget to do proper quality control, and the incentive to do so.

    The reason why Windows is not bugless is that they have the budget to properly debug it... but little incentive to do so before launch. The customers will purchase it anyway and gratefully accept bug fixes after the fact. Airports or the military who bought faulty mission-critical software would not be so forgiving.

    --
    Freedom: "I won't!"
  14. Secure code by Muhammar · · Score: 2, Interesting

    The main obstacle in writing a decent code is usualy the management - their frequent changes of mind (about what they want - which is usualy different from what is helpful to the users) and their "good enough" and "legacy first" attitude. Overreaching ambition is another problem - one needs to limit himself to fewer things to do them well - and the management pressures usualy run in oposite direction. (Salesmanship bullshit never helps, especialy if it starts to influence the direction of your project.)

    --
    I doubt that we will ever figure out - and I suspect that even if we did figure out we couldn't do much about it
  15. seems kinda small by khallow · · Score: 2, Interesting

    I count less than 400k source code lines among their examples ("SLOC"). Collectively, this is at least an order of magnitude (maybe two or more actually, I don't know) shorter than the really big projects out there. So I guess I have two questions. First, is this rate really good given the size of the projects described? And second, for the huge projects, what sort of bug rates are theoretically achievable?

  16. So... by Coppit · · Score: 3, Insightful
    nearly unlimited funding probably helps too :P
    I guess that's why Microsoft's software is so good.
  17. Re:Paper doesn't mention open source model by GileadGreene · · Score: 4, Insightful
    Except that the articles in question aren't about finding and removing bugs in already-implemented code, they are about a method that allows one to construct code that doesn't have bugs in the first place.

    Linux, Firefox, and OpenOffice are some of the best software on the planet. I think is a good practical testament to the OSS philosophy.

    And yet they all still suffer from a metric crapload of bugs. Praxis produces software with so few bugs that they are willing to provide a warranty that says they'll fix any bug found within the first 10 years, for free. If their software had the defect rate of Firefox or OpenOffice they'd be bankrupt in short order.

  18. Uh by autopr0n · · Score: 3, Funny

    control structures != Turing complete. You can have loops as long as they have constant maximum bounds. Whatever it happens to be that you mean when you say "Nand is Turing complete" it makes no sense when you actually typed it. "turing-complete (for arithmetic)." makes no sense at all. WTF? Someone failed CS 315.

    --
    autopr0n is like, down and stuff.
  19. Nearly unlimited risk helps too by goombah99 · · Score: 4, Interesting

    unlimited risk can be an incentive too.

    Professor Middlebrook at caltech was an innovator in an unusual field. Sattelite electronics. Since no repairman was coming they wanted robust electronics. He desigined circuits in which any component could fail as an open or a short and it would remain in spec. You know that's a remarkable achievement if you've ever desinged a circuit before. Notably you can't really do this using SPICE. Speice will tell you what comething does but not how to design it. To do that you need a really good sense of approximations of the mathematical formula a circuit represents to see which components are coupled in which terms. And you need one more trick. The ability to put in a new element bridging any two points and quickly see how it affects the cicuit in the presence of feedback. To do that he invented the "extra element theorem" which allows you to compute this in analytic form from just a couple simple calculations. They still don't teach this in stardard courses yet. You can find it in Vorperians text book, but that's it. If you want to learn it you gotta either go to the original research articles from the 70s.

    --
    Some drink at the fountain of knowledge. Others just gargle.
  20. X windows in Ada for ATC by dlleigh · · Score: 4, Funny

    I was at an X windows technical conference many years ago when someone gave a presentation on X with Ada. When the speaker mentioned that it was for an air traffic control application, there was a sharp intake of breath all around the audience, most of whom had flown in for the meeting.

  21. Re:productivity around 30 LOC per day by blair1q · · Score: 3, Insightful

    30 LOC is net. You spend the first 45% of a high-reliability project doing the design work, and the last 45% doing the verification. The 10% in the middle is code generation.

    These guys seem to be claiming they can reduce redundancy in the design work, and rework in the verification work. They're doing it by using a design-description method that prevents unambiguity (and therefore using a team that is TRAINED to write unambiguous requirements, so their magic language may not be the key), a coding method that avoids unprovable structure (and probably eliminates a lot of other sorts of flexibility), and a verification method that first validates the design and then verifies the code as it's produced (no new value there as everything has to be touched at least once anyway, and if a big bug turns up that causes a lot of code to be redone you have to redo formal verification on those units again; something that's less likely if formal verification is delayed until full-alpha code is demonstrated, having been informally verified along the way).

    Their claims of massive error reduction are, at best, anecdotal. Let's see them do this after taking over a half-coded project with minimal design requirements, a hard deadline, and a budget that can be cut by governmental forces at will.

  22. They write the right stuff by data64 · · Score: 2, Interesting

    In school, this article was required reading for our class. It addresses the same topic as TFA.

    The essential point being there is a trade-off between quality and quantity and each organization/project needs to decide how far they want to lean in either direction.

  23. Bugs and Beta testing. by iluvcapra · · Score: 4, Insightful

    TFA cites a particular NSA biometric identification program which has "0.00" errors per KSLOC.

    Now, this got me thinking. It is completely possible for a biometric identification program to identify two different individuals as the same person (like identical twins), or for it give a false negative identification (dirt on a lense, etc). Is this a bug? The code is perfect: no memory leaks, the thing never halts or crashes or segfaults, all the functions return what they should given what they are.

    I think the popular definition of "bug" tends to catch too many fish, in that it seems to include all the behaviors a computer has when the user "didn't expect that output," what a more technical person might call a "misfeature." TFA outlines a working pattern to avoid coding errors, not user interface burps -- like for example, giving a yes/no result for a biometric scan, when in fact it's a question of probabilities and the operator might need to know the probabilities. Such omissions (the end user would call this a 'bug'), are solved thru good QA and beta-testing, but TFA makes no mention of either of these things, and seems to think that good coding is the art of making sure you never dereference a pointer after free()'ing it. It does mention formal specification, but that is only half the job, and alot of problems only become clear when you have the running app infront of you.

    Discussion of TFA has its place, but it promises zero-defect programming, which is impossible without working with the users.

    --
    Don't blame me, I voted for Baltar.
    1. Re:Bugs and Beta testing. by Helios1182 · · Score: 2, Informative

      Even Identical twins have different finger prints. They aren't exactly identical, despite sharing the same DNA.

    2. Re:Bugs and Beta testing. by Pollardito · · Score: 2, Funny

      maybe that 0.00 errors is just a result of a more exotic rounding algorithm than was discussed earlier

    3. Re:Bugs and Beta testing. by Adam9 · · Score: 2, Informative

      I also thought this was interesting, so I looked it up.

      However, fingerprints are not an entirely genetic characteristic. Scientists love to use this topic as an example of the old "nature vs. nurture" debate. Fingerprinting, along with other physical characteristics, is an example of a phenotype -- meaning that it is determined by the interaction of an indivdual's genes and the developmental environment in the uterus.

      The ultimate shape of fingerprints are believed to be influenced by environmental factors during pregnancy, like nutrition, blood pressure, position in the womb and the growth rate of the fingers at the end of the first trimester. Thus, you will find similar partterns of whorls and ridges in the fingerprints of identical twins. But there will also be differences -- just as there are differences between the fingers on any individual's hands.


      Taken from about.com

    4. Re:Bugs and Beta testing. by safXmal · · Score: 2, Insightful

      Quote " 1) Specification errors - the spec says to do something (or neglects to say something) that even if implemented correctly will not cause the correct result"

      A lot of theses errors are becouse software is designed by programmers and not by the users.

      Part of my job is spefifying new functions in the web applications of my company. The normal flow of information is from me as business user to the software designer to the coder and then I have to give my comments on the finished product.

      More often then not,the first round we have to srap the implementation of the new function and start over again. Not because the coder didn't do a good job but because the designer didn't have a clue what my spêcifications meant or how they should be implemented.

      How can I explain to somebody who doesn't know anything about my field of work what I really want. Whenever I speak with him, or her, I catch myself going in "stupid mode". I will try to dumb everything down and leave out the exeptions and finer points as I would with some new trainee.

      The only times we were able to get something working from the first go was when I could speak directly to the coders with the designer acting as a moderator.

      Personally I found it a lot easier to talk to them too. I would just tell them where I wanted things to be and how the program should react and the coders could give me immediate feedback if it was possible or not.

      When I had to talk to the designer I would never know what I would get back - I would tell him something like : "in this table exchange the column shipment number with the column delivery number" and he would come back saying that it was impossible to do so they replaced the delivery number by the transport order number because according to him that would solve my problem - which it didn't.

  24. Re:Do you think it would help? by Coryoth · · Score: 2, Interesting

    If someone sent a copy of this to Micro$oft? Would any of them read or comprehend it? It could make a difference in the version after Vista.

    Oddly enough it would make perfect sense to some people at MS. The Singularity OS project from MS research uses a lot of the same ideas in development methodology and formalism. Whether Singularity will ever make it out of MS research, or simply remain a curious little side project, is of course an interesting and quite open question. Only time will tell.

    For other OSs developed in a similar mold, try Coyotos which, while still getting seriously underway, looks quite promising indeed when it comes to secure and robust OSs.

    Jedidiah.

  25. The right programming language helps hugely by brucehoult · · Score: 5, Interesting

    The site is slashdotted at the moment, so I can't read the article.

    A good example of people writing complex but bug-free software under time pressure is the annual ICFP Programming Contest. This contest runs over three days, the tasks are complex enough that you usually need to write 2000 - 3000 lines of code to tackle them, and the very first thing the judges do is to throw corner-cases at the programs in an effort to find bugs. Any incorrect result or crash and you're out of the contest instantly. After that, the winner is generally the highest-performing of the correct programs.

    Each year, up to 90% of the entries are eliminated in the first round due to bugs, usually including almost all the programs written in C and C++ and Java. Ocassionally, a C++ program will get through and may do well -- even win, as in 2003 when you didn't actually submit your program but ran it yourself (so it never saw data you didn't have a chance to fix it for). But most of the prize getters year after year seem to use one of three not-yet-mainstream languages:

    - Dylan
    - Haskell
    - OCaml

    You can argue about why, and about which of these three is the best, or which of them is more usable by mortals (I pick Dylan), but all of them are very expressive languages with uncluttered code (compared to C++ or Java), completely type-safe, produce fast compiled code, and use garbage collection.

    1. Re:The right programming language helps hugely by Coryoth · · Score: 4, Informative

      Praxis uses SPARK Ada, which is a subset of the Ada programming language and annotations that provide for extended static checking, and theorem proving. You can find more about SPARK at the Praxis website, or the Wikipedia article isn't too bad. It's a very nice language, and has fantastic tool support.

      If you find that interesting, but Ada isn't to your taste, you can try JML for Java which provides similar (but lacking quite the same robustness and tool support) annotations. JML lets you automatically generate JUnit tests based on your annotations, and with ESC/Java2 allows for extended static checking.

      If, as you appear, you are more of a fan of functional languages then I'd suggest you check out Extended ML and HasCASL which provide similar sorts of formal specification capabilities for ML and Haskell. Tool support for these is still a little limited, but they are both quite powerful and provide very expressive specification syntax.

      Jedidiah.

    2. Re:The right programming language helps hugely by patio11 · · Score: 3, Informative
      I've participated in the ICFP before (one-man team on Java, program died in the first round, so there are my cards on the table), but one of the reasons the International Conference on Functional Programming Contest is consistently won by Functional Programmers is that it appeals heavily towards them both in terms of getting the word out to people and in terms of task selection. Type safety, fast compiled code, garbage collection -- all of these were all but irrelevant to the last two years' tasks. The main stumbling block both years had been writing parsers. FP is great for both tasks, thats why they teach you Scheme for your compiler design course in college and unless the language stokes your fire you'll never, ever use it again. This does not imply that its the tool for every possible job, and the various languages have features which make them better for a variety of tasks.

      Yesterday, I had to do an analysis for someone on whether eliminating the electoral college would hurt states with a low turnout or not. The data is online in a nice plain text table, and the calculations are dirt-simple and take under a second in whatever language you want. Gawk all the way, got the project done in half an hour, if I had used C or Java I'd probably have spent triple the time for the same results. Several months ago I had to do image processing with a GUI wrapped around it -- C for the number crunching, .NET something or other for the GUI. A year ago I had to write a distributed application to do some crazy intense number crunching -- wrote the number crunching loop in C*, wrote the network code and interface in Java.

      * Credit where credit is due: I borrowed 99.95% of it from GPLed code designed to do the same task on a single machine.

    3. Re:The right programming language helps hugely by brucehoult · · Score: 4, Interesting

      I've participated in the ICFP before (one-man team on Java, program died in the first round, so there are my cards on the table),

      My cards on the table are that I've entered each of the last six years with 3 - 5 person teams using Dylan, collecting 2nd place twice and Judge's Prize twice.

      but one of the reasons the International Conference on Functional Programming Contest is consistently won by Functional Programmers is that it appeals heavily towards them both in terms of getting the word out to people and in terms of task selection.

      Getting the word out doesn't seem to be the problem. Last year for example there were 161 first-round entries. Only 38 entries -- 24% of the total -- were in one of the languages I mentioned as being consistently sucessful: 1 in Dylan, 16 in Haskell and 21 in OCaml.

      I also disagree about task selection. C and C++ and Java are every bit as suited to the sort of tasks in the ICFP contest as they are to the things they are normally used for. What they are not suited to is doing them in a short period of time, in an exploratory programming manner, and without bugs.

      Type safety, fast compiled code, garbage collection -- all of these were all but irrelevant to the last two years' tasks. The main stumbling block both years had been writing parsers.

      Parsers aren't the problem. C has had parser generators for thirty years and besides the messages to be parsed were totally trivial. Dylan doesn't yet have any good tools for writing parsers, but it doesn't matter because we were able in the first eight hours of the contest to hand write a complete and correctly functioning (but stupid) program using nothing more complex than regular expressions, leaving the remaining 64 hours to think of something clever to do. Anyone using Perl or Python or Ruby probably finished the infrastructure even quicker than we did.

    4. Re:The right programming language helps hugely by Clover_Kicker · · Score: 2, Funny

      > Gawk all the way, got the project done in half an hour, if I
      > had used C or Java I'd probably have spent triple the time for
      > the same results.

      Heh, that was probably a 1-liner in APL.

      Of course APL programs longer than 1 line are usually unmaintainable, but no language is perfect...

    5. Re:The right programming language helps hugely by Doctor+Faustus · · Score: 3, Interesting

      all of them are very expressive languages with uncluttered code (compared to C++ or Java), completely type-safe, produce fast compiled code, and use garbage collection.
      More to the point, they're all basically functional, and Haskell is a pure functional language.

      I think we're going to see functional languages get a lot more popular soon because they're better for concurrent programming, and we're about to see a lot more multi-processor PCs.

  26. Re:Microsoft error rates by BCW2 · · Score: 2, Informative

    "Windows XP is a third generation product"

    You say that like it's a good thing!

    The only way Windows will be fixed is to start with a clean sheet of paper, completely re-write the entire code base. There are errors in XP that were unfixed errors in 98. I've seen 2 errors in XP that were identical to ones in 3.1. That is a lack of attention to detail.

    --
    Professional Politicians are not the solution, they ARE the problem.
  27. My Bogosity meter is wiggling by azuredragon23 · · Score: 4, Informative

    I have some beef to pick with the article: 1. It alleges that CMM5 organizations have about 1 defect/KLOC. Having worked and knowing such organizations, I can anecdotally confirm numbers like these are fiction. CMM5 certification has more to do with greasing palms rather than any absolute defect measurement. 2. A defect rate of 0.04bugs/KLOC is not zero bugs/KLOC. The difference is infinite in magnitude if that single bug is -- kills the user. 3. Low defect rates are more often a product of poor testing, not superior development.

  28. Paper doesn't mention the irrelevancy of OSS model by Anonymous Coward · · Score: 2, Insightful

    "Yes, yes, open source projects fix bugs for free. The point is that they can afford to do that, because they have so many volunteers to do the bug-fixes."

    The Praxis approach starts with the mindset that bugs are bad and shouldn't leave the room. Open-source has much looser requirements. Bugs can be released with the attitude that "a thousand eyes" will catch the mistake. Also unmentioned by OSS advocates is the problems caused during the duration of the bug being unfixed, till those eyes catch it (which isn't guarenteed). Also OSS isn't guarenteed (read the disclaimer, and remember the "/." story awhile back about programmers being held liable for problems with their code. Read the responses) while Praxis is. And last Praxis plays in a field that OSS doesn't. (mission/life critical)

  29. Re:productivity around 30 LOC per day by GileadGreene · · Score: 2, Interesting
    Let's see them do this after taking over a half-coded project with minimal design requirements, a hard deadline, and a budget that can be cut by governmental forces at will.

    Which is precisely the kind of project they avoid, because it's a disaster waiting to happen. Praxis caters to customers who want quality, and are willing to do what it takes to get it.

  30. Re:productivity around 30 LOC per day by Coryoth · · Score: 4, Informative

    Their claims of massive error reduction are, at best, anecdotal. Let's see them do this after taking over a half-coded project with minimal design requirements, a hard deadline, and a budget that can be cut by governmental forces at will.

    Their claims of error reduction are based on the development method and a lot of the important stuff happens very early on, taking over a half finished project that failed to follow such a method is of course not going to work. They can't make existing code bug free, but they can write new code that has vastly less errors than most software. As to hard deadlines and budgets - as far as I am aware Praxis already works with deadlines, and apparently their project for Mastercard was done on a fixed flat fee, so working with fixed or limited budgets doesn't appear to be an issue either.

    Jedidiah.

  31. Re:Do you think it would help? by thesnarky1 · · Score: 2, Interesting

    Actually, there was a case (in 2000, I believe) where a destroyer (the ship, not robot) was running a version of windows, got a divide by zero error, and the ship's systems all crashed. It was dead in the water for a few hours.

    Yes, found a wiki:

    In September 21, 1997 while on maneuvers off the coast of Cape Charles, Virginia, a crew member entered a zero into a database field causing a divide by zero error in the ships Remote Data Base Manager which brought down all the machines on the network, causing the ships propulsion system to fail. Anthony DiGiorgio, a civilian contractor with a 26-year history of working on Navy control systems, reported in 1998 that the Yorktown had to be towed back to Norfolk, Virginia naval base. Ron Redman, a deputy technical director with the Aegis Program Executive Office, backed this claim up, suggesting that such system failures had required Yorktown to be towed back to port several times.

    Note, it was running Windows NT 4.0. So yes, in military warships we even us Windows. I also believe that Britain's newest destroyer runs on a version, but I forget which, as I read it a while back.

  32. An interseting point that few managers understand by MerlynEmrys67 · · Score: 4, Interesting
    Was working for a small startup with a bigtime CEO. One of his interseting points was, the most successful software companies in the world has yet to release a product anywhere close to "On Time". I can give you a train wreck litany of software companies that released products "On Time" that were so bug ridden people swore they would never buy another product from the company, and replace the product with a comptetitors.

    The end result - In a year, no one will remember that you were 6 months late - make a buggy release and in a year EVERYONE will remember the buggy release.

    Why I always have time to do it over, and never the time to do it right in the first place

    --
    I have mod points and I am not afraid to use them
  33. Re:Well Duh! by blincoln · · Score: 2, Insightful

    My motto is: "If you strive for perfection, then the end result will always be better than settling for mediocrity."

    That's pretty much what I was thinking - that this company's results are not especially due to their methods, but due to hiring highly-skilled developers who know what they're doing and care about doing it right.

    Half of the "enterprise" applications I've worked with were built on a foundation of absolute shit - too many elements of their core design were based on flawed thinking. No amount of money and time would have let their developers make them work properly.

    My current opinion is that that kind of software is made by people who capitalize on the bureaucracy of corporations. I don't control what product is purchased here, so the salespeople for OverhypedFlashInThePanSoft only have to make a businessperson - rather than an engineer - think that their software is what they need to buy.

    --
    "...always new atoms but always doing the same dance, remembering what the dance was yesterday." -Richard Feynman
  34. Re:Flamebait this! by RingDev · · Score: 2, Insightful

    You are completely missing the point of CbyC development. One of the fundamentals is that these apps are RESISTANT TO CHANGE. So yes, MS could make a much more solid OS, IF you ran their, and only their proprietary hardware (as Apple used to/still does), only used the pre-installed applications in the exact manor they were designed to be used, and never drempt of changing anything.

    When you are talking about an air traffic control system, you can set a very specific set of requirements. The Air Traffic Control system will never have to open an Excel worksheet, or run Quake 4, or be compatible with hundreds of other vendors tools. The Air Traffic Control system will never have to deal with someone swaping graphics cards and updating drivers. It doesn't have to worry about spyware and root kits. It doesn't have to worry about internet access.

    If you want to rag on MS, go for it, but don't think CbyC is the answer. It would only result in an OS that you wouldn't want to use. (As a consumer it would be worthless, but it could be great for imbedded systems)

    -Rick

    --
    "Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
  35. Re:Do you think it would help? by Nato_Uno · · Score: 2, Informative

    Not anyone like, say, the US Navy, for example:

    http://wired-vig.wired.com/news/technology/0,1282, 13758,00.html

    Or air traffic controllers:

    http://www.techworld.com/opsys/news/index.cfm?News ID=2275

    Or nuclear power plants:

    http://www.securityfocus.com/news/6767

    Regardless of how you rate the intelligence of the parties involved in these little incidents I think you'll find that Windows is very often deployed in mission critical areas.

    And yes, often with catastrophic consequences. >)

    --

    Have fun,

    Nathan 'Nato' Uno
    http://web.unos.net/
  36. perception sells, and failure is seldom mentioned by misanthrope101 · · Score: 2, Insightful
    More likely they're selling, along with their software, peace of mind. Software designed/implemented by humans will have bugs, though there are methods for minimizing them. Managers of critical systems no doubt love to project the image to the public that there aren't bugs in their system, but the probability of that being true is miniscule. But people like to hear it, and so managers and marketers keep speaking the language.

    It's like all the suits who love to say "failure is not an option," but then we see the occasional failure, but people still say "failure is not an option" because it's the attitude they're trying to convey, not the reality. The right attitude will bring about the right reality, or so management would have you believe.

  37. Re:PRODUCTIVITY? by Nato_Uno · · Score: 2, Insightful

    I can't speak for the original poster, but I can't believe that the parent poster and I are the *only* people that believe that LOC is a poor metric.

    Measuring lines of code added per day causes deletions and modifications to be considered *bad*. If I add 10 lines today and those 10 lines allow me to delete 20 lines from last year then I have a net productivity of -10 LOC and I have been unproductive.

    The argument *could* be advanced that if I'd done it right in the first place the original 20 LOC that I'm deleting should have been the 10 LOC I added today so I *should* be penalized for doing poor work last year. I consider this argument to be shortsighted. What if we're interfacing with a new library? Is that a bad thing from a productivity perspective? What if adding a new feature involves rewriting 10 existing lines and interspersing 10 new ones? Is that less productive than tacking on 20 lines today?

    Counting lines added, lines changed, and lines modified as a metric is nearly as bad. The reason these metrics fail, IMHO, is that lines of code have no "average" value. Some lines are more valuable, some are less valuable, some have no meaning in the context of others, some have so much value that they cause others to be obsolete, etc. Grouping them together is like measuring the intelligence of a room of people by adding up the number of people present - meaningless.

    Even your point, that a single line of code implies a specific amount of background work ("heavy addition non-programming work") is fallacious, IMHO. Does each feature have equal merit? Equal difficulty? Does each line of code imply exactly the same (or even *about* the same) amount of "heavy addition non-programming work"?

    This is certainly not true for me - the difficulty of the code I write varies wildly, both within and between applications. I can assure you that I would likely expend much more effort on each line of code for an optimized backend search engine than I would on the CGI for the web interface that drives it. Is it therefore less productive for me to work on the backend because I expend more effort per line of code?

    IMHO, LOC is only useful for publishing statistics, not for measuring meaningful changes in productivity.

    --

    Have fun,

    Nathan 'Nato' Uno
    http://web.unos.net/
  38. Re:Microsoft error rates by BCW2 · · Score: 4, Funny


    If operating systems ran airlines:

    UNIX Airways: Everyone brings one piece of the plane along when they
    come to the airport. They all go out on the runway and put the plane
    together piece by piece, arguing non-stop about what kind of plane they
    are suposed to be building.

    Mac Airlines: All the airline personnel look and act exactly the same.
    Every time you ask questions about details you are gently but firmly told
    that you don't need to know, don't want to know, and everything will be
    done for you without your ever having to know, so just shut up.

    Windows Air: The terminal is pretty and colorful, with friendly stewards,
    easy baggage check and boarding and a smooth take off. After about 10
    minutes in the air the plane explodes with no warning whatsoever.

    Windows NT Air: Just like Windows Air, but costs more, and uses much
    bigger planes, and takes out all other planes in a 40 mile radius when it
    explodes.

    Linux Air: Disgruntled employees of all other OS Airlines, (with UNIX
    geeks who finally figured out what kind of plane they were suposed to be
    building) decide to start their own airline. They build the planes,
    ticket counters, and pave the runways themselves. They charge a small fee
    to cover the cost of printing the ticket, but you can also download the
    ticket and print it yourself. When you board the plane you are given a
    seat, four bolts, a wrench, and a copy of the Seat-HOWTO.html. Once
    settled, the fully adjusable seat is very comfotable, the plane leaves
    and arrives on time without problems, and the in-flight meal is
    wonderful. You try to tell the customers of the other airlines about the
    great trip, but all they can say is, "You had to what with the seat?"

    with apologies to Doc Searls and Linux Journal.

    --
    Professional Politicians are not the solution, they ARE the problem.
  39. Re:Paper doesn't mention open source model by iggymanz · · Score: 2, Insightful

    You did see the counts of lines of code in Praxis' projects? The header files alone in Linux have more lines of code than all Praxis ever wrote or ever will write.

  40. I second the motion! by Jetson · · Score: 4, Interesting
    I've been in this industry for quite some time and let me be the first to say that I wish I could repeat this sentence with a straight face.

    I've been a controller for 13 years and have worked in the automation end of things for almost 4 years now. There is NO SUCH THING as bug-free Air Traffic Control software. The best we can hope for is heterogenous redundancy and non-simultaneous failures. Some engineers seriously think they could replace all those controllers with an intelligent algorhythm. What really scares me is that the more they try, the less engaged the people become and the harder it is for them to fall back to manual procedures when the worst happens.

    Everyone used to laugh at how Windows NT could only run for 34 days before it needed a reboot. Some of our systems can't run HALF that long without needing a server switch-over or complete cold-start.

  41. There's another factor though by Sycraft-fu · · Score: 2, Insightful

    That's how much of the system you control. By system I mean the entire channel, including the hardware, software, input, etc. It's much easier to engineer low defect software when you control all of that. For example if you are developing something that runs only on one particular version of one kind of embedded device, and can only have input given to it in a certian way, and you can gaurentee that it is the only thing running at a given time, and so on.

    Much harder if you are making something that has to run on a massive set of arbitrary hardware that can have any number of other, quite possibly buggy, apps running and that can recieve all kinds of bad input through all kinds of different channels.

    That's part of the problem I see is that people look at systems that are engineered and controlled by one company, and then think that software that runs on comoddity hardware should be as reliable as something where everything is carefully controlled.

  42. Re:Requirements... don't we all wish by Coryoth · · Score: 2, Interesting

    It's very true that developing quality code is something that requires both parties commitment. If someone is unwilling to work with the developers to help them clearly define the requirements then yes, quality code is going to be all but impossible, and in that case it isn't the developer's fault. As others have pointed out, a large part of the reason so much code is so bad is simply because the clients fail to demand a higher standard. As long as customer expectations are low, or they are unwilling to actually commit to getting good results, there will remain issues.

    Jedidiah.

  43. I have to wonder.... by 2Bits · · Score: 4, Insightful

    So, if this toolset and methodology are so good, I have to wonder why it does not get more widespread use? According to their info, it is developed in the 70's and 80's, so that's not new. And why are softwares so buggy and have such a lousy reputation anyway? Not to start a flamewar, but let's just list a few possible "reaons" here:

    1. Why aren't schools teaching this methodoly thoroughly? Why aren't this toolset and programming language taught in school by default? I learned a bit of Ada at school, but that's only part of a comparison between programming language design. So, are schools to be blamed? Or those profs don't know better? Why aren't proper engineering methodologies emphasized?

    2. Someone developed a nice methodology, with a nice toolset and programming language, and got greedy and made it too expensive to acquire. Other tools are good enough, and the resulting softwares are acceptable to the market, so, this nice thing never got widespread use.

    3. Programmers are asked to do the impossible. We (I include myself here) had to work with customers who don't know what they want, only give very fuzzy requirements (Praxis's customers, from their list, are different kind of animals, and they probably know better than most of the customers we had to work with), and even if we lay out the whole detailed plan in front of them, they still don't know what they want. They will agree to the plan, sign and approve it, and until you have completed the whole system according to the plan, they would ask to redo the whole thing. If a customer dares to ask a civil engineer to add 2 more stories between the 3rd and 4th floor after the custom-built building is finished, guess what would the civil engineer say? Programmers are asked to do this all the time (I know I have been asked to), so are customers to blame? You can't get the system done properly if requirements are shifting all the time.

    4. Programmers are a bunch of bozos who know shit about proper engineering. Yeah, I can take the blame, I've been programming for over a decade, and I know how programmers work: methodologies are for pimps! If a bridge engineer can't tell or prove how much load the bridge can take, I'm sure people would tell him/her that s/he has no business in building bridge.

    5. Customers of packaged softwares would buy a buggy software to save one buck anyway, why would vendors put extra efforts and costs to make it better? Look at the market, a lot of good softwares didn't survive, and sometimes, the worst of the line prospoered (no naming here!). So people get what they asked for.

    6. Customers (even custom-built projects customers) are a bunch of cheap folks, they would go to the least priced, no matter what. Praxis's customers are willing to pay 50% more for quality work, how many of your customers are willing to? We are willing to fix our bugs, free of charge, for the first 10 years too, if our customers are willing to pay 50% than the market rate for quality work. But so far, I've never met one such customer yet. Granted, I don't work in the defense industry. So, don't blame us for lousy work, if customers try to squeeze out every single buck out of it. And in China (and some other countries too), you have to pay a huge amount for kickback too, sometimes, as high as 80% of the project's budget.

    7. Software vendors are a bunch of greedy bastards, they put buggy softwares on the market, without having to accept any responsibility (just read your EULA!). Industry problem or government problem? Not enough regulations (for safety, for useability, etc)? Other industries seem to do ok, e.g. medical, civil, .... so, are software vendors a bunch of irresponsible kids that need constant monitoring?

    8. The indsutry is developing too fast, people are chasing the coolest, hippiest, most buzzword-sounding technologies. No one gives a shit about "real engineering". And there are simply too much to learn too, in how many industries can you say people are required to master that much technologi

    1. Re:I have to wonder.... by Coryoth · · Score: 3, Informative

      Thanks for a thoughtful post.

      And why are softwares so buggy and have such a lousy reputation anyway? Not to start a flamewar, but let's just list a few possible "reaons" here:

      I think, to be honest, that it is a combination of a number of the factors you mention.

      Why aren't schools teaching this methodoly thoroughly? Why aren't this toolset and programming language taught in school by default?

      To do proper formal specification, one of the key parts of Praxis' Correct by Construction approach, does require a decent solid mathematical background. I think a lot of CS departments, facing students who want vocational training, struggle to demand the sort of mathematical requirements that are needed. As to SPARK - it is something that Praxis developed themselves, and it is proprietary (the toolset at least, the annotation language is well documented). You can pick up a book and learn the language, but the tools cost money if you want to use them commercially. On the other hand, the base specification language Praxis uses, Z, is entirely open, and there are a variety of freely available tools for it. There are also other specification langauges (I quite like CASL which has a number of useful extensions) that have freely available tools associated with them. There's also JML and ESC/Java2 which are freely available and seek to provide the same sort of functionality or Java that SPARK adds to Ada. There are places that teach JML, but they are still few and far between.

      Programmers are asked to do the impossible.

      I think this is a big part of it in some ways. Partly this is because, for a large number of software projects, the degree of exactness and quality just isn't required. I don't need a professional architect to help me build a doghouse in my backyard (though I'd certainly want one if I was building a skyscraper), and I don't need assurances of bug free software for a simple web front-end to a database. At the same time programmers are often unwilling to let customers know exactly what the limits are when developing software. To quote you: "If a customer dares to ask a civil engineer to add 2 more stories between the 3rd and 4th floor after the custom-built building is finished, guess what would the civil engineer say?"; if software engineers aren't prepared to stand up for quality and tell customers that somethings can't be done without sacrificing the quality of the product the problem will remain. In part I think this is due to the fact that software development is a young industry, and programmers are still of the mentality that they need to do everything they possibly can to please a customer. Partly it's because software projects are diverse (as are building projects!) and sometimes it's okay to make late changes; sometimes it's how things ought to be done - the key is to identify exactly what sort of project it is as early as you can. Are you building a treehouse for your kids, which doesn't require exactness and benefits from incremental design and feedback, or are you building a 4 story building where quality is important, and late changes will jepordise that?

      Programmers are a bunch of bozos who know shit about proper engineering.

      Sadly this is partly the case. There are an awful lot of cowboys out there when it comes to software engineering. There are, of course, a lot of fantastic programmers as well who are otherwise beset by some of the other points mentioned. There is, however, a remarkable degree of tolerance for cowboys, sloppiness and lack of quality in software engineering that you don't see in other engineering disciplines. Partly I thin

  44. Nearly unlimited risk helps too-Theorem. by Anonymous Coward · · Score: 4, Informative

    "If you want to learn it you gotta either go to the original research articles from the 70s."

    http://www.edn.com/archives/1995/080395/16df4.htm

    "The extra element theorem is used for analog circuitry. The gist of it is that you remove the reactive elements ( or dependant sources ) from a circuit and then put them back in through a process of correction factors."

    [n-extra element theorem]
    http://ece-www.colorado.edu/~ecen5807/course_mater ial/nEET.pdf

    [Middlebrook's extra element theorem]
    http://ece-www.colorado.edu/~ecen5807/course_mater ial/slidesAppC.pdf

  45. Rules of thumb by jd · · Score: 3, Insightful
    1. Doubling the number of coders will double the number of bugs and double the total time
    2. Doubling the budget will double the number of coders
    3. Extendable projects will, deadlines kill
    4. There is no such thing as a potential bug
    5. "Good" methods are cheap for customers, sloppy methods are profitable for companies.


    In the end, software companies are in it for the profits. They have no lemon laws to respect, they have no trades description act to obey, no ombudsmen to answer to, no consumer rights groups to speak of, no Government-imposed standards certification and virtually no significant competition. Customers are often infinitely patient and completely ignorant of what they should be getting - the machines are like Gods and the software salesmen are their High Priests. To question is to be smote.


    Were standards to be mandated - perhaps formal methods for design, OR quality certification of the end result, you would see no real impact on net software costs. Starting costs would go up, but long-term costs would go down.


    Nor would you see any serious impact on variety - if anything, there is a greater range of car manufacturer and design today than there was in the 50s and 60s when cars had the unnerving habit of exploding for no apparent reason.


    What you'd see is a decline in stupid bugs, a decline in bloat, an increase in modularity, possibly a reduction in latency and a move from upgrades to fix things that SHOULD have worked in the first place to enhancing things that can be relied upon to CONTINUE working fter the patches.


    Money would not be made by selling the same product with a different set of defects to the same market, money would be made by always going beyond last year's horizons. The same way most manufacturers, from cars to camping gear to remote control aircraft to air conditioning units to microwave ovens to home stereo manufacturers have all been doing - very successfully - for a very long time.


    The IT industry isn't going to change in the foreseeable future, the only way we'll see change in our lifetimes is if it is imposed on the Pointy Haired Bosses. We could easily see 99.9% reliable software, with no additional cost, in our homes in a year, with the lack of constant fixes actually saving money. And that's why it won't happen. Not because the IT corporations are mean, thuggish and ogreish - they are, it just isn't way it won't happen.


    It won't happen because they're geared both towards the profit motive and towards the outdated notion that the market is tiny. (That last part was true - in the 1950s, when entire countries might have three or four computers in total, operating in two, maybe three different capacities. You can understand a desire to go after the after-sales service, when there simply isn't anything else left to do.)


    Today, Microsoft's Windows resides on 98% of the desktop computers, but because of the support system needed to run the damn things, 98% of the world's population didn't have significant access to one. Ok, putrid green is a lousy colour, but the idea of clockwork near-indestructible laptops that - in theory - could be built to weigh 5 lbs or less and run high-end, intensive applications is beginning to filter through to the brain-dead we call politicians.


    You think someone in the middle of Ethiopia who is fluent only in their native tounge is going to want to pay for telephone technical support from someone in India, in order to figure out why their machine keeps locking up?


    When computing is truly available to the masses (ie: when even a long-forgotten South American tribe can reasonably gain access to one), the ONLY way it can be remotely practical is if said South American can look forward to a reliable, usable, practical experience where all usage can be inferred from first principles, and where NO software service calls are required to get things to work, ONLY required to get more things for working with.

    --
    It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
  46. IEFBR14 is the perfect example of your point by Beryllium+Sphere(tm) · · Score: 4, Interesting

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

    IEFBR14 is sort of an executable version of /dev/null. It returns immediately when called. It had four or five bug reports filed against it.

    IBM could of course write a defect-free return statement. All the bugs were requirements drift that Praxis could not have prevented.

  47. Related reference page about tests by under_score · · Score: 2, Insightful

    The qualities of an ideal test is a framework similar to ACID for databases and INVEST for user stories. It describes six verifiable qualities that a test should have. On a related note, this article doesn't make me really that excited. I've been using test driven development with JUnit and NUnit to deliver tens of thousands of lines of code into production with similar defect rates (about two defects found over the course of several years of code being in production). I maintained good productivity rates, delivered code into QA with no defects found, into pre-production with no defects found and finally into production where defects were found only after a great deal of time in operation. The code was not simple either: it was asynchronous, guaranteed delivery, multi-threaded messaging code for enterprise systems. Developers who don't do TDD should be paid about 1/4 as much as developers who do, IMNSHO.

  48. Automatic generation of code? by meburke · · Score: 3, Interesting

    This article couldn't have been more coincidental to my current project: I've been re-reading James Martin's books, "Application Development without Programmers" and "System Design from Provably Correct Constructs", with the goal of selecting a method to program mechanical devices.

    Martin's thesis, and remember this was back in the 70's and early 80's, was that the program should be generated from a specification of WHAT the program was to do, rather than trying to translate faulty specifications into code telling the computer HOW to do it. (Trust me, that poor sentence does not come close to describing the clarity of purpose in Martin's books.) Martin proposes that a specification language can be rigid enough to generate provably correct programs by combining a few provably correct structures into provably correct libraries from which to derive provably correct systems.

    The definition of the time, HOS (for Higher-Order Software) was actually used by a company called HOS, Inc.(!), and apparently worked pretty well. Many of the constructive ideas were included in OOP and UML, but ideally, if I understand the concept properly, it would be equivalent to generating software mostly from Use-Case analysis. There are similar approaches in MDD and MDA methodologies. I wonder what ever became of the HOS,Inc. and the HOS methods? It looks like they had a handle on round-trip software engineering in the 80's.

    OK, why would this be a good thing? Well, for one thing, computational/programmable devices are prolifierating at a tremendous rate, and while we can engineer a new device in 3 to 6 months, the programs for the device take 18 months to 3 years (if they are finished at all). Hardware development has greatly outpaced software development, by some estimations a 100x diference in capacity...yet they are built on the same fundamental logic!

    The best argument, IMO, is that since larger systems are logarithmically more complex, and since it is impossible to completely test even intermediately complex systems, it will require provably correct modules or objects to produce dependable systems. If the code is generated from provably correct components, then the system only has to be tested for correct outputs.

    Furthermore, code generated from provably correct components can allow machinery and devices to adapt in a provably correct way by rigorously specifying the outputs and changes to the outputs.

    Praxis is on a roll. The methodology employed is probably more important than the genius of the programmers. It should get better,though. The most mediocre Engineer today can produce better devices than the brilliant Engineers of 30 years ago using tested off-the-shelf components. IMO, this the direction programming should be taking.

    --
    "The mind works quicker than you think!"
  49. Wow by dghcasp · · Score: 2, Funny
    This was done ~ 30 years ago, yet my entire string of xmas lights still goes out if one bulb fails.

    But seriously, that's cool. Any 'net resources on this for us software types who'd like to think we can solder two wires together without burning down the house?

  50. Re:productivity around 30 LOC per day by Coryoth · · Score: 4, Insightful

    Then their ability to produce bug-free code depends, as usual, on control factors, not on real-world engineering.

    In as much as a civil engineer depends on control factors via refusing customers who demand that the building have 6 stories not 4 just one month before construction is due to finish, yes. Real world engineering makes certain demands of the client. Someone who wants to build a treehouse for their kids doesn't consult an architect and a civil engineer, and civil engineers don't take contracts from people who refuse to set out some limits on what they want built, and what they expect of it.

    Praxis uses solid engineering. Their "Correct by Construction" approach is solidly grounded in axiomatic mathematics and uses similar sorts of formal calculations and logical and mathematical proofs as you might expect to see from civil, electrical, aerospace, or ny other kind of engineers. Take the time to read sample chapters from the SPARK book to get an idea of exactly what they are doing. There is very definitely quite solid engineering going on.

  51. Why don't we learn this in school by RibRdb · · Score: 2, Interesting

    As a computer science student, I would like to know why we aren't taught this in school. My professors have told me that software verification is a nearly impossible task which is too complicated for any real system, but this article claims otherwise. Why aren't we being taught that we should be responsible for writing reliable code and how to do it? Why haven't I heard of Z or other methods for writing provable specifications? My professors can't even write a decent specifcation. And supposedly this is one of the best Computer Science programs in the US. If students aren't even taught that it is possible to write near bug free software, it's no wonder that software is so unreliable.

  52. Re:Microsoft error rates by TubeSteak · · Score: 2, Funny

    And where's the description of GNU/Linux Air?

    --
    [Fuck Beta]
    o0t!
  53. Re:Non turing complete programming languages by Vintermann · · Score: 2, Interesting

    SPARK Ada, which Praxis use, is actually not turing-complete. It's bounded in space: no dynamic data structures, no allocation or deallocation whatsoever - not even implicitly. That's what permits the serious static checking, and makes correctness proofs feasible. Termination proofs can still be a pain, though. AFAIK most SPARK programs are proven to behave correctly only if they do terminate.
    That's not so relevant in real-time systems, though, which is where SPARK really shines. It's quite an achievement by Praxis to construct a language which is amenable to correctness proofs, and still can handle multiple threads just fine. It looks like something Djikstra would have been impressed by.

    To answer one of the followups to this post: Yes, NAND gates may be turing complete, but not unless you have an unbounded supply of them. Otherwise, they can not be equivalient to a turing machine (which has an infinite tape).

    --
    xkcd is not in the sudoers file. This incident will be reported.
  54. But what does the customer need? by mcrbids · · Score: 3, Insightful

    Screw funding. It's irrelevant.

    Screw specifications. Nobody has them anyways.

    Give me a clear, predefined spec, and I'll meet it. I'll guarantee bug fixes,too.

    But that's not how software evolves.

    Despite careful attention, despite voluminous meetings, emails, and specifications, I never get a clear idea what the client needs me to develop until AFTER a prototype has been built.

    In fact, I'd wage that there's a quasi-quantum principle at work: You can either work towards the customer's actual needs, or the predefined, agreed upon specification/costs/specifications. Answering either means ignoring the other.

    Consider this the Heisenberg Uncertainty principle. The software is half-dead, half-alive. Either it meets the needs of the customer (and associated scope creep, bugs, ets) or the originally defined specification. Releasing the software defines whether the cat is dead or alive.

    It seems that:

    1) People will commit, in aggressive fashion, that they need something until they get it, at which point, they'll angrily point out all the flaws in it.

    2) People don't actually know what they need until they see that what they have isn't it.

    3) When you take anything produced because of (1), and then compare that to the feedback produced by (2), you end up with cases where the code is producing a result unexpected in the original design.

    These are called bugs.

    4) The only intelligent way to proceed with (1) and (2) is to consider software an iterative process, where (1) and (2) combine with (3) and lots of debugging to result in a usable product.

    --
    I have no problem with your religion until you decide it's reason to deprive others of the truth.
  55. Re:productivity around 30 LOC per day by Mignon · · Score: 2, Funny
    their project for Mastercard was done on a fixed flat fee

    I would have said no payments for the first six months, then 19.7% after that.

  56. Praxis made me the geek I am by nicolaiplum · · Score: 3, Interesting

    At the age of 17 I spent a week in the Praxis offices on "Work Experience" (Americans may think of this as a very short internship), to find out what developing software would be like as a career. This was a major formative event of my life: I thought that developing software sounded good, I really liked using Real Computers (multiuser, multiprocessing systems with powerful operating software, like VMS and SunOS), and the people impressed me greatly. It definitely set me on the path to the career in systems development and administration that I have today.
    The person who made the biggest impression on me was the sysadmin. He got his own office-cube instead of having to share, he wore much more casual clothes and had a lot more hair and beard than most of the staff, he got to have big toys (several workstations, a LaserJet IIIsi big enough for an entire office that seemed to be his alone, etc) and he didn't seem to get much hassle from anyone else. This was obviously the job for me.
    The sysadmin was obviously rather a BOFH. When I was sat at the UNIX workstation for the first time, and had poked around with basic file-handling commands, I asked "What's the text editor on this system?". He answered "emacs - e m a c s - here's a manual" and picked about 300 sheets of paper off the Laserjet and handed it to me.
    I got to play with UNIX (SunOS), VMS, Oracle development environments. I still have the Emacs manual printout somewhere at home - it served me well when I went to University where printing anything out was charged by the sheet!
    I'm very glad they're still around.

    --
    "For a successful technology, reality must take precedence over public relations, for Nature cannot be fooled"
  57. Anyone old enought to remember AD/Cycle? by ModelerRick · · Score: 2, Insightful
    I've been re-reading James Martin's books, "Application Development without Programmers" and "System Design from Provably Correct Constructs", with the goal of selecting a method to program mechanical devices.

    Martin's thesis, and remember this was back in the 70's and early 80's, was that the program should be generated from a specification of WHAT the program was to do, rather than trying to translate faulty specifications into code telling the computer HOW to do it. (Trust me, that poor sentence does not come close to describing the clarity of purpose in Martin's books.) Martin proposes that a specification language can be rigid enough to generate provably correct programs by combining a few provably correct structures into provably correct libraries from which to derive provably correct systems.

    IBM had a major intiative back in the mid-1980s called AD/Cycle which was tied to SAA (System Application Architecture) which was based on these and similar ideas prevalent back then. This is the old "holy grail" and an attempt to fix the waterfall methods of development, which had actually been since the early 1950s with mixed success in delivering software on-time and in-budget.

    AD/Cycle involved not only IBM but a number of "AD/Cycle partner" companies like Bachman, and KnowledgeWare. KnowlegeWare's CEO was the former scrambling NFL quarterback Fran Tarkenton. A google of "fran tarkenton knowledgeware" will turn up references to Jim Martin, as well as some interesting things about how the company ended up.

    An incredible amount of development money went down the rat-hole chasing the AD/Cycle dream.

    The problem turns out to be the difficulty, if not impossibility, of creating rigorous specifications which produce useful results in the face of problems which aren't very well understood at the outset. The less the requirement is for a "black box" with well-defined inputs and outputs the more this is likely to be the case.

    Many problems turn out to be wicked that there is a feedback loop between the implementation and the requirements. A classic book from the era was Wicked Problems, Righteous Solutions (http://www.amazon.com/gp/product/013590126X/102-5 477977-4320940?v=glance&n=283155) Which might be considered one of the old testament texts pointing to today's "agile development" movement.

    A non-software example of a wicked problem is city planning in which implementing changes in the road network, housing developments, shopping center location etc. all change the requirements for the same aspects.

    Many wicked problems come from "requirements" which often do (or should or must) come from users. Often, the real requirements aren't known until an implementation is given to the users, who then might say, "yup, you implemented exactly what I asked for, but now that I see it, here's what I really want." Or, "Now that we've added this other thing (application, system, business division) why, doesn't this (work more like/interface with/replace/...) that."

    Faced with this, a methodology based on "correct" construction from "rigourous" specifications simply moves the problem to debugging the requirements.

    Until we do away with the need to change/adapt systems to changing/evolving requirements, which would likely involve eliminating users, this approach will have limited applicability, and will need to stand beside other more widely used incremental development models.