Só não diga que você não era assim ou a minha opinião sobre o aprendizado

Olá pessoal. Eu gostaria de dizer minha opinião sobre o treinamento em programação moderna. O artigo irá falar sobre PHP, um pouco sobre estruturas e um pouco sobre bicicletas. Mas acho que isso se aplica a qualquer linguagem de programação. Vamos começar.


Lembra do seu primeiro código PHP?


Não, não este:


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

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

Com o tempo, crescemos, desenvolvemos uma compreensão do POO (ha ha) e começamos a produzir algo semelhante a este:


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

Então ouvimos em algum lugar que o mysql_ * não pode ser usado e todos usam o mysqli_ *, pois isso é mais interessante. Reescrevemos nosso código para usar o mysqli. Depois de algum tempo, aprendemos sobre a DOP.


Paralelamente, trabalhamos com variáveis ​​globais e classes de cem linhas em cada método. Você conhece a classe User, que conseguiu registrar um usuário, autenticar (sim, autorizar, é claro, ainda não sabemos a diferença!), Recuperar uma senha? Eu sei Nossa classe de usuário pode editar qualquer usuário, porque temos um super método para isso:


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

E eu também tive aulas Db, Post e Comment.


Estávamos familiarizados com a injeção de SQL, ataques XSS e:


  DROP TABLE `posts` 

SÓLIDO, PSR, MVC e padrões não são apenas palavras


Nós mesmos seguimos por esse caminho, aprendemos sobre o SOLID, PSR, MVC. Para nós, essas não são apenas palavras, mas uma necessidade urgente, especialmente após o terrível legado e montes de código, cada uma das classes escrita em seu próprio estilo. Nós pisamos em milhares de rakes, escrevemos tantas bicicletas e, como resultado, começamos a escrever um código mais / menos adequado.


Não usamos mais variáveis ​​globais e superglobais em nossas classes; para SQL, usamos consultas preparadas e não colocamos SQL em controladores (também não temos mais UserModel :: login ()). Implementamos os objetos necessários usando o DI, mas não os criamos dentro da classe. Dirigimos Pedido / Resposta, não ecoamos "olá mundo" e sabemos por que estamos fazendo isso. Testamos nosso código não apenas usando um navegador, mas também escrevemos testes sintéticos. Qual o preço disso? Eu tenho uma infância com um computador, dezenas de noites sem dormir, tantos fakaps e um banco de dados quebrado.


E eu também entendi cedo porque o $ _POST nos modelos é ruim.


Você não era esse tipo de pessoa? Eu tenho estado.


Assim foi antes. Mas agora não


Até agora, não consigo entender se o novo mod para cursos de desenvolvimento PHP é ruim ou não. Por um lado, as pessoas são oferecidas em pouco tempo para aprender imediatamente a escrever seu código corretamente, mas, por outro lado, as pessoas não entendem por que essa é a maneira correta de escrever. Uma camada inteira de conhecimento é perdida, a base, que deverá ser rapidamente composta.


Agora eles oferecem dezenas de cursos. Em apenas algumas horas, você aprenderá a escrever no Laravel, Yii2 ou em qualquer outra estrutura. Não sabe o básico de PHP e OOP? PSR para você Prosto Sdelay Raboty? Não importa, ensinaremos a você, por apenas 19.990 rublos. Uma pessoa paga e pensa que será ensinada a escrever imediatamente. Você escreveu imediatamente?


Comecei a perceber que, por algum motivo, as pessoas pararam de entender o banco de dados (trabalhando com bancos de dados, funções, OOP, inicialização, reflexão, trabalhando com arquivos, uma rede e assim por diante) e mudaram diretamente para estruturas. Eles não sabem como funciona por dentro, apenas escrevem na estrutura, e não com a ajuda. Eles não estão preocupados com o que o File :: save () faz, a força do encapsulamento é a mesma. E não é interessante. E se algo não estiver nessa estrutura, essa função não poderá ser executada.


