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:
Whadaya think?
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:
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.
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! :)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With