Is Algorithm Test Required To Hire Software Engineer?

I remembered my first interview to apply web developer job back in 2000 during Indonesia first Web bubble. I didn’t know about SQL Database and HTML, even had never heard about IDE to write code before. As theoretical physic graduate, I knew Matlab, Fortran and C compilers, but never in touch with latest trend. I brought my printed thesis; CV and some published scientific papers (on optical properties of amorphous semiconductor), with intention to show what I’ve done before. I honestly answered all technical questions with only two sentences – “I don’t know and I never heard”. Done! He lost his words and I also silent. Final question was, “if you got the job, how you can convince me that you will perform well?”. Then I showed all of my works and told him, “If the job you offer is more complicated than these, I will need time to learn. If not, then give me the job because I do need it”. Done!. I got hired. But before I went home he gave me bunch of Microsoft Press books to read at home before my first join date. I had a mixed feeling that day.

Now, 15 years have passed. I did hundred of interviews to hire fresh graduates, for various marketing, sales, technical evangelist and software engineer roles. I realized that the world has changed (at least in Indonesia). What I mostly found was Dunning-Kruger effect – a famous cognitive bias wherein unskilled individuals overestimate their superiority and highly skilled individuals tend to underestimate their relative competence. Forget all of those papers (or patents) or thesis as proof of competence, they didn’t even write a proper intro email. With the booming of Tech Companies in Indonesia, dramatic stories are around about behaviors of what we called millennial or Gen Y. I always have mixed feelings after interview session as I expect to see humility, curiosity and problem solving skills. Confidence during interview is no longer best barometer for attitude.

Now back to the question. With the high growth of demand for good Software Engineers, is it necessary to assess their atomic problem solving skills with algorithm, or their practical skills with coding test? Why do Google, Microsoft, Facebook or Samsung required that process? Why others don’t? I believe you’ll find a lot of debates, as it will relate to velocity of hiring process, or revenue size of headhunter companies, or something else. What about if you ended up hiring Google-bot, lazy-pseudo-hacker, taichi-master or ninja-turtle? Statistic showed – it cost the company for 2 years cash lost (~25k-50k in Indonesia), as need one year to let them learn and another one to fire. But costs are beyond cash, what about productivity, time loss, morale, impact to your customers? It’s a serious business problem instead of geeky interviewer brainteaser habit.

Sometime I think we need a “deep learning algorithm” to classify candidates for hire, no hire or hire for other roles. Human assessment is very weak for sure. What about if the interviewer is also “a not so good engineer”? How can he assess technical skills with Q&A approach? Or even worst, how he can assess humility and curiosity? I can floor so many questions to convince anyone that we need a proper assessment mechanism, but does algorithm test is an answer?

Let see. How many times do engineers really use algorithms when they code for common apps projects (Mobile, Web, Wearable, API, Database)? Even if they need for sorting, searching, for example, they can easily find by simple keyword search on Google, or Wikipedia. And for more strange things like BFS and DFS for Graph traversal, its also can easily found good tutorial on Youtube. Most of programming languages already provide common combinatorial data structures that have facilities to perform algorithms. Or if not enough, tons of reusable open source libraries (with documentations and sample codes) are available and huge number of technical papers proof better than their own memories or analytical skills. Why on earth they have to learn or memorize about it today, if Google/Wikipedia can help them to find right information quicker? Let Google memorizes, just copy paste, don’t think! What about correctness and efficiency of the codes? No one cares as long as it works, computer has big memory nowadays and compilers are smarter – no more premature optimization required, no more pointers in Python. The best engineers don’t waste time committing to memorize things in Wikipedia (is that possible?). And as long as no bugs reported and customer happy, just move on. Now is the era where software has to move quickly to eat the world.

Is algorithm test still an effective determination of technical/coding proficiency? It is the candidate’s fundamental technical strength and understanding, creative thinking, and problem solving that are critical to evaluate? Let the future PhD candidates answer that question with a proper deep learning based research. But, I’ve heard that a computer scientist is a mathematician who only knows how to prove things by induction. Curious to try?

Let assume that codes that engineer will write is a collection of Classes, Functions in those Classes, and Relations between Classes and Functions. That’s common in modern programming languages, so the whole codes are a Set of {Class, Function, Relation} with size N, M and L. But the relation between classes is “Gang of Four” art with less impact to correctness and efficiency (again, its my two cents bias from functional programming). So let L = 0 and N = M to oversimplify the problem. We end up with Set {Class, Function} with size N, in which one Class has only one Function in my model. The Class and Function can represent any feature in the program like display a list of texts, or show a dialog form, or anything relates to program context. With mathematical induction, we can easily proof that if for basic case like N = 1 or 2 it was true that it doesn’t require algorithm, then assumed it was true all the way to N1 before proving it was true for general N using the assumption. With that simple model and induction technique, you can easily proof that for common apps project like building mobile, wearable, web, API and database, where we reuse existing libraries and frameworks, algorithm is NOT really required to make it works correctly and efficiently. Only in small specific function you may need to use algorithm, but minor. Maybe when the library developer wrote the codes they used algorithms, but I believe it is also small portion. So, is it mathematically true that algorithm is not really required to write common apps?.

