Disclosure: This post includes affiliate links; I may receive compensation if you purchase products or services from the different links provided in this article.
When it comes to interviewing Programmers or Software Developers, the goal is to find the most suitable person for the job, but its easier said than done. In practice, it's very difficult to judge someone's caliber, experience, and expertise in a short duration of an Interview.
The process can help you to filter candidates, but eventually, it will come down to your experience and gut feeling to find good programmers.
As you take more and more interviews, you will know what to ask and what not to ask and like many other interviewers in the world, you will develop some of your own tips to find right candidates.
Similarly, I have also learned a couple of tips from my experience of interviewing many programmers, which have helped me to differentiate between an average programmer with a good programmer in the past.
Today I would like to share one of such tips with you guys to see if you agree with my observation or there is a flaw in my understanding, and hopefully, I can learn a couple of more tips from you guys to find some good programmers in future.
One of my most used tips is finding gaps in requirements. I have found and learned it over the time that ---
Good developers have a knack of breaking requirements into pieces and finding gaps,
which is very important to produce quality software.
Though this skill mostly comes with experience, a good developer, even with less experience, has this ability.
In this article, I will share an interview scenario to check what an average and a good programmer will produce given the same requirement.
This is a hypothetical interview to demonstrate my tip, but it's very close to the real interview.
You can change the requirement based upon your domain, candidates' experience and domain expertise and job description. Key is to give one-line requirement to a candidate and compare the quality of the program developed by multiple programmers.
In this scenario, I have used a very general requirement, which doesn't need any domain expertise, like finance, healthcare, or manufacturing, but requires some programming experience.
Interviewer: Can you write a script to archive files older than 30 days and which can be run on 1st day of the month using a cron job?
Programmer 1 went on to code immediately and produced a script that does exactly what is in the requirement.
His script can find all files in a directory provided as input, can create an archive in the same directory with the provided name and backup date as a suffix.
Looks good, right?
But hold on something is missing :
- He did not exclude archive files created by script itself, which means in next month script will also include last month's archive. If you are not monitoring, you will only realize this problem when you need to retrieve something from the archive.
- He did not think about two contradicting parts in this script, finding files older than 30 days and running it on the 1st of every month. Since the script's objective here is to back up last month's data and month can be any of 28, 29, 30, or 31 days. So if you run this script on 1st march, it will not archive any files because all of them are less than 30 days old because February is usually 28 days long.
- His script was not removing files after archiving though this was not stated as part of the requirement; it's an implicit requirement until the interviewer specifically mentioned not to do so.
I agree he shouldn't assume anything, but at least he should clarify that with the interviewer. Even if he brings this point, I would have given him a brownie point for understanding the job in hand and bringing things that even the user has not thought about it at the time.
This is the key difference between a good programmer and an average programmer
These are just some of the examples of missing requirements, but this case is quite common in real-world programming.
Many users give requirements like this, and experienced programmer knows that "the devil is always in details." Before doing anything, the first step is to understand the purpose and then think about what is missing.
Just like when you go to a doctor and says that you have some problem, he asks a couple of questions to understand the problem better; you should always ask questions to clear doubts, let the user know what is missing, etc.
Being an expert in the area of software development its your responsibility to get enough details so that product meets user expectation and can withstand test of time.
I like to ask this kind of question, which is not very domain-specific and very general in nature. This gives not only an opportunity to gauge the candidate's expertise on any particular technology like Perl, Python, Java, or Bash script but also his overall thinking process.
Any developer who can think through and find gaps in requirements is going to be an asset for the team.
BTW, like all the things, this is not always the case, and it's not a hard and fast rule, It's just another indicator, which can potentially help you to find good programmers.
Here are a couple of more examples to differentiate between an average programmer and a good programmer.
One of the interesting tasks is to ask the developer to write code to read a file; a good programmer always asks questions about file content, like binary or text.
If text, then what is the encoding, while an average developer just writes the code to read a file.
A good developer will make sure to close streams in the right way and release file descriptors (resources) while an average programmer will generally forget about that.
For developers and programmers, if you get these kinds of questions, where Interviewer ask you to do a real job, consider understanding requirement better and asking right questions.
Like in our previous question, you could have asked about all those missing requirements which surface when you start using your script.
Needless to mention, that second programmer ( good programmer) was a bit more intelligent and practical and was able to fill some of those gaps.
This tip has helped me in past but it's not a hard and fast rule to find good developers, in fact, there is no rule to find them.
You just have to work through some indicator and your gut feeling. Let me know what the tips you guys are using to find good programmers on interviews are.
Here is a couple of more question for your practice :
This was a real J2ME question, which I have faced when mobile devices are very small and don't have enough API support.
Since mobile phones or smartphones has varied screen sizes, wrapping words based upon screen size was a common task.
Though not stated, the goal here is to make this function work for every device. The function should consider line breaks, white spaces, font sizes, etc.
This is rather a simple question but asks him to write a production like code and then see if the candidate takes care of obvious things like null string, empty string, String contains all character which is there to replace, etc., here is the sample solution of this problem.
Here are some more popular Coding questions you can use:
- How to design a Vending Machine? (solution)
- How to Check if a String is the rotation of another given String? (solution)
- How do you count the occurrence of a given character in a string? (solution)
- How do you print the first non-repeated character from a string? (solution)
- How do you convert a given String into int like the atoi()? (solution)
- How do you implement a bucket sort algorithm? (solution)
- How do you implement a counting sort algorithm? (solution)
- How do you remove duplicates from an array in place? (solution)
- How do you reverse an array in place in Java? (solution)
- How are duplicates removed from an array without using any library? (solution)
- How is a radix sort algorithm implemented? (solution)
- How do you swap two numbers without using the third variable? (solution)
- How do you check if two rectangles overlap with each other? (solution)
- How do you design a vending machine? (solution)
- How do you find the missing number in a given integer array of 1 to 101? (solution)
- How do you find the duplicate number on a given integer array? (solution)
- How do you find duplicate numbers in an array if it contains multiple duplicates? (solution)
- Difference between a stable and unstable sorting algorithm? (answer)
- How is an iterative quicksort algorithm implemented? (solution)
- How do you find the largest and smallest number in an unsorted integer array? (solution)
If you need more questions or if you are a programmer preparing for interviews, You can check out the Coding Interview BootCamp course or Gayle Laakmann McDowell's classic Cracking the Coding Interview book, one of my personal favorite for quick review and initial screening of candidates.
That's all about this tip to differentiate an average programmer with a good programmer. As I said, this is just one of the several points many Interviewer looks on a candidate; for programmers, It's an opportunity to show their think through ability and how good they are in understanding requirements and finding gaps. If you want to become a good programmer, you can also read these ten tips and these ten articles.
Data Structures and Algorithms: Deep Dive Using Java
10 Books to Prepare Technical Programming/Coding Job Interviews
10 Algorithm Books Every Programmer Should Read
Top 5 Data Structure and Algorithm Books for Java Developers
From 0 to 1: Data Structures & Algorithms in Java
Data Structure and Algorithms Analysis --- Job Interview
20+ String based coding problems from interviews\
20+ linked list problems from interviews
20+ basic algorithms based problems from interviews
Thanks, You made it to the end of the article ... Good luck with your programming interview! It's certainly not going to be easy, but just paying attention to details and askin good question can make a lot of difference.
All the best for your coding interview.