“
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it?
”
”
Brian W. Kernighan
“
If debugging is the process of removing software bugs, then programming must be the process of putting them in.
”
”
Edsger W. Dijkstra
“
If you're good at the debugger it means you spent a lot of time debugging. I don't want you to be good at the debugger.
”
”
Robert C. Martin
“
Programmers are not to be measured by their ingenuity and their logic but by the completeness of their case analysis.
”
”
Alan J. Perlis
“
What kind of programmer is so divorced from reality that she thinks she'll get complex software right the first time?
”
”
James Alan Gardner (Ascending (League of Peoples, #5))
“
Life is Beautiful?
Beyond all the vicissitudes that are presented to us on this short path
within this wild planet, we can say that life is beautiful.
No one can ever deny that experiencing the whirlwind of emotions
inside this body is a marvel,
we grow with these life experiences,
we strengthen ourselves and stimulate our feelings every day,
in this race where the goal is imminent death
sometimes we are winners and many other times we lose and the darkness surprises us
and our heart is disconnected from this reality halfway
and connects us to the server of the matrix once more,
debugging and updating our database,
erasing all those experiences within this caracara of flesh and blood,
waiting to return to earth again.
"Life is beautiful gentlemen" is cruel and has unfair behavior
about people who looked like a bundle of light
and left this platform for no apparent reason,
but its nature is not similar to our consciousness and feelings,
she has a script for each of us
because it was programmed that way, the architects of the game of life
they know perfectly well that you must experiment with all the feelings, all the emotions and evolve to go to the next levels.
You can't take a quantum leap and get through the game on your own.
inventing a heaven and a hell in order to transcend,
that comes from our fears of our imagination
not knowing what life has in store for us after life is a dilemma
"rather said" the best kept secret of those who control us day by day.
We are born, we grow up, we are indoctrinated in the classrooms
and in the jobs, we pay our taxes,
we reproduce, we enjoy the material goods that it offers us
the system the marketing of disinformation,
Then we get old, get sick and die. I don't like this story!
It looks like a parody of Noam Chomsky,
Let's go back to the beautiful description of beautiful life, it sounds better!
Let's find meaning in all the nonsense that life offers us,
'Cause one way or another we're doomed
to imagine that everything will be fine until the end of matter.
It is almost always like that.
Sometimes life becomes a real nightmare.
A heartbreaking horror that we find impossible to overcome.
As we grow up, we learn to know the dark side of life.
The terrors that lurk in the shadows,
the dangers lurking around every corner.
We realize that reality is much harsher
and ruthless than we ever imagined.
And in those moments, when life becomes a real hell,
we can do nothing but cling to our own existence,
summon all our might and fight with all our might
so as not to be dragged into the abyss.
But sometimes, even fighting with all our might is not enough.
Sometimes fate is cruel and takes away everything we care about,
leaving us with nothing but pain and hopelessness.
And in that moment, when all seems lost,
we realize the terrible truth: life is a death trap,
a macabre game in which we are doomed to lose.
And so, as we sink deeper and deeper into the abyss,
while the shadows envelop us and terror paralyzes us,
we remember the words that once seemed to us
so hopeful: life is beautiful. A cruel and heartless lie,
that leads us directly to the tragic end that death always awaits us.
”
”
Marcos Orowitz (THE MAELSTROM OF EMOTIONS: A selection of poems and thoughts About us humans and their nature)
“
Debugging: what an odd word. As if "bugging" were the job of putting in bugs, and debugging the task of removing them. But no. The job of putting in bugs is called programming. A programmer writes some code and inevitably makes the mistakes that result in the malfunctions called bugs. Then, for some period of time, normally longer than the time it takes to design and write the code in the first place, the programmer tries to remove the mistakes.
”
”
Ellen Ullman (The Bug)
“
Sometimes it pays to stay in bed on Monday, rather than spending the rest of the week debugging Monday's code.
”
”
Dan Salomon
“
To paraphrase an old joke among programmers, “Writing code accounts for 90 percent of programming. Debugging code accounts for the other 90 percent.” Your computer will do only what you tell it to do; it won’t read your mind and do what you intended it to do. Even professional programmers create bugs all the time, so don’t feel discouraged if your program has a problem.
”
”
Albert Sweigart (Automate the Boring Stuff with Python: Practical Programming for Total Beginners)
“
Debugging tip: For server applications, be sure to always specify the -server JVM command line switch when invoking the JVM, even for development and testing. The server JVM performs more optimization than the client JVM, such as hoisting variables out of a loop that are not modified in the loop; code that might appear to work in the development environment (client JVM) can break in the deployment environment (server JVM).
”
”
Brian Goetz (Java Concurrency in Practice)
“
there is always a danger that the engineers will somehow program their own subconscious biases into the software.21 Yet once we discover such mistakes, it would probably be far easier to debug the software than to rid humans of their racist and misogynist biases.
”
”
Yuval Noah Harari (21 Lessons for the 21st Century)
“
But in a pinch, he was a capable coder too. He just wasn’t especially fast. So when he was finally done coding and debugging his program and ran a successful test, it was past eleven on Tuesday night. He hadn’t slept but for a few hours on Sunday night, and the lack of sleep had cooked him.
”
”
Matthew FitzSimmons (The Short Drop (Gibson Vaughn, #1))
“
That’s the nature of culture. It’s not a single decision—it’s a code that manifests itself as a vast set of actions taken over time. No one person makes or takes all these actions. Cultural design is a way to program the actions of an organization, but, like computer programs, every culture has bugs. And cultures are significantly more difficult to debug than programs.
”
”
Ben Horowitz (What You Do Is Who You Are: How to Create Your Business Culture)
“
Pham Nuwen spent years learning to program/explore. Programming went back to the beginning of time. It was a little like the midden out back of his father’s castle. Where the creek had worn that away, ten meters down, there were the crumpled hulks of machines—flying machines, the peasants said—from the great days of Canberra’s original colonial era. But the castle midden was clean and fresh compared to what lay within the Reprise’s local net. There were programs here that had been written five thousand years ago, before Humankind ever left Earth. The wonder of it—the horror of it, Sura said—was that unlike the useless wrecks of Canberra’s past, these programs still worked! And via a million million circuitous threads of inheritance, many of the oldest programs still ran in the bowels of the Qeng Ho system. Take the Traders’ method of timekeeping. The frame corrections were incredibly complex—and down at the very bottom of it was a little program that ran a counter. Second by second, the Qeng Ho counted from the instant that a human had first set foot on Old Earth’s moon. But if you looked at it still more closely. . .the starting instant was actually some hundred million seconds later, the 0-second of one of Humankind’s first computer operating systems.
So behind all the top-level interfaces was layer under layer of support. Some of that software had been designed for wildly different situations. Every so often, the inconsistencies caused fatal accidents. Despite the romance of spaceflight, the most common accidents were simply caused by ancient, misused programs finally getting their revenge.
“We should rewrite it all,” said Pham.
“It’s been done,” said Sura, not looking up. She was preparing to go off-Watch, and had spent the last four days trying to root a problem out of the coldsleep automation.
“It’s been tried,” corrected Bret, just back from the freezers. “But even the top levels of fleet system code are enormous. You and a thousand of your friends would have to work for a century or so to reproduce it.” Trinli grinned evilly. “And guess what—even if you did, by the time you finished, you’d have your own set of inconsistencies. And you still wouldn’t be consistent with all the applications that might be needed now and then.”
Sura gave up on her debugging for the moment. “The word for all this is ‘mature programming environment.’ Basically, when hardware performance has been pushed to its final limit, and programmers have had several centuries to code, you reach a point where there is far more signicant code than can be rationalized. The best you can do is understand the overall layering, and know how to search for the oddball tool that may come in handy—take the situation I have here.” She waved at the dependency chart she had been working on. “We are low on working fluid for the coffins. Like a million other things, there was none for sale on dear old Canberra. Well, the obvious thing is to move the coffins near the aft hull, and cool by direct radiation. We don’t have the proper equipment to support this—so lately, I’ve been doing my share of archeology. It seems that five hundred years ago, a similar thing happened after an in-system war at Torma. They hacked together a temperature maintenance package that is precisely what we need.”
“Almost precisely.
”
”
Vernor Vinge (A Deepness in the Sky (Zones of Thought, #2))
“
Take for example job applications. In the 21st century the decision wherever to hire somebody for a job while increasingly be made by algorithms. We cannot rely on the machines to set the relevant ethical standards, humans will still need to do that, but once we decide on an ethical standard in the job market, that it is wrong to discriminate against blacks or against women for example, we can rely on machines to implement and maintain these standards better than humans. A human manager may know and even agree that is unethical to discriminate against blacks and women but then when a black woman applies for a job the manager subconsciously discriminate against her and decides not to hire her. If we allow a computer to evaluate job applications and program computers to completely ignore race and gender we can be certain that the computer will indeed ignore these factors because computers do not have a subconscious. Of course it won't be easy to write code for evaluating job applications and there is always the danger that the engineers will somehow program their own subconscious biases into the software, yet once we discover such mistakes it would probably be far easier to debug the software than to get rid humans of their racist and misogynist biases.
”
”
Yuval Noah Harari (21 Lessons for the 21st Century)
“
You’re a grown-up, these days. You don’t wear a kamikaze pilot’s rising sun headband and a tee-shirt that screams DEBUG THIS! and you don’t spend your weekends competing in extreme programming slams at a windy campsite near Frankfurt, but it’s generally difficult for you to use any machine that doesn’t have at least one compiler installed: In fact, you had to stick Python on your phone before you even opened its address book because not being able to brainwash it left you feeling handicapped, like you were a passenger instead of a pilot. In another age you would have been a railway mechanic or a grease monkey crawling over the spark plugs of a DC-3. This is what you are, and the sad fact is, they can put the code monkey in a suit but they can’t take the code out of the monkey.
”
”
Charles Stross (Halting State (Halting State, #1))
“
Five minutes later he was out of there. About thirty seconds to do the job, and three minutes thirty to cover his tracks. He could have done anything he liked in the virtual structure, more or less. He could have transferred ownership of the entire organization into his own name, but he doubted if that would have gone unnoticed. He didn’t want it anyway. It would have meant responsibility, working late nights at the office, not to mention massive and time-consuming fraud investigations and a fair amount of time in jail. He wanted something that nobody other than the computer would notice: that was the bit that took thirty seconds. The thing that took three minutes thirty was programming the computer not to notice that it had noticed anything. It had to want not to know about what Ford was up to, and then he could safely leave the computer to rationalize its own defenses against the information’s ever emerging. It was a programming technique that had been reverse-engineered from the sort of psychotic mental blocks that otherwise perfectly normal people had been observed invariably to develop when elected to high political office. The other minute was spent discovering that the computer system already had a mental block. A big one. He would never have discovered it if he hadn’t been busy engineering a mental block himself. He came across a whole slew of smooth and plausible denial procedures and diversionary subroutines exactly where he had been planning to install his own. The computer denied all knowledge of them, of course, then blankly refused to accept that there was anything even to deny knowledge of and was generally so convincing that even Ford almost found himself thinking he must have made a mistake. He was impressed. He was so impressed, in fact, that he didn’t bother to install his own mental block procedures, he just set up calls to the ones that were already there, which then called themselves when questioned, and so on. He quickly set about debugging the little bits of code he had installed himself, only to discover they weren’t there. Cursing, he searched all over for them, but could find no trace of them at all. He was just about to start installing them all over again when he realized that the reason he couldn’t find them was that they were working already. He grinned with satisfaction. He tried to discover what the computer’s other mental block was all about, but it seemed, not unnaturally, to have a mental block about it. He could no longer find any trace of it at all, in fact; it was that good. He wondered if he had been imagining it. He wondered if he had been imagining that it was something to do with something in the building, and something to do with the number thirteen. He ran a few tests. Yes, he had obviously been imagining it.
”
”
Douglas Adams (The Ultimate Hitchhiker's Guide to the Galaxy (Hitchhiker's Guide to the Galaxy #1-5))
“
Remember, though, that debugging is as much art as it is computer science [..]
”
”
Michael A. Vine (C Programming for the Absolute Beginner)
“
So he’d reach into the drawer for the tape with the FLIT debugger and feed that into the computer. The computer would then be a debugging machine, and he’d send the program back in.
”
”
Anonymous
“
It is surprising how little page space is devoted to bugs and debugging in most introductory programming textbooks.
”
”
Greg Wilson (Teaching Tech Together)
“
I do not believe we will find the magic here. Program verification is a very powerful concept, and it will be very important for such things as secure operating system kernels. The technology does not promise, however, to save labor. Verifications are so much work that only a few substantial programs have ever been verified. Program verification does not mean error-proof programs. There is no magic here, either. Mathematical proofs also can be faulty. So whereas verification might reduce the program-testing load, it cannot eliminate it. More seriously, even perfect program verification can only establish that a program meets its specification. The hardest part of the software task is arriving at a complete and consistent specification, and much of the essence of building a program is in fact the debugging of the specification.
”
”
Frederick P. Brooks Jr. (The Mythical Man-Month: Essays on Software Engineering)
“
Sometimes it pays to stay in bed on Monday, rather than spending the rest of the week debugging Monday's code
”
”
Dan Salomon
“
MIND GAME Name That Loop For the rest of the day, try to “catch” your negative mind loops as they happen. Watch for signs of mental “pain” or friction, which are a good indicator of thought processes that need debugging. Debug each negative thought loop down to its root problem using one of the three techniques: • The Five Whys: Ask “Why?” five times. • Worst-Case Scenario: What’s the worst thing that could happen? • Third-Person Perspective: What would you say if you were hearing this from someone else? At the end of the day, write down each of the “root problems” you uncovered on your practice sheet, preferably using the METAL method. In Part 1 of Mind Hacking, we’ve seen how the mind is a naturally noisy place and how we can cultivate focus and awareness of the mind’s programming through
”
”
John Hargrave (Mind Hacking: How to Change Your Mind for Good in 21 Days)
“
Many years later, when he had plenty of computer time, Serge still wrote out new programs on paper before typing them into the machine. “In Russia, time on the computer was measured in minutes,” he said. “When you write a program, you are given a tiny time slot to make it work. Consequently we learned to write the code in ways that minimized the amount of debugging. And so you had to think about it a lot before you committed it to paper. . . . The ready availability of computer time creates this mode of working where you just have an idea and type it and maybe erase it ten times. Good Russian programmers, they tend to have had that one experience at some time in the past—the experience of limited access to computer time.
”
”
Michael Lewis (Flash Boys: A Wall Street Revolt)
“
More than half the programmers at Goldman were Russians. Russians had a reputation for being the best programmers on Wall Street, and Serge thought he knew why: They had been forced to learn to program computers without the luxury of endless computer time. Many years later, when he had plenty of computer time, Serge still wrote out new programs on paper before typing them into the machine. “In Russia, time on the computer was measured in minutes,” he said. “When you write a program, you are given a tiny time slot to make it work. Consequently we learned to write the code in ways that minimized the amount of debugging. And so you had to think about it a lot before you committed it to paper. . . . The ready availability of computer time creates this mode of working where you just have an idea and type it and maybe erase it ten times. Good Russian programmers, they tend to have had that one experience at some time in the past—the experience of limited access to computer time.
”
”
Michael Lewis (Flash Boys: A Wall Street Revolt)
“
Huh. Programming. Debugging. It wasn’t Lincoln’s favorite, but it beat archiving and compressing. At least it was a problem to solve. And it would only be for a few months, maybe less.
”
”
Rainbow Rowell (Attachments: Is there such a thing as love before first sight? The romantic comedy we all need to read in 2025)
“
You can easily create several new threads and have them all running at the same time. But multiple threads can also cause problems called concurrency issues. These issues happen when threads read and write variables at the same time, causing the threads to trip over each other. Concurrency issues can be hard to reproduce consistently, making them hard to debug.
”
”
Albert Sweigart (Automate the Boring Stuff with Python: Practical Programming for Total Beginners)
“
To avoid concurrency issues, never let multiple threads read or write the same variables. When you create a new Thread object, make sure its target function uses only local variables in that function. This will avoid hard-to-debug concurrency issues in your programs.
”
”
Albert Sweigart (Automate the Boring Stuff with Python: Practical Programming for Total Beginners)
“
Seibel: I was looking at one of your papers from the 70s about your Fortran profiler. In the preamble you were very enthusiastic about how that tool changed your programming from figuring out what you were going to write, writing it, and debugging it, to figuring out what you were going to write, writing a really simple version, profiling it, then optimizing it.
”
”
Peter Seibel (Coders at Work: Reflections on the Craft of Programming)
“
Call an error-processing routine/object. Another approach is to centralize error handling in a global error-handling routine or error-handling object. The advantage of this approach is that error-processing responsibility can be centralized, which can make debugging easier. The tradeoff is that the whole program will know about this central capability and will be coupled to it. If you ever want to reuse any of the code from the system in another system, you'll have to drag the error-handling machinery along with the code you reuse.
”
”
Steve McConnell (Code Complete)
“
During production, your users need a chance to save their work before the program crashes and they are probably willing to tolerate a few anomalies in exchange for keeping the program going long enough for them to do that. Users don't appreciate anything that results in the loss of their work, regardless of how much it helps debugging and ultimately improves the quality of the program. If your program contains debugging code that could cause a loss of data, take it out of the production version.
”
”
Steve McConnell (Code Complete)
“
For example, instead of crashing your program right when an exception occurs, you can write the traceback information to a log file and keep your program running. You can look at the log file later, when you’re ready to debug your program.
”
”
Albert Sweigart (Automate the Boring Stuff with Python: Practical Programming for Total Beginners)
“
The five stages of model development. —Donald Knuth, Stanford computer scientist Knuth discovered that computer program development goes through five stages. These steps also apply to building models, and I rigorously adhere to them in my consulting work. 1. Decide what you want the model to do. 2. Decide how to build the model. 3. Build the model. 4. Debug the model. 5. Trash stages 1 through 4 and start again, now that you know what you really wanted in the first place. Once you realize that step 5 is inevitable, you become more willing to discard bad models early rather than continually to patch them up. In fact, I recommend getting to step 5 many times by building an evolving set of prototypes. This is consistent with an emerging style of system development known as Extreme Programming.2 To get a large model to work you must start with a small model that works, not a large model that doesn’t work. —Alan Manne, Stanford energy economist
”
”
Sam L. Savage (The Flaw of Averages: Why We Underestimate Risk in the Face of Uncertainty)
“
When you see the right thing, do it—this may look like more work in the short term, but it’s the path of least effort in the long run. If you don’t know what the right thing is, do the minimum necessary to get the job done, at least until you figure out what the right thing is. To do the Unix philosophy right, you have to be loyal to excellence. You have to believe that software design is a craft worth all the intelligence, creativity, and passion you can muster. Otherwise you won’t look past the easy, stereotyped ways of approaching design and implementation; you’ll rush into coding when you should be thinking. You’ll carelessly complicate when you should be relentlessly simplifying—and then you’ll wonder why your code bloats and debugging is so hard.
”
”
Eric S. Raymond (Art of UNIX Programming, The (Addison-Wesley Professional Computing Series))
“
Rushing to optimize before the bottlenecks are known may be the only error to have ruined more designs than feature creep. From tortured code to incomprehensible data layouts, the results of obsessing about speed or memory or disk usage at the expense of transparency and simplicity are everywhere. They spawn innumerable bugs and cost millions of man-hours—often, just to get marginal gains in the use of some resource much less expensive than debugging time. Disturbingly often, premature local optimization actually hinders global optimization (and hence reduces overall performance). A prematurely optimized portion of a design frequently interferes with changes that would have much higher payoffs across the whole design, so you end up with both inferior performance and excessively complex code.
”
”
Eric S. Raymond (Art of UNIX Programming, The (Addison-Wesley Professional Computing Series))
“
Programming, and especially debugging, sometimes brings out strong emotions. If you are struggling with a difficult bug, you might feel angry, despondent or embarrassed. There is evidence that people naturally respond to computers as if they were people 2 . When they work well, we think of them as teammates, and when they are obstinate or rude, we respond to them the same way we respond to rude, obstinate people. Preparing for these reactions might help you deal with them. One approach is to think of the computer as an employee with certain strengths, like speed and precision, and particular weaknesses, like lack of empathy and inability to grasp the big picture
”
”
Anonymous
“
If you’re working on long-running scientific problems where each job takes many seconds (or longer) to run, then you might want to review Gael Varoquaux’s joblib. This tool supports lightweight pipelining; it sits on top of multiprocessing and offers an easier parallel interface, result caching, and debugging features.
”
”
Micha Gorelick (High Performance Python: Practical Performant Programming for Humans)
“
minimum software requirements to program in C is a text editor, as opposed to a word processor. A plain text Notepad Editor can be used but it does not offer any advanced capabilities such as code completion or debugging.
”
”
Wiki Books (C Programming)
“
Systems Test No parts of the schedule are so thoroughly affected by sequential constraints as component debugging and system test. Furthermore, the time required depends on the number and subtlety of the errors encountered. Theoretically this number should be zero. Because of optimism, we usually expect the number of bugs to be smaller than it turns out to be. Therefore testing is usually the most mis-scheduled part of programming. For some years I have been successfully using the following rule of thumb for scheduling a software task: l /3 planning l/6 coding l/4 component test and early system test l/4 system test, all components in hand.
”
”
Anonymous
“
Use manual sanity checks in data pipelines. When optimizing data processing systems, it’s easy to stay in the “binary mindset” mode, using tight pipelines, efficient binary data formats, and compressed I/O. As the data passes through the system unseen, unchecked (except for perhaps its type), it remains invisible until something outright blows up. Then debugging commences. I advocate sprinkling a few simple log messages throughout the code, showing what the data looks like at various internal points of processing, as good practice — nothing fancy, just an analogy to the Unix head command, picking and visualizing a few data points. Not only does this help during the aforementioned debugging, but seeing the data in a human-readable format leads to “aha!” moments surprisingly often, even when all seems to be going well. Strange tokenization! They promised input would always be encoded in latin1! How did a document in this language get in there? Image files leaked into a pipeline that expects and parses text files! These are often insights that go way beyond those offered by automatic type checking or a fixed unit test, hinting at issues beyond component boundaries. Real-world data is messy. Catch early even things that wouldn’t necessarily lead to exceptions or glaring errors. Err on the side of too much verbosity.
”
”
Micha Gorelick (High Performance Python: Practical Performant Programming for Humans)
“
scripting language is a programming language that provides you with the ability to write scripts that are evaluated (or interpreted) by a runtime environment called a script engine (or an interpreter). A script is a sequence of characters that is written using the syntax of a scripting language and used as the source for a program executed by an interpreter. The interpreter parses the scripts, produces intermediate code, which is an internal representation of the program, and executes the intermediate code. The interpreter stores the variables used in a script in data structures called symbol tables. Typically, unlike in a compiled programming language, the source code (called a script) in a scripting language is not compiled but is interpreted at runtime. However, scripts written in some scripting languages may be compiled into Java bytecode that can be run by the JVM. Java 6 added scripting support to the Java platform that lets a Java application execute scripts written in scripting languages such as Rhino JavaScript, Groovy, Jython, JRuby, Nashorn JavaScript, and so on. Two-way communication is supported. It also lets scripts access Java objects created by the host application. The Java runtime and a scripting language runtime can communicate and make use of each other’s features. Support for scripting languages in Java comes through the Java Scripting API. All classes and interfaces in the Java Scripting API are in the javax.script package. Using a scripting language in a Java application provides several advantages: Most scripting languages are dynamically typed, which makes it simpler to write programs. They provide a quicker way to develop and test small applications. Customization by end users is possible. A scripting language may provide domain-specific features that are not available in Java. Scripting languages have some disadvantages as well. For example, dynamic typing is good to write simpler code; however, it turns into a disadvantage when a type is interpreted incorrectly and you have to spend a lot of time debugging it. Scripting support in Java lets you take advantage of both worlds: it allows you to use the Java programming language for developing statically typed, scalable, and high-performance parts of the application and use a scripting language that fits the domain-specific needs for other parts. I will use the term script engine frequently in this book. A script engine is a software component that executes programs written in a particular scripting language. Typically, but not necessarily, a script engine is an implementation of an interpreter for a scripting language. Interpreters for several scripting languages have been implemented in Java. They expose programming interfaces so a Java program may interact with them.
”
”
Kishori Sharan (Scripting in Java: Integrating with Groovy and JavaScript)
“
Systems are complex. A computer system is not just hardware, not just software, not even just people plus hardware plus software. The procedures, formal and informal, that have evolved with the system are part of the system; so is the current load on various components, and so is the attitude and experience of the users. Even among the commonly accepted “parts” of a system, clear lines of separation do not exist. Hardware merges with operating system, operating system merges with programming language, programming language merges with debugging tools, debugging tools merge with documentation, and documentation merges with training, and all of them mingle with the social climate in which the system is used.
”
”
Gerald M. Weinberg (The Psychology of Computer Programming)
“
If you place all of your self-respect eggs in the programming basket, I suggest that you get
out of game design and work in systems programming. Otherwise, write the code and debug it.
”
”
Chris Crawford (The Art of Computer Game Design)
“
I once worked on a project in which a software product originally written for UNIX was being redesigned and implemented on Windows NT. Most of the programming team consisted of programmers who had great facility with Windows and Microsoft Visual C++. In no time at all, it seemed, they had generated many screens full of windows and toolbars and dialogues, all with connections to networks and data sources, thousands and thousands of lines of code. But when the inevitable difficulties of debugging came, they seemed at sea. In the face of the usual weird and and unexplainable outcomes, they stood agog. It was left to the UNIX-trained programmers to fix things. The UNIX team members were accustomed to not knowing. Their view of programming as language-as-text gave them the patience to look slowly through the code. In the end, the overall 'productivity' of the system, the fact that it came into being at all, was not the handiwork of tools that sought to make programming seem easy, but the work of engineers who had no fear of 'hard.
”
”
Ellen Ullman (Life in Code: A Personal History of Technology)
“
Another completely different way that the contacts of a relay could fail was if dirt or an insect got trapped in the spacing between contacts. If a fly or a moth, for example, happened to be sitting on the make contact when the coil was energized, then it could be squashed and, after its smashed little body dried, the contacts would be covered with a very disgusting but quite effective insulator. To clean up such a disabled relay was called debugging, a term that has survived in the vocabulary of modern computer users trying to fix their faulty programs. This is not a joke—I heard it as a quite serious story in a lecture at the Naval Postgraduate School in 1982 from a legend in computer science, Rear Admiral Grace Hopper (1906–1992), a Yale PhD mathematician who worked during the Second World War with Harvard’s five ton, 800 cubic foot Mark I relay computer, which when operating was described as sounding like a “roomful of ladies knitting.” To debug such a machine must have been an “interesting” job for someone;
”
”
Paul J. Nahin (The Logician and the Engineer: How George Boole and Claude Shannon Created the Information Age)
“
Was there a moment you realized you could control how you interpreted things? I think one problem people have is not recognizing they can control how they interpret and respond to a situation. I think everyone knows it’s possible. There’s a great Osho lecture, titled “The Attraction for Drugs Is Spiritual.” He talks about why do people do drugs (everything from alcohol to psychedelics to cannabis). They’re doing it to control their mental state. They’re doing it to control how they react. Some people drink because it helps them not care as much, or they’re potheads because they can zone out, or they do psychedelics to feel very present or connected to nature. The attraction of drugs is spiritual. All of society does this to some extent. People chasing thrills in action sports or flow states or orgasms—any of these states people strive for are people trying to get out of their own heads. They’re trying to get away from the voice in their heads—the overdeveloped sense of self. At the very least, I do not want my sense of self to continue to develop and strengthen as I get older. I want it to be weaker and more muted so I can be more in present everyday reality, accept nature and the world for what it is, and appreciate it very much as a child would. [4] The first thing to realize is you can observe your mental state. Meditation doesn’t mean you’re suddenly going to gain the superpower to control your internal state. The advantage of meditation is recognizing just how out of control your mind is. It is like a monkey flinging feces, running around the room, making trouble, shouting, and breaking things. It’s completely uncontrollable. It’s an out-of-control madperson. You have to see this mad creature in operation before you feel a certain distaste toward it and start separating yourself from it. In that separation is liberation. You realize, “Oh, I don’t want to be that person. Why am I so out of control?” Awareness alone calms you down. [4] Insight meditation lets you run your brain in debug mode until you realize you’re just a subroutine in a larger program. I try to keep an eye on my internal monologue. It doesn’t always work. In the computer programming sense, I try to run my brain in “debugging mode” as much as possible. When I’m talking to someone, or when I’m engaged in a group activity, it’s almost impossible because your brain has too many things to handle. If I’m by myself, like just this morning, I’m brushing my teeth and I start thinking forward to a podcast. I started going through this little fantasy where I imagined Shane asking me a bunch of questions and I was fantasy- answering them. Then, I caught myself. I put my brain in debug mode and just watched every little instruction go by. I said, “Why am I fantasy-future planning? Why can’t I just stand here and brush my teeth?” It’s the awareness my brain was running off in the future and planning some fantasy scenario out of ego. I was like, “Well, do I really care if I embarrass myself? Who cares? I’m going to die anyway. This is all going to go to zero, and I won’t remember anything, so this is pointless.” Then, I shut down, and I went back to brushing my teeth. I was noticing how good the toothbrush was and how good it felt. Then the next moment, I’m off to thinking something else. I have to look at my brain again and say, “Do I really need to solve this problem right now?” Ninety-five percent of what my brain runs off and tries to do, I don’t need to tackle in that exact moment. If the brain is like a muscle, I’ll be better off resting it, being at peace. When a particular problem arises, I’ll immerse myself in it. Right now as we’re talking, I’d rather dedicate myself to being completely lost in the conversation and to being 100 percent focused on this as opposed to thinking about “Oh, when I brushed my teeth, did I do it the right way?
”
”
Eric Jorgenson (The Almanack of Naval Ravikant: A Guide to Wealth and Happiness)
“
Thompson, who designed and implemented the first UNIX system, has stated that he much prefers printf debugging.24 But as Baird put it, “If you are a genius like Ken Thompson, you are going to write good code.”25 The rest of us need to move beyond printf debugging to get our code working, as I rapidly discovered once I started working on the internals of Windows NT at Microsoft (the fundamental skill is learning to use a specialized piece of software called a debugger, which can examine the memory of another program).
”
”
Adam Barr (The Problem with Software: Why Smart Engineers Write Bad Code)
“
Another detrimental effect of undervaluing people skills was that in some cases, programmers were rewarded more for raw code production than for meeting the user's needs. Marge Devaney, a programmer at Los Alamos National Laboratory in the 1950's, recalled sex differences in how programmers judged their performance. Asked if she had ever experienced gender bias on the job, sh replied that discrimination was difficult to prove, adding, "With things like computing, it's very hard to judge who's doing the best. Is it better to produce a program quickly and have it full of bugs that the users keep hitting, and so it doesn't work? Or is it better to produce it more slowly and have it so it works?...I do know some of the men believed in the first way: 'Throw it together and let the user debug it!'" This critique is echoed by women today who find their male peers rewarded for averting disasters through heroic last-minute efforts, while women's efforts at preventing such problems through careful work and communication with users go unrecognized. As a female software engineer complained in 2007, "Why don't we just build the system right in the first place? Women are much better at preventive medicine. A Superman mentality is not necessarily productive; it's just an easy fit for the men in the sector.
”
”
Janet Abbate (Recoding Gender: Women's Changing Participation in Computing (History of Computing))
“
Insight meditation lets you run your brain in debug mode until you realize you’re just a subroutine in a larger program.
”
”
Eric Jorgenson (The Almanack Of Naval Ravikant: A Guide to Wealth and Happiness)
“
Attesting to the nested quality of culture, NASA’s entire Shuttle Program exhibited the “unruly technology” that characterizes the engineering craft when complex technical systems are involved: interpretive flexibility, absence of appropriate guidelines, unexpected glitches as commonplace, “debugging through use,” extensive systemwide problems with technical components, practical rules based on experience that supplemented and took precedence in technical decision making over formal, universal rules, and cost/safety compromises as taken-for-granted.
”
”
Diane Vaughan (The Challenger Launch Decision: Risky Technology, Culture, and Deviance at NASA)
“
I can manually debug a few hundred thousand lines. It won't be fun, but I ... who am I kidding, it will be fun.
”
”
Eliot Schrefer (The Darkness Outside Us (The Darkness Outside Us, #1))
“
I often said I wouldn't have pursued programming as a career if I still did drugs. This is probably true, since weed was always immensely crippling for me. I would have weed hangovers for days, and while stoned, was unable to read or do much of anything besides clean and play video games. Whether or not this would have turned out to be true is academic, but it's definitely true that I wouldn't have become a programmer if I hadn't lost my mind, because the recovery process taught me my most valuable skill as a programmer: how to not think.
Programming requires the acceptance that you are entering meaningless symbols into a machine that's going to spit out other meaningless symbols, and this can be hard to accept. It requires abandoning all hope for an answer for the existential "why?" in favour of shuffling boolean values ad infinitum. By no interpretation of the concept of understanding does a computer understand what you're telling it or what it's telling you.
On top of that, programming as an act is more often hindered than helped by thinking. Despite zero years of training in computer science, I've found I have an edge in debugging because I never look or ask for an explanation. Ninety percent of the computer bugs in a program are tiny, one-line errors, and you just have to find that error. Holding the entire logical structure of a million lines of code in your mind in futile. The task is to find the references and connections and track them back until you hit the problem. If I get an error message, I copy it into Google, because someone somewhere has encountered and solved the problem, probably by tracking down the people who originally wrote the program. In seven years of programming, I've solved exactly two undocumented bugs via pure deductive reasoning.
”
”
Peter Welch
“
On a scale of one to ten, how strong is the emotion attached to the memories we’ve been working on?” Curtis Rouanzoin asks one day. The procedure I’ve been going through with him is called EMDR, or eye movement desensitization and reprocessing, which looks at the way trauma is stored in the brain and attempts to properly process it. “If it used to be a ten, now it’s an eight,” I tell him. Lindsay Joy Greene is trained in a therapy called SE, or somatic experiencing, and she’s been locating trauma trapped not in my brain, but in my body, and releasing the stored energy. One day she asks, “On a scale of one to ten, how much anger do you feel when you recall the memories we’ve been discussing?” “If it used to be an eight, now it’s a seven,” I tell her. Olga Stevko practices her own variant of NLP, or neuro-linguistic programming. Where the experientials with Lorraine were about debugging my operating system, her process is about rewriting the original code. For example, she tells me that inside my mother’s words, “Never grow up to make anyone as miserable as your father makes me,” was a hidden command: Never grow up. As she helps me grow up, it brings my trauma down to a six. Greg Cason specializes in cognitive behavioral therapy, which takes it to a five. And I don’t know what to call Barbara McNally’s method and her bottomless quiver of techniques, but they work, they’re original, and they bring the emotion associated with those memories to a four. And I do so much more: I beat pillows with baseball bats. I tap on energy meridians. I make shadow maps of my dark side. I try psychodrama. Not all of it works, but none of it hurts.
”
”
Neil Strauss (The Truth: An Uncomfortable Book about Relationships)
“
An individual block of code takes moments to write, minutes or hours to debug, and can last forever without being touched again. It’s when you or someone else visits code written yesterday or ten years ago that having code written in a clear, consistent style becomes extremely useful. Understandable code frees mental bandwidth from having to puzzle out inconsistencies, making it easier to maintain and enhance projects of all sizes.
”
”
Daniel Roy Greenfeld
“
For software developers who take their work seriously, Knuth is the consummate craftsman. Here’s what he has to say about optimization: Programmers waste enormous amounts of time thinking about, or worrying about, the speed of noncritical parts of their programs, and these attempts at efficiency actually have a strong negative impact when debugging and maintenance are considered. We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil.2 (Emphasis added.)
”
”
Ken Kocienda (Creative Selection: Inside Apple's Design Process During the Golden Age of Steve Jobs)
“
But there was no real-time debugging. When the system crashed, basically the run light went out and that was it. You had control-panel switches where you could read and write memory. The only way to debug the system was to say, “What was the system doing when it crashed?” You don't get to run a program; you get to look at the table that kept track of what it was doing. So I got to look at memory, keeping track on pieces of graph paper what it was doing. And I got better at that. In retrospect, I got scarily better at that. So they had me have a pager. This was back in the era when pagers were sort of cool and only doctors had them. It was a big, clunky thing and all it would do is beep. No two-way. No messages. And it only worked in the Boston area, because its transmitter was on top of the Prudential Center. But if I was within 50 miles of Boston, it worked. And basically, I was a trained little robot: when my pager went beep, beep, beep, I called in to find out what the problem was. What was bizarre was that with no paper, in a parking lot, on a pay phone I could have them examining octal locations, changing octal locations and then I would say, “OK, put this address in and hit run,” and the system would come back up. I don't know how the hell I managed to do that. But I could do those kinds of things. I took care of the time-sharing system for probably a good two or three years.
”
”
Peter Seibel (Coders at Work: Reflections on the Craft of Programming)
“
When you're debugging something and then you figure out that not only is the map wrong but the tools are broken—that's a good time.
”
”
Peter Seibel (Coders at Work: Reflections on the Craft of Programming)
“
He’d been surprised to find that in at least one way he fit in: More than half the programmers at Goldman were Russians. Russians had a reputation for being the best programmers on Wall Street, and Serge thought he knew why: They had been forced to learn to program computers without the luxury of endless computer time. Many years later, when he had plenty of computer time, Serge still wrote out new programs on paper before typing them into the machine. “In Russia, time on the computer was measured in minutes,” he said. “When you write a program, you are given a tiny time slot to make it work. Consequently we learned to write the code in ways that minimized the amount of debugging. And so you had to think about it a lot before you committed it to paper.
The ready availability of computer time creates this mode of working where you just have an idea and type it and maybe erase it ten times. Good Russian programmers, they tend to have had that one experience at some time in the past—the experience of limited access to computer time.
”
”
Michael Lewis (Flash Boys)