If you give me more time, I will confuse you more and more. That’s my bad habit if I can’t convince you in single sentence. But hold on. I agreed that a solid foundation in computer science is a great asset especially for software product based company or internet scale complexities to serve hundred million users like big boys, Google, Facebook, Microsoft, Apple and Samsung. Not for those tiny ambitious Startups who want to conquer the world from Indonesia. I heard argument like this. We need velocity to release our products and meet the Silicon Valley VC!. If we got their money, then hire Google and Microsoft engineers who graduated from MIT, Stanford, CMU or Princeton to rewrite the codes or lead Indonesian local engineers to write better codes. Let be apologetic without algorithms or quality codes at first, but boldly consistent with entrepreneurial business goals. Sounds a great plan, right?

Are you convinced now that algorithm is not required? Great if you are not. Now let me tell you the truth. Small things matter in a big room. Engineers are human and sneaky bugs are still able to creep in even for simple code. The context of algorithm is very broad as it cover many types of computing purposes – such as numerical, scientific and non-numerical methods in general and specific purpose algorithms like Graphic, Crypto, Parallel & Distributed System etc. But even if we scale down the context to a simple computation logic, which require basic recursive and incremental logic in Turing Machine, it is still a valid problem as the coder is still human.  Engineer mixes other unrelated problems to the codes, like his girl friend affair or credit card bill. Bugs can cost million dollars even worst can kill people in Spacecraft mission due to missed algorithmic or numerical calculation. Common applications can failed as its buggy. It cost a lot, not only cash, but other bigger things including company reputation and morale. Manual human assessment is limited and can’t no longer help, even Google implement a machine-learning algorithm to predict buggy codes.

The care of algorithm basic skill on software engineering is a reflection of quality culture and mindset. Quality is pride of engineering and craftsmanship, bread and butter of the profession. It is not means that an engineer has to self-implement algorithms in daily basis, but they need strong acumen which is a product of continuous practice of basic things. If you are a Samurai, do you practice the whole advance techniques in daily basis? No, only some basic moves. No warlord will assign samurai who can’t perform basic cuts to a dead fight, as it’s a suicide. The basic move of software engineer is algorithm or analytical thinking, to keep technical acumen alive, to keep logical consciousness and to have unconscious-reflect in project sprint. It’s a knowledge and skill to be kept by practicing few basics, not memorizing advance concepts. Its brain exercises to form more  System 2 neuron connections. Like a samurai, engineers can’t memorize the whole techniques (let Wikipedia does), but they have to really master few basics to have reflects on a fight, you need sixth sense. That’s can only happen if you are familiar and keep practice the basic moves in daily basis. And in interview – that is what we are looking for, A sign of intelligent and acumen on basic concepts.

I am a strong believer that algorithm test is required in interview to assess problem solving and analytical skills of software engineer candidate. Its not the best but that is an option. Its kind of risk management till we have a better approach like deep-learning software to help. That software will ask candidate to write some codes and make better decision regarding his technical/coding proficiency. What available usually white board in the interview room, or well-prepared test code system and basic problem sets, or maybe principal / mature engineer who can ask questions and assess basic intelligent and acumen.

Its not the end of story by the way, a lot of things need to be assessed on soft-skill side such as deep-humility and deep-curiosity on small things, and it can compensate each other. Also, you can’t really measure human capability precisely, no one can. If I got non-numerical algorithm test during my first interview, I might not in this industry, many others from physics might fail too as they are not well trained or even never heard. So in summary, that is required, but not the only one to assess. On top of algorithm test, strong evidences like code blogs, papers/patents, OSS contribution on Github, project portfolios, recommendation from trusted top engineers (rarely head hunters for Indonesia case), will also help. Thanks for reading this >1600 words post. If you regret, please read disclaimer!

3 responses

  1. Well, I have confidence in my web development skill (I have 3 years of experience in building websites!) until a company test me with a simple problem to solve with pseudo code.

    I know the logic to solve the problem like, this should be like this and that should be like that but to express it with pseudo code is really… really… hard in short of time.

    …and I understand now that I am (still) not a good coder! And yes, even I showed all of the creative things that I have done they still do not convinced to hire me.

    So, I do not know what you can suggest for me, because all I read in ur post is what you suggest to the company.. and leaving the life as developer is not an option because I do like to create things!

    Best.

  2. I prefer to use the term ‘logic” instead of “algorithm”. I believe a logic test is a must but algorithm skill requirement really depends on the job’s requirement. Making a software apps is just making a sandwich where you can just use available materials (library) and do not produce them from scratch, unless you want to be a manufacturer for those. Anyway, the best way to produce a good software engineer is through the right way of education where you balance all the needed hard and soft skills. And that is another topic to discuss.

Leave a Reply

Your email address will not be published. Required fields are marked *