Ne dis pas que tu n'aimais pas ça ou ma vision de l'apprentissage

Bonjour à tous. Je voudrais donner mon avis sur la formation en programmation moderne. L'article parlera de PHP, un peu de frameworks et un peu de vélos. Mais je pense que cela s'applique à n'importe quel langage de programmation. Commençons.


Rappelez-vous votre premier code PHP?


Non, pas celui-ci:


<? echo "Hello world"; //       index.php :) ?> 

Et celui-ci:


 <? include "db.php"; if ($_GET['id'] > 0){ mysql_query("SELECT * FROM `posts` WHERE id = {$_GET['id']}"); }else{ mysql_query("SELECT * FROM `posts` ORDER BY `id` DESC"); } ?> 

Au fil du temps, nous avons grandi, nous avons développé une compréhension de la POO (ha, ha) et nous avons commencé à produire quelque chose de similaire à ceci:


 <?php require "db.php"; if ($_GET['id'] > 0){ $db->query("SELECT * FROM `posts` WHERE id = {$_GET['id']}"); }else{ $db->query("SELECT * FROM `posts` ORDER BY `id` DESC"); } ?> 

Ensuite, nous avons entendu quelque part que mysql_ * ne peut pas être utilisé et tout le monde utilise mysqli_ *, car c'est plus cool. Nous avons réécrit notre code pour utiliser mysqli. Après un certain temps, nous avons découvert PDO.


En parallèle, nous avons travaillé avec des variables globales et des classes de cent lignes dans chaque méthode. Connaissez-vous la classe User, qui a pu enregistrer un utilisateur, s'authentifier (oui, autoriser bien sûr, nous ne connaissons toujours pas la différence!), Récupérer un mot de passe? Je sais. Notre classe d'utilisateurs pouvait modifier n'importe quel utilisateur, car nous avions une super méthode pour cela:


 // PSR? ,  . class User { public function changeUserProfile($userId, array $userData){ global $db; //    $db->query("UPDATE `user` SET ...."); } public function login($userId){ } public function logout(){ //     <a href="/logout.php"></a> :) } } 

Et j'ai aussi eu des cours Db, Post et Comment.


Nous connaissions l'injection SQL, les attaques XSS et:


  DROP TABLE `posts` 

SOLID, PSR, MVC et les patterns ne sont pas que des mots


Nous sommes allés de cette façon nous-mêmes, avons découvert SOLID, PSR, MVC. Pour nous, ce ne sont pas seulement des mots, mais un besoin urgent, surtout après le terrible héritage et les tas de code, dont chacune des classes est écrite dans son propre style. Nous avons marché sur des milliers de râteaux, écrit autant de vélos et, par conséquent, commencé à écrire du code plus / moins adéquat.


Nous n'utilisons plus de variables globales et superglobales dans nos classes, pour SQL nous utilisons des requêtes préparées et ne plaçons pas SQL dans les contrôleurs (nous n'avons également plus UserModel :: login ()). Nous implémentons les objets nécessaires à l'aide de DI, mais ne les créons pas à l'intérieur de la classe. Nous pilotons la demande / réponse, et non l'écho de "bonjour le monde" et nous savons pourquoi nous faisons cela. Nous testons notre code non seulement à l'aide d'un navigateur, mais nous écrivons également des tests synthétiques. Quel en est le prix? J'ai une enfance avec un ordinateur, des dizaines de nuits blanches, autant de fakaps et une base de données cassée.


Et j'ai aussi compris très tôt pourquoi $ _POST dans les modèles était mauvais.


N'étais-tu pas ce genre de personne? Je l'ai été.


C'était donc avant. Mais pas maintenant


Jusqu'à présent, je ne peux pas comprendre si le nouveau mod pour les cours de développement PHP est mauvais ou non. D'une part, les gens se voient proposer en peu de temps d'apprendre immédiatement à écrire correctement leur code, mais d'autre part, les gens ne comprennent pas pourquoi c'est la bonne façon d'écrire. Toute une couche de connaissances est perdue, la base, qui devra alors être rapidement constituée.


Maintenant, ils offrent des dizaines de cours. En quelques heures seulement, vous apprendrez à écrire en Laravel, Yii2 ou tout autre framework. Vous ne connaissez pas les bases de PHP et OOP? PSR pour vous Prosto Sdelay Raboty? Peu importe, nous vous l’apprendrons, pour seulement 19 990 roubles. Une personne paie et pense qu'on lui apprendra à bien écrire immédiatement. Avez-vous écrit tout de suite?


