I am a developer, not a compiler

I am a developer, not a compiler

I recently had a phone interview where I was asked a variety of questions about Java. This standard interview and most of the questions were also quite standard:

  • What is polymorphism?

  • What is the difference between List and Set? When should you use the first, and when the second?

  • Where can you encounter deadlock?

  • What is the difference between strict and weak typing?

For the most part, the questions were quite logical. Personally, I don’t like the question of polymorphism, because it is so closely related to most object-oriented languages ​​and inheritance that most people using it (for example, when overriding or overloading a method) don’t even think “Oh! This is polymorphism in action!”. Instead, I would ask “What is inheritance and where is it used” because most object-oriented languages ​​have a keyword or pattern for it. But these are my personal preferences and I fully understand the logic of the company that conducted the interview.

The question about strong and weak typing was a little unusual because my interlocutor actually meant type control, not strictness of typing, so he was a bit surprised when I said that C is weak static typing, Java is strict static, and Python is strict dynamic (I believe that JavaScript uses a weak dynamic, but I didn’t talk about it).

However, these questions were followed by “nano-questions”:

  • What package does List contain?

  • What package contains File?

  • Which keyword is used to perform inheritance?

(There were also “standard interview questions like “where do you see yourself in five years” etc.)

Russ Olsen says that “nano polling” has two implications:

Aside from saying virtually nothing about the candidate, these tiny questions have two real drawbacks: First, they take up time you could have spent getting to know the person better and figuring out if they’re smart enough or have his necessary experience and whether he will fit into your team. Second, questions like these scare off the very smart, versatile people you want to hire.

I answered these nano-surveys correctly, but I can tell you that they have a third flaw: nano-surveys can lead to false-negative rejections from people who are otherwise perfect for your company.

A good engineer thinks abstractly, in the language of designing and creating systems, in the language of algorithms, components and technical design. He does not necessarily know all the details of the syntax of a particular language, especially if he is used to a good IDE that helps him with this (I use Eclipse: type List and then press control-space to load java.util.List). It’s more important to understand which package I need to use than to remember its name.

Likewise, it’s more important for me to be able to tell where to use imitation and where to use polymorphism than to state their definitions.

Basically, any question that can be answered in five seconds with Google/ChatGPT is a bad question. My favorite phone interview question is: “What language do you like the most? What are his weaknesses?

However, in many interviews and many exams, you are essentially being tested on how well you can replace a compiler. Even Java certification exams tend to emphasize questions about syntax and compilation rather than questions about how well you can program and design systems.

I’m a good engineer, not a good compiler. I can’t look at a piece of code and immediately tell what the problem is and whether it will throw a ClassNotFoundException, the compiler does that. If not right away, then at least when I try to compile the code. Does this mean IDE dependency? Maybe, but this is not necessarily a bad thing, because IDE is one of the tools we use in our daily work.

Related posts