February 05, 2016 – 2 minutes
I think i’ve found a way to separate excellent programmers from mediocre ones.
Author: Jaakko Pääkkönen, Senior Software Engineer at Codemate Ltd.
The method is quite simple and works well in recruiting situation:
Give candidates a programming task with the language they are already familiar with, but from a domain that is new to them. After receiving the task, the coders start to think about the problem and each one comes up with a solution sooner or later. It doesn’t matter how long it takes in this case.
Then it gets interesting.
Only after inventing the first solution, the elite programmers are separated from the rest.
A solid programming professional does not act like an amateur and start to turn the first idea into code. Instead, he sits down thinks alternative solutions to the problem. Either completely new ideas to solve the issue, or ways to make the original idea better someway. With every new idea the coder weights the pros and cons of the solution, especially when compared to the earlier options.
If the solutions are pondered long enough, we reach a stage where it’s extremely difficult to come up with new improvements. At this phase even the deepest thinkers are already sketching the solution to a paper or turning it into functioning program code.
Good job. Problem solved. The world is saved and the rewards are abundant.
Of course if the hero of our story can recall solving a similar kind of a problem in some previous project, an optimal solution may come as fast as a flash. In this case, the problem has probably taken a lot of brainwork and perhaps even trial-and-error in the first time.
Software development, like many other industries, has a prominent quality in that finding design errors later in the process makes them increasingly expensive to fix and many times causes delay in commercial release.
Thinking about a second or a third alternative solution to any problem truly pays off, when considering the total length and cost of the project.
If the goal is to create a scalable and adaptable system, with dependable code, I think this is the only way to do it.
When a problem arises and we take the first solution idea and run with it, how can we be sure that it is good enough?
Let’s say your buying a car.
As in software development, you specify the acquisition carefully.
This time you want (or probably your wife wants) a red Opel.
You go to a car shop and see a red Opel parked next to the entrance, with a price tag in the windshield.
The question is, do you go ahead and buy the first red Opel that you come across, or -perhaps- dig into the selection of different car shops for at least 2 or three red Opel’s more?
Codemate does thought through digital solutions.
Written by Our Developer Liro who lives and works in Helsinki building useful things. You should follow him on Twitter