J'ai commencé à remarquer que pour une raison quelconque, les gens ont cessé de comprendre la base de données (travailler avec des bases de données, des fonctions, la POO, le démarrage, la réflexion, travailler avec des fichiers, un réseau, etc.), et ils sont passés directement aux frameworks. Ils ne savent pas comment cela fonctionne de l'intérieur, ils écrivent simplement sur le cadre, et non avec l'aide. Ils ne sont pas inquiets de ce que fait File :: save (), la force de l'encapsulation est la même. Et ce n'est pas intéressant. Et si quelque chose n'est pas dans ce cadre, cette fonction ne peut pas être effectuée.


Mais je ne suis pas d'accord avec cette approche de l'apprentissage. Le vélo est le meilleur moyen de comprendre n'importe quelle technologie (enfin, ça va commencer maintenant). Parlant d'une manière ou d'une autre d'une tasse de café, j'ai dit une pensée idiote: si vous voulez comprendre PHP, écrivez votre CMS avec des plugins, des autorisations, ext. champs et panneau d'administration. Et puis j'ai pensé. Ou peut-être que l'idée n'est pas stupide du tout?


Comment fonctionne l'apprentissage par les cadres?


Donc, nous utilisons le compositeur create-project ...., puis allons dans .env, modifiez l'accès pour la base de données, puis nous mettons les classes de contrôleur ici, les classes de modèle ici, les classes de modèle ici. Nous semblions avoir appris, mais nous ne comprenions pas comment cela fonctionne de l'intérieur. Un peu exagéré, mais comme ça.


J'ai rencontré plusieurs personnes qui ont dit écrire sur des frameworks. Mais en même temps, ils ne connaissent pas les bases. Une personne, très sérieusement, m'a dit qu'il ne connaissait pas la fonction array_map.


D'accord, que nous apportera notre vélo?


Au moins, nous nous familiariserons avec le chargement automatique des fichiers et des classes. Nous apprendrons que cela peut être fait à l'aide de composer, plutôt que d'écrire votre spl_autoload_ ... Nous apprendrons à créer des connexions à la base de données, à l'aide de la réflexion, nous apprendrons à construire notre système de plug-in et à comprendre pourquoi \ $ _ GET et \ $ _ POST dans la logique métier est mauvais. Nous irons de la demande à la réponse. Les cadres vont dans ce sens pour nous.


Oui, presque tous les frameworks sont parfaitement écrits. Dans le processus d'apprentissage, vous devez regarder comment ces choses ou d'autres ont été accomplies. Si vous écrivez votre «méga framework», vous devrez effectuer une rétro-ingénierie et comprendre comment fonctionnent les mêmes Yii2 ou Laravel. Et peut-être que vous serez stupéfait lorsque vous découvrirez que Laravel n'est qu'un tas de composants. Un effet secondaire de ceci est une compréhension profonde du cadre et de son architecture interne. Et dans ce mode, il me semble, la compréhension vient beaucoup plus vite. Au moins personnellement avec moi.


Après avoir franchi toutes les étapes, nous comprendrons en profondeur pourquoi ces approches et modèles de conception sont utilisés, en particulier lorsque vous avez besoin d'étendre, de maintenir et de tester votre code.


Sur les forums et les réseaux sociaux, ils discutent seulement que les vélos sont mauvais. Quand je vois un article sur un site où une personne parle de son projet de maison, que ce soit un réseau social, un blog ou un site avec un catalogue de chats, qu'il a écrit à partir de zéro ou sur des composants individuels, je suis un peu heureux. Une personne apprend de la base et c'est bien!


Après tout, comment étudier autrement? Avez-vous immédiatement commencé à écrire un code fonctionnel et précis sans erreur? Non, j'ai écrit des milliers de lignes de code avant de réaliser ce qui se passait. Même si je ne comprenais peut-être pas, mais est-ce que tout me semble?


Mais il vaut mieux écrire votre vélo à la maison, comprendre la technologie, comprendre ce qui est, peut-être même trouver une solution toute faite sur packagist, que d'écrire votre vélo en production.


L'article de mail.ru est proche de moi: PHP moderne sans frameworks , dans lequel l'auteur a voulu montrer le périphérique de tous les frameworks et ce qu'ils sont vraiment.


Récemment, beaucoup de code hérité des années 2000 est devenu dans ma vie. Le projet est ancien, mais intéressant. Qui doit également être transféré sur de nouveaux rails (si c'est intéressant, je le dirai certainement). Il ressemble à peu près au code au début de l'article: mise en page, sql et logique dans un seul fichier. Mais j'ai une photo héritée. Je sais comment travailler avec lui et comment le refactoriser. Mais que fera une personne qui ne peut écrire que sur des frameworks?


Il ne fera tout simplement pas face à un tel projet :)

Source: https://habr.com/ru/post/fr470087/


All Articles