3 Pecados de um Programador: Codificação, Govnokoding e Schizocoding

imagem


Existem 3 problemas de código que você encontra na programação: Hardcode, Govnokod e Schizokod.


Vamos conversar sobre isso.


Hardcode


Esse é um problema conhecido quando um programador, por causa de pressa ou preguiça, escreve código sem levar em consideração variáveis. Talvez o caso mais comum seja o domínio do site. Pode variar de ambiente para ambiente e geralmente causa muitos problemas. Tudo é simples aqui. Em plataformas diferentes, isso é resolvido de maneiras diferentes. O principal é cumprir os acordos e regras adotados na plataforma.


Normalmente, os problemas dessa classe são rapidamente detectados e facilmente tratados.


Govnokod


Este é um problema mais difícil. Frequentemente subjetivo. Grosso modo, isso é uma violação do estilo de código adotado no chefe, equipe ou comunidade.


Existem diferentes estilos de código, dependendo da plataforma e até mesmo dentro da plataforma:



Isto é do mundo php. Em outras comunidades, a situação é semelhante. Isso também inclui histórias sobre a guia, a guia após 2 espaços ou a guia após 4 espaços, etc.


Aqui surge o problema do código puro ... por exemplo, funções longas de 3-4 páginas, que são criticadas. Isso nem sempre é ruim, mas muitas vezes é possível tornar essas funções mais curtas, dividi-las em uma série de funções curtas, cada uma das quais resolve seu próprio problema.


Normalmente, esses problemas são facilmente tratados através de software e controle de padrões aceitos em uma equipe específica.


Acrobacias, quando um desenvolvedor pode alternar entre diferentes estilos de código, dependendo do projeto.


É ruim quando o desenvolvedor viola o estilo de código adotado pela equipe ou considera seu estilo de código favorito (geralmente o único aprendido) o único correto.


Não há estilos de código corretos. Existem estilos aprovados na equipe ou estilos geralmente aceitos.


Também é um problema relativamente simples e facilmente resolvido.


Schizocode


Esse é um problema menos popular, mas geralmente o mais caro.


Schizocode - vem do conceito de esquizofrenia. Squeeze from Wikipedia:


Esquizofrenia (de outro grego: σχίζω “split”, “split” + φρήν - “mente, pensamento, pensamento”), anteriormente lat. demência praecox ("demência prematura") ou esquizofrenia é um distúrbio mental polimórfico endógeno ou grupo de transtornos mentais associados à quebra dos processos de pensamento e reações emocionais.

Existem 2 pontos importantes: divisão e demência. Quais são as causas do esquizocódigo.


Um código ideal é aquele que não está escrito. Schizocoders não estão familiarizados com este conceito.


Em resumo, o esquizocódigo é um código que viola o princípio Razor da Occam.


Squeeze from Wikipedia:


“Navalha de Occam (lâmina)” é um princípio metodológico, nomeado em homenagem ao monge inglês Franciscano, filósofo nominal William Ockham. De uma forma simplificada, lê-se: "Você não deve multiplicar a existência sem necessidade"

É expresso no fato de que os desenvolvedores começam a complicar o código e a arquitetura sem uma boa razão. Ou o peso das razões existe apenas em sua imaginação.


Problemas imaginários - a raiz do software ruim


Existem 2 sintomas principais: a invenção de bicicletas em muletas e a multiplicação de camadas de abstração.


A invenção de bicicletas de muletas


Expressa-se que os desenvolvedores, em vista da pouca capacidade de aprender, em vez de procurar soluções / métodos ideais dentro da estrutura da plataforma e da arquitetura existente, começam a inventar bicicletas / muletas.


Exemplos:


  • Escrevendo suas próprias estruturas CMS / ptm de que as existentes têm uma falha fatal
  • Blog do Symfony Apesar do fato de o mundo inteiro usar o WordPress para isso.
  • Lojas on-line no Laravel, apesar do WooCommerce (número 1 do mundo), Magento (também bom), 1C-Bitrix (na pior das hipóteses, melhor que o Laravel)
  • Eu conheci uma situação em que o layout estava no Bootstrap, mas o desenvolvedor decidiu escrever seus próprios estilos para etiquetas. O que o impediu de adicionar a classe de rótulo que o Bootstrap já possui?
  • Funções, métodos e classes redundantes não possuem cálculos que poderiam ser evitados usando bibliotecas e métodos prontos nas plataformas usadas

