Good code will not reach Google
For a long time working in different areas of IT, the research team and I observed all the possible problems of becoming developers and all the causes and consequences of their shortage. We were interested in: why does a programmer develop into a senior specialist for so long or does not become one at all? Where did the unjustified expectations come from on both sides? And most importantly - what should a developer do at each level to enter the privileged caste of senior s, architects, team leaders and leaders?
We conducted an extensive study among programmers and their leaders. We collected the requirements for senior developers of top companies, opportunities and ways to develop to this level, generated all kinds of insights and life hacks and transformed them into this article. All this will be discussed further.
Senior, who the f ... is
An analysis of job descriptions on hh and the requirements that managers shared in face-to-face conversations showed that there is no single approach to determining senior level . In one company, this is the one who is able to design a complex module himself, in another - to connect to the refinement of individual solutions, in the third - the one who is just cooler than the rest. Within the companies themselves, the requirements also differ significantly among managers, team leaders, HR and programmers themselves.
As a result, developers get a number of problems: without an adequate definition of requirements, there is no clear vision of a career path and development steps. Questions: “What level do I have now? Do I earn in proportion to him? How much do I need to upgrade to the next level? ”- we hear everywhere.
Instead of systematic development, it is necessary to solve standard tasks, wait for the attention of management, learn frameworks, not realizing whether they will advance a career ahead. We advise: when you enter the company or right now - learn about the requirements not only to the current level, but also to the highest possible. So you get a perspective vision of development and can relate to it every step.
Your development depends on what stage you are at now. But how to evaluate it? This is the second problem.
Several insights were obtained from the polls: 70% of junior - middle programmers try to evaluate themselves on their own. Paradox: the lower the level of the assessed, the more he operates with his own ideas.
At the initial stages, there is no depth of knowledge and breadth of horizons - the picture is very limited. And such an assessment overestimates the idea of their level in 86% of cases.
We recommend: as soon as possible switch from “internal” assessment methods (your own opinion, experience) to “external” - ask for feedback from the leader yourself, attack the most experienced colleagues, compare tasks and methods of solving them, go for interviews to top companies, where the level requirements are higher and the test base is better, etc. The manager’s assessment must be objectified by the results from alternative sources, so as not to fall into the trap of limitations of the current capabilities and requirements of the company / department / project.
But there is a shorter way. We ourselves have compiled a list of requirements of top companies for senior professionals. And they discovered a serious lag that forms between the middle and senior levels .
We compiled the requirements and found that not only good code turns a junior specialist into middl . At the junior level, a programmer must master all the necessary technologies and the ability to solve typical problems in principle, learn to write code competently and quickly. At the middle- developer level , a code culture, the ability to think deeper and wider, implement larger tasks independently and be able to apply various development tools are already required.
The difference between middle and seniorsignificantly thinner. It is here that developers form a lag, which not everyone can overcome on their own. This is a whole series of skills and personal qualities that are implied, but which no one speaks clearly about: responsibility for most of the system being developed, mentoring, the ability to independently formulate and propose optimal technical solutions, communication skills, etc.
So who is super- senior ? In order to formalize the requirements, we had to go as far as possible and put together everything that companies of the Yandex, Luxoft, Mail.Ru Group and even Google level show in open sources. And also verified this information in conversations with the development managers of eminent companies.
Hard Skills
1. Clean code;
2. Upper Level Hard Skills:
Soft Skills and professional horizons.
Those same mysterious requirements, desperately underestimated by the programmers themselves. Often the company management and HR operate on the concepts of “teamwork” and “responsibility”, but they do not formalize either their criteria or their manifestations in life. As a result, 90% of developers did not mention these aspects as important for development.
The idea of testing ourselves for proficiency in all of the listed blocks was presented to us by the total scarcity of tools for evaluating anything other than the level of language proficiency in the Russian market. For the needs of our research project, we have compiled a trial version of the test for 3 languages, which helps to quickly navigate at the current level, and also highlights the strengths and weaknesses.
To summarize, evaluating yourself adequately using the maximum amount of external resources is extremely important. In order to avoid the classic problem in the labor market - “expectations of developers vs. reality of companies. ”When developers evaluate their skills and their value is higher than the companies are ready to do. They also hope for a quick take-off and development, which to this extent does not happen (for more details, see the next article).
PS In the initial version of the article, we proposed to pass the test to everyone. However, we did not expect such a powerful influx of respondents. And they were forced to close the test in order to be able to process the current answers and results to those who left contact details. Please fill in the test for patience :)
We conducted an extensive study among programmers and their leaders. We collected the requirements for senior developers of top companies, opportunities and ways to develop to this level, generated all kinds of insights and life hacks and transformed them into this article. All this will be discussed further.
Senior, who the f ... is Alice Senior?
An analysis of job descriptions on hh and the requirements that managers shared in face-to-face conversations showed that there is no single approach to determining senior level . In one company, this is the one who is able to design a complex module himself, in another - to connect to the refinement of individual solutions, in the third - the one who is just cooler than the rest. Within the companies themselves, the requirements also differ significantly among managers, team leaders, HR and programmers themselves.
As a result, developers get a number of problems: without an adequate definition of requirements, there is no clear vision of a career path and development steps. Questions: “What level do I have now? Do I earn in proportion to him? How much do I need to upgrade to the next level? ”- we hear everywhere.
Instead of systematic development, it is necessary to solve standard tasks, wait for the attention of management, learn frameworks, not realizing whether they will advance a career ahead. We advise: when you enter the company or right now - learn about the requirements not only to the current level, but also to the highest possible. So you get a perspective vision of development and can relate to it every step.
Evaluation of the programmer - the work of the programmer?
Your development depends on what stage you are at now. But how to evaluate it? This is the second problem.
Several insights were obtained from the polls: 70% of junior - middle programmers try to evaluate themselves on their own. Paradox: the lower the level of the assessed, the more he operates with his own ideas.
At the initial stages, there is no depth of knowledge and breadth of horizons - the picture is very limited. And such an assessment overestimates the idea of their level in 86% of cases.
We recommend: as soon as possible switch from “internal” assessment methods (your own opinion, experience) to “external” - ask for feedback from the leader yourself, attack the most experienced colleagues, compare tasks and methods of solving them, go for interviews to top companies, where the level requirements are higher and the test base is better, etc. The manager’s assessment must be objectified by the results from alternative sources, so as not to fall into the trap of limitations of the current capabilities and requirements of the company / department / project.
But there is a shorter way. We ourselves have compiled a list of requirements of top companies for senior professionals. And they discovered a serious lag that forms between the middle and senior levels .
If you don’t know where you’re going, you’ll most likely find yourself somewhere in the wrong place.
We compiled the requirements and found that not only good code turns a junior specialist into middl . At the junior level, a programmer must master all the necessary technologies and the ability to solve typical problems in principle, learn to write code competently and quickly. At the middle- developer level , a code culture, the ability to think deeper and wider, implement larger tasks independently and be able to apply various development tools are already required.
The difference between middle and seniorsignificantly thinner. It is here that developers form a lag, which not everyone can overcome on their own. This is a whole series of skills and personal qualities that are implied, but which no one speaks clearly about: responsibility for most of the system being developed, mentoring, the ability to independently formulate and propose optimal technical solutions, communication skills, etc.
So who is super- senior ? In order to formalize the requirements, we had to go as far as possible and put together everything that companies of the Yandex, Luxoft, Mail.Ru Group and even Google level show in open sources. And also verified this information in conversations with the development managers of eminent companies.
Hard Skills
1. Clean code;
2. Upper Level Hard Skills:
- Knowledge of algorithms and data structures (this is the base, without which there is nowhere);
- Knowledge of the principles of OOP;
- Knowledge of modern frameworks (and the longer the list, the better; regular replenishment is welcome);
- Understanding of design principles, basic architectures (independently designs a system / module as a project headliner, or participates in the design of large systems; minimally - solves a voluminous task taking into account the current architecture of the project);
- Knowledge of design patterns (to recognize and apply a bicycle in time, and not to reinvent the wheel; in the broad sense, it is team communication in one language to quickly find a solution or evaluate the decision of colleagues);
- Experience in interacting with both relational and NoSQL DBMSs, building queries to them, optimization and management skills;
- Understanding the principles of testing organization, knowledge of unit testing, ideally - switching to automated testing instead of manual testing;
- Possession of at least one version control system (most often you need a specific one, depending on the requirements of the company).
Soft Skills and professional horizons.
Those same mysterious requirements, desperately underestimated by the programmers themselves. Often the company management and HR operate on the concepts of “teamwork” and “responsibility”, but they do not formalize either their criteria or their manifestations in life. As a result, 90% of developers did not mention these aspects as important for development.
- Understanding of flexible development methodologies, the ability to work with them and adapt them to the specifics of the project;
- Mentoring: the ability to take juniors, beginners, and sometimes the whole team in case of urgent need;
- The ability to find and offer technologies, tools for the best implementation, competent assessment of a set of tasks;
- Teamwork skills: working out agreements, making team decisions, maintaining relationships, focusing on team results, pursuing common interests;
- The level of personal responsibility is the acceptance of responsibility in the areas of: goals and plans, professional relationships, leadership, career development.
The idea of testing ourselves for proficiency in all of the listed blocks was presented to us by the total scarcity of tools for evaluating anything other than the level of language proficiency in the Russian market. For the needs of our research project, we have compiled a trial version of the test for 3 languages, which helps to quickly navigate at the current level, and also highlights the strengths and weaknesses.
To summarize, evaluating yourself adequately using the maximum amount of external resources is extremely important. In order to avoid the classic problem in the labor market - “expectations of developers vs. reality of companies. ”When developers evaluate their skills and their value is higher than the companies are ready to do. They also hope for a quick take-off and development, which to this extent does not happen (for more details, see the next article).
PS In the initial version of the article, we proposed to pass the test to everyone. However, we did not expect such a powerful influx of respondents. And they were forced to close the test in order to be able to process the current answers and results to those who left contact details. Please fill in the test for patience :)