How to grow a web developer from intern to architect. Competence matrix

Instead of an epigraph

When I graduated from university in 2004, there were almost no development teams in our city. Where to work, from whom to gain practical experience?



The choice was simple: “admin” or “to Moscow”. Or leave the profession.



Now I teach web development at local universities, I manage a large team, and it is important for me that smart young guys want to live in my city so that our city is not considered a “rotten place”.


The essence of the article is short



My colleagues and I know how to “grow” web programmers from “almost zero” to the level of a confident professional (Senior / Architect).



We want to tell you how everything works and share materials and methods with the community.



This article is written for students, beginners and growing web developers.



The following describes the “development track of a web developer”, the competency levels “Trainee”, “Junior”, “Middle”, “Senior” and “Architect”, as I see them, and examples of certification tasks are given.



The pyramid of programmer abilities or "what to download at the start"



How to Become a Good Web Programmer? Do I need to finish "computer science" in a good university? Or monthly courses are enough? Or "with a book and a mouse" can you study everything?



Three "pillars" on which the profession of any developer on any technology stack stands are algorithms, databases and programming itself (language + OOP + patterns).



image

What is Algorithmization?



A close "everyday" analogue of the technical skill of "algorithmization" is fan repair. What if "does not spin"? Check / change the socket, then turn the blades by hand, then "ring" the wire.



The logic is obvious: "I divided it into parts and checked each one." Surprisingly, many people do not know how to think that way. This is in the blood of a real programmer.



Database



The DB course is one of the main ones, like physics for an engineer. The bad thing is that they are often taught equally badly: they are reduced to "retelling paragraphs."



Both theory and practice are important in DB. The programmer must be able to write queries, understand the ORM logic, and design the structure.



What technologies does a programmer need to know?



What does a developer's professionalism consist of? The approximate time of development is indicated for the classical path of development (starting from the university).



Pyramid.png



Algorithmization is taught “according to the mind” at school / university. It takes 1-2 years for this, and this period determines the height of the future professional takeoff. If you don't master algorithms, you will never grow up.



The features of a particular language can be learned pretty quickly. If you’re learning a second or third language, you’ll solve your first meaningful problem in a week. But "I know perfectly" will take at least a year of practice.



Frameworks often include hundreds of modules / classes / extensions and are constantly evolving. Mastering the framework will take you at least several months.



Many self-taught people follow the “easy”, but wrong path: instead of algorithmic, they start learning the framework. And after a couple of months, the practitioners declare that they can program. They fail serious interviews within 10 minutes after the start.



Specific technologies (eg AJAX, server-side JS rendering, push & pull, load balancing across geo-cluster, profiling long requests in xhprof, message queues, NoSQL databases) are endless. You can learn them forever.



This pyramid must be traversed “from the bottom up”. If you start with a framework and write a nice resume, but don't know how “bare JS” or “how a get request differs from a post” work, you won't be a pro.



What tasks need to be solved?



The first stage is “start”. First you need the skill of confidently and correctly solving relatively simple problems. Most often these are game, mathematical or logical problems.



For the skill "I write simple code quickly" you need to solve any of the classic collections of programming problems in any programming language. For example, Zlatopolsky







It may seem strange to you solving 1000 boring problems, but every good programmer did it at the beginning of his journey. Someone - at the institute, someone at school, our children will do it in kindergartens.



This method of teaching by doctors is called the "lead w * py method." Forgive me for being rude, but you can't throw out words from folk art.



The second stage is “practice”.You need to write code that you can figure out in a year. So that when new requirements appear, you don't have to rewrite everything from scratch. So that when the project grows 100 times, it remains “supported”. So that when they add programmers to the team, they do not bite you for a strange style.



This is a very difficult transition. Many programmers never do it: they become “one program” developers, or they always write projects of no more than 200 lines. This is not a pro level.



To learn, you need to solve big problems in a team and read the right books in parallel. For example, Robert Martin's "Clean Code" .



“Big tasks” are real services used by people, where the team consists of at least 2 people and consists of thousands of lines of code. Such projects form a confident specialist.



The third stage is “mastery”. It involves mastering specific frameworks within the chosen technology stack. You must learn to solve real modern problems at a high level.



A harder and more useful book is Martin Fowler's Enterprise Application Patterns . It also needs to be read, after about a year and a half of work in the profession.



What for? Can I just finish the 3 month “web developer” course?