Propagação descontrolada de camadas de abstração: classes extras, herança, métodos


O leitor atento pode notar um conflito com o govnokod. Em um caso, o problema é que a função ou classe é muito longa, mas o problema é que, pelo contrário, há uma fragmentação excessiva de entidades.


Aqui deve-se notar que este é um dos extremos, cuja fronteira nem sempre é fácil de observar.


Por um lado, é ruim tentar resolver tudo com uma função em 3 páginas ou uma classe que contém HTML e mecânica de modelos e, em algum lugar, é mais rentável dividir o código em várias funções / classes / componentes, cada um dos quais resolve seu próprio problema. Este é um extremo.


Por outro lado, um código muito simples é dividido em 5 classes, cada uma com 3-4 métodos de 3-4 linhas, com muitas heranças inúteis, quando você pode fazer uma ou duas com herança mínima ou mesmo sem herança, se isso puder ser evitado.


As consequências de abstrações supérfluas e ruins


Propagação de métodos, classes, herança sem uma boa razão - este é um código supérfluo e o crescimento de camadas de abstração.


Tudo tem um preço, além de abstrações extras:


  • treinamento para novos desenvolvedores mimado
  • quanto mais código, mais pontos de falha, mais erros
  • diagnóstico e depuração de código é complicado

Problema de pensamento


Quanto mais camadas de abstração, herança, métodos, mais pensamento é necessário para mudanças, melhorias e diagnósticos de problemas.


E o volume de trabalho de combustível é finito e muitas vezes sua escassez acarreta custos de desenvolvimento muito grandes.


Cada desenvolvedor que fez o diagnóstico e alterou o código de esquizo descansou em uma escassez de combustível para pensamentos. Mas nem todo mundo estava ciente disso.


Um vídeo que explica o que o combustível está pensando e oferece um exercício simples por 1 minuto, o que permite que você lembre a sensação de falta de combustível em um exemplo simples:



Está sendo executado em OOP, classes e herança?


Nem um pouco. No entanto, há alguma verdade nisso. Em um estilo funcional, é mais fácil novokovodit, mas esquizokod é difícil lá. OOP, por um lado, oferece muitas vantagens, mas também abre espaço para um esquizocódigo.


POO, classes e herança não são ruins nem boas. Essas são as ferramentas. Eu pessoalmente os uso.


No entanto, tenho várias regras próprias:


  • Quase sempre escrevo classes por causa do encapsulamento, mas muitas vezes tenho Singleton suficiente, métodos estáticos e sem estado
  • Onde existe um método comumente usado, escrevo funções que geralmente são apenas invólucros para os métodos de uma classe, mas às vezes uma função é apenas uma função sem uma classe e isso é bom quando apropriado.
  • Classes com estado - sim, mas com menos frequência e novamente apenas onde houver boas razões
  • A herança é ainda mais rara, e somente onde há boas razões para isso (tento reduzir as camadas de abstração e economizar pensamento e combustível em uma equipe)

Sumário


Falamos muito sobre hardcode e govnokode porque eles são compreensíveis e facilmente tangíveis. Mas o esquizocódigo geralmente fica impune, porque é mais difícil identificar e entender a quantidade de danos causados ​​por ele. E a quantidade de dano resultante disso é possivelmente mais do que se pode imaginar com uma investida.


Meu manifesto é simples:


  • é melhor aprender o melhor princípio da raça antes de inventar outra bicicleta de muleta que ninguém precisa
  • vamos escrever menos esquizocódigo
  • vamos aprender a cumprir o princípio Razor da Occam e não complicar o código sem motivo
  • vamos salvar nossos pensamentos e nossa equipe

Bem, terei prazer em comentar tanto em apoio ao manifesto quanto a suas críticas.

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


All Articles