Tech interview prep resources for software engineers

Jun 20, 2020

Guide to building side projects, finding companies to apply to, data structures and algorithms and services to help in your journey :)

In a previous article I wrote about the 2 types of software engineering interviews. My point there was to distinguish between the two primary types of interviews you can expect from software engineer hiring managers. There’s the data structures and algorithms approach and there’s the build something or talk about what you’ve built approach. It’s not completely binary and in some interviews you may be asked to do both. There are also system design and behavioral questions to account for.

Technical interviews are hard. Investing in software engineers can be trying. Hiring, employee retention and business costs all factor in to who gets picked. As software engineers we need to know what to expect. Each person is taking their own path to career growth. My intention with listing out these resources is to provide for those navigating the job market terrain and to hold these resources up as a reflection for the industry. These are some study resources that you many find helpful in your journey.

This post is based on an open source GitHub repo maintained here.

Side Projects

Side projects are a great way to test out your skills and try new things in a low to no pressure environment. Sometimes interviewers will be even more interested in your side projects than the work you did at your 9-5 job! If you don’t have any traditional work experience in the tech industry making a web project from scratch is a great way to demonstrate what you’re capable of. Below are a few sites and articles to reference when building a side project:

  • Indie Hackers: is a community for people looking to build online projects that generate revenue. It’s a vibrant, supportive community where you can share your projects and progress.

In the article How to build a startup — without quitting your day job Aytekin Tank, founder of JotForm outlines a few tenants to live by with side projects:

  • Side projects increase creativity
  • Find the time
  • Finding the need: deliver extreme value
  • Make it fun
  • Relax with imperfection

In this post Tanner Christensen outlines How to Talk About Your Side Projects. Snippet from the article: “Talk about your side projects whenever you get a chance”.

  • Start with the problem
  • Define your approach
  • Share the challenges you faced
  • End with the results
  • Follow-up with what you would do differently

If you’d like to dive more into storytelling and strategic narrative I highly recommend following Andy Raskin for tips :)

Data Structures and Algorithms questions

There doesn’t seem to be any shortcut for learning data structures and algorithms besides grinding it out. The problems are not always easy but the solutions generally do follow defined patterns. Learning the patterns takes a lot of work and practice. My favorite blog posts about the tech interview prep process come from Ali Mir, Software Engineer at Facebook. They’re not long articles; they’re straight to the point without a lot of fluff.

These are some commonly agreed data structures it’s helpful to know going into technical interviews:

  • Dynamic Array
  • Linked List
  • Stack & Queue
  • Hash Tables
  • Binary Search Tree
  • Binary Heaps & Priority Queue
  • Graphs
  • Trie

This itsy-bitsy-data-structures repo contains a guided code walkthrough of many of these data structures types implemented in Javascript.

Searching and Sorting

These are searching and sorting processes to be aware of in technical software engineering interviews..

  • Binary Search

  • Breadth First Search (BFS)

  • Depth First Search (DFS)

  • Counting Sort

  • Quicksort

  • Merge Sort

Programming Paradigms and Concepts

Learning Guides

  • Grokking Algorithms - Free book designed to be easy to follow explaining common computer science algorithms.

  • HackerRank Interview Prep Kit - Curated list of exercises from the HackerRank team organized around key concepts you'll need to know.

  • Rithm School Computer Science Fundamentals with JavaScript - I've been following along with some of this as I don't have a comp sci degree. They explain the concepts and then point you to additional resources for learning the material (like youtube videos and specific codewars problems) Very helpful.

  • Pathrise - Compiled list of guides to help you find a software engineering job.

  • Coderbyte - Lots of programming challenges, access 10 for free otherwise $30 per month

  • yangshun/tech-interview-handbook - GitHub repo with helpful non-technical tips. Additionally has section covering Algorithm, Front End and System Design questions

  • mr-mig/every-programmer-should-know - Don't let the title scare you. This repo covers at a high level things ranging from Career Tips to Data Structures, Security, Architecture and Algorithms. It's a lot but can be helpful to overview concepts and find new things to learn

  • jwasham/google-interview-university - One man's somewhat crazy task to become a google software engineer. 48k+ stars. I believe he ended up working at Amazon. go figure

  • 30 second interview questions - A list and website of common interview questions you're bound to encounter during tricky JS interviews.

Services

