Quando me formei na universidade em 2004, quase não havia equipes de desenvolvimento em nossa cidade. Onde trabalhar, de quem adquirir experiência prática?
A escolha foi simples: “admin” ou “to Moscow”. Ou abandone a profissão.
Agora eu ensino desenvolvimento web em universidades locais, gerencio uma grande equipe e é importante para mim que rapazes espertos queiram morar na minha cidade para que ela não seja considerada um “lugar podre”.
A essência do artigo é curta
Meus colegas e eu sabemos como “fazer crescer” programadores web de “quase zero” ao nível de um profissional confiante (Sênior / Arquiteto).
Queremos contar a você como tudo funciona e compartilhar materiais e métodos com a comunidade.
Este artigo foi escrito para estudantes, iniciantes e desenvolvedores da web em crescimento.
A seguir descreve a “trilha de desenvolvimento de um desenvolvedor web”, os níveis de competência “Trainee”, “Junior”, “Middle”, “Senior” e “Architect”, a meu ver, e exemplos de tarefas de certificação são dados.
A pirâmide de habilidades do programador ou "o que baixar no início"
Como se tornar um bom programador da Web? Eu preciso terminar "ciência da computação" em uma boa universidade? Ou cursos mensais são suficientes? Ou "com um livro e um mouse" você pode estudar tudo?
Três "pilares" sobre os quais a profissão de qualquer desenvolvedor em qualquer pilha de tecnologia se firma são algoritmos, bancos de dados e a própria programação (linguagem + OOP + padrões).

O que é algoritmização?
Um análogo "cotidiano" próximo da habilidade técnica de "algoritmoização" é o reparo do ventilador. E se não girar? Verifique / troque o soquete, gire as lâminas com a mão e "toque" o fio.
A lógica é óbvia: "Dividi em partes e verifiquei cada uma." Surpreendentemente, muitas pessoas não sabem pensar dessa forma. Isso está no sangue de um verdadeiro programador.
Base de dados
O curso de DB é um dos principais, como física para um engenheiro. A má notícia é que muitas vezes são ensinados de forma igualmente ruim: são reduzidos a "recontar parágrafos".
Tanto a teoria quanto a prática são importantes no DB. O programador deve ser capaz de escrever consultas, entender a lógica ORM e projetar a estrutura.
Quais tecnologias um programador precisa saber?
Em que consiste o profissionalismo de um desenvolvedor? O tempo aproximado de desenvolvimento é indicado para o caminho clássico de desenvolvimento (a partir da universidade).

A algoritmização é ensinada “de acordo com a mente” na escola / universidade. Leva de 1 a 2 anos para isso, e esse período determina a altura da futura decolagem profissional. Se você não dominar algoritmos, nunca crescerá.
Os recursos de um determinado idioma podem ser aprendidos muito rapidamente. Se você estiver aprendendo um segundo ou terceiro idioma, resolverá seu primeiro problema significativo em uma semana. Mas "Eu sei perfeitamente" exigirá pelo menos um ano de prática.
Os frameworks geralmente incluem centenas de módulos / classes / extensões e estão em constante evolução. Dominar a estrutura levará pelo menos vários meses.
Muitos autodidatas seguem o caminho “fácil”, mas errado: ao invés do algorítmico, eles começam a aprender o framework. E depois de alguns meses, os praticantes declaram que podem programar. Eles falham em entrevistas sérias dentro de 10 minutos após o início.
Tecnologias específicas (por exemplo, AJAX, renderização JS do lado do servidor, push & pull, balanceamento de carga em geo-cluster, criação de perfis de consultas longas em xhprof, filas de mensagens, bancos de dados NoSQL) são infinitas. Você pode aprendê-los para sempre.
Esta pirâmide deve ser percorrida “de baixo para cima”. Se você começar com um framework e escrever um bom currículo, mas não sabe como funciona o “JS básico” ou “como um pedido get difere de um post”, você não será um profissional.
Que tarefas precisam ser resolvidas?
A primeira etapa é “iniciar”. Primeiro, você precisa ter a habilidade de resolver problemas relativamente simples de maneira confiável e correta. Na maioria das vezes, são problemas de jogo, matemáticos ou lógicos.
Para a habilidade "Eu escrevo código simples rapidamente", você precisa resolver qualquer uma das coleções clássicas de problemas de programação em qualquer linguagem de programação. Por exemplo, Zlatopolsky .