Mas eu não concordo com essa abordagem do aprendizado. Andar de bicicleta é a melhor maneira de entender qualquer tecnologia (bem, ela começará agora). Falando de alguma forma sobre uma xícara de café, eu disse um pensamento bobo: se você quer entender PHP, escreva seu CMS com plugins, permissões, ext. campos e painel de administração. E então eu pensei. Ou talvez a ideia não seja estúpida?


Como o aprendizado através de estruturas funciona?


Então, usamos compositor create-project ...., depois acessamos .env, editamos o acesso ao banco de dados e colocamos as classes de controlador aqui, as classes de modelo aqui, as classes de modelo aqui. Parecemos ter aprendido, mas não entendemos como isso funciona por dentro. Um pouco exagerado, mas do jeito que está.


Eu conheci várias pessoas que disseram que escreviam em frameworks. Mas, ao mesmo tempo, eles não sabem o básico. Uma pessoa, com toda a seriedade, me disse que não conhecia a função array_map.


Ok, o que nossa bicicleta nos dará?


Pelo menos, vamos nos familiarizar com o carregamento automático de arquivos e classes. Aprendemos que isso pode ser feito usando o compositor, em vez de escrever seu spl_autoload_ ... Vamos aprender como criar conexões com o banco de dados, usando a reflexão, aprenderemos como construir nosso sistema de plug-in e entender por que \ $ _ GET e \ $ _ POST na lógica de negócios são ruins. Iremos desde a Solicitação até a Resposta. As estruturas seguem esse caminho para nós.


Sim, quase todas as estruturas são escritas perfeitamente. No processo de aprendizagem, você deve observar como essas ou outras coisas eles fizeram. Se você escrever sua “mega estrutura”, terá que realizar engenharia reversa e entender como o mesmo Yii2 ou Laravel funciona. E talvez você fique estupor ao descobrir que o Laravel é apenas um monte de componentes. Um efeito colateral disso é uma profunda compreensão da estrutura e sua arquitetura interna. E nesse modo, parece-me, o entendimento vem muito mais rápido. Pelo menos pessoalmente comigo.


Depois de tomar todas as medidas, entenderemos em um nível profundo por que essas ou aquelas abordagens e padrões de design são usados, especialmente quando você precisa expandir, manter e testar seu código.


Nos fóruns e redes sociais, eles discutem apenas que as bicicletas são ruins. Quando vejo um artigo em algum site em que uma pessoa fala sobre seu projeto doméstico, seja uma rede social, um blog ou um site com um catálogo de gatos, que ele escreveu do zero ou em componentes individuais, fico um pouco feliz. Uma pessoa aprende com a base e isso é bom!


Afinal, como mais estudar? Você começou imediatamente a escrever código de trabalho e preciso sem erros? Não escrevi milhares de linhas de código antes de perceber o que estava acontecendo. Embora talvez eu não tenha entendido, mas tudo isso me parece?


Mas é melhor escrever sua bicicleta em casa, entender a tecnologia, entender o que é, talvez até encontrar uma solução pronta para embalar, do que escrever sua bicicleta na produção.


O artigo do mail.ru é muito próximo a mim: PHP moderno sem frameworks , no qual o autor queria mostrar o dispositivo de todos os frameworks e o que eles realmente são.


Recentemente, muitos códigos herdados dos anos 2000 se tornaram em minha vida. O projeto é antigo, mas interessante. O que também precisa ser transferido para novos trilhos (se for interessante, com certeza vou dizer). Parece o mesmo que o código no início do artigo: layout, sql e lógica em um arquivo. Mas eu tenho uma chance herdada. Eu sei como trabalhar com ele e como refatorá-lo. Mas o que uma pessoa que pode escrever apenas em frameworks fará?


Ele simplesmente não vai enfrentar esse projeto :)

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


All Articles