These are some free and paid services dedicated to helping you improve at interviews and in your tech career.

  • Interview Cake - Interview Cake is a thoroughly documented site on programming interviews and concepts. It can be expensive for the year membership but if you're serious about buckling down to learn the fundamentals can be worth it. They also offer a money-back gaurantee.

  • Daily Coding Questions - Coding question emailed to you everyday for free. If you want the answer emailed to you the following day it's $8/month.

  • exercism - Level up your programming skills with 2,629 exercises across 48 languages, and insightful discussion with our dedicated team of welcoming mentors. Exercism is 100% free forever.

  • codewars - Codewars has thousands of questions generated by the community. You'll never run out of practice problems. They're organized by difficulty, concept and programming language.

  • codesignal - Really great user interface and user experience. I like the gamification and points system they have going on.

  • Irfan Baqui: ace coding interviews - get one free problem to practice each week and get the solution next week

  • interviewing.io - Anonymously practice coding interviews with engineers from prominent tech companies.

  • Pramp - Real practice with actual engineers. Book a time and practice interviewing with real human beings

  • LeetCode - Pick from an expanding library of more than 190 questions, code and submit your solution to see if you have solved it correctly.

  • Coderbyte - Lots of programming challenges, access 10 for free otherwise $30 per month

  • HackerRank - Very popular platform for practicing coding questions. HackerRank is used by companies to evaluate candidates also

  • InterviewBit - Practice Coding Interview Questions. Give us time and we get you the job you deserve.

  • Codility - Become a better programmer. Develop your coding skills with our lessons. Take part in our challenges.

  • Codility Solutions - One engineer's solutions to the codility.com problem sets.

  • Testdome - Get certified and prove your knowledge to potential employers. Score well on one of our public tests, and you will get a free certificate of achievement.

  • CodeEval - Find out how you rate against top coders. Unlock awesome startup jobs and hacker deals.

  • Outco.io - 1 month interview prep bootcamp in San Francisco

Javascript

PHP

SQL

Laravel

Eloquent Performance Patterns - Learn how to drastically improve the performance of your Laravel applications by pushing more work to the database, all while still using the Eloquent ORM.

Git

  • Git flow - a git workflow that some companies follow to manage their deployments.

  • Git Game - The git-game is a terminal based game that teaches both new and advances users some pretty cool features of the git scm (source control management) system.

Webpack

Python

Introduction to Computer Science and Programming Using Python from EdX.

Ruby

Books

Algorithm visualization

Articles

More Questions

Technical blogs

This is tangentially related to interviews. Below is a list of companies that feature blog posts from guest authors. Blogging and teaching others can be a powerful way to comprehend new material, fine tune your writing skills, gain exposure and potentially even make money! If you have a technical blog open to new contributors please submit a PR

  • Scotch.io - this has been my go to source for web development tutorials for years. Code on the rocks

  • Snipcart - company interested in Vue.js, eCommerce, Javascript and the JAMstack. There is some really great writing and code samples on here

  • JScrambler - company interested in Javascript tutorials. I wrote a post for them on using Vue.js and Vuelog to make a static blogging app. Check out the full article here

Words of wisdom

Charlie Munger, Warren Buffett’s partner, has three rules for a career:

1) Don’t sell anything you wouldn’t buy yourself
2) Don’t work for anyone you don’t respect and admire
3) Work only with people you enjoy

We've also written about 3 ways to get better at interviews:

  • Practice your story.
  • Speak to your experience and strengths.
  • Do your research.

Finding companies to apply to

The job market can move pretty fast. Companies expand and contract at rapid pace. The hot startup today could be laying everyone off tomorrow. The below links can help you discover companies and places to apply to. There's a whole world out there. Sometimes it takes work to find your place in it :)

  • https://employbl.com/companies - Employbl is a directory of tech companies and startups in the Bay Area. Find companies by type or location, upload your resume and find a company right for you :)

  • https://whoishiring.io/ - Most impressive job site aggregator I've ever seen in my life. Scrapes all the boards and has a map of where every company is located.

  • https://huntr.co/ - Tool for keeping your applications and search organized on a Trello-style board. they also have a chrome extension for quickly adding jobs from various sources.

  • https://breezy.hr - I used this one as a recruiter. It is actually built for HR departments but has a chrome extension and can be helpful for adding people and specific individuals you're reaching out to. This way you remember to follow up and can find like-minded people. One catch is that you need a custom email address like @your-domain.com. Signing up with your gmail account won't work.

  • https://betalist.com/jobs/collections - companies and jobs grouped by category like female led startup or decentralize all the things for blockchain related jobs.

  • https://github.com/connor11528/tech-companies-and-startups - shameless plug here. I've got another repo going with companies located in downtown San Francisco. The data is available as a CSV file and includes company addresses.

Tech Internships

We've shared some notes about how to land a technical internship in the Bay Area. Tbh though I've never done an internship and the competition seems fierce. I think a lot of the same rules apply to finding internships as finding jobs, though more focus on deadlines and internship-focused positions. Looking forward to learning and sharing more about the tech internship process in the Bay Area. 📈