Surprisingly often, “like programmers” come to interviews. They have courses, multiple jobs, portfolios with beautiful websites under their belt (strange way, as if we are looking for a web designer).



At the same time, people often do not know the answer to the simplest question such as “what are cookies” or “how the loading of messages in the VKontakte feed works”, they do not even have versions.



A good programmer knows the theory and applies it in practice, all the time thinking "how to do it right." The “spinal cord” and “copying pieces of code from Google” will not get you very far. You need a base and practice.



How to get this "base"? Where is the right place to study? There are two ways. The first one is 4-5 years in a good university. The second is a few years of persistent self-study and practice. You can become a strong programmer without a specialized education if you have a bright head, an open heart, and you yourself are ready to work hard.



Short courses are useful to gain basic knowledge and understand “where to dig yourself”. They will not make a professional.



Competence matrix. Intern - Junior - Middle - Senior - Architect



We believe that our matrix is ​​the answer to the question “how to go from a beginner to a web development guru”.

In our world, a developer deals mainly with backend tasks, but he should not be afraid of the front-end and administration (there are narrow specialists for evil tasks).



A complete matrix with sample certification questions is available here.



This is a table divided into grades (intern, junior, middle, senior). Each grade contains a set of unique competencies. Questions are grouped by area of ​​expertise (PHP, SQL, Frontend, web technologies in general, and server management)



Trainee



At the start, the trainee must be able to:



  • confidently distinguish cookies from sessions;
  • understand a specific operation is taking place on the server or in the browser;
  • to write a simple data management task in PHP without server frameworks. For example, "maintaining a database of groups and students with editing, deleting, creating and displaying";
  • decently arrange the result of your work.


The trainee is studying. His main task is to gain knowledge, solve problems under supervision, and - get big shots.



Almost every trainee deletes a base, misses a window, or re-solves a long-closed problem. Of course, no harm to combat projects.



Mistakes are a normal part of learning.





Junior



Junior is able to solve problems on his own. He often consults with his elders, but the questions he asks are not at all interns.





What Junior should practically be able to do at the start:



  • rewrite (and that means thoroughly understand) the authorization on the site;
  • confidently edit the settings and the framework code of the work of directories, news feeds, forms;
  • collect simple data management interfaces and entire sites on the framework;
  • write a simple integration with an external API.


Middle



Middle is a specialist who is able to solve any typical industry problem himself.





Practically what Middle should be able to do at the start:



  • work with external authorization (log in through an external provider or make your code an authorization provider);
  • confidently program the interfaces of public online stores, marketplaces or intranet portals (depending on the specifics);
  • collect complex data management interfaces and sections on the framework;
  • write complex integrations with external APIs, implement web services.


Senior



Senior knows “his stack” thoroughly, readily learns and applies new technologies, and works as a mentor.







For example, what the Senior himself should know and be able to do on the block “Working with servers and Linux”.



  • Build an atypical roll-out system
  • Working with microservices.
  • Organization of load testing
  • Configuring continuous integration
  • File Synchronization and Data Replication
  • Build a fault-tolerant and high-load cluster with and without the Bitrix Framework.
  • ELK / other logging and analytics systems
  • Gearman / RabbitMQ queue servers and building distributed systems


Typically, Senior plays the role of the technical leader of the development team.



Architect



An architect is the next level of development for a specialist, when he thinks through the architecture of large projects and leads their implementation. He is not only a technical, but also a project manager.







Such specialists play a key role in technically and organizationally complex projects.



The quality of an architect determines the ability of a project to be completed on time and develop for many years in a row.



Programmer development management



Every month, with each programmer, we individually conduct a “development planning meeting” and a conversation on other topics about work. Head of department, tech lead and / or mentor are involved.



During such meetings, we together define development priorities - to pass a laboratory or oral competency exam.



How is the level check (certification) arranged?



What is attestation? This is a procedure for confirming the qualifications of a programmer. All programmers pass it. Certification includes laboratory work and oral exams.



As a result of attestation, “Yes” appears opposite the confirmed competencies in the competency matrix. This increases the grade, for example, "Trainee-54%" → "Junior-27%".







How is certification going?



The certification includes theory (oral examination) and practice (laboratory work). The goal is to “close” several competencies in the matrix, confirm the level, get new tasks and increase salaries.



Practical exercises can only be done correctly if you study and understand the theory. Cheating and cheating is not accepted, and the mentor will not miss the hack.



Many blocks of the competency matrix are closed by practice and there are no theoretical questions on them.



