by Christian Mutaba
Over the past couple of years, I have worked with many great software engineers. When I worked at Cisco, I was lucky to work with two dear friends with very extraordinary skills. I think of them as great hackers. They were able to write beautiful code that made me nod and smile. Their work is pure art. I define great hackers as programmers who are:
1. Able to learn fast and get a lot of work done in very little time. (speed)
2. Able to write clean, algorithmically efficient and bug free code. (beauty)
3. Able to troubleshoot technical issues quickly. (accuracy)
4. Able to come up with great unique ideas, solutions or designs. (creativity)
5. Able to communicate complex ideas effectively. (simplicity)
I have worked with a rockstar programmer, a great mentor of mine, who could troubleshoot and fix an issue in 15 minutes that I couldn't figure out after 5 days of hard work and sweat. I noticed that back then, I used to use brute force. I didn't really understand how things worked. I just wanted to finish my task. Troubleshooting should be seen as a very good learning opportunity instead of a nightmare. When it comes to it, I have noticed that most programmers try to solve all the technical issues at once instead of using a dichotomic divide and conquer approach. They read the error message on the terminal or in the log file, and instead of making inferences, they expect the message to tell them exactly what to do next to fix the problem.
I once had to spend 36 hours at home troubleshooting an operating system issue of a computer that my friend and I built. This allowed me to learn a lot more about Linux. To become a better troubleshooter, you need to troubleshoot with a good attitude and embrace the challenge. When someone asks for my help troubleshooting an issue, below is a set of questions that I ask:
1. What are you trying to do? (if you don't understand what they are trying to do, you can't help them)
2. What are you doing instead?
3. If the error message is true, what else must be true?
4. What are the parts that work as expected? (divide and conquer)
5. Now, that we know the exact part that doesn't work. What should we try next?
Good luck!
Good luck!
No comments:
Post a Comment