Lorsque j'ai obtenu mon diplôme universitaire en 2004, il n'y avait presque pas d'équipes de développement dans notre ville. Où travailler, auprès de qui acquérir une expérience pratique?
Le choix était simple: «admin» ou «à Moscou». Ou quittez la profession.
Maintenant, j'enseigne le développement Web dans les universités locales, je gère une grande équipe, et il est important pour moi que les jeunes gens intelligents veuillent vivre dans ma ville pour que notre ville ne soit pas considérée comme un «endroit pourri».
L'essence de l'article est courte
Mes collègues et moi savons comment «faire évoluer» les programmeurs Web de «presque zéro» au niveau d'un professionnel confiant (Senior / Architect).
Nous voulons vous dire comment tout fonctionne et partager du matériel et des méthodes avec la communauté.
Cet article s'adresse aux étudiants, aux débutants et aux développeurs Web en pleine croissance.
Ce qui suit décrit la «piste de développement d'un développeur Web», les niveaux de compétence «Stagiaire», «Junior», «Moyen», «Senior» et «Architecte», comme je les vois, et des exemples de tâches de certification sont donnés.
La pyramide des capacités des programmeurs ou "ce qu'il faut télécharger au début"
Comment devenir un bon programmeur Web? Dois-je terminer «informatique» dans une bonne université? Ou des cours mensuels suffisent-ils? Ou "avec un livre et une souris" pouvez-vous tout étudier?
Les algorithmes, les bases de données et la programmation proprement dite (langage + OOP + patterns) sont trois "piliers" sur lesquels repose le métier de tout développeur sur n'importe quelle pile technologique.
Qu'est-ce que l'algorithmisation?
La réparation des ventilateurs est un analogue proche «quotidien» de la compétence technique de «l'algorithmisation». Et si ça ne tourne pas? Vérifiez / changez la douille, puis tournez les lames à la main, puis «sonnez» le fil.
La logique est évidente: «J'ai divisé en parties et vérifié chacune d'elles». Étonnamment, beaucoup de gens ne savent pas comment penser de cette façon. C'est dans le sang d'un vrai programmeur.
Base de données
Le cours DB est l'un des principaux, comme la physique pour un ingénieur. La mauvaise nouvelle est qu'ils sont souvent aussi mal enseignés: ils sont réduits à «raconter des paragraphes».
La théorie et la pratique sont toutes deux importantes en DB. Le programmeur doit être capable d'écrire des requêtes, de comprendre la logique ORM et de concevoir la structure.
Quelles technologies un programmeur doit-il connaître?
En quoi consiste le professionnalisme d'un développeur? Le temps approximatif de développement est indiqué pour la voie classique de développement (à partir de l'université).
L'algorithmisation est enseignée «selon l'esprit» à l'école / à l'université. Il faut 1 à 2 ans pour cela, et cette période détermine la hauteur du futur décollage professionnel. Si vous ne maîtrisez pas les algorithmes, vous ne grandirez jamais.
Les caractéristiques d'une langue particulière peuvent être apprises assez rapidement. Si vous apprenez une deuxième ou une troisième langue, vous résoudrez votre premier problème significatif en une semaine. Mais "je sais parfaitement" prendra au moins un an de pratique.
Les frameworks incluent souvent des centaines de modules / classes / extensions et sont en constante évolution. La maîtrise du framework vous prendra au moins plusieurs mois.
De nombreux autodidactes suivent le chemin «facile», mais faux: au lieu de l'algorithmique, ils commencent à apprendre le cadre. Et après quelques mois, les pratiquants déclarent qu'ils peuvent programmer. Ils échouent aux entretiens sérieux dans les 10 minutes suivant le début.
Les technologies spécifiques (par exemple AJAX, rendu JS côté serveur, push & pull, équilibrage de charge entre géo-cluster, profilage de longues requêtes dans xhprof, files d'attente de messages, bases de données NoSQL) sont infinies. Vous pouvez les apprendre pour toujours.
Cette pyramide doit être parcourue «de bas en haut». Si vous commencez avec un cadre et rédigez un joli CV, mais que vous ne savez pas comment fonctionne le «JS nu» ou «en quoi une demande d'obtention diffère d'un article», vous ne serez pas un pro.
Quelles tâches doivent être résolues?
La première étape est le «démarrage». Tout d'abord, vous avez besoin de la compétence d'une solution sûre et correcte à des tâches relativement simples. Le plus souvent, ce sont des problèmes de jeu, mathématiques ou logiques.
Pour la compétence «J'écris du code simple rapidement», vous devez résoudre n'importe lequel des ensembles classiques de problèmes de programmation dans n'importe quel langage de programmation. Par exemple, Zlatopolsky .
Cela peut vous sembler étrange de résoudre 1000 problèmes ennuyeux, mais chaque bon programmeur l'a fait au début de son voyage. Quelqu'un - à l'institut, quelqu'un à l'école, nos enfants le feront dans les jardins d'enfants.
Cette méthode d'enseignement par les médecins est appelée la «méthode du plomb». Pardonnez-moi d'être impoli, mais vous ne pouvez pas effacer les mots de l'art populaire.
La deuxième étape est la «pratique».Vous devez écrire du code que vous pouvez comprendre en un an. Ainsi, lorsque de nouvelles exigences apparaissent, vous n'avez pas à tout réécrire à partir de zéro. De sorte que lorsque le projet croît 100 fois, il reste «soutenu». Pour que lorsqu'ils ajoutent des programmeurs à l'équipe, ils ne vous mordent pas pour un style étrange.
C'est une transition très difficile. Beaucoup de programmeurs ne le font jamais: ils deviennent des développeurs «one program», ou ils écrivent toujours des projets ne dépassant pas 200 lignes. Ce n'est pas un niveau pro.
Pour apprendre, vous devez résoudre de gros problèmes en équipe et lire les bons livres en parallèle. Par exemple, "Clean Code" de Robert Martin .
Les «grandes tâches» sont de véritables services utilisés par des personnes, où l'équipe est composée d'au moins 2 personnes et se compose de milliers de lignes de code. De tels projets forment un spécialiste confiant.
La troisième étape est la «maîtrise». Il s'agit de maîtriser des cadres spécifiques au sein de la pile technologique choisie. Vous devez apprendre à résoudre de vrais problèmes modernes à un niveau élevé.
Un livre plus difficile et plus utile est les modèles d'application d'entreprise de Martin Fowler . Il faut aussi le lire, après environ un an et demi de travail dans la profession.
Pourquoi? Puis-je simplement terminer le cours de 3 mois «développeur Web»?
Étonnamment souvent, «comme les programmeurs» viennent aux interviews. Ils ont des cours, des emplois multiples, des portefeuilles avec de beaux sites Web à leur actif (façon étrange, comme si nous recherchions un concepteur de sites Web).
Dans le même temps, les gens ne connaissent souvent pas la réponse à la question la plus simple comme «qu'est-ce que les cookies» ou «comment fonctionne le chargement des messages dans le fil VKontakte», ils n'ont même pas de versions.
Un bon programmeur connaît la théorie et l'applique dans la pratique, en pensant tout le temps «comment bien faire les choses». La «moelle épinière» et la «copie de morceaux de code de Google» ne vous mèneront pas loin. Vous avez besoin d'une base et de la pratique.
Comment obtenir cette "base"? Où est le bon endroit pour étudier? Il y a deux manières. Le premier est de 4-5 ans dans une bonne université. Le second est quelques années d'auto-apprentissage et de pratique persistants. Vous pouvez devenir un programmeur fort sans formation spécialisée si vous avez la tête brillante, le cœur ouvert et vous-même êtes prêt à travailler dur.
Les cours de courte durée sont utiles pour acquérir des connaissances de base et comprendre «où se creuser». Ils ne feront pas un professionnel.
Matrice de compétences. Stagiaire - Junior - Moyen - Senior - Architecte
Nous pensons que notre matrice est la réponse à la question «comment passer d'un débutant à un gourou du développement web».
Dans notre monde, un développeur s'occupe principalement des tâches backend, mais il ne doit pas avoir peur du front-end et de l'administration (il existe des spécialistes étroits pour les tâches diaboliques).
Une matrice complète avec des exemples de questions de certification est disponible ici.
Il s'agit d'un tableau divisé en grades (stagiaire, junior, moyen, senior). Chaque grade contient un ensemble de compétences uniques. Les questions sont regroupées par domaine d'expertise (PHP, SQL, Frontend, technologies Web en général et gestion des serveurs)
Stagiaire
Au départ, le stagiaire doit être capable de:
- distinguer en toute confiance les cookies des sessions;
- comprendre qu'une opération spécifique est en cours sur le serveur ou dans le navigateur;
- pour écrire une tâche de gestion de données simple en PHP sans frameworks serveur. Par exemple, "maintenir une base de données de groupes et d'étudiants avec édition, suppression, création et affichage";
- arrangez décemment le résultat de votre travail.
Le stagiaire étudie. Sa tâche principale est d'acquérir des connaissances, de résoudre des problèmes sous supervision et d'obtenir de grands coups.
Presque chaque stagiaire supprime une base, manque une fenêtre ou résout un problème longtemps clos. Bien sûr, pas de mal aux projets de combat.
Les erreurs font partie de l'apprentissage normal.
Junior
Junior est capable de résoudre les problèmes par lui-même. Il consulte souvent ses aînés, mais les questions qu'il pose ne sont pas du tout des stagiaires.
Ce que Junior devrait pratiquement être capable de faire au départ:
- réécrire (et cela signifie bien comprendre) l'autorisation sur le site;
- éditer en toute confiance les paramètres et le code cadre du travail des répertoires, des fils d'actualité, des formulaires;
- collecter des interfaces de gestion de données simples et des sites entiers sur le framework;
- écrire une intégration simple avec une API externe.
Milieu
Middle est un spécialiste capable de résoudre lui-même tout problème typique de l'industrie.
Pratiquement ce que Middle devrait être capable de faire au début:
- travailler avec une autorisation externe (connectez-vous via un fournisseur externe ou faites de votre code un fournisseur d'autorisation);
- programmer en toute confiance les interfaces des boutiques en ligne publiques, des marketplaces ou des portails intranet (selon les spécificités);
- recueillir des interfaces de gestion de données complexes et des sections sur le cadre;
- écrire des intégrations complexes avec des API externes, implémenter des services Web.
Sénior
Senior connaît à fond «sa pile», apprend et applique facilement les nouvelles technologies et travaille comme mentor.
Par exemple, ce que le Senior lui-même devrait savoir et être capable de faire sur le bloc «Travailler avec des serveurs et Linux».
- Construire un système de déploiement atypique
- Travailler avec des microservices.
- Organisation des tests de charge
- Configurer l'intégration continue
- Synchronisation de fichiers et réplication de données
- Créez un cluster tolérant aux pannes et à forte charge avec et sans Bitrix Framework.
- ELK / autres systèmes de journalisation et d'analyse
- Serveurs de files d'attente Gearman / RabbitMQ et création de systèmes distribués
En règle générale, Senior joue le rôle du chef technique de l'équipe de développement.
Architecte
Un architecte est le prochain niveau de développement pour un spécialiste, quand il réfléchit à l'architecture de grands projets et dirige leur mise en œuvre. Il n'est pas seulement un technicien, mais aussi un chef de projet.
Ces spécialistes jouent un rôle clé dans des projets techniquement et organisationnellement complexes.
La qualité d'un architecte détermine la capacité d'un projet à être achevé à temps et à se développer pendant de nombreuses années consécutives.
Gestion du développement des programmeurs
Chaque mois, avec chaque programmeur, nous organisons individuellement une "réunion de planification du développement" et discutons d'autres sujets de travail. Le chef de service, le responsable technique et / ou le mentor sont impliqués.
Au cours de ces réunions, nous déterminons ensemble les priorités de développement - réussir un examen de laboratoire ou de compétence orale.
Comment le contrôle de niveau (certification) est-il organisé?
Qu'est-ce que l'attestation? Il s'agit d'une procédure de confirmation des qualifications d'un programmeur. Tous les programmeurs le passent. La certification comprend les travaux de laboratoire et les examens oraux.
À la suite de l'attestation, «Oui» apparaît en regard des compétences confirmées dans la matrice de compétences. Cela augmente la note, par exemple "Stagiaire-54%" → "Junior-27%".
Comment se passe la certification?
La certification comprend la théorie (examen oral) et la pratique (travail en laboratoire). L'objectif est de «fermer» plusieurs compétences de la matrice, de confirmer le niveau, d'obtenir de nouvelles tâches et d'augmenter les salaires.
Les exercices pratiques ne peuvent être effectués correctement que si vous étudiez et comprenez la théorie. La triche et la triche ne sont pas acceptées, et le mentor ne manquera pas le hack.
De nombreux blocs de la matrice de compétences sont fermés par la pratique et il n'y a pas de questions théoriques à leur sujet.
Théorie. Examen oral
Les compétences non couvertes par les travaux de laboratoire doivent être confirmées lors d'un examen oral.
Pour chaque compétence, nous posons environ 5 questions. De manière amiable, vous devez répondre à tout ou presque. La durée de l'examen oral dépend du niveau, généralement 1 à 2 heures.
Entraine toi. Travaux de laboratoire
Le travail de laboratoire couvre plusieurs compétences à la fois. Une fois les travaux de laboratoire terminés, ces compétences sont comptabilisées comme confirmées et ne relèvent pas de l'examen oral.
Le travail de laboratoire se termine par un rapport. Le rapport peut inclure une démo, une révision du code, des questions orales. L'ensemble des contrôles dépend du laboratoire lui-même.
Formulations approximatives des tâches
Nous avons développé une vingtaine de tâches (nous les appelons généralement «travaux de laboratoire» pour les étudiants). Plusieurs - nous publierons.
Voici des exemples de tâches simples.
Tâche 2a. "Web de base". Implémentons CRUD en PHP pur.
Compétences:
- PHP: authentification et autorisation du site
- PHP: traitement d'un formulaire de commentaires avec sauvegarde et validation des données
- Recto: création de formulaires html
- Face avant: syntaxe et sélecteurs CSS, compréhension des pondérations des sélecteurs
- SQL: principes de base de Mysql
- SQL: types de données
- PHP: Syntaxe du langage PHP
L'essence:
- créer un référentiel sur bitbucket et y exécuter;
- faites immédiatement une demande de branchement et de tirage;
- installez le plugin Statistic dans PhpStorm, le nombre maximum de lignes pour l'ensemble du projet est de 1500:
- créer les tables nécessaires via PhpStorm et les remplir de données;
- créer une page d'authentification;
- créer une page avec un formulaire de commentaires qui a: un champ de texte, un champ de texte multiligne, des boutons radio, des cases à cocher, une liste déroulante, un bouton de réinitialisation de formulaire, un bouton d'envoi de formulaire;
- le formulaire de rétroaction est disponible uniquement pour les utilisateurs autorisés, le critère d'admission est que vous êtes connecté au système;
- tout est magnifiquement présenté, montrez un exemple d'utilisation des types de base de sélecteurs: id, classe, attribut, pseudo-classe, pseudo-élément;
- les deux formulaires doivent être traités sans JS;
- vérifiez via PhpStorm que des données sont ajoutées à la table.
Vérifier:
- la qualité de la décomposition php, js, css est vérifiée;
- la capacité d'attribuer la responsabilité et d'établir les dépendances correctes entre les composants MVC / ECB;
- sécurité (accès);
- sécurité (XSS, injection SQL);
- l'exactitude des redirections;
- l'unité du style de codage.
Développement de la tâche
Tâche 2b. Développement de l'interface CRUD en PHP.
Compétences:
- 3 façons de connecter un script
- Créer des formulaires HTML
- Syntaxe et sélecteurs CSS, compréhension des pondérations des sélecteurs
- JS: opérateurs, fonctions
- Débogage de JS à l'aide de la console du navigateur
- Principes de base de Mysql
- Types de données
En bout de ligne, nous continuons à travailler sur le site à partir de la tâche 2a:
- créer un mini panneau d'administration:
- une liste des formulaires de commentaires soumis;
- la liste doit être triée par date de soumission, les nouvelles - en premier;
- la liste peut être «mise à jour», cela se fait avec AJAX;
- Astuce: pour tester interactivement les requêtes de base de données, utilisez la console de base de données dans PhpStorm;
- le formulaire soumis peut être supprimé du panneau d'administration, le tout sur AJAX;
- démontrer ainsi toutes les manières de connecter JS;
- les données soumises peuvent être éditées (utilisez un formulaire déjà développé, sans AJAX);
- jQuery peut être utilisé.
- ouvrir les outils de développement (de préférence Firefox):
- trouver la source de la demande dans le journal des demandes;
- définir un point d'arrêt, provoquer l'exécution du code, examiner l'exécution du code étape par étape;
- lors de l'exécution pas à pas, visualisez les valeurs des variables via l'inspecteur correspondant;
- ajouter une montre;
- utilisez la console pour accéder aux variables de la portée actuelle.
Vérifier:
- la qualité de la décomposition php, js, css est vérifiée;
- la capacité de mettre en évidence et d'établir les dépendances correctes entre les composants MVC / ECB;
- sécurité (accès);
- sécurité (XSS, injection SQL);
- uniformité du style de codage;
- tous les points sur l'utilisation des outils de développement pour démontrer.
Voici un exemple de
tâche 10 de «difficulté moyenne» .
Compétences en matière de web scraping :
- Expressions régulières
- Requêtes HTTP du serveur, cURL
- TODO: écrire des utilitaires de console (et des scripts à usage unique) basés sur la base de code Bitrix Framework
- TODO: ajouter CRON
L'essence:
- Analyser le site, réfléchir aux structures de données adaptées au traitement automatisé
- Analyser le site dans ces structures
- Conception en tant que script CLI
- Paramètres pour implémenter la capacité d'analyser non pas tout, mais uniquement ce dont l'utilisateur a besoin
Vérifier:
- l'exactitude de l'environnement CLI
- décomposition regex
- rentabilité sur demande
- traitement des erreurs
- la possibilité d'analyser en parallèle plusieurs objets à la fois
- Travailler en console et en mode interactif
- * travailler dans le mode d'un service externe accessible via HTTP, avec prise en charge des files d'attente
Voir et télécharger la matrice de compétences - 2020
Je suis sûr que c'est ainsi, pas à pas, avec un mentor et une révision constante du code, à travers une chaîne de certifications, le bon développeur se développe "de stagiaire à architecte".
Les diamants se forment sous la pression.