• simon.crick (9/25/2013)


    I believe technology also has a role to play in the prevalence of bugs in modern software.

    I certainly agree. Many bugs are caused by appallingly ill-conceived technology. The C++ language is perhaps the best example of this. C# has of course inherited all C++'s idiocies, and although it is possible to work in a mode that leaves the worst of the C++ rubbish out people have got used to using that rubbish and are too lazy to learn to avoid it. The rot started with the spread of C, but C's fault was that people treated it as a high level language rather than ralising that it was an extremely low level language.

    I have no hard evidence to back this up, but I would be prepared to bet quite a lot of money that modern languages like C# with lots of "advanced" programming concepts suffer from way more bugs than earlier languages like C++ that are more minimalistic.

    Advanced programming concepts are fine in principle, but they can lead to code with lots of unnecessary layers and levels of abstraction that can obscure the underlying logic, resulting in mis-understandings that would not have occurred if simpler programming concepts had been used.

    The idea that abstraction is a bad idea is just plain crazy. Abstraction is one of the main tools for reducing a problem into multiple smaller parts. Simple advanced programming concepts like reduction, function mapping, and unification are going to cause far less damage that hideous primitve complexity like C++'s Friend concept.

    I firmly believe that computer science will eventually realize this and there will eventually be a return to simpler and more minimalistic languages and technologies.

    I think computer science is way ahead of you.

    But this won't happen until computer scientists get over their inferiority complex (controversial, I know, but a well recognised phenomenon) and start thinking about how they can help us build more reliable systems rather than how they can impress their physics/engineering/mathematics colleagues with difficult to understand research papers.

    My view is that software with fewer bugs will be developed only when unscientific developers stop turning their noses up at science and actually take the trouble to learn some. You'll find that software written in languages like Haskell, ML, Erlang, SCCS and verified using tools like the Scott Calculus or Z have far lower bug rates than software written in C++ or Visual Basic. You'll also discover that developers who have been taught by computer scientists to consider error management as an essential part of every program manage to write programs that cope well with environmental problems (OS and compiler bugs, hardware failures, incorrect input, etcetera), while those that haven't will at best have a try at dealing with invalid input.

    Tom