Overcoming My Challenges With Problem Solving
Tags: programming, javascript, beginners
Published: 2019-04-29 15:46:11

---
title: Overcoming My Challenges With Problem Solving
published: true
description: Some tips on how to approach problem solving in code for beginners.
tags: Programming, Javascript, Help, Beginners
cover_image: https://thepracticaldev.s3.amazonaws.com/i/ubye8akgcschsc8un3o4.jpg
---

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. 

#Back to Basics (kind of)

One of my biggest hurdles was that I didn't know enough Javascript to think about problem solving the way I needed to. For about two weeks this was my main focus.  I found some great resources that really helped me understand concepts that were deeper than beginner level.

### Programming with Mosh - [Javascript Basics for Beginners](https://codewithmosh.com/p/javascript-basics-for-beginners)

Although the beginning of this course was a bit slow for me, I found the sections on Objects, Arrays, and Control Flow particularly useful. The bite-sized videos were easy to digest, and the exercises at the end of each section helped me practice application of certain built-in JavaScript methods. Each exercise video also included an explanation of the solution, which were extremely helpful if I didn't understand something. I paid $5 for this course alone, but you can subscribe for $15 a month to have access to all of his courses if you enjoy his teaching style.

### FullStack Academy - [Bootcamp Prep at Your Own Pace](https://start.fullstackacademy.com/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](https://csx.codesmith.io/)

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. 

Codesmith also offers free online lectures pretty often through their [MeetUp page](https://www.meetup.com/Codesmith/events/), titled *JavaScript the Hard Parts*, which I attended for Scopes and Closure. 


#Practice Makes Perfect (no, really)

After working through these courses every day after work for about 4 hours and 8 hours on weekends, I was more confident in my JavaScript knowledge and my ability to problem solve.  Now was the time for me to really start practicing solving the kinds of problems I might find on my coding assessment.

###Codewars - [Train With Programming Challenges](https://www.codewars.com/)

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](https://www.hackerrank.com/), but I haven't used it much so I cannot offer any meaningful input.

###Coderbyte - [Coding Assessment Platform](www.coderbyte.com)

Coderbyte is an interesting website. I am not a fan of their interface and sometimes it seems a little difficult to navigate, but the information there is golden. There are great examples there, like [10 Common JavaScript Interview Questions](https://coderbyte.com/algorithm/10-common-javascript-interview-questions) and [3 Common JavaScript Closure Questions](https://coderbyte.com/algorithm/3-common-javascript-closure-questions), which helped me get an idea of what kind of problems I might come across as well as explanations on how to solve these kinds of problems. It is a paid website, $35 a month, but it was worth the cost for me to help me prepare for my assessment and interview with FullStack Academy.

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.

And remember:

![](https://thepracticaldev.s3.amazonaws.com/i/hixp20b30n86kgmtp7hm.jpeg)