Hallo an alle. Ich möchte meine Meinung zum modernen Programmiertraining äußern. Der Artikel wird über PHP sprechen, ein wenig über Frameworks und ein wenig über Fahrräder. Aber ich denke, das gilt für jede Programmiersprache. Fangen wir an.
Erinnerst du dich an deinen ersten PHP-Code?
Nein, nicht dieser:
<? echo "Hello world";
Und dieser:
<? 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"); } ?>
Im Laufe der Zeit sind wir aufgewachsen, haben ein Verständnis für OOP (ha ha) entwickelt und haben begonnen, etwas Ähnliches zu produzieren:
<?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"); } ?>
Dann haben wir irgendwo gehört, dass mysql_ * nicht verwendet werden kann und jeder mysqli_ * verwendet, da dies cooler ist. Wir haben unseren Code umgeschrieben, um mysqli zu verwenden. Nach einiger Zeit lernten wir PDO kennen.
Parallel dazu haben wir in jeder Methode mit globalen Variablen und hundertzeiligen Klassen gearbeitet. Kennen Sie die Benutzerklasse, mit der ein Benutzer registriert, authentifiziert werden konnte (ja, natürlich autorisieren, wir kennen den Unterschied immer noch nicht!), Ein Kennwort wiederherstellen? Ich weiß Unsere Benutzerklasse konnte jeden Benutzer bearbeiten, da wir dafür eine hervorragende Methode hatten:
Und ich hatte auch Klassen Db, Post und Kommentar.
Wir waren vertraut mit SQL-Injection, XSS-Angriffen und:
DROP TABLE `posts`
SOLID, PSR, MVC und Muster sind nicht nur Wörter
Wir sind diesen Weg selbst gegangen und haben etwas über SOLID, PSR, MVC gelernt. Für uns sind dies nicht nur Wörter, sondern ein dringendes Bedürfnis, insbesondere nach dem schrecklichen Erbe und den Haufen von Code, von denen jede Klasse in ihrem eigenen Stil geschrieben ist. Wir traten auf Tausende von Rechen, schrieben so viele Fahrräder und begannen, mehr / weniger angemessenen Code zu schreiben.
Wir verwenden keine globalen und superglobalen Variablen mehr in unseren Klassen, für SQL verwenden wir vorbereitete Abfragen und fügen SQL nicht in Controller ein (wir haben auch kein UserModel :: login () mehr). Wir implementieren die erforderlichen Objekte mit DI, erstellen sie jedoch nicht innerhalb der Klasse. Wir fahren Request / Response, nicht Echo "Hallo Welt" und wir wissen, warum wir das tun. Wir testen unseren Code nicht nur mit einem Browser, sondern schreiben auch synthetische Tests. Was ist der Preis dafür? Ich habe eine Kindheit mit einem Computer, Dutzenden schlaflosen Nächten, ebenso vielen Fakaps und einer kaputten Datenbank.
Und ich habe auch früh verstanden, warum $ _POST in Modellen schlecht ist.
Warst du nicht so eine Person? Ich war.
So war es vorher. Aber nicht jetzt
Bis jetzt kann ich nicht verstehen, ob der neue Mod für PHP-Entwicklungskurse böse ist oder nicht. Einerseits wird den Menschen in kurzer Zeit angeboten, sofort zu lernen, wie sie ihren Code richtig schreiben, andererseits verstehen die Menschen nicht, warum dies die richtige Art zu schreiben ist. Eine ganze Wissensschicht geht verloren, die Basis, die dann schnell wieder aufgebaut werden muss.
Jetzt bieten sie Dutzende von Kursen an. In nur wenigen Stunden lernen Sie, wie man in Laravel, Yii2 oder einem anderen Framework schreibt. Sie kennen die Grundlagen von PHP und OOP nicht? PSR für Sie Prosto Sdelay Raboty? Es spielt keine Rolle, wir werden es Ihnen beibringen, für nur 19.990 Rubel. Eine Person zahlt und glaubt, dass sie lernen wird, sofort richtig zu schreiben. Hast du sofort geschrieben?
Ich bemerkte, dass die Leute aus irgendeinem Grund die Datenbank nicht mehr verstanden (Arbeiten mit Datenbanken, Funktionen, OOP, Start, Reflektion, Arbeiten mit Dateien, einem Netzwerk usw.) und direkt zu Frameworks wechselten. Sie wissen nicht, wie es von innen funktioniert, sie schreiben nur auf das Framework und nicht mit Hilfe. Sie sind nicht besorgt darüber, was File :: save () macht, die Stärke der Kapselung ist gleich. Und es ist nicht interessant. Und wenn sich etwas nicht in diesem Rahmen befindet, kann diese Funktion nicht ausgeführt werden.
Aber ich stimme diesem Lernansatz nicht zu. Radfahren ist der beste Weg, um eine Technologie zu verstehen (nun, es wird jetzt beginnen). Als ich irgendwie bei einer Tasse Kaffee sprach, sagte ich einen dummen Gedanken: Wenn Sie PHP verstehen wollen, schreiben Sie Ihr CMS mit Plugins, Berechtigungen, ext. Felder und Admin-Bereich. Und dann dachte ich. Oder ist die Idee gar nicht so dumm?
Wie funktioniert das Lernen durch Frameworks?
Also verwenden wir Composer create-project ...., gehen dann zu .env, bearbeiten den Zugriff für die Datenbank und fügen hier die Controller-Klassen, hier die Modellklassen und hier die Vorlagenklassen ein. Wir schienen gelernt zu haben, aber wir haben nicht verstanden, wie es von innen funktioniert. Ein bisschen übertrieben, aber so wie es ist.
Ich habe mehrere Leute getroffen, die sagten, dass sie über Frameworks schreiben. Gleichzeitig kennen sie die Grundlagen nicht. Eine Person sagte mir ernsthaft, dass sie die Funktion array_map nicht kenne.
Okay, was gibt uns unser Fahrrad?
Zumindest werden wir uns mit dem automatischen Laden von Dateien und Klassen vertraut machen. Wir lernen, dass dies mit Composer möglich ist, anstatt Ihr spl_autoload_ zu schreiben ... Wir werden lernen, wie man Datenbankverbindungen erstellt, mithilfe von Reflection lernen wir, wie wir unser Plug-In-System erstellen und verstehen, warum \ $ _ GET und \ $ _ POST in der Geschäftslogik schlecht sind. Wir werden den ganzen Weg von der Anfrage bis zur Antwort gehen. Die Frameworks gehen für uns so.
Ja, fast alle Frameworks sind perfekt geschrieben. Während des Lernprozesses müssen Sie beobachten, wie diese oder andere Dinge sie getan haben. Wenn Sie Ihr „Mega-Framework“ schreiben, müssen Sie ein Reverse Engineering durchführen und verstehen, wie dasselbe Yii2 oder Laravel funktioniert. Und vielleicht werden Sie zu einer Betäubung kommen, wenn Sie herausfinden, dass Laravel nur eine Reihe von Komponenten ist. Ein Nebeneffekt davon ist ein tiefes Verständnis des Frameworks und seiner internen Architektur. Und in diesem Modus scheint mir das Verständnis viel schneller zu kommen. Zumindest persönlich bei mir.
Nachdem wir alle Harken betreten haben, werden wir auf einer tiefen Ebene verstehen, warum diese oder jene Entwurfsansätze und -muster verwendet werden, insbesondere wenn Sie Ihren Code erweitern, warten und testen müssen.
In Foren und sozialen Netzwerken diskutieren sie nur, dass Fahrräder schlecht sind. Wenn ich auf einer Website einen Artikel sehe, in dem eine Person über ihr Heimprojekt spricht, sei es ein soziales Netzwerk, ein Blog oder eine Website mit einem Katalog von Katzen, den er von Grund auf neu geschrieben hat, oder über einzelne Komponenten, bin ich ein wenig glücklich. Eine Person lernt von der Basis und es ist gut!
Wie soll man sonst noch studieren? Haben Sie sofort begonnen, funktionierenden und genauen Code ohne Fehler zu schreiben? Ich habe nicht Tausende von Codezeilen geschrieben, bevor mir klar wurde, was los war. Vielleicht habe ich es nicht verstanden, aber scheint mir alles?
Aber es ist besser, Ihr Fahrrad zu Hause zu schreiben, die Technologie zu verstehen, zu verstehen, was was ist, vielleicht sogar eine fertige Lösung für Packagist zu finden, als Ihr Fahrrad für die Produktion zu schreiben.
Der Artikel von mail.ru ist mir sehr nahe: Modernes PHP ohne Frameworks , in dem der Autor das Gerät aller Frameworks zeigen wollte und was sie wirklich sind.
In letzter Zeit ist viel Legacy-Code aus den 2000er Jahren in meinem Leben geworden. Das Projekt ist alt, aber interessant. Was auch auf neue Schienen übertragen werden muss (wenn es interessant ist, werde ich definitiv sagen). Es sieht ungefähr so aus wie der Code am Anfang des Artikels: Layout, SQL und Logik in einer Datei. Aber ich habe einen Legacy-Schuss. Ich weiß, wie man mit ihm arbeitet und wie man ihn umgestaltet. Aber was wird eine Person tun, die nur über Frameworks schreiben kann?
Er wird einfach nicht vor einem solchen Projekt stehen :)