I was asked to interview with a large tech company, but the interview never took place due to timing issues and them moving forward with another candidate before I had the chance to interview in person. Truthfully I was neither qualified nor prepared for the job, but I saw no harm or foul with dropping my CV in the bucket and hoping someone saw it.
For a little background, I am getting ready to graduate school with a Bachelor of Science in Business Administration with a specialization in Management Information Systems, but the role they were looking to hire for was a Software Engineer. I knew going into the application process my degree would only get me so far and I would be required to learn a lot of the CompSci fundamentals on my own time to prepare for the position.
An internet search later landed me with millions of results and things to do. I started to feel in over my head before I had even begun preparation. This is everything I did, and all the concepts I learned in an attempt to prepare for a technical interview.
Coming from somewhat of a nontraditional degree for a Software Engineering position, I knew my technical bounds and coding ability would be tested. I don't spend every waking minute writing Python, Java, or *. I spend most of it working on things I want to work on (which is mostly infrastructure related) and looking at memes.
I have the fundamentals of Python down and I've built a couple smaller projects with it, so I ended up picking it as my language of choice for the interview process. This may have come back to haunt me in the end as with Python you have to roll most of your own data structures. I'll come back to this later though. For now all you need to know is I didn't have a problem with the first coding questions.
I didn't have a problem with the preliminary weed out problems, but I did prepare for them as much as I could using Leetcode.
Something not covered in my degree but is in a CompSci is Big-O and the concept of computational time and space usage. I picked up Cracking the Coding Interview, read the chapter on Big-O and then I watched as many Youtube videos as I could on the concept to the extent I can now explain it to someone with a basic knowledge of programming.
Truth be told, I never ran into the issue of refactoring code to fit it within time and space bounds because the interview never took place. This is for better or worse, but I could have used the experience with a practicing Software Engineer.
Dynamic Programming and Recursion were tricky concepts for me. I was originally exposed to these in a high school Computer Science class, but past that class, these two concepts always turned into an after thought for me.
Never in my flask/rails/scripting side projects did I ever think of running a recursive method because most of the time I stored everything in a database and the code followed a flow.
Luckily, Youtube - Stanford Cs106B, Data Structures and Algorithms helped me to learn more about recursion and most of the basic data structures. I only watched a hand full of the playlist, but it helped me substantially.
For dynamic programming, I watched a hand full of shorter videos and applied recursive techniques to most of the problems.
Writing code that scales is important to most major tech companies, but what's also important is the infrastructure that scales with systems as users join and use these systems. I didn't make it to the systems design portion, but the concepts were in my head and I didn't want to be caught off guard with a question I wasn't prepared for.
I prepared for these with whiteboard sessions and reviewing engineering blogs of popular tech companies. I enjoyed reading about the tools and architectures these companies use to build highly scalable systems.
Having only 3 weeks to prepare, I prioritized my time towards the concepts I thought I would be the most relevant for the position as well as the ones I was the weakest in.
When it came down to the end, I truly wish I had applied earlier for the position. Applying so late put me at a bit of a disadvantage from the beginning, but I wasn't disappointed with the results as I never set my expectations in the beginning.
Like I said earlier, everyone is only a search away from the answers they are looking for, but one must have to know the questions first. Here are the resources I found most valuable, but I would highly recommend picking up a book on the subject as well.
- Github - Coding Interview University I would recommend going through the Github coding interview resource initially to prepare for a technical interview. It helped me immensely in grasping some of the basic Software Engineering concepts.
- Github - The System Design Primer Even as I walked through the System Design Primer repo preparing for an interview, I think this repo would prepare me for building any type of system. It also has the links to popular engineering blogs of some of the larger tech companies towards the bottom.
- Github - Fizz Buzz Enterprise Edition Excerpt from the Readme.md on github, "This project is an example of how the popular FizzBuzz game might be built were it subject to the high quality standards of enterprise software." I just think this repo is funny.