Personne n'a initialement planifié le développement Web. Même dans un cauchemar. De manière générale, avec le soutien de grandes entreprises et de la science, les gens ont perçu la création de systèmes informatiques coûteux comme un processus étroitement scientifique à la disposition de l'élite, dans lequel il est très important de savoir non seulement rapidement oublié par la plupart des algorithmes (j'ai appris le principe de contourner le bois rouge et noir 5 fois avec un dépliant - un coup d'œil aux hanches qui se balancent au début du printemps efface complètement les informations reçues), mais aussi l'intérieur du fer. Cette
action sacrée, bien sûr, devait être correctement contrôlée (gloire au grand
Deming ), mesurée et testée, et testée pour toujours, amen. Mais quelque chose a immédiatement mal tourné ...
La lutte pour la liberté d'expression
Assez rapidement, le développement de logiciels a commencé à se transformer en graphomanie algorithmique et nymphomanie, et pour beaucoup d'argent, pour les clients. La situation avec la création de produits logiciels à grande échelle et les communautés de développeurs autour d'eux a commencé à ressembler à une implication dans les sectes religieuses sur la base d'un amour de l'ingénierie de l'auto-torture.
Le mouvement du logiciel libre a rapidement répondu à ces distorsions de bon sens, grâce auxquelles nous avons maintenant des outils gratuits, de haute qualité et très utiles dans nos loisirs et nos affaires auxquels nous sommes très habitués:
Linux ,
MySQL ,
PHP et bien d'autres.
Très bien, la valeur des logiciels libres est visible dans le contexte de l'interdiction d'utiliser Android sur les appareils Huawei. Et le développement actif des crypto-monnaies modernes alimente le feu - les crypto-banques se sont sérieusement mises au travail et tirent le sol des pieds des institutions et technologies traditionnelles.
Punks en développement - scripting
Cela ne veut pas dire que le logiciel s'est avéré mauvais. Il a juste été créé pendant longtemps, puis il a été testé pendant longtemps, puis ils ont reçu ce qui était déjà obsolète. Le processus fonctionne cependant. Evolution: dans des millions d'heures de test, les insectes disparaîtront et les lézards et les cafards resteront à la place des dinosaures, mais ... tenaces. Les gens ont passé beaucoup de temps à résoudre des tâches système de bas niveau, oubliant les objectifs commerciaux. La situation a été aggravée par la conviction que plus il y a de programmeurs, plus vite vous pouvez écrire un système. Le désir de se débarrasser de servir le code pour la gloire de son utilisation pour les entreprises a généré d'abord une soif sauvage, puis la mise en œuvre de toute une classe de langages de programmation, dont les objectifs étaient la sécurité, la vitesse de développement, la simplicité et la concision: Python, PHP, Ruby, Lua, JavaScript. Malgré les limites théoriques: le manque de typage statique, la présence d'un runtime et d'un ramasse-miettes, la paresse pure et simple et le gougeage sémantique, les technologies se développent activement et apportent bien plus d'avantages que de mal.
Des concepts qui fuient
Il est rapidement devenu clair qu'il était possible d'enseigner avec un bâton, mais écrire du code qui résout un problème commercial qui était simple et compréhensible pour les autres représentants d'Homo Sapiens était beaucoup plus difficile et vous voulez vraiment le faire vous-même. Pour avoir exprimé cette idée simple, ils ont presque brûlé Saint
Dijkstra vivant . Il s'agit de savoir comment écrire des livres (vous avez besoin d'un grand désir d'apprendre et d'aller au but = talent) et d'écrire des publications sur Facebook (vous avez besoin d'un compte). Mais loin de tout le monde a acquis cette compréhension, car il est plus facile d'apprendre la grammaire d'une langue que d'apprendre à y écrire des choses passionnantes, et donc un débat acharné est toujours en cours:
- quel langage de programmation est le meilleur
- quel système d'exploitation est plus correct
- passer des tests avant, pendant ou après le mariage
- quels pieds se lever le matin, etc.
La confrontation traditionnelle entre écrivains et bibliothécaires, critiques de musique et stars de la scène, créateurs d'entreprises et cadres intermédiaires :-)
Entre les mains d'un véritable ingénieur, le code est bon, pris en charge et sans erreur - dans n'importe quel langage de programmation. Et il est à courte vue de rechercher un environnement de développement dans lequel vous pouvez conduire des étudiants en vacances, des filles, de la bière et de la PS4 et attendre quelque chose en retour.
Il s'est avéré que la vie est si diversifiée et que les tâches qui sont résolues à l'aide de la programmation sont parfois si originales qu'une conception traditionnelle ne fonctionne tout simplement pas de front ou donne lieu à des "concepts troués" qui détruisent la conscience:
- La programmation orientée objet fonctionne bien dans les jeux et les systèmes graphiques, mais en Python, elle est fortement détestée en tant que concept qui limite la liberté. Je me souviens avoir vu en PHP la classe Tools étendant la classe Utils
- La programmation fonctionnelle fait un excellent travail de traitement des flux de données et des bordures (Apache Spark), mais Haskell n'a jamais décollé, car la vie n'est pas une abstraction mathématique, mais souvent un ensemble de béquilles diffusantes et rieuses
- Les scripts en PHP, Python, Ruby interconnectent parfaitement différentes technologies et composants d'application, dans Lua ils décrivent les scripts dans les jeux, mais écrire des services réseau très chargés sur eux est préférable de se tirer une balle dans la tête. Python ne pense même pas à ajouter du multithreading.
En général, il s'est avéré que résoudre tous les problèmes avec un seul outil (Java Spring), c'est un euphémisme, est inefficace et il vaut mieux choisir le bon outil pour la tâche que de marteler les ongles avec un microscope. Mais, malheureusement, ils n'aiment pas étudier ...
La difficulté est l'ennemi principal
Au fur et à mesure que les systèmes se sont développés, il est devenu de plus en plus clair que certains employés apprennent facilement, mettent en œuvre des concepts, langages, technologies avancés, lisent beaucoup, et certains, parfois, malheureusement, la majorité, franchement, n'ont pas le temps et commencent à comprendre leurs collègues avancés. Des modules effectivement écrits, incompréhensibles d'abord pour la majorité, puis pour les auteurs eux-mêmes, commencent à vivre leur propre vie et meurent, généralement dans une fière solitude. Il est devenu clair que toute l'équipe devrait posséder la technologie, sinon la technologie peut faire plus de mal que de bien.
Un excellent langage de programmation, audacieux et décent, avec une courbe d'entrée abrupte, disons, beau
Rust , peut être un inconvénient et un risque pour le projet.
Les gens sont beaux
Combien de décennies ont développé des langages de programmation et des technologies dans le même sens:
- Code efficace et rapide proche du matériel. Un compilateur qui fuit et qui est mal conçu et qui remplace un développeur. C / C ++.
- Collecteur d'ordures, langage sûr. Concepts puissants. Typage assez strict. Mais nous perdons de la vitesse et consommons de la RAM. Parfois, nous écrivons sous le garbage collector. Java, C #, Swift (oui, je connais la RC).
- Langage très simple, entrée rapide, développement rapide. Mais le manque de dactylographie (risques) et le ramasse-miettes. PHP, Python, Ruby.
Et puis une excellente idée apparaît: «les gars, nous n'allons pas dans le bon sens du mot; et rendons le compilateur plus intelligent? " La rouille est née, qui a satisfait presque toutes les demandes:
- Code efficace et rapide, zéro abstraction
- Compilateur intelligent qui protège le développeur contre de terribles erreurs lors de l'utilisation de la mémoire
- Pas de collecteur d'ordures, Carl. CE N'EST PAS!
Gloire à l'esprit et à la beauté!