Pode parecer estranho para você resolver 1000 problemas enfadonhos, mas todo bom programador fez isso no início de sua jornada. Alguém - no instituto, alguém na escola, nossos filhos farão isso no jardim de infância.
Este método de ensino por médicos é chamado de "método de chumbo w * py." Perdoe-me por ser rude, mas você não pode apagar palavras da arte popular.
O segundo estágio é a “prática”.Você precisa escrever um código que possa descobrir em um ano. Para que, quando novos requisitos apareçam, você não precise reescrever tudo do zero. Para que quando o projeto crescer 100 vezes, fique “apoiado”. Para que, ao adicionarem programadores à equipe, não o mordam por um estilo estranho.
Esta é uma transição muito difícil. Muitos programadores nunca fazem isso: eles se tornam desenvolvedores de “um programa” ou sempre escrevem projetos de não mais que 200 linhas. Este não é um nível profissional.
Para aprender, você precisa resolver grandes problemas em equipe e ler os livros certos ao mesmo tempo. Por exemplo, o "Código Limpo" de Robert Martin .

O terceiro estágio é o “domínio”. Envolve o domínio de estruturas específicas dentro da pilha de tecnologia escolhida. Você deve aprender a resolver problemas reais modernos em alto nível.
Um livro mais difícil e útil é o Enterprise Application Patterns de Martin Fowler . Também precisa ser lido, após cerca de um ano e meio de atuação na profissão.
Pelo que? Posso terminar o curso de “desenvolvedor web” de 3 meses?
Surpreendentemente, muitas vezes “espécie de programadores” vêm para as entrevistas. Eles têm cursos, vários empregos, portfólios com belos websites em seu currículo (forma estranha, como se estivéssemos procurando um web designer).
Ao mesmo tempo, muitas vezes as pessoas não sabem a resposta para as perguntas mais simples como “o que são cookies” ou “como funciona o carregamento de mensagens no feed do VKontakte”, nem mesmo têm versões.
Um bom programador conhece a teoria e a aplica na prática, o tempo todo pensando "como fazer certo". A “medula espinhal” e “copiar pedaços de código do Google” não vão te levar longe. Você precisa de uma base e prática.
Como obter essa "base"? Onde é o lugar certo para estudar? Existem duas maneiras. O primeiro é de 4 a 5 anos em uma boa universidade. O segundo são alguns anos de auto-estudo e prática persistentes. Você pode se tornar um forte programador sem uma educação especializada se tiver uma cabeça brilhante, um coração aberto e se estiver pronto para trabalhar duro.
Os cursos de curta duração são úteis para adquirir conhecimentos básicos e entender “onde se aprofundar”. Eles não farão um profissional.
Matriz de competência. Estagiário - Junior - Médio - Sênior - Arquiteto
Acreditamos que nossa matriz é a resposta para a pergunta “como passar de um iniciante a um guru do desenvolvimento web”.
Em nosso mundo, um desenvolvedor lida principalmente com tarefas de back-end, mas ele não deve ter medo do front-end e da administração (existem especialistas limitados para tarefas maléficas).
Uma matriz completa com exemplos de perguntas de certificação está disponível aqui.
Esta é uma tabela dividida em notas (estagiário, júnior, médio, sênior). Cada nota contém um conjunto de competências exclusivas. As perguntas são agrupadas por área de especialização (PHP, SQL, Frontend, tecnologias da web em geral e gerenciamento de servidor)
Estagiário
No início, o estagiário deve ser capaz de:
- distinguir cookies de sessões com segurança;
- entender que uma operação específica está ocorrendo no servidor ou no navegador;
- para escrever uma tarefa simples de gerenciamento de dados em PHP sem estruturas de servidor. Por exemplo, "manter um banco de dados de grupos e alunos com edição, exclusão, criação e exibição";
- decentemente organize o resultado do seu trabalho.
O estagiário está estudando. Sua principal tarefa é adquirir conhecimento, resolver problemas sob supervisão e obter figurões.
Quase todo trainee exclui uma base, perde uma janela ou resolve um problema há muito fechado. Claro, nenhum dano aos projetos de combate.
Erros são uma parte normal do aprendizado.

Júnior
Junior é capaz de resolver problemas sozinho. Ele costuma consultar os mais velhos, mas as perguntas que faz não são de forma alguma internos.

