Being ready and prepared for a technical interview is a skill that is invaluable for us as computer scientists.
Some claim that technical interviews don’t accurately assess the technical prowess of candidates or act as a predictor of employee success. Anecdotally, I have experienced quite a few problems during technical interviews which are not indicative of a real assignment one might expect in the workplace.
Nevertheless, these unorthodox problems are engineered to not only assess solutions, but more importantly an individual’s problem-solving skills. Additionally, how you solve the problem and present your thought process is another aspect that a skilled interviewer will take note of and evaluate.
Fundamental concepts
Without an engine, a car is just a horrible wagon that requires literal horsepower. Don’t be a wagon, be a Ferrari!
Fundamentally, all combustion engines share similar components. Like an engine, our fundamental skills in CS are imperative to our success. It is essential that you have a strong comprehension in data structures, algorithms, and math in order to form a cohesive, efficient, and effective solution.
Again, like an engine, if your skills aren’t balanced, your performance will also be unbalanced.
Abstract problem solving/perspective
To continue our metaphor, the wheels are effectively problem solving. Now that we have a powerful engine, we need something to direct its force.
Most problems posed by interviewers include a brute force and perhaps a sub-optimal solution. A better answer is usually achievable through the application of fundamental concepts with a clever/unorthodox approach.
Of course, you generally aren’t expected to come up with a tremendously complex algorithm that will change the runtime from O(2n) to O(n) (which are both equivalent in terms of complexity.)
However, most of the time, the best answer will require quite a bit of “outside-the-box” thought.
Interpersonal
Lastly, our car needs a body. Our car has a frame and an engine, but it has no style—it’s just a very fast piece of metal. Most work environments require at least some form of effective communication.
As such, interviewers will actively assess your personality including how well you articulate your thought process and how you cooperate with others. While this is a simple skill to develop, it is essential. Without appropriate interpersonal skills, you can expect a sub-optimal outcome.
The difficulty in establishing the three skill sets mentioned above depends on an individual’s propensity for the given skill as well as the level of dedication toward personal development.
It goes without saying that the best outcomes are associated with more practice. However, it is easier to learn something than to unlearn something—make sure you are learning good, effective habits.
For example, if you only study the fundamentals by watching videos, you probably aren’t gaining the most benefit for your time.
Fundamental development
Developing a comprehensive and applicable understanding of the fundamentals is fairly straightforward.
First, assess what you already know.
Have you used this data structure? What are the pros and cons of this architecture’s design? How can this relationship be represented mathematically?
These are all just a few examples of questions that you should be able to evaluate and understand.
Now that you have determined what you will be working on, determine your approach. It’s best to employ a few activities in your study.
For example, by watching videos and then attempting a programming challenge utilizing the topic you just watched a video on, you are applying the knowledge you learned and cementing it even further in a practical way.
Additionally, some people benefit greatly from explaining the topic to others. Whichever way you choose to digest this information requires a source.
There are many resources online which can aid in the development of your fundamental skill sets including courses on platforms like Coursera, challenges led by organizations like TopCoder, LeetCode, and HackerEarth, and overviews from academic institutions.
Abstract problem-solving development
Developing a healthy problem-solving mind is not as difficult as it seems.
Anecdotally, the best way to do this for me has been to develop an intuition by practicing unorthodox problems.
These can be found everywhere, but once again, I would advise you to start practicing at a platform where there is a comprehensive programming challenge selection that is highly accessible.
HackerEarth and TopCoder provide a variety of programming challenges that range from beginner level to coding interview preparation mock challenges.
Doing so can provide a good idea of the types of problems you can expect to encounter in a technical interview.
At the same time, you are in a position to garner interest from employers just by participating in competitions.
After attempting and at least formulating a solution on paper, it is imperative that you compare your solutions to other solutions and weigh the pros and cons.
A lot can be learned from this process and many interesting algorithms can offer great insight into the power of abstract thought.
One of my personal favorite clever algorithms is the median of medians selection algorithm by Blum et al., which offers a geometric and easily-visualized solution to the k-th largest selection problem.
Intuition can be developed and bolstered significantly by internalizing these solutions and applying them to your own problem-solving arsenal.
Interpersonal development
Every once in a while I am sure that you hear someone say something homogeneous to “first impressions largely dictate how one is perceived.”
While first impressions matter, it is not a the final scenario.
The main thing to keep in mind during interpersonal scenarios is that you are not speaking to yourself.
You cannot just think out loud, you must think out loud in a way that articulates your thoughts and ideas effectively.
Pro tip: By teaching others reinforcement purposes, you are also practicing the art of articulation—pay attention to body language and be aware of confusion and other signs of inarticulate communication.
Besides articulation, general social skills are essential. To reiterate, read the person’s body language, be friendly but not overbearing, and articulate in a clear and concise manner.
Interviewers understand that this is a high-stress situation, but surprise them with a humble confidence that your fundamental and problem-solving skills will bolster.
That being said, communication is a two way street. Therefore, your mileage may vary depending on the skills of the person with whom you are conversing.
Even so, a skilled conversationalist can get even the most reserved people to respond positively.
Some people are natural conversationalists. If you aren’t one, it is actually fairly easy (although it may feel like a monstrous task) to develop good social skills.
You develop these skills just by sparking conversations with new people.
If you are still a little nervous, have a friend accompany you to outings where you will have the opportunity to meet and converse with new people.
By developing these three skill sets to a proficient level, you are preparing yourself for not only succeeding in the interview process, but life in general.
Similarly, possessing strong social skills cannot cover a lack in fundamental skills and vice versa.
Lastly, it is important that you practice all of these skills as you would in an interview or a workplace.
Practice with a friend, research with a professor, or find opportunities that require the use of all three skill sets.
Whether you are completely new to the world of technical interviews or a seasoned veteran looking for a new position, you can always learn and improve.