Somewhere near the end of January, I decided to put my fears and self-doubt aside and apply to FullStack Academy. I have been dabbling in code for about a year, but still was (and still am) very much a beginner.
I read through the application process and noticed that I would need to take a coding assessment after the written application was accepted, and a technical interview over Skype if I managed to pass. At that point, I had never solved a coding problem before. FullStack's application page included some resources that you could use to assess if you were ready to take on their coding assessment. I was not.
I didn't want to let the fact that I didn't know something stop me from applying, so I gave myself a few weeks to learn everything that I could in order to be able to solve code challenges.
FullStack Academy - Bootcamp Prep at Your Own Pace
This bootcamp prep included basic topics like coercion, arrays, and objects, but also non-beginner topics like higher-order functions and recursion. Each topic has a video that is anywhere from 20-40 minutes long, and has at least 5 practice problems after each video. These exercises were definitely more challenging than in the course above, I had a difficult time with many of them. I even felt a little defeated a few times, but stuck with it and I am so glad I did. It taught me a lot and helped me learn to think in a more productive way, even if I had to look at the solutions at first to understand how to approach the problem. This course was free.
CodeSmith - CSX
This is another great free resource. I did not complete the entire CSX course, but I did use it to help me understand more difficult concepts such as closure, recursion, and scope. There are full lectures from the classroom on topics and practice problems to solve afterwards. The lectures, although long, were my favorite part because it really felt like I was there in the class along with the other students.
Codewars - Train With Programming Challenges
Codewars offers programming challenges (or katas, as they call them) in different languages; beginning with their easy level (8kyu) to the most difficult (1kyu). You are given a problem to solve, and your code has to pass all the tests before you can submit it. After answering the problem, you can view other people's solutions and compare them to your own. You also rank up as you solve problems, allowing you to view solutions to problems with higher difficulty.
Although you should always do your best to try and solve the problem before skipping to the solution, I have found that sometimes looking at a few solutions helped me recognize methods and patterns to solving problems when I felt totally lost. I became much better at problem solving after looking at solutions to a bunch of problems first, so when you are just getting started with problem solving, don't beat yourself up about taking a peek.
A similar website to Codewars is HackerRank, but I haven't used it much so I cannot offer any meaningful input.
Coderbyte - Coding Assessment Platform
Unfortunately, there is no fast way to get good at problem solving. There are a lot of things I didn't do, like study algorithms and data structure, because I was pressed for time. I can offer some advice though, if you are following a similar path:
Write it out in plain English! Jumping straight to writing code is not a great idea and is an easy way to get stuck. Writing out what you want your code to achieve will help you notice any flaws in your logic or things you might be missing before you start writing out the code.
Solve in your IDE and use debugger often! Watching the way the value of variables changes as your code is running can help you figure out what you need to fix if your answers aren't giving you the output you are looking for.
Use the Chrome console! Test out ways you can manipulate your variables. It took me too long to start doing this and it was really helpful in figuring out if something I had in mind was going to work or not.
Practice! Practice! Practice! More likely than not, the first few times you do something, it is not going to go very well. When I first started repairing frames in my job as an Optician, or my first few times trying to wing my eyeliner, I was not very good. If you practice often, you will get better, even if it doesn't seem like it at first
Getting frustrated is a part of the process, just make sure you don't dwell on that frustration. It's good to take breaks when you feel overwhelmed, but don't get discouraged if the process feels slow or the answers aren't coming to you right away. With effort and a lot of practice, it will get easier and you will notice yourself being able to solve more complex problems after a while.