Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Do you think Debugging (System Troubleshooting) is one of the most important measurable technology-agnostic skills a programmer can have? [closed]

There are many skills a programmer could have (understanding the problem, asking good questions, good design skills, etc.).

I think System Debugging skill is incredibly valuable. This general skill of debuggin any technical system (from the batteries being dead in your remote control to signal interference from your neighbor's Ham Radio).

Here's the method I gave students when I taught Computer Programming:

  1. Define the Problem (when I perform XYZ Repro Steps, I get ABC Symptom)
  2. Identify the Testing Scope and break into sections.
  3. Test each section using process of elimination to find the section causing the problem.
  4. Break section down into subsections if needed.
  5. Analyze the subsection causing the problem.
  6. Fix.
  7. Text by using Steps to Reproduce the Symptom.

Whadaya think?

like image 946
Clay Nichols Avatar asked Oct 20 '08 02:10

Clay Nichols


2 Answers

if you define "troubleshooting" to include "debugging" then yes, it is critical!

EDIT: based on your edits, the top-down process-of-elimination technique you listed is systematic and very valuable.

Another technique is reasoning backwards:

  • start at the end, with the variables/calls that produce the symptom/bug
  • reason backwards from there - what could have caused this incorrect value or bad call?
  • continue to trace backwards in the logic until you find the culprit

This is useful when there are a lot of forward-feeding paths/possibilities that could have caused the problem, but has the advantage of not needing a debugger or tracing to figure out the most likely cause.

Another technique is the usual-suspects technique, where you begin your investigation with whatever part of the code was touched last or has given you the most problems, to see if something changed in it to cause the new issue

Another technique is to just sit and think about what situations could possibly produce the bug/behavior/value observed. This technique is useful when you're in a hurry and don't want to systematically scan a lot of places, but requires that you already have a thorough understanding of the system. This is useful when the bug/behavior in question is due to a design flaw or oversight and not a coding error.

like image 113
Steven A. Lowe Avatar answered Oct 20 '22 00:10

Steven A. Lowe


Troubleshooting in the world of computers typically implies your basic "My-computer-doesn't-work-can-you-fix-it" type work that the guys behind the counter at Best Buy do. I think what you mean is Debugging, and while both can be valuable (I'm certainly glad I don't need to go running to support for every glitch my computer has) Debugging is certainly the more critical skill for a developer. No matter what the language, knowing how to track, identify, and eliminate bugs is one of the single most difficult and most commonly performed tasks a programmer will do throughout his or her career.

That being said, I would actually say that what I consider to be the most important skill in my arsenal is perseverance. When my manager puts me on a task they know that I will get it done, no matter what. Period. No matter what roadblocks are put in my way, no matter what the timeline, no matter what the end goal, I will do as much as is humanly possible to meet their expectations until the job is done or they are satisfied with the results. That, by the way, is a very important distinction! The original goal is not always feasible, and when it's not it's my job to ensure that management knows exactly why it's not and what their alternatives are as soon as possible. And it's important to provide those alternatives. No one wants to hear, "Well, sorry. You're pretty much screwed." Providing a different solution to the problem is part of that perserverance thing. You never quit unless you're instructed to.

In short, the ability to see a project through to the end without getting distracted or giving up is, in my opinion, the single most effective thing you can do to set yourself apart and make yourself desirable to employers. And beleive me, it's damn hard! But that's what makes it valuable! :)

like image 29
Toji Avatar answered Oct 20 '22 00:10

Toji