Javin Paul

I am Java programmer, blogger on http://javarevisited.blogspot.com and http://java67.com

Good Programmer vs Average Programmer

When it comes to interviewing programmers, goal is to find the most suitable developer for the job but its easier said than done. In practice, it’s
very difficult to judge someone’s calibre, experience, and expertise in a
short duration of Interview.
I know, there is a process starting from phone interview, written tests, to face-to-face interview, but its still not easy to hire or find a good programmer.
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 has 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 tip is finding gaps in requirement. I have found and learnt it over the time that good developers has a knack of breaking requirements into pieces and finding gaps, which is very important to produce a 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 a an interview scenario to check what an
average and a good programmer will produce given the same requirement.
This is an hypothetical interview to demonstrate my tip, but its very close to the real interview.
You can change the requirement based upon your domain, candidates
experience and his domain expertise and job description. Key is to give
one line requirement to candidate and compare the quality of 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
require some programming experience.

Interviewer: Can you write a script to archive files older than 30 days and which should run on 1st day of month using cron job?

Programmer 1 went on to code immediately and produced a script which does exactly what is in requirement.
His script can find all files in a directory provided as input, can create archive in the same directory with provided name and backup date as suffix.
Looks good right?
But hold on something is missing :
He did not excluded 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 archive.
He did not think about two contradicting part in this script, finding files older than 30 days and running it on 1st of every month.
Since script’s objective here is to backup 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 day long.
His script was not removing files after archiving.
Though this was not stated as part of requirement, its an implicit requirement, until interviewer specifically mentioned not to do so.
I agree, he shouldn’t assume anything but atleast he should clarified
that with the interviewer. Even if he bring this point, I would have a
given him a brownie point for understanding the job in hand and bringing
things which even user has not thought about it at the time.
This is the key difference difference between a good programmer and an average programmer.
These are just some of examples of missing requirements but this case is quite common in real world programming.
Many users gives requirement like this and experienced programmer know that devil is always in details”. Before doing anything, first step is to understand the purpose and then think what is missing.
Just like when you go to doctor and says that you have some problem, he asks couple of questions to better understand the problem, you should always ask questions to clear doubts, let 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 not only gives an opportunity to gauge
candidate’s expertise on a any particular technology e.g. Perl, Python, or Bash script but also his overall thinking process.
Any developer, who can think through and find gaps in requirement is going to be an asset for team. BTW, like all the things this is not always the
case and its not a hard and fast rule, It’s just another indicator, which can potentially help you to find good programmers.
Here are couple of more examples to differentiate between an average programmer and good programmer.
One of the interesting task is to ask developer to write code to read a file, a good programmer always ask questions about file content e.g. binary or text.
If text then what is the encoding, while an average developer just write 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 kind 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 ask about all those missing
requirement which surface when you start using your script.
Needless to mention that second programmer ( good programmer) was bit more intelligent and practical and was able to fill some of those gaps.
This tip has helped me in past but its not 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 are the tips you guys are using to find good programmers on
interviews.
Here are couple of more question for your practice :

1) Write a wordwrap() function, which can take a String and break it based on screen size?

This was a real Java ME interview question, which I have faced when mobile
devices are very small and don’t have enough API support.
Since mobile phones or smart phones has varied screen sizes, wrapping words based upon screen size was a common task.
Though not stated, goal here is to make this function work for every device. Function should consider line breaks, white spaces, font sizes etc.
You can now use this question for Android and iOS interview, as smartphone sizes are still not uniform.

2) Write a function to replace a given character from an String in Java?

This is rather a simple question but ask him to write a production like code
and then see if 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:
3) Find duplicates in an array which contains more than one duplicates? (solution)
4) How to Check if a String is rotation of another given String? (solution)
5) How to design a Vending Machine? (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.
P.S. — If you want to become a good programmer, don’t forget to read these 10 tips and these 10 articles, which I think every programmer should read.
Originally published at javarevisited.blogspot.com.


Tags

Comments

More by Javin Paul

Java
Java
Java
Java
Javascript
Online Courses
Scala
Linux
Online Courses
Software Development
Software Development
Programming
Tech
Programming
Programming
Big Data Courses
Learn Programming
Web Development
Data Science
Programming
Coding
Learn Python
Certification
Programming
Java
Programming
Java
Programming
Coding
Technology
Java
Programming
Kotlin
Programming
Programming
Web Development
Programming
Programming
Java
Data Science
Web Development
Android App Development
Java
Java
String Coding Questions
Programming
Programming
Programming
Java
Software Development
Programming
Web Development
Programming
Software Development
Coding
Online Courses
Sql Courses Online
Sql
Microservices
Programming
Java
Web Developer Roadmap
Software Development
Graphql
React
Programming
Big Data
Programming
Topics of interest