Haunted by a big whiteboard shaped ghost: The technical coding interview struggle for a non-CS major.
I’m a JavaScript Developer (3+ years experience) without a background in Computer Science. I am a bootcamp graduate (Go Fullstack Academy!) and I’m proud of pursing my dreams of being a programmer. Although my career is Front end focused, I still struggle A LOT with coding problems (algorithms & data structures), hence I am afraid of those dreaded technical interviews that require these whiteboard problems (like really afraid… the thought of them haunts me in my dreams). Some might say that I don’t need to worry about these kind of problems as a Front End Developer, but I don’t think that’s true. Any developer should have a solid understanding of Computer Science Foundations for their day-to-day work even if we are not using Fermat’s Factorization Method, or algorithms like it, on a daily basis. We constantly work with algorithms whether we recognize it or not and need to be aware of how to optimize them. Also there are times where I wonder if I took the Front End track because I fear these white board problems and I’m less likely to encounter them in a Front End interview. It’s not that I don’t like Back End Development — I just don’t have the confidence to entertain the idea of going that route. Also, if I want to work at one of the big names, Facebook, Google, etc, I have to get a stronger understanding of these concepts, especially for the interview. Working at one of the big names is a dream of mine and I know that I cannot get a job at one of them right now. First I must build up the necessary background in CS.
This blog will document my journey. I’m studying my ass off so I can enter these technical interviews with confidence and CRUSH them.
I’m writing this post because I’m hoping this post and my future posts can help others in a similar situation gain, not only resources to help them succeed at building up their CS Foundations, but also gain the confidence to tackle these technical coding problems and interviews. I want these people to know that they are not alone! I’m here, and I’m struggling with you.
My Story:
I graduated with a degree in Journalism — Advertising. It was a fun major, but my coursework lacked math classes. Even the mention of basic algebra is enough for me to change the subject of the conversation so people don’t see my lack of knowledge in the field. Don’t get me wrong, I was great at Math in high school… but that’s not enough for me to have a strong enough background to really grasp algorithms quickly.
My Problem:
When Googling how to improve algorithm skills and improve on coding interviews, I always see the same resources. People recommend reading Intro to Algorithms, and Cracking the Coding Interview. I have both of those books, great. So, what happens when I start studying? I think “oh shit, what are all these symbols?”. Mathematical Proofs, I have to learn Proofs. Then I read on, “Logarithms”, next thought: “okay, I gotta take an algebra class”. I start taking the algebra class and then I feel like a child and give up. I then start to just “practice” because everyone says practice makes perfect. First, I try to solve a coding problem, but end up in a similar hole and realize that I need to study basic concepts, and here I am back to trying to learn algorithms with a really weak CS background. Maximum Call Stack Size Exceeded. Infinite loop reached.
Am I a lost cause having to start from square one?
With all that I have to learn, where do I even start?
How do I stay motivated?
I literally have to start from square one, and it fucking sucks. Rome wasn’t built in a day. Everyone was once a beginner. <<Insert other cliche quote here>>.
My Solution:
I decided to just give up. I’m just going to ignore this weakness of mine and just spend the rest of my career pretending I’m this badass developer and can solve any problem while hiding this massive hole in my resume.
Just kidding.
I don’t work that way. This is something that has been eating at me since I started my first programming job. I need to pursue my dreams. I need to fix this. I can’t just give up.
My main weaknesses at the moment are
- Confidence
- Algorithms
- Data Structures
- Space/Time Complexity (Big O Notation)
- System Design
The first one will obviously be fixed by improving the other four.
I’d also like to learn enough Java to answer coding problems in Java instead of JavaScript, but I think this will have to wait until I feel comfortable approaching any coding problem in JavaScript.
So here’s my plan…
I plan on focusing on Algorithms and Space/Time Complexity first. Then as I get better at solving simple algorithms and figuring out their space/time complexity, I will dive deeper into learning Data Structures. Once I feel comfortable with both answering coding problems and with Data Structures, I will focus on System Design.
I will use Medium to post my progress and thoughts. I feel that having an outlet to express my thoughts will keep me motivated. Who knows, maybe I will connect with other people in the same position as me.
For the first stage of my plan, I will practice and learn with the following resources:
Practice with Interview Cake (partially free) and Code Wars (free). I’m going to try to solve one or two problems a day on each platform. I bought the full version of Interview Cake although you can get free problems weekly and access their glossary for free. Interview Cake has been great so far because they provide a guide as you are solving the problems, similar to an interview. I plan on only solving these problems using pen and paper to get used to solving coding problems without a computer. For Code Wars, I plan on just coding in the platform itself. I like Code Wars because it’s Kata style. What’s a Kata you ask? It’s a training exercise that you do over and over to improve. Code Wars offers a bunch of user submitted coding problems and you are able to do them over and over again (if you wish) to improve on the same problem. It’s a great way to see how your mindset progresses. Even if you do not want train on the same problem repetitively, Code Wars offers large variety of problems in different languages and levels for you to improve your coding skills.
Learn Space/Time Complexity with Interview Cake’s guide (free) and Kahn Academy (free). I will also learn the basic of Algorithms by going through Kahn Academy’s algorithms guide (free).
I’ve been working through the practice resources listed above for a couple days now and I’d be lying if I said that I wasn’t already discouraged. I have attempted to answer four questions on Interview Cake and I did not get any correct. This is where I have to learn to stay motivated and I’m doing this by telling myself that although I did not come to the correct answer, I’m still learning. I need to build the mental model to approach these problems first. I haven’t seen problems like this, therefore how am I supposed to foresee the edge cases? By struggling through these problems my brain is restructuring by remembering my mistakes so I don’t make them again in the future. It’s all a part of the learning process. This is not going to be easy, but the most important thing is that I am taking the steps to improve and it WILL get easier in the future.
For those of you in my shoes, it will get easier for you too. I promise, you just can’t give up.