Who is not afraid of bugs ? Most of my readers I know will shudder just at the thought of those creepy things crawling all over you .
Just like the tag line of the Movie Eight-Legged Freaks , “Do you hate spiders? Do you REALLY hate spiders? Well they don’t like you either”
But there is another class of bugs that can ruin your sleep, your peace of mind and can really make you go nuts, we engineers call the software bugs. They can make a beautiful program a mess and can get you right back to square one. Everyone who has written a program no matter how basic it is will have encountered bugs in the first trial. Bugs can be caused due to carelessness from the part of the programmer or the programmers inability to spot out an invalid condition and it can also be caused by hardware imperfections.
No matter how much care is taken to write a bug free software is an unrealized dream and software experts claim that it will remain unrealized. Software Bugs have caused alot of trouble. Paul Bourdeaux mentions Top Ten Most Infamous Software Bugs Of All Time in his blog.
“Debugging is like removing needles from the haystack” It can be one heck of a job to find bugs in a very large program. While working on my Btech Project I encountered a Similar situation the program started giving weird results I spent almost two days checking the logic and analyzing it and the real cause of the error was a wrong argument to a function.
Despite all this There has been an effort to classify bugs in an interesting way. All those who have learned programming might have heard terms like run time errors, Logical bugs, arithmetic bugs, syntax errors etc.
But there is another classification of bugs and these are :
Bohrbug
A BohrBug is just your average, straight-forward bug. Simple like the Bohr model of the atom: A small sphere. You push it, it moves. BohrBugs are reproducible, and hence are easily fixed once discovered. These are named after Niels Bohr, who proposed a simple and easy-to-understand atomic model in 1913. In Bohr’s model, things like the path and momentum of an electron in an atom are predictable.
Heisenbug
A bug that disappears or alters its behavior when one attempts to probe or isolate it. No matter how much time and effort is spent trying to reproduce the problem, the bug eludes us. Such bugs were named Heisenbugs, after Werner Heisenberg, who is known for his “uncertainty principle”. According to his theory, it is not possible to accurately or certainly determine the position and velocity of an electron in an atom at a particular moment.
Mandelbug
When the cause of the bug is too complex to understand, and the resulting bug appears chaotic, it is called a Mandelbug. These are named after Benoît Mandelbrot, who is considered the father of fractal geometry (fractals are complex, self-similar structures). A bug in an operating system that depends on scheduling is an example of a Mandelbug.
Schroedinbug
Sometimes, you look into the code, and find that it has a bug or a problem that should never have allowed it to work in the first place. When you try out the code, the bug promptly shows up, and the software fails! Though it sounds very uncommon, such bugs do occur and are known as Schroedinbugs. They are named after the scientist Erwin Schrödinger, who proposed that in quantum physics, quantum particles like atoms could exist in two or more quantum states.
By observing the problem in the code, you change the outcome — either the software works or breaks. So these kinds of bugs are known as Schroedinbugs.
Fractal Bugs
A bug, after which its resolution is found, reveals additional self-similar bugs elsewhere in the code, after which they are fixed, likewise appear elsewhere still.
Next time time you write a program and if it crashes unexpectedly you can tell your teacher or your friends that you have a heisenbug or a bohrbug in your program, let them figure out what the heck that means. Happy Hacking 🙂
References
[1] S.G Ganesh http://www.linuxforu.com/2010/10/joy-of-programming-types-of-bugs/
[2] The Jargon File http://www.catb.org/jargon/html/index.html