Développement Web - comment cela pourrait-il arriver?
Après avoir accumulé l'expérience et les bourrages nécessaires, l'humanité a soudainement réalisé que si vous traversez l'
outil de mise en page du texte le plus simple
, un langage inventé en une nuit
pour automatiser les boutons de page Web , les
règles d'attribution des couleurs, et soigneusement, sans mouvements brusques, suivez toutes les instructions, tirez-le partout sur Internet c en utilisant PHP, avec la connaissance dont, disent-ils, les enfants sont déjà nés - vous pouvez obtenir la synergie technologique la plus puissante et commencer à résoudre rapidement les problèmes commerciaux ici et maintenant:
- Rendre des interfaces efficaces en utilisant HTML / CSS. Oui, ils n'étaient pas toujours parfaits, mais ils sont efficaces et, surtout maintenant, extrêmement puissants.
- Stockez en toute sécurité les données d'application dans MySQL
- Surfez sur le net via linux
- Transférer des messages entre les composants à l'aide de modèles architecturaux matures tels que les files d' attente
En fait, personne ne comprend pourquoi cette révolution a eu lieu, mais le fait demeure: la synergie de technologies simples a généré une bombe nucléaire. Et laissez PHP continuer à surprendre pour emprunter des concepts élaborés depuis longtemps dans d'autres langages, et laissez Python ne jamais implémenter le multithreading - c'est le script, à savoir la simplicité, la concision et un niveau élevé d'abstractions qui a permis de révolutionner la programmation et de résoudre les problèmes commerciaux rapidement, simplement et efficacement en 3 -5 lignes de code.
Synergie continue - BigData et apprentissage automatique
C'est pour les raisons ci-dessus que Python a décollé pour les tâches de traitement et d'analyse des données. Les mathématiciens se sont assis, ont écrit sur leur "terrible" outil de
frappe Duck , faiblement typé, qui fait peur à prendre entre vos mains - il n'y a pas de compilateur, wow, quel problème! Ils ont écrit, écrit et ... écrit un ensemble de bibliothèques de la plus haute classe:
- Numpy - traitement à grande vitesse de tableaux multidimensionnels, ce n'est pas et n'est pas prévu en PHP
- Pandas - Puissant traitement des données relationnelles en mémoire
- Matplotlib , Seaborn - Grands outils de visualisation de données
J'ai téléchargé la distribution de freeware
Anaconda , installé les packages et c'est tout, créer un bigdat, lancer des
neurones et prédire l'avenir! Gratuitement.
Cependant, ce sont toujours des fleurs. Berries est un environnement de communication et de développement interactif normalisé très populaire -
Jupiter Notebook . La première impression est la régression. Eh bien, existe-t-il un puissant IDE? Mais alors la compréhension vient - c'est un grand pas en avant. Le rôle de Jupiter est à peu près le même que celui du développement Web au moment de son apparition: résultats rapides, communications rapides, capacités critiques pour l'entreprise et normes ouvertes.
Web Studio et programmeur Web - Atmosphère
Vous demandez, pourquoi j'écris tout ça? Le fait est que sans plonger dans l'atmosphère du développement Web, vous ne pouvez pas voir comment contrôler au mieux la qualité lors de la création d'applications Web. Sans tomber amoureux de cet esprit, vous ne pouvez pas réussir sur le web. Les approches standard et classiques ne fonctionnent pas ici, et voici pourquoi:
- Contrairement au monde du C, C ++, où il est habituel de publier 1 à 2 versions par an, ici, elles sortent une fois par semaine, c'est-à-dire le développement se produit à des vitesses super-légères
- Contrairement au monde de C # et de Java, où il est habituel de s'impliquer dans la programmation orientée objet et de tout couvrir avec des tests unitaires et d'intégration, il existe souvent des concepts et des tâches si complexes et non standard qu'un script à 10 lignes peut résoudre une tâche plus rapidement et plus beau qu'un cadre à 10 classes. Tester les mises en page et les scripts, hélas, est automatiquement très difficile et coûteux, ils sont donc souvent testés avec les yeux et les utilisateurs :-)
- Contrairement au monde de la programmation fonctionnelle et à la beauté de l'expression fonctionnelle d'une tâche, ici, les approches de résolution sont exprimées à travers, dans un sens littéral mais bon sens, un âne, et cela est justifié - la faisabilité économique d'un terrible script procédural que vous pouvez jeter et écrire un nouveau (et donc 10 fois)
- Contrairement aux logiciels traditionnels, les idées sont ici rapidement implémentées dans le code, vérifiées, rejetées et mieux sélectionnées. 90% du code - meurt, 10% - vivent et ravissent les clients. Il vaut mieux avoir 10 lignes de travail fiables et compréhensibles, ici et maintenant, que 1000 lignes académiques quelque part dans des fonctions et des classes avec un trou indéfini et une couverture d'auto-test.
Mais l'essentiel, ce sont les gens. Parmi les développeurs Web, ils sont spéciaux. Ils ne sont pas qu'ils n'aiment pas écrire du code, mais ils le détestent. L'objet d'admiration pour le développeur Web est la vitesse de résolution du problème. S'il y a le choix entre 2 lignes de code PHP et un framework de 20 classes, le choix sera vers une solution plus sexuelle avec son laconicisme. C'est pourquoi, si vous pouvez choisir d'écrire ou de ne pas écrire de code, un programmeur Web professionnel choisira le premier et passera plus de temps avec la fille, par exemple, dans la salle de lecture de la bibliothèque, en étudiant l'
ancienne épopée indienne , et le nouveau venu apprendra la seconde jusqu'à ce qu'il se rende compte que le plus de code, plus il peut y avoir d'erreurs, et dans les autotests du code d'erreur, il y en aura encore plus et il est donc préférable d'écrire 5 lignes et de les vérifier rapidement avec vos yeux que de créer l'apparence de la qualité et de corriger toute erreur pendant des semaines :-)
Comment gérer la qualité des projets Web
À cette époque, vous avez probablement déjà appris que le développement Web est un domaine de programmation spécial, nouveau et très orageux, rempli de collègues très différents d'ingénieurs qui détestent le code et ont un désir ardent de résoudre les problèmes le plus rapidement possible et à l'aide d'outils prêts à l'emploi et simples . C'est pourquoi les développeurs Web deviennent souvent des administrateurs système qui aiment gagner plus que travailler. Et oui, une autre association, un développeur web ressemble plus à un nerd avec une arme à feu qu'à un samouraï 8 dan avec une épée, des streamers et plein de phalanges. Faites des paris, qui va gagner la bataille de rue, SANS les règles?
Mais ce n'est que la moitié de la bataille. Clients professionnels qui ont réalisé que l'utilisation du développement Web peut résoudre rapidement des problèmes complexes: créez une boutique en ligne dynamique avec connexion CRM et recherche intégrée d'un catalogue de produits en 1 semaine, si vous refaites la moitié des fonctionnalités de la boîte, vous pouvez écrire vous-même des livres de qualité Développement Web, à partir duquel Deming est susceptible de rouler constamment
sur une broche en enfer . Voici leurs points clés qui secouent les bases de l'assurance qualité classique:
- La vitesse de contournement des concurrents est plus importante que la qualité. Si le projet Web décolle et roule (1 sur 10 ou moins), vous pouvez le réécrire «correctement», mais, curieusement, personne ne les réécrit et ils vivent, souvent avec succès et confortablement, pendant des années.
- Le projet est fait pour l'action, la qualité unique et interne peut être oubliée en toute conscience. La probabilité que quelqu'un entre plus tard dans le code est égale à 0,00001% (j'ai grimpé dans de tels projets; le soir du Nouvel An, ils peuvent redevenir populaires).
- Les clients ne veulent pas écrire d'autotests qui augmentent le coût de développement de 2 fois et gonflent l'architecture des classes dans des ensembles de concepts abstraits et sortants. Mais parfois, pour les bibliothèques et, avec une probabilité élevée, la réutilisation, ils sont d'accord.
- Les clients sont prêts à aider à tester le système Web, réalisant souvent (malheureusement, il y a des exceptions) qu'avec de telles périodes de développement (4 mois pour l'ensemble du projet clé en main) et la lutte contre l'auto-test et l'inflation du code au niveau du contrat, il est impossible d'obtenir la même qualité de tous les composants du système .
- Les savoirs traditionnels ne sont pas nécessaires, car ils changent constamment, deviennent obsolètes et vous devez garder un service de documentation pour le mettre à jour. Plus facile à créer à la volée, voir les résultats et tourner la roue Agile.
- Fou de travail aime
Comprenant cela, les spécialistes de la qualité s'envolent sur le dragon et ne reviennent plus, horrifiés par ce qui se passe, ou acceptent les valeurs du développement Web, les pénètrent et construisent quelque chose comme ceci:
- Les approches utilisées dans la conception, le développement et les tests ne doivent pas être prises avec foi, religieusement. Il est important de devenir Thomas . Vous devez donc écrire des autotests, alors vous devez. Qui en a besoin, euh? Preuve de faisabilité économique. Pourquoi effectuer des autotests sur un site de cartes de visite si vous pouvez tout vérifier rapidement avec vos yeux? Pourquoi écrire des objets fictifs dans le framework que vous utilisez, s'il génère des tonnes de code qui peuvent contenir des erreurs et qui doivent être accompagnées. N'est-il pas plus facile d'écrire 10 lignes de code clair sans DI?
- À strictement parler, il est impossible d'estimer la période de développement d'un projet Web avec 3-5 jours pour la conception, donc l'évaluation est tirée du projet Web le plus similaire
et est multipliée par 666 - Parfois, lorsque cela est économiquement faisable, vous devez supprimer les risques critiques sur le prototype, effectuer des tests de stress préventifs
- Il est important de vérifier que des outils, des cadres et des technologies prêts à l'emploi sont utilisés et il est clair que plus il y a de code, plus il faudra corriger les erreurs
- Il est important, très important, de fournir les communications les plus intensives qui vous permettent de vous immerger pleinement dans le système Web, de ressentir son mouvement et son architecture et de créer l'effet de «beaucoup d'yeux regardent le code». Rappelons que sous Linux, un système d'exploitation performant, pendant longtemps il n'y a pas eu de test automatisé, et si la conception pilotée par les tests était là tout de suite, elle serait probablement encore lancée. Mais d'un autre côté, Linux a immédiatement eu un audit approfondi du code et un système centralisé d'acceptation des modifications. Vous devez bien le ressentir.
- Dans de tels projets, vous pouvez réduire considérablement les risques si vous connectez des ingénieurs expérimentés pour planifier une architecture de bas niveau et décider de la nécessité d'un prototype. Dès qu'il y a un sentiment qu'il y a un éventail d'exigences et de budget, pour avoir des ennuis - vous devez faire quelques astuces suicidaires, saupoudrer du sang sur plusieurs murs et des planches Agiles. Victime du succès du projet - quoi de plus cool?

