Programming instructors and anyone who mentors new programmers should make sure their students or mentees have a firm grasp of this process along with any specific technical skills they may need.Note that when I talk about a software development problem, I mean a problem of any size and scope: This is easier in some cases than in others.Ask yourself the following questions (and maybe even write down the answers): I believe this practice leads to “solving” problems without fully understanding them.
I'd like to articulate those steps here, both for software newbies who are overwhelmed by this whole "coding" thing, and to see how it compares to the process other experienced developers use.
In general, I believe the process of solving a software development problem can be divided into four steps: While I’m writing these steps with students and less experienced developers in mind, I hope everyone who works in software will find them a useful reflection on our development process.
Often a bug won't present itself with flashing red lights—the program just doesn't do what you want it to do.
Even when this is the case, you can try your best to articulate the problem.
Print your data to the console before you worry about how it’ll be rendered.
Call a function you haven’t used before with simple hardcoded arguments, and get it to run as expected before replacing them with the actual data you’ll be using in your application.I started my software career with a combination of online tutorials and a coding bootcamp, but I've heard similar complaints about academic computer science programs.I'm not saying no one formally teaches these skills, but it seems more common for developers to have to figure them out on their own.But they should be treated as a single tool in your toolbox, not the start and end of the problem-solving process. Think about the kind of information you’re looking for: If I’ve been using one of these methods for a while and I don’t seem to be making progress, I’ll often switch to another. If you see anything change as a result, that’s a success. Then keep trying things until you've made substantial progress on the problem.I find that a lot of developers I know reach for the search engine first, but for me, intentionally using a variety of methods helps me gain a broader scope of understanding. If you’re in unfamiliar territory, it can help to break down the “solution” into very small increments, and try them out piece by piece.No matter what the underlying tech problems are (networks issues, driver conflicts, disk problems, etc), the process outlined above works well for gathering info, identifying possible causes of the issue, and getting to a solution no matter what issue you’re dealing with.But you’ll still have to make judgment calls depending on each unique case. What’s your plan of action for the next vague phone call, email request about tech issues, or help desk ticket from a big wig who needs his computer fixed… In many instances, what was reported as a general issue (e.g., the Internet is down) is actually something very particular, such as a specific website being offline. Ask those pertinent questions and then dig up more info from various sources such as: Now that you’ve gathered basic background info, it’s time to get hands-on with the problem. End users submit seemingly endless problems ranging from complaints of their Internet being “slow” to forgotten passwords to constant printer pains. We’ve got several problem-solving steps to follow that’ll help ease the stress of solving nearly any IT issue: Getting to the bottom of a computer issue can sometimes feel like playing 20 questions, so it’s crucial to ask the right questions first if you want to discover the root problem quickly.Many classic (and controversial) parts of technical interviews, like whiteboard exercises and "brainteaser" questions, are attempts to test these skills.That's why, whenever I'm helping beginners learn to code, I try to walk them through the process of solving problems in the same way I would at my job.