Programmer Skills: Syntax vs Concepts
What should a programming interview test? Whether the programmer can write correct syntax or whether they have the concepts right?
This post is a response to Jishnu’s post titled “Do we need to remember language syntax by-heart?” in which he talks about an interview in which he had to use a loop but couldn’t remember the syntax. Writing the solution with pseudo-code apparently didn’t help.
Is syntax more important or concepts? You may say “both” but I would still disagree. Syntax is an implementation detail that can change between versions of a language, even. Concepts are eternal. Syntax can be easily picked up from the documentation. Concepts can also be picked up by reading, but it takes hours and hours of reading and practice to get it right.
Programming is about writing code and syntax matters there. But good programming is about writing less code, and concepts matter there.
Personally, I know that I can pick up any high level language in a few hours. Here is me picking up Julia, and rust. This very fact should make knowledge of language syntax a poor proxy for programmer skill.1
Let me use an analogy. Syntax is like facts. The thing about facts is that they are easy to look up given an authentic reference. That reference medium and the knowledge that the fact exists there is enough to retrieve the fact at will and use it. The cost of this is very low.
But concepts are like ideas. Ideas cannot have any authentic reference. Ideas have to be collected from a lot of places, sorted, analyzed, and internalized before they can be put to action. The cost of this is high.
That is why open book exams is a thing. An interviewer who allows opening books during the interview has an additional advantage in figuring out how efficient the interviewee is in recovering facts, and how vibrant their ideas are.
My rust is bad. That is because I do not know many concepts that are required in writing code that directly manages memory. And that is an additional reason why writing code that can compile/run and solve a problem is not enough. ↩