O que Júnior deve praticamente ser capaz de fazer no início:
- reescrever (e isso significa entender completamente) a autorização no site;
- editar com segurança as configurações e o código de estrutura do trabalho de diretórios, feeds de notícias, formulários;
- coletar interfaces de gerenciamento de dados simples e sites inteiros na estrutura;
- escrever uma integração simples com uma API externa.
Meio
Middle é um especialista capaz de resolver sozinho qualquer problema típico da indústria.

Praticamente o que o Middle deveria ser capaz de fazer no início:
- trabalhar com autorização externa (faça login através de um provedor externo ou torne seu código um provedor de autorização);
- programar com segurança as interfaces de lojas online públicas, marketplaces ou portais de intranet (dependendo das especificações);
- coletar interfaces de gerenciamento de dados complexos e seções na estrutura;
- escrever integrações complexas com APIs externas, implementar serviços da web.
Senior
Sênior conhece “sua pilha” completamente, aprende prontamente e aplica novas tecnologias e trabalha como mentor.

Por exemplo, o que o próprio Sênior deve saber e ser capaz de fazer no bloco “Trabalhando com servidores e Linux”.
- Construir um sistema de implantação não padrão
- Trabalhando com microsserviços.
- Organização do teste de carga
- Configurando integração contínua
- Sincronização de arquivos e replicação de dados
- Crie um cluster tolerante a falhas e de alta carga com e sem o Bitrix Framework.
- ELK / outros sistemas de registro e análise
- Servidores de fila Gearman / RabbitMQ e sistemas distribuídos de construção
Normalmente, Sênior desempenha o papel de líder técnico da equipe de desenvolvimento.
Arquiteto
Um arquiteto é o próximo nível de desenvolvimento para um especialista, quando ele pensa sobre a arquitetura de grandes projetos e lidera sua implementação. Ele não é apenas um técnico, mas também um gerente de projetos.

Esses especialistas desempenham um papel fundamental em projetos complexos do ponto de vista técnico e organizacional.
A qualidade de um arquiteto determina a capacidade de um projeto ser concluído no prazo e desenvolvido por muitos anos consecutivos.
Gestão de desenvolvimento de programador
Todos os meses, com cada programador, conduzimos individualmente uma “reunião de planejamento de desenvolvimento” e uma conversa sobre outros temas sobre o trabalho. Chefe de departamento, líder técnico e / ou mentor estão envolvidos.
Durante essas reuniões, nós juntos determinamos as prioridades de desenvolvimento - passar em um exame laboratorial ou oral.
Como a verificação de nível (certificação) é organizada?
O que é atestado? Este é um procedimento para confirmar as qualificações de um programador. Todos os programadores passam. A certificação inclui trabalhos laboratoriais e exames orais.
Como resultado do atestado, “Sim” aparece ao lado das competências confirmadas na matriz de competências. Isso aumenta a nota, por exemplo, "Trainee-54%" → "Junior-27%".

