
I regularly meet posts, including those at Habré (the
illusion of effective development: design , the
Red pill does not exist ) in which it is said that some programmers are ten times more efficient than others and that the choice of people may be more important than the organization of the work process and technology selection.
When I had to conduct interviews, I thought hard about how to distinguish
Chuck Norris as an effective professional in the field of web development, from those who would interfere under his feet.
This post is a collection of subjective thoughts on this topic, as well as a set of specific technical issues and tasks that, in my opinion, better help the candidate to show his professional skills at the interview.
First I want to determine what “efficiency” means to me.
')
By efficiency, I mean
relative efficiency : the ultimate benefit (business value) that a candidate can bring, working in a specific role on our project, compared to other applicants.
The same person will be differently effective in different projects, even if he is engaged in similar things. For example, agile projects suit someone more, others less. The relative effectiveness of the candidate can change in any direction, even in the course of one project.
Therefore, I agree with those who argued that, ultimately, efficiency can only be understood in combat, on probation, because to take into account all the factors in advance is too difficult.
But the interview is still needed. We will not take everyone for a trial period without talking.
The reality of our HR process is that technical interviews are conducted mostly by telephone. Because candidates come from different cities and even countries, because there are several interviewers, it is also possible from different countries. Even under the conditions of a single metropolis, a trip to a personal interview eats up a lot of time from a candidate, and people agree to a telephone interview more easily.
The telephone interview should be short - after an hour the ear gets tired, after two it is ready to fall off.
In order to receive additional information for making a decision, we tried to give a test task before a telephone interview. It did not work. It became an order of magnitude less than those who reached the interview, and any sane specialists among them - even less. Indeed, why should a competent developer carry out a task before an interview, when he is already torn off with his hands and feet? And we abandoned this idea.
At first, conducting an interview with the applicant, I adhered to a good “rule number 1” from Joel Spolsky
"It is better to miss the real pros, than to take an inefficient employee and then suffer with him."
Therefore, we sift out all "suspicious" and with any doubts.
After some time, I realized that there are too few ideal candidates (or maybe they exist only in my imagination), and in any of them you can, if you like, find something suspicious.
Then I created a general list of questions, for comparing candidates for answering the same items, in order to arrive at more objective quantitative assessments, rather than a “suspicious” sixth sense, which allows us only to weed out the candidate, but not to compare them with each other.
The less time for an interview, the more difficult it was to choose questions, because each of them should allow the candidate to maximize their professionalism without requiring lengthy explanations.
To find the perfect balance, you need to decide - what factors will be decisive in the issue of the effectiveness of the candidate on our project?
The main factor I chose was the
ability to understand the problems and come up with solutions in my field (the notorious
problem solving skills ), to put it simply, the thinking should be pumped.
This will allow you to quickly debug and find the causes of bugs, feel possible problems, come up with simple solutions to complex business problems (or critically evaluate the proposed ones), notice the unproductiveness and automate routine actions, saving time and dramatically affecting efficiency.
The second factor is the
personal qualities of a person , such as
self- discipline, sociability, responsibility, etc. Maybe they are even more important, but other people do their assessment in another interview; I can only evaluate them subjectively, by the criterion “suspiciously”, I don’t ask any additional questions for this.
The third is
cross-functional skills . For us, the ideal "man-orchestra." Such that he knew about one thing well, but he also knew how to test, collect analytics, communicate with a client, and create a UI, and a backend, and write SQL queries, and develop a database schema, propose architectural solutions.
This is an ideal, of course. It’s impossible to know everything thoroughly and be able to, but wide experience and skills in different directions should allow us to communicate better to the whole team, understand and help each other, find solutions together. This insures against project slippage when one employee is suddenly dismissed and can play a key role in the project’s success, especially for small teams like ours, which have 3-5 people at different times.
That is why I decided to ask in different areas a little bit, and find out all the experience and desire of the candidate to develop in each direction.
And only in the last place is the
knowledge of the technologies we use , which allows us to “roll in” faster into the project. But, in my opinion, this knowledge will not affect the effectiveness in the long term. Not only can technologies, and even languages, change at any time, but the requirement of specific knowledge greatly reduces our choice. All this may lead to the fact that too much time will be spent on unsuccessful searches. Which in turn will force us to hire a not-too-professional employee who, as they say, will turn up his arm.
So: problem solving skills. How to check them?
- Understanding of things , as well as the ability to explain this understanding of their own. The more a person had to disassemble complex things, the better the “thoughtla” could be trained (otherwise, what else does a higher education give?). The ability to explain / convey your thoughts, shows the clarity and harmony of thinking, so necessary to solve problems. Therefore, the answer is not on the merits of my question, confusing or abstract explanations, seduce me to save further time, using the rule №1.
- Misunderstanding of things . This is when a candidate uses something and doesn’t imagine why and how it works. Skopipastil, clicked, it seems to work, and then falls off, get out bugs, and hell you will understand why. This may indicate laziness, inability or unwillingness to understand the problems. In general, fat minus.
- Overall versatile experience . The smaller it is, the less often you have to figure it out, and it is likely that the “thinking” will not be pumped. There will be less cross-functional skills, the importance of which is described above. Rich experience, on the contrary, allows us to solve unforeseen difficulties more quickly at the level of intuition.
- Problem solving . I realized that challenging tasks and “puzzles” do not work. At one interview, for a very long time I tried to answer the question: “Why are sewers round?” I never had the idea: “So that they do not fail down.” Because for this you need insight, and this is akin to good luck, and in any way, in my opinion, does not show skills. In the end, I spoke: "They are round, because the same dude will crawl into them as into the square hatches, and it will take less metal on them." This can only check the persistence of candidates, which, of course, is not unimportant, but it is too long and inhumane.
Thus, I was looking for simple, feasible tasks without luck and insight, which have several solutions or levels of response depth. All this is aimed at ensuring that one can evaluate the answer quantitatively, according to the solutions chosen, by speed, by the harmony of the presentation of thoughts.
Joel Spolsky has a slogan / criterion for hiring:
“Smart & Gets things done” (I would translate as “Smart and Practical”). All of the above applies to the
Smart part, the
Gets things done part means the ability to come up with not only the “perfect” solution, but to choose a
practical solution, taking into account the needs and capabilities of the customer. To do this, it is necessary to remain focused on the client's business problems and the objectives of the project, rather than on their own research and inventive interest. So, the ideal question / task should exhibit both criteria: “Smart” and “Gets things done”.
And what questions I found:
- Do you have a technical blog? Whether write those. articles (for example, on Habré) or books? Are you speaking at conferences, meetings, masterclasses (intracorporate are considered)? Do you participate in opensource projects?
All these activities require the highest level of understanding of the subject, and more importantly, the ability and desire to transfer their knowledge. Therefore, any answer “yes” is a very big plus. Answers "no" are not a minus.
- Are there any personal technical projects?
The answer “yes” can say that a person loves his work, and not just because of money, he suffers at work. In addition, personal IT projects often have to do everything myself, and this suggests an important cross-functional experience.
The answer is "no" is not a minus.
Questions 1 and 2 are borrowed from the post of Nikos Maravitsas, in which he proposes his own method of evaluating candidates, for which he thanks.
- Given: a web page with approximately 30 printed pages of text in which 300 words or phrases are highlighted in bold.
Necessary: All selected words are copied to a separate file, separated by commas and wrapped each in double quotes.
The task is done only once (it will not be repeated), it is required to solve it as quickly as possible and it does not matter in what way. It is also required to give a rating in hours on the expected solution.
I want to say that in the current project we never give estimates in hours (but only estimate the order of complexity of the task), but to this question I heard estimates from 3-5 minutes to 4 hours. And even more “because you need to write unit tests.” This is how the difference in efficiency by an order of magnitude is born.
Possible solutions:
• jQuery expression, can be executed in firebug or equivalent and get the finished result. It takes 2 minutes. If you called this approach, not having confident knowledge of jQuery, then an even bigger plus.
• XPath expression. A good way is if you know where to enter this expression, for example, the xmllint command in Linux or know about the corresponding function in your favorite IDE. In addition to what you need to know (or quickly think of) where to enter this expression, you need to understand that xml and html things are different. If you understand this, then you need to know if xmllint / IDE works with html, if you are not sure, you can think of a way to convert html -> xml. The way to "google" scans, but very well, if you heard about tidy. Separately, I check the adequacy of time evaluation for compiling and debugging xpath expressions.
• RegExp - go through the regular expression on the file and select all the "fat" tags. Here I check the concept - where will we enter the regular expression (in which program / team)? With ignorance, we begin to write a program in your favorite language. Then I test the understanding of the “greed” of regular expressions. And finally, I compare the assessment of the candidate with the complexity of the decision. That is, if a candidate makes a choice - to write a program in java (also with unit tests for this case) and generally understands regexp, while giving a meager assessment - this is definitely a minus.
• We write a program in your favorite language, which highlights the text between the "bold" tags. I ask you to tell the algorithm of how to do this, including how the reference data will go. This is quite a normal option if the algorithm is told quickly and clearly, and the assessment corresponds to the candidate's confidence. If a person is confused in simple things that do not require any special knowledge or experience, then this is an excuse to apply the rule “it’s better not to take than to take and suffer”
• Manually. Generally a great option. Because the assessment is smaller and more predictable than the estimates that I often hear for other options. A definite plus, if the score for this option is adequate, it is even better if we use regexp for wrapping in quotes and separating them with commas. Two advantages, if people ask me: “How critical is an error in one symbol when copying?” This is the case when, due to a small clarification of requirements, we can reduce the cost of a solution several times. In general, the more reasonable clarifying questions from a candidate, the better.
If a person cannot estimate the time for such “manual” work adequately, or he flatly refuses to consider such an option - an obvious minus.
In my opinion, these are the very questions that display both criteria of “Smart” and “Gets things done” in the best way.
- Given: .xls (Excel) file with one sheet in 4 numeric columns and 1000 lines.
Required: Load it into the SQL database, a table with the corresponding columns is available. Well, first, estimate the time for a decision.
• Confident answer - I use such and such. Such an answer does not tell me anything, I was just lucky with the knowledge of Tula.
• I convert to csv and use such and such. Already interesting, thought of converse. A small plus.
• I convert to csv and use the built-in SQL server capabilities for loading from CSV. Even more interesting, because it says that you probably have a close understanding of the DBMS, and this often helps out. Plus more.
• I google it, I'm sure it should be this way. Plus for the flair and the fact that they did not inflame a lot of time to invent a bicycle. I also look at the adequacy of the assessment of "googling"
• Envelope in csv, I will write a shell script that will insert into ...; expressions and run them on the sql server. With an adequate assessment sure plus.
• I will add a column in the excel file, where in all the cells I will insert (stretch) “insert into” and additional columns with commas, I will get an sql script. Immediately plus, even in the assessment do not need.
• Start writing a program. This is usually bad. If you guessed envelope in CSV and work with a simple format, and the assessment is imputed, then nothing else. But if we begin to use complex libraries for working with Excel, then we write unit tests and estimate the task at 8 hours of pure time - that’s a minus.
In the beginning, I always explain - what I want to check with a question, so that people do not specifically cut off the simpler options.
Then a couple of programming tasks, well, well, without it. Only it is necessary to take into account that they have to be solved by holding the phone at the ear.
- Given: an array of N random numbers.
Required: find the largest K numbers from the array and estimate the complexity of the algorithm. I specify that K <(N / 2), N is a large number, I am interested in the fastest algorithm, I don’t care about memory consumption.
I like this task because there is an obvious solution in it (practice confirms this), however, it is not optimal. I look at whether a person can understand that it is not optimal on their own, and how quickly we get to the optimal solution. In most cases, we get there, and the thinking of the candidate on it is revealed quite well, well, for those who comment on their thoughts. Then we come to the concept of the complexity of the algorithm, the normal answer is O (N * log K).
But if you have a bad mood, then it can be recalled that the numbers are random and there are a lot of them, and make them solve the problem on the basis of probability theory.
Then the answer should be significantly less than O (N * log K). Which one I myself do not know.
- Given: an array of "values" and the corresponding numerical coefficients of these values. It is necessary to write a function / method that selects arbitrarily one of the values so that the probability of choice is proportional to the corresponding coefficients. That is, the larger the coefficient, the more often the corresponding value should be given, and vice versa.
Not such an obvious problem, but quite solvable. I estimate the time and the course of the decision.
- Well, then questions to reveal the general level of knowledge of a web programmer, in my case on java, maybe someone will be interested:
- Explain the difference between
<span> <div>
. Many people know, but they cannot really explain, they are confused, this is a minus. - In Javascript, explain what prototype is (does not mean the name of the framework)? What can be passed to the jQuery () method, is it $ ()?
- In HTTP, what is keep-alive?
- Can a cookie with the same key have a different meaning on two different pages of the same site (with the same domain)? Not? And on different sites?
- How TCP is different from UDP. Stupid question, but it turned out that they usually know the answer, now if someone does not answer, for me it is suspicious. And yet, it happens that they say confidently complete nonsense, it is much worse than “I do not know, I would google”.
- What is base64?
- Is it possible to make ajax request between different domains? How?
- Explain the fundamental difference between SOAP and REST? I look at the clarity and brevity of the answer. "I do not know" is also good.
- How to implement a producer-consumer pattern using two parallel threads. (I explain the essence of the pattern
- Is there any experience with xml? If so, in what way, with what technology?
- Do you know xpath, what is axis / axes.
- What is the experience with Linux? A good knowledge of Linux and its teams allows you to quickly solve (or automate) fairly complex household tasks, so it can significantly affect efficiency. How to search through the history of entered commands? Knowledge of the commands sed, awk, sudo, ps, top, grep? Using pipes? Did you write shell scripts?
- Regular expression knowledge?
- What are your frequently used hot keys or examples of automating routine tasks? Efficiency is not always the ability to think, sometimes people work quickly, if only because all the main actions were carried out on hot keys and automated most of the routine.
SQL questions.
- What is the difference between inner join and outer join? I look at the ability to clearly explain the difference.
- Transaction isolation levels. Can you explain? Sure enough "yes"
- How to display all the numbers appearing in column A more than two times?
- How to make the amount incrementally? For example, there is a table with the date and amount of sales for each date, you need to display the amount of sales for each date from the beginning of the year up to and including this date. (on the fingers it is easier to explain)
Programming knowledge is revealed in the course of solving problems, but I still ask the basics.
- How to read a file line by line?
- Explain how TreeMap and HashMap work. These are obligatory bases for the programmer, in my opinion.
- Well, ArrayList vs. LinkedList. Which of them will be faster when adding a million identical objects to the end? It is hard to say for sure, because ArrayList will copy its internal array several times during expansion (its initial capacity is 16 by condition). And LinkedList will create an additional object for each inserted element in which links will be stored. Usually they answer very confidently: they say that it will be faster, and stubbornly do not want to answer, why it can be faster than another.
Here, in general, that and all the main questions of my technical interview, which takes an hour and a half. If time remains, then we dig deep and wide, asking about previous projects, but usually these questions are enough to make a decision on my particular vacancy. (
In your case, of course, everything will be different ).
If someone knows questions that can better demonstrate the effectiveness of a web programmer, welcome to the comments.
Good luck on your job interviews.