Ainsi, la qualité du système Web peut toujours être gérée efficacement si vous abordez le sujet avec sagesse, avec frugalité, sans prendre les dogmes de l'ingénierie religieuse sur la foi, en vérifiant tout et en vous efforçant de simplicité et en minimisant la quantité de code et de bibliothèques créées par le haut. Supprimer la créativité technique rapide des équipes et la diriger vers la recherche de simplicité, de concision, de faible coût et de transparence - cela aide beaucoup, en particulier dans la création de systèmes Web complexes et non standard.
Mais le plus difficile, malheureusement, nous avons laissé les coulisses. La partie la plus difficile est d'apprendre à équilibrer l'accent mis sur le rasoir. Vous, un développeur Web, vous êtes debout sans armure, dans des
membres de la famille bien ajustés et une chemise avec l'inscription «Agile», avec une fronde en rotation dans vos mains, devant le géant. Et si vous le frappez au front - votre projet. Mais manquez quelques fois de suite - vous serez piétiné par les 8èmes escouades de samouraïs avec un bon étirement et plein de phalanges, qui, mangeant votre cadavre, cracheront avec des os et riront: "Je voulais résoudre un problème de 50 classes et 7 frameworks en PHP, fou" . En général, ne manquez pas, portez des armes à feu, apprenez le développement web et ... bonne chance!