Como está indo a certificação?
A certificação inclui teoria (exame oral) e prática (trabalho de laboratório). O objetivo é “fechar” diversas competências da matriz, confirmar o patamar, obter novas funções e aumentar salários.
Os exercícios práticos só podem ser feitos corretamente se você estudar e compreender a teoria. Trapaça e trapaça não são aceitas, e o mentor não perderá o hack.
Muitos blocos da matriz de competências são fechados pela prática e não há questões teóricas sobre eles.
Teoria. Exame oral
As competências não abrangidas pelos trabalhos laboratoriais devem ser comprovadas em exame oral.
Para cada competência, fazemos cerca de 5 perguntas. De forma amigável, você precisa responder a tudo ou quase tudo. A duração da prova oral depende do nível, geralmente 1-2 horas.
Prática. Trabalhos de laboratório
O trabalho de laboratório cobre várias competências ao mesmo tempo. Após a conclusão dos trabalhos laboratoriais, estas competências são contabilizadas como comprovadas e não se enquadram na prova oral.
O trabalho de laboratório termina com um relatório. O relatório pode incluir uma demonstração, revisão de código e perguntas orais. O conjunto de verificações depende do próprio laboratório.
Formulações aproximadas de tarefas
Desenvolvemos cerca de 20 tarefas (costumamos chamá-las de "trabalhos de laboratório" para os alunos). Vários - vamos publicar.
Aqui estão alguns exemplos de tarefas simples.
Tarefa 2a. "Web básica". Vamos implementar CRUD em PHP puro.
Competências:
- PHP: autenticação e autorização de sites
- PHP: Processando um Formulário de Feedback com Salvamento e Validação de Dados
- Front end: Criação de formulários html
- Frente: Sintaxe CSS e seletores, Compreendendo os pesos do seletor
- SQL: Princípios básicos do Mysql
- SQL: Tipos de dados
- PHP: sintaxe da linguagem PHP
A essência:
- crie um repositório no bitbucket e execute-o;
- imediatamente faça uma solicitação de branch e pull;
- instalar o plugin Statistic no PhpStorm, o número máximo de linhas para todo o projeto é 1500:
- crie as tabelas necessárias através do PhpStorm e preencha-as com os dados;
- faça uma página de autenticação;
- faça uma página com um formulário de feedback, que tem: um campo de texto, um campo de texto multilinha, botões de opção, caixas de seleção, uma lista suspensa, um botão de redefinição de formulário, um botão de envio de formulário;
- o formulário de feedback está disponível apenas para usuários autorizados, o critério de admissão é que o sistema esteja logado;
- tudo está lindamente exposto, mostre um exemplo de uso dos tipos básicos de seletores: id, class, attribute, pseudo-classe, pseudo-elemento;
- ambos os formulários devem ser processados sem JS;
- verifique através do PhpStorm se os dados estão sendo adicionados à tabela.
Verifica:
- a qualidade da decomposição de php, js, css é verificada;
- a capacidade de atribuir responsabilidades e estabelecer as dependências corretas entre os componentes MVC / ECB;
- segurança (acesso);
- segurança (XSS, injeção SQL);
- exatidão dos redirecionamentos;
- a unidade do estilo de codificação.
Desenvolvimento da tarefa
Tarefa 2b. Desenvolvimento da interface CRUD em PHP.
Competências:
- 3 maneiras de conectar um script
- Criação de formulários html
- Sintaxe CSS e seletores, Compreendendo os pesos do seletor
- JS: operadores, funções
- Depuração de JS usando o console do navegador
- Mysql Basics
- Tipos de dados
Conclusão - continuamos a trabalhar no site a partir da tarefa 2a:
- faça um mini-painel de administração:
- uma lista de formulários de feedback enviados;
- a lista deve ser ordenada por data de submissão, novas - primeiro;
- a lista pode ser “atualizada”, isso é feito usando AJAX;
- dica: para teste interativo de consultas ao banco de dados, use o console do banco de dados no PhpStorm;
- o formulário enviado pode ser retirado da área administrativa, tudo em AJAX;
- desta forma, para demonstrar todas as maneiras de conectar JS;
- os dados enviados podem ser editados (use um formulário já desenvolvido, sem AJAX);
- jQuery pode ser usado.
- abrir ferramentas de desenvolvedor (de preferência Firefox):
- encontre a origem da solicitação no log de solicitações;
- definir um ponto de interrupção, provocar a execução do código, examinar a execução do código passo a passo;
- durante a execução passo a passo, visualize os valores das variáveis por meio do inspetor correspondente;
- adicionar relógio;
- use o console para acessar variáveis no escopo atual.
Verifica:
- a qualidade da decomposição de php, js, css é verificada;
- a capacidade de destacar e estabelecer as dependências corretas entre os componentes MVC / ECB;
- segurança (acesso);
- segurança (XSS, injeção SQL);
- uniformidade do estilo de codificação;
- todos os pontos sobre o uso de ferramentas de desenvolvedor para demonstrar.
Aqui está um exemplo de "dificuldade média"
Tarefa 10.
Competências de Web scraping :
- Expressões regulares
- Solicitações HTTP do servidor, cURL
- TODO: escrever utilitários de console (e scripts únicos) com base na base de código do Bitrix Framework
- TODO: adicionar CRON
A essência:
- Analise o site, pense em estruturas de dados adequadas para processamento automatizado
- Analise o site nessas estruturas
- Projetar como um script CLI
- Configurações para implementar a capacidade de analisar não tudo, mas apenas o que o usuário precisa
Verifica:
- exatidão do ambiente CLI
- decomposição regex
- relação custo-benefício sob demanda
- processamento de erro
- a possibilidade de análise paralela de vários objetos ao mesmo tempo
- Trabalhe em console e modo interativo
- * trabalhar no modo de serviço externo acessível via HTTP, com suporte para filas

Visualize e baixe a matriz de competências - 2020
Tenho certeza que é assim que, passo a passo, com um mentor e constante revisão de código, por meio de uma cadeia de certificações, o desenvolvedor certo desenvolve "do estagiário ao arquiteto".
Diamantes se formam sob pressão.