Theory. Oral exam



Competencies not covered by laboratory work must be confirmed in an oral exam.



For each competency, we ask about 5 questions. You need to answer in an amicable way to everything or almost everything. The duration of the oral exam depends on the level, usually 1-2 hours.



Practice. Laboratory works



Laboratory work covers several competencies at once. After completing the laboratory work, these competencies are counted as confirmed and do not fall into the oral exam.



The laboratory work ends with a report. The report may include a demo, code review, oral questions. The set of checks depends on the laboratory itself.



Approximate formulations of tasks



We have developed about 20 tasks (we usually call them "laboratory work" for students). Several - we will publish.



Here are examples of simple tasks.



Task 2a. "Basic web". Let's implement CRUD in pure PHP.



Competencies:



  • PHP: Website Authentication and Authorization
  • PHP: Processing a Feedback Form with Data Saving and Validation
  • Front: Creating html forms
  • Front: CSS Syntax and Selectors, Understanding Selector Weights
  • SQL: Mysql Basics
  • SQL: Data Types
  • PHP: PHP Language Syntax


The essence:



  • create a repository on bitbucket and execute in it;
  • immediately make a branch and pull request;
  • install the Statistic plugin in PhpStorm, the maximum number of lines for the entire project is 1500:
  • create the necessary tables through PhpStorm and fill them with data;
  • make an authentication page;
  • make a page with a feedback form, which has: a text field, a multi-line text field, radio buttons, checkboxes, a drop-down list, a form reset button, a form submit button;
  • the feedback form is available only to authorized users, the admission criterion is that you are logged in to the system;
  • everything is beautifully laid out, show an example of using the basic types of selectors: id, class, attribute, pseudo-class, pseudo-element;
  • both forms must be processed without JS;
  • check through PhpStorm that data is being added to the table.


Check:



  • the quality of php, js, css decomposition is checked;
  • the ability to allocate responsibility and establish the correct dependencies between MVC / ECB components;
  • security (access);
  • security (XSS, SQL injection);
  • correctness of redirects;
  • the unity of the style of coding.




Development of the task



Task 2b. Development of the CRUD interface in PHP.



Competencies:



  • 3 ways to connect a script
  • Creating html forms
  • CSS Syntax and Selectors, Understanding Selector Weights
  • JS: operators, functions
  • Debugging JS using the browser console
  • Mysql Basics
  • Data types


The bottom line - we continue to work on the site from task 2a:



  1. make a mini-admin panel:
  2. list of submitted feedback forms;
  3. the list must be sorted by date of submission, new ones - first;
  4. the list can be "updated", this is done using AJAX;
  5. tip: for interactive testing of database queries, use the database console in PhpStorm;
  6. the submitted form can be removed from the admin area, all on AJAX;
  7. thus demonstrate all the ways to connect JS;
  8. the submitted data can be edited (use an already developed form, without AJAX);
  9. jQuery can be used.
  10. open developer tools (preferably Firefox):
  11. find the source of the request from the request log;
  12. set a breakpoint, provoke code execution, examine step by step code execution;
  13. during step-by-step execution, view the values ​​of variables through the corresponding inspector;
  14. add watch;
  15. use the console to access variables in the current scope.


Check:



  1. the quality of php, js, css decomposition is checked;
  2. the ability to highlight and establish the correct dependencies between MVC / ECB components;
  3. security (access);
  4. security (XSS, SQL injection);
  5. uniformity of coding style;
  6. all points on the use of developer tools to demonstrate.


Here is an example of "medium difficulty"



Task 10. Web scraping



Competencies:



  • Regular expressions
  • HTTP requests from server, cURL
  • TODO: writing console utilities (and one-time scripts) based on the Bitrix Framework code base
  • TODO: add CRON


The essence:



  • Analyze the site, think over data structures suitable for automated processing
  • Parse the site into these structures
  • Design as a CLI script
  • Settings to implement the ability to parse not everything, but only what the user needs


Check:



  • correctness of the CLI environment
  • regex decomposition
  • cost-effectiveness on request
  • error processing
  • the possibility of parallel parsing of several objects at once
  • Work in console and interactive mode
  • * work in the mode of an external service accessible via HTTP, with support for queues






View and download the competency matrix - 2020



I am sure that this is how, step by step, with a mentor and constant code review, through a chain of certifications, the right developer develops "from trainee to architect".



Diamonds form under pressure.



All Articles