Skip to content

Latest commit

 

History

History
40 lines (19 loc) · 12.7 KB

File metadata and controls

40 lines (19 loc) · 12.7 KB

How-to-prep-for-the-programmer-job-interview

How to prep for the programmer job interview. A guide by John Michael Reed.

To prep for the programmer job interview, most people just do random LeetCode/HackerRank questions. This isn't the best approach. These approaches are better, coming from someone who previously got into Amazon. Make sure you have the basic coding fundamentals down first (which you can learn for free online from a course like Harvard's CS50 or MIT Open Courseware course 6.0001). If you don't have the basic courses from a computer science degree maybe also look at my video where I talk about those courses and their syllabuses/textbooks at https://youtu.be/BTeJC6PI6Hw?feature=shared , there's additional info that I forgot to mention in the description. Anyway:

  • To prepare for the coding interview, do what this guy did. I found a GitHub repo that covers the contents of Grokking The Coding Interview for free here. Also, even though educative.io wants you to pay for the course, you can preview most of it for free by clicking "Preview Course" after choosing your programming language to do the course in at this link. Also Google the things this guy did to prepare for the coding interview.

  • For the system design portion, start with the System Design Primer on GitHub and then read System Design Interview – An insider's guide, Web Scalability for Startup Engineers, and Designing Data-Intensive Applications. The YouTube channel System Design Fight Club also covers system design questions. Questions on Domain Driven Design aren't common but I recall once seeing questions on that during the screening process for a more senior/architect type position, there are books on DDD on Amazon. I got most of these resources from this Reddit thread, there are more there. Oh, and the Quastor newsletter is great, when you sign up they send you like a 300 page software engineering/architecture guide and then you get regular emails from [email protected] with the best stuff from various company's software engineering blogs explaining how they implemented new functionality.

  • For the behavioral interview section, have some stories pre-prepared. Recite them. Know the company's philosophy or tenents, like for example Amazon has its leadership principles and wants you to relate your behavioral interview answer or story to at least one of them while for example Ray Dalio has his own corporate philosophy and culture (called "radical transparency") and wants everybody to be onboard it. If you're going to embellish the truth for a story of yours, have some of what you're going to embellish recited or prepared beforehand so you're not spending time thinking of your lie/embellishment during the interview. Your stories should have some sort of plot ark to them that end in success or some sort of good ending brought about in some way by what you did. The story shouldn't be completely 100% made up, but if it's rehearsed most of the time the interviewer can't tell if your story has something omitted or misrepresented within a tale otherwise based on true events that sort of fits with or matches reality. Do your research beforehand, maybe ask some people on Reddit or Blind or something. For your story that is in response to their behavioral interview question, use the S.T.A.R. method. Note if you don't need to lie and have actual real good stories of success that they will appreciate then don't lie, but a lot of the time corporate has some very specific rules or requirements or something and you have to lie to get through them, and most people lie to some extent to get hired, just make sure it's not easily catchable or that it contradicts with something that they can verify. Also, if you can do your research on your interviewer (like on LinkedIn, maybe their other social media if you can find it, maybe do a Google Advanced Search and put their name, handle, or username in the section for "Find pages with... this exact word or phrase:") do that and try to connect with your interviewer if possible, maybe be really nice and likable to them, make them laugh, make them like you so they give good feedback on your interview. Also, be nice to anyone around your interviewer like the secretary and so forth, sometimes these people communicate or pick up on each other. People skills matter too.

For a refresher on all these things, read Cracking the Coding Interview, it's a great source of interview prep. If you are trying to get into a big tech FAANG/GAMAM company, already have the computer science background from like a computer science degree, and just have like a couple months to prepare, that's probably one of your best resources, assuming you're intelligent in the sort of mathematical puzzle type pre-planned thinking that is required to pass the coding interview.

Additional resources: https://www.linkedin.com/posts/dinesh-varyani_systemsexpert-systemsexpert-google-activity-7077628897357369345-bWz3?utm_source=share&utm_medium=member_android

Also, you might occasionally (pretty rarely, to be honest) get asked about design patterns in Object Oriented Programming (OOP). To learn them, read Head First Design Patterns, or if that book is too long and boring for you the design patterns are also on Wikipedia (you just have to learn how to read UML diagrams because Wikipedia uses that notation to show things like class inheritance and one class possessing a reference to another). That book focuses on the OOP design patterns, before learning design patterns you should learn the fundamentals of OOP like classes, inheritance, encapsulation. You should know that in general class names should be nouns like "Dog" and method names should be verbs like "bark()", as in "myDog.bark()". You should know that if a function takes in an instance of the Animal class you can pass in an instance of the Dog class because Dog is a subclass of Animal, all Dogs are Animals. Things like that. You don't have to have every OOP design pattern memorized for the vast majority of interviews, I've just rarely seen one of those sorts of questions get asked, but if you have a lot of interviews you can skip it and worst case scenario it will just hurt one out of many interviews.

Oh, and to build your demo app to put on your resume, I like to build off of a "seed" app. A really good seed app from Microsoft that uses TypeScript is at https://github.com/microsoft/TypeScript-Node-Starter and one that uses plain old JavaScript is at https://github.com/sahat/hackathon-starter . TypeScript is just JavaScript with types. For my demo app, I built this site whose code is here. I chose to build my demo app off the TypeScript starter seed because I feel having explicit concrete types causes my code to have less bugs. Real landlords at my mom's condo are using the site I built to list their units for rent and sale. I found that getting input from real users and making changes based on that input causes my site to be better than something I just built myself with no feedback. For hosting I used Heroku which now charges $7 per month (Heroku used to be free for hobbyists, find something else if you can nowadays) and for the database I used the "Try Free" feature of hosted MongoDB at https://www.mongodb.com/ . Depending on what programming language you want to use you might want to build your demo app with Java's Spring Boot or C#'s ASP.NET Core, there are more backend jobs for Java and C# than there are for JavaScript. If you want to put that you know AWS or Google Cloud on your resume (which will probably help) you might want to deploy your app to AWS or Google Cloud instead of Heroku, I think an easy way to deploy an app like mine to Google Cloud is to use Google App Engine and an easy way to deploy to AWS is to use AWS Lightsail if you just want a plain old server to put your app on and your app isn't in a docker container. More recently things have shifted from being deployed directly to servers to being deployed in containers, for a very simple container app deployment there is Google Cloud Run or AWS App Runner (if your app isn't constantly in use I heard Google CloudRun is cheaper because it scales all the way down to zero whereas AWS AppRunner never scales down to zero so you are always getting charged). Nowadays there is a big push towards containerized apps so I would pick one of those to deploy like a Node.js, Java Spring Boot, or C# .NET app. The most common type of app to build is a CRUD (Create, Read, Update, and Delete) app and for my app my users create listings for the condos but you can think of something other than condos to make a different CRUD app, don't just copy my app and play it off as yours.

Oh, and another way to beef up your resume is to show that you are a contributor to an open source project. To find open source projects to work on you can do a GitHub Advanced Search or Search GitLab, the alternative to GitHub. On GitHub some projects add the "easy" label to the beginner bug fix issues, I think you can specifically search for this label in GitHub Advanced Search under "Issues options" at the section labeled "With the labels". Another alternative to a side project to beef up your resume is to donate code like through https://www.donatecode.com/

Oh, and don't forget to find people or form relationships with people (usually coworkers, teammates, classmates, or professors) so you have some people to use for work references, and if they're current or former coworkers make sure to offer those people yourself as a good reference to return the favor. I've heard of people paying money to people who they never met in real life to be good references for them but I personally am against that, and if your prospective employer starts drilling those people with questions they may not be willing or able to make stuff up on the spot. Maybe you can find a coding buddy to work on a project with you at r/ProgrammingBuddies and use them as a reference.

If you are having a hard time actually getting interviews, consider sprucing up your LinkedIn, perhaps by doing what this guy did. Also, make sure your resume is ATS (Applicant Tracking System) friendly, there are ATS friendly resume generators online that use templates. To keep spam off my main email and phone I like to put a second email and Google Voice phone number (that sends calls and texts to the Google Voice app on my phone) on my resume. Watch out for scammers online and make sure to interview actual future coworkers before accepting any job. If your future coworkers say things like "everybody here works at least 10 hours a day" or "the contracting company pays us to pretend to work for months at a time" that's a big red flag.

For some more resources/info related to being tech job ready I also wrote this: https://www.reddit.com/r/csMajors/comments/13pwugo/comment/jlejjym/?utm_source=share&utm_medium=web2x&context=3

For some reason I keep getting an error when I try to edit the post, but here's one last resource: https://www.tiktok.com/t/ZT8YT3151/

But yeah, that's how I'd prep to get a programmer job interview.

Oh, also, read the comments under this, it explains the "why" behind us learning sorting algorithms:

https://www.reddit.com/r/Backend/s/DciZ4Mfjdj

Oh, and one more thing. Databases outlive backends that connect to them and this piece of information connecting the backend sorting with the database optimization is very important: