Simplemente no digas que no te gustó eso o mi visión del aprendizaje

Hola a todos Me gustaría decir mi opinión sobre la formación en programación moderna. El artículo hablará sobre PHP, un poco sobre frameworks y un poco sobre bicicletas. Pero creo que eso se aplica a cualquier lenguaje de programación. Empecemos


¿Recuerdas tu primer código PHP?


No, este no:


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

Y este:


 <? 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"); } ?> 

Con el tiempo, crecimos, desarrollamos una comprensión de OOP (ja, ja) y comenzamos a producir algo similar a esto:


 <?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"); } ?> 

Luego escuchamos en alguna parte que mysql_ * no se puede usar y todos usan mysqli_ *, ya que esto es más genial. Reescribimos nuestro código para usar mysqli. Después de un tiempo, aprendimos sobre la DOP.


Paralelamente, trabajamos con variables globales y clases de cien líneas en cada método. ¿Está familiarizado con la clase Usuario, que pudo registrar un usuario, autenticar (sí, autorizar, por supuesto, todavía no sabemos la diferencia), Recuperar una contraseña? Lo se Nuestra clase de usuario podría editar cualquier usuario, porque teníamos un súper método para esto:


 // 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> :) } } 

Y también tuve clases de Db, Publicar y Comentar.


Estábamos familiarizados con la inyección SQL, los ataques XSS y:


  DROP TABLE `posts` 

SOLID, PSR, MVC y los patrones no son solo palabras


Fuimos de esta manera nosotros mismos, aprendimos sobre SOLID, PSR, MVC. Para nosotros, estas no son solo palabras, sino una necesidad urgente, especialmente después del terrible legado y los montones de código, cada una de las clases está escrita en su propio estilo. Pisamos miles de rastrillos, escribimos tantas bicicletas y, como resultado, comenzamos a escribir código más / menos adecuado.


Ya no usamos variables globales y superglobales en nuestras clases, para SQL usamos consultas preparadas y no ponemos SQL en los controladores (tampoco tenemos más UserModel :: login ()). Implementamos los objetos necesarios usando DI, pero no los creamos dentro de la clase. Manejamos Solicitud / Respuesta, no hacemos eco de "hola mundo" y sabemos por qué estamos haciendo esto. Probamos nuestro código no solo usando un navegador, sino que también escribimos pruebas sintéticas. ¿Cuál es el precio de esto? Tengo una infancia con una computadora, docenas de noches de insomnio, tantos fakaps y una base de datos rota.


Y también entendí temprano por qué $ _POST en los modelos es malo.


¿No eras ese tipo de persona? He estado


Así fue antes. Pero no ahora


Hasta ahora, no puedo entender si el nuevo mod para los cursos de desarrollo de PHP es malo o no. Por un lado, a las personas se les ofrece en poco tiempo aprender inmediatamente cómo escribir su código correctamente, pero por otro lado, las personas no entienden por qué esta es la forma correcta de escribir. Se pierde toda una capa de conocimiento, la base, que luego tendrá que recuperarse rápidamente.


Ahora ofrecen docenas de cursos. En solo unas horas, aprenderá a escribir en Laravel, Yii2 o cualquier otro marco. ¿No conoces los conceptos básicos de PHP y OOP? PSR para usted Prosto Sdelay Raboty? No importa, te enseñaremos por solo 19,990 rublos. Una persona paga y piensa que se le enseñará a escribir correctamente de inmediato. ¿Escribiste de inmediato?


Comencé a notar que, por alguna razón, la gente dejó de comprender la base de datos (trabajando con bases de datos, funciones, OOP, inicio, reflexión, trabajando con archivos, una red, etc.), y cambiaron directamente a los marcos. No saben cómo funciona desde el interior, simplemente escriben en el marco y no con la ayuda. No les preocupa lo que hace File :: save (), la fuerza de la encapsulación es la misma. Y no es interesante. Y si algo no está en este marco, entonces esta función no se puede hacer.


Pero no estoy de acuerdo con este enfoque de aprendizaje. El ciclismo es la mejor manera de entender cualquier tecnología (bueno, comenzará ahora). Hablando de alguna manera con una taza de café, dije un pensamiento tonto: si quieres entender PHP, escribe tu CMS con complementos, permisos, ext. campos y panel de administración. Y luego pensé. ¿O tal vez la idea no es tonta en absoluto?


¿Cómo funciona el aprendizaje a través de marcos?


Entonces, usamos el proyecto de creación del compositor ..., luego vamos a .env, editamos el acceso a la base de datos, luego colocamos las clases de controlador aquí, las clases de modelo aquí, las clases de plantilla aquí. Parecíamos haber aprendido, pero no entendimos cómo funciona desde adentro. Un poco exagerado, pero como está.


Conocí a varias personas que dijeron que escribían en marcos. Pero al mismo tiempo no saben lo básico. Una persona, con toda seriedad, me dijo que no conocía la función array_map.


De acuerdo, ¿qué nos dará nuestra bicicleta?


Al menos nos familiarizaremos con los archivos y las clases de carga automática. Aprendemos que esto se puede hacer usando el compositor, en lugar de escribir su spl_autoload_ ... Aprenderemos cómo crear conexiones a la base de datos, usando la reflexión, aprenderemos cómo construir nuestro sistema de plug-in y entender por qué \ $ _ GET y \ $ _ POST en la lógica comercial es malo. Iremos desde la solicitud hasta la respuesta. Los marcos van de esta manera para nosotros.


Sí, casi todos los marcos están escritos perfectamente. En el proceso de aprendizaje, debe observar cómo han hecho estas u otras cosas. Si escribe su "mega marco", tendrá que hacer ingeniería inversa y descubrir cómo funciona el mismo Yii2 o Laravel. Y tal vez te sorprendas cuando descubras que Laravel es solo un montón de componentes. Un efecto secundario de esto es una comprensión profunda del marco y su arquitectura interna. Y en este modo, me parece, la comprensión llega mucho más rápido. Al menos personalmente conmigo.


Después de pisar todos los rastrillos, entenderemos en un nivel profundo por qué se usan estos o esos enfoques y patrones de diseño, especialmente cuando necesita expandir, mantener y probar su código.


En foros y redes sociales, solo discuten que las bicicletas son malas. Cuando veo un artículo en un sitio donde una persona habla sobre su proyecto casero, ya sea una red social, un blog o un sitio con un catálogo de gatos, que escribió desde cero o en componentes individuales, estoy un poco feliz. ¡Una persona aprende de la base y es bueno!


Después de todo, ¿cómo más estudiar? ¿Inmediatamente comenzó a escribir código de trabajo y preciso sin errores? No, escribí miles de líneas de código antes de darme cuenta de lo que estaba sucediendo. Aunque tal vez no lo entendí, ¿pero me parece todo?


Pero es mejor escribir su bicicleta en casa, comprender la tecnología, comprender qué es lo que, tal vez incluso encontrar una solución preparada para empaquetadores, que escribir su bicicleta en producción.


El artículo de mail.ru tiene un espíritu cercano a mí: PHP moderno sin frameworks , en el que el autor quería mostrar el dispositivo de todos los frameworks y cuáles son realmente.


Recientemente, una gran cantidad de código heredado de la década de 2000 se ha convertido en mi vida. El proyecto es antiguo, pero interesante. Que también debe transferirse a nuevos rieles (si es interesante, definitivamente lo diré). Se ve casi igual que el código al principio del artículo: diseño, sql y lógica en un archivo. Pero tengo un tiro heredado. Sé cómo trabajar con él y cómo refactorizarlo. Pero, ¿qué hará una persona que solo puede escribir en marcos?


Simplemente no se enfrentará a un proyecto así :)

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


All Articles