My take on "problem solving skills"
Permanent article linkcynicalman asks what the "problem solving skills" in a job description actually mean and then tries to discover and blog the answers.
I do not actually agree that his first discovered rule is actually "a skill" (I think it is more of a test procedure), but the question asked does require a thought.
I was frequently told that I have good problem solving skills. So, here is my quick take on what those skills are:
- Being able to quickly deduce a structure and meaning from the given examples or behaviour
- For example, my co-worker was having a problem with a Fortran program. I haven't seen Fortran before, but was able to figure out the control structure rules on the fly and see where the bug was. Another example would be to take a program with an unfamiliar menu structure (or a familiar Microsoft one) and quickly find where a particular option could be.
- Knowing how to ask question - of yourself and others - that would partition the problem space
- So, you say the server has crashed? is not a good question. How about When you say the server crashed, did the program exit completely? If not, was it rather just very slow and/or returned to normal a while later? It is really a couple of questions here, but the idea is to split the possible problem space into segments and decide which segment to keep working with. Similarly a good question would be: If this was caused by a network problem, how/where/when would it show up? Which log or trace file do I need to check to confirm or reject this?
- Knowing how to convert data into information
- Getting a 3 page long java thread dump is a (bad?) luck. Knowing how to read that thread dump to identify what the program was doing at the time and what it was _not_ doing is a problem solving skill.
- Being able to manipulate large datasets and extract required individual entries
- To me, this covers not being scared by 2GBytes access logs when I search for a problem behaviour pattern. It also covers knowing the tools to slide/dice/reconstruct the data sets.
- Having a toolkit and knowing it well
- At the moment, my toolkit is Vim with couple of plugins for editing and RegExp work, Ethereal for network, FileMon/RegMon/TcpMon from SysInternals for Windows troubleshooting, XMLStarlet for XML files, and, of course, Cygwin for its full toolchain. I have also written custom programs, mostly for complex data extraction. Finally, I use GraphViz for visualization of my extraction results. One of the things that frustrates me most is a person reading a log file in Notepad. What can they do with it except looking at it one line at a time? No highlighting, no place marks, no way to interactively clean it up by regexp deleting some unrelated sections.
- And, above all, not giving up
- Most of the situations can be troubleshooted successfully. Especially if you can reproduce it, insert trace statements or do other developer level modifications. If you think you hit a writer's block of troubleshooting, use the same techniques writers do (try anything, switch attention, define next action, etc.)
Comments, thoughts, references?
BlogicBlogger Over and Out