Article image
Vagner Bellacosa
Vagner Bellacosa10/08/2021 00:33
Compartilhe

Spaghetti Code um codigo sem nexo, o emaranhado de comandos que acabara com sua sanidade

  • #Programação para Internet
  • #Boas práticas
  • #Arquitetura de Sistemas

image Spaghetti Code o anárquico mundo dos coders birutas

image Não seja seduzido pelo lado negro da força e evite programar spaghettis

Salve jovem padawan, nesta fria noite de inverno, próximo da hora do jantar, resolvi comentar sobre um assunto, que numa primeira olhada, seria hilário, mas é coisa séria, gerando muita, mas muita dor de cabeça, nas equipes de sustentação e explodindo com SLAs.

Mas não se assuste, o tiozão não surtou, e nem está inventando a roda, o termo spaghetti code foi cunhado no final dos anos 70 do século passado, ninguém reivindicou a paternidade, mas acredita-se, que surgiu espontaneamente nas mentes de inúmeros devs em CPDs, espalhados pelo mundo.

Em artigos anteriores exploramos o mundo da consultoria desgovernada com as 9 Gestantes gerando um bebe em um mês, terceirizações, quarteirizações e outros males, problemas do Dr. Ivon Safe e o teorema da seringa e o bumbum, podemos dizer que o Spaghetti Code é cria destes e outras mazelas dos Centro de Processamento de Dados.

Mas não pense que é um problema do mundo mainframe, ledo engano pequeno gafanhoto, o spaghetti surge em toda a parte, onde impera o caos, porem ele causa mais estragos nas pequenas e medias empresa, em que a estrutura hierarquia, QA e analise de performance são mais brandos, mas vamos por partes, primeiro vamos as definições.

O que é Spaghetti Code?

image

A definição não é nada pomposa, spaghetti code é uma piada interna no mundo da informática para código ruim, para ser franco, pior que ruim, péssimo mesmo, geralmente são longos e grandes linguições de código, sem ou com pouco comentário, variáveis herméticas, laços de repetição enormes e emanharados, recheado de instruções de salto, o famoso (GoTo).

São programas legados, que todo dev se apavora em analisar e resolver um abend, tentar corrigir um erro é ato de coragem, com certeza gerara muita dor de cabeça, perdera horas e horas analisando o código com suas centenas quiça milhares de linhas, tentando decifrar o que o criador estava pensando ao criar esse programa spaghetti bizarro.

Todo CPD tem dessas crias, os DEVs conhecem pelo nome, nas rodas de café, sempre é citado e lembrando. As equipes de sustentação o evitam a todo custo, mexer nele e uma maldição, afinal ele esta quieto e funcionando, quem arriscara? Qualquer alteração pode acordar o dragão e com certeza, iras sair chamuscado desta empreitada, cuidado meu amigo a culpa sempre cai no ultimo que mexeu, e mexeu fedeu.

Saiba que neste reino dos codes catastróficos, o spaghetti não está sozinho, a todo dia surge uma nova pasta com os últimos deslizes de pseudo-programadores, existem outras delicias que enlouquecem os programadores, alguém espirituoso até cunhal o termo de "anti-design pattern", para explicar essas insanidades em bits e bytes.

Como surge um spaghetti code?

image

Normalmente prazos apertados e falta de acompanhamento das equipes, onde muitas empresas adquiriam software chave na mão, a preços baixos de hora-homem na codificação, como o requisito era economia e não qualidade, abre-se mão da qualidade, deixando de verificar o que estava codificado, recebendo uma caixa-preta que recebe o input, processa e devolve um output.

A softhouse, por sua vez, no afã de entregar o software acordado, dentro das limitações orçamentarias e muito trabalho a ser feito, contrata equipes juniores, estagionarios e profissionais com pouco conhecimento funcional e os deixa a própria sorte, tendo que desenrascar-se e entregar o código a tempo e a ordem.

Muitas vezes ocorre a meio do projeto desligamento de elementos seniores, principalmente quando a pressão aumenta, gerando turnovers altíssimos, a equipe que perdendo know-how valioso entra em desespero e o improviso entra em cena, tornando a coisa mais confusa e caotica, aliados a proximidade do dead-end, que acaba obrigando a equipe trabalhar além do horário, cansados e desmotivados. Afinal ninguém gosta de fazer um trabalho ruim repleto de pontas soltas.

Se não me dispersei muito apresentei alguns dos fatores criadores do spaghetti: prazo curtos (apertados e sem margem de manobra), equipe de devs inexperiente, uma equipe enxuta, com baixa remuneração, pressão do comercial que vendeu um iate e está vendo uma canoa, fata de conhecimento na linguagem por parte da equipe, falta de planejamento, falta de documentação, usuário desconhece as regras do negócio e acaba confundindo o analista de sistema que cria especificações mucho locas e é claro este projeto está fadado ao desastre.

Outra maneira de criar um spaghetti code é pegar um código muito velho e ir acrescentando novas e novas funcionalidades, que ocorrem numa vida normal do software em produção, aliada a IFs pontuais para solucionar solicitações do usuário, junte isso com o passar dos anos e suas implementaçoes tecnologicas, terás um monstrengo de código-

Lembrei de mais outra, existem ferramentas geradoras de código, onde um analisa usando linguagem natural especifica o programa e o software gera o código pronto do outro lado, funcional, porem enorme e cheio de pendulicarios que ninguém sabe o que faz.

Existem outras formas, mas seria chover no molhado, falando do mesmo de modo diferente. A única constante sempre é juntar uma equipe despreparadas, prazos apertados e ganancia de alguns elementos, que preocupam-se apenas com o OKR, pois uma vez entregue o código, ele passa a ser problema da equipe de sustentação.

Como evitar spaghetti code?

image

Cabe ao gestor da equipe orientar a equipe a produzir código com qualidade, isto é. Bem comentarizado, identado, performático, com variáveis legíveis e bem declaradas, tenho dois artigos falando sobre variáveis, vale a pena reler que trata sobre variáveis e boas praticas. 

Tenha em mente, o código fonte é escrito por humanos para humanos, afinal um código tem vida, recebe atualizações, alterações, evolui e até mesmo falece, por isso pense sempre no próximo DEV que irá analisar e trabalhar com seu código, acrescentando ou removendo funcionalidades. 

Com o passar dos anos, foram sendo criadas inúmeras metodologias para evitar código de difícil leitura e manutenções custosas, estude os design patterns e aplique codificando no estado da arte.

Conheça outra pasta codes

image

Alguns espíritos jocosos foram além, e dentro do universo dos spaghetti code, foram desmembrando situações caricatadas e anti-profissionai e as reagruparam em novos cods-groups, sempre seguindo a ideia de apresentar monstrengos da codificação em delicias da culinária mediterrânica, em especial “la bella cucina italiana”.

Esses códigos são de difícil entendimento e manutenção, somente um programador corajoso, ou insano-temerário ira meter a mão e sujeitar-se aos seus perigosos bugs e abendes, falando nisso você leu meu artigo sobre a origem do bug?

Macaroni code

image

O código do macarrão é uma analogia sarcástica da linguagem macarrônica, esse código é definido como o programa que usa uma mistura de patterns, linguagens de programaçao em um único package. 

Um programa em Linguagem de alto nível, é geralmente escrito para que outros programadores possam entender e trabalhar, evoluindo o software, o macaroni code além de ter várias linguagens de programação misturadas e terem a mesma funcionalidade escrita de forma diferente, com a desvantagem de trabalhar em um ambiente computacional misto em uma única instalação com inumeros donos.

Necessita ser um Jedi com um bom conhecimento da maioria das linguagens de programação, é necessário abstraçao para entender o código do macarrão e cuidado para não perder a sanidade no processo.

Stromboli code

image

Um código totalmente enrolado, sem logica compreensível a primeira vista, imprima o código fonte, analise por horas e desenrole até o fim, totalmente pulverizado e codificado de maneira desleixada, bem assustador quando abendam de madrugado, improdutível e desmotivador quando a vista esta bem cansada, após uma longa jornada.

Campanelle code

image

Com tantas frameworks, metodologias e designs sendo criados a cada dia, algum gênio resolve inovar e usa uma daquelas frameworks inovadoras e na modinha, cheias de recursos e que ninguém conhece, sofri desse male, quando fiz o giro na Europa, cada cliente tinha a sua própria framework padronizada e os primeiros meses gastava-se aprendendo a usar a ferramenta, conhecer suas funcionalidades para poder surfar nas suas nuances.

Baklava code

image

Ai meu rim, os gênios da arquitetura sempre inovando e nos surpreendendo, o baklava code e bem semelhante ao lasagna code, uma base de código com muitas camadas arquitetônicas / abstratas, que exigem muitas horas de analise para conhece-lo e situar-se minimamente no codigo.

Lasagna code

image

O descuido não é a única maneira de acabar com um código difícil de manter; o excesso de complicação também pode ser uma causa. Trabalhei durante uma década em Portugal, em 2004 aceitei um emprego em uma consultoria informática, que tinha uma das bases de código mais confusas que já vi. O programa era escrito numa framework, numa pseudo linguagem natural de alto nivel, que ao compilar-se gerava um fonte em Cobol ou Java, terrivelmente confuso e cheio de copybooks e referências externas.

Imagine que cada elemento do produto foi abstraído em dezenas de componentes aninhados singulares. Era quase impossível fazer uma alteração em uma camada da pilha sem afetar todas as outras camadas. A base de código não so era uma bagunça, mas também não era sustentável. Para analisar um programa Cobol necessitávamos compilar e verificar a listagem estendida.

Se o código espaguete sofre de desleixo arquitetônico, o código da lasanha é uma característica do excesso de engenharia em sua forma mais extrema. Os coitados dos programadores que trabalham com bases de código orientadas a objetos geralmente caem nessa armadilha. 

O código da lasanha é abstraído, camadas fortemente conectadas; os desenvolvedores o escrevem porque estão convencidos de que cada subcomponente necessita de seu próprio objeto. Esses programadores tendem a se concentrar no layout do código em detrimento de sua manutenção. O que começa como uma base de código altamente organizada rapidamente se torna um desastre arquitetado demais.

Esta é uma boa regra a seguir: seja conservador com suas abstrações. Se você planeja abstrair um componente que apenas um outro componente usa, o que, por sua vez, apenas outro componente usa, você foi longe demais. Mantenha a base de código simples. Olho vivo meu jovem padawan.

Ravioli code

image

A estrutura de software ideal é aquela com componentes pequenos e fracamente acoplados; essa estrutura ideal é chamada de código de ravioli.

Ravioli são basicamente pequenos pacotes de massa com coisas deliciosas, então em um código de ravióli, cada um dos componentes, ou objetos, é um pacote contendo um pouco de carne ou outro alimento para o sistema.

Qualquer componente pode ser modificado ou substituído sem afetar significativamente outros componentes em um código de ravióli. Mas cuidado com sua lucidez, pois em um código de ravióli, existem milhares de pequenas classes e é muito difícil descobrir de onde e para onde, qual o lugar onde tudo acontece?.

Embora esse tipo de codificação seja bastante atraente do ponto de vista de acoplamento e coesão, a separação e o encapsulamento do código podem expandir as pilhas de chamadas, o que, por sua vez, cria um problema de navegação pelo código para fins de manutenção, pobre padawan isso foi cruel, ne?

Gnocchi code

image

Ai meu caro, são blocos ilegíveis de código, você pode dizer que há um algo acontecendo lá dentro, mas você não tem a menor ideia do que é, alterar esses blocos de código densos e inacessíveis é algo bem temerário, pois a alteração, a guarda em produção parecera impossível, pois ele irá abendar e causar muitos danos a sua reputação.

Pizza code

image

Pequeno glutão, está pizza não é uma delícia do Bras ou do Luigi, mas se encaixa com o código do espaguete e seu mal afamada laia na teoria da massa como um antipadrão de programação. Na maioria dos casos, o código de pizza é descrito como um código com uma arquitetura plana.

O código de pizza geralmente tem um grande número de classes ou funções, todas interconectadas no mesmo nível no topo de uma camada fundamental. No código da pizza, os componentes individuais são geralmente independentes uns dos outros, mas às vezes pode ser difícil extraí-los sem interferir nos outros.

Todo bom software requer estrutura. O código da pizza sofre por ser mal projetado. É bom ter componentes relativamente isolados, mas o código de pizza torna quase impossível entender as funções e responsabilidades de cada classe. Para obter a base de código sob controle, corte o código da pizza em fatias; adicione alguma estrutura lógica a cada componente.

Ps:

Nao confunda com a PIZZA, companheira inseparável do DEV, que adentra na madrugada tentando solucionar abends, debugando spaghetti code e perdendo cabelos ao solucionar problemas e cumprir a SLA espartana.

Spaghetti code in the cloude

image

Bem vindo ao século XXI, com tanta gente entrando no universo do Cloude Computer, prepara-se, aperte o sinto e divirta-se com essa modalidade, código espalhado em múltiplas maquinas em inúmeros países, o céu é o limite.

Conclusão 

Acabei me empolgando, o tiozão escreveu muito virou um testamento, quase se transformando em capitulo do pentateuco, perdoe-me, pois o assunto é instigante e tem tanta informação a passar, que ficaria aqui a noite toda escrevendo.

Espero ter ajudado e não confundindo muito, duvidas, correções e reprimendas, já sabem aqui no Forum ou no Discord.

image

Saiba mais, esteja preparado para os desafios do mundo da informática.

image Ficou curioso para entender SLA e equipes de sustentação ?

https://web.digitalinnovation.one/articles/prestacao-de-servico-e-sla-saiba-mais-sobre-as-garantias?back=/articles

image A resiliência é uma arte, cultive-a e prepare-se para ser um profissional de TI melhor e mais adaptado a realidade do mercado.

https://web.digitalinnovation.one/articles/seja-resiliente-evolua-seus-soft-skills-em-ti?back=/articles

image Evite programas herméticos, use nome claros e elucidativos, ajude o próximo dev a trabalhar em seu código.

https://web.digitalinnovation.one/articles/como-nomear-variaveis-num-programa?back=/articles

image Conheça as diversas praticas de nomear variáveis e objetos, torne seu programa mais elegante.

https://web.digitalinnovation.one/articles/estilo-camelcase-pascalcase-nomeando-direitinho?back=/articles

image Trabalhe seus Soft Skills e evolua no mercado laborativo.

https://web.digitalinnovation.one/articles/soft-skills-o-que-um-bom-dev-necessita-ter-e-expandir?back=/articles

image Convívio social, por que trabalhar com pessoas é tão difícil?

https://web.digitalinnovation.one/articles/soft-skill-aprenda-5-regras-para-um-bom-convivio-social?back=/articles

image Nao tire vantagens, esqueça o esquema Gerson, tenha ética e responsabilidade.

https://web.digitalinnovation.one/articles/etica-em-informatica?back=/articles 

image Origem do termo bug, como surgiu esta expressao que significa abend, crash, quebra e etc.

https://web.digitalinnovation.one/articles/bugou-por-que-dizemos-isso-a-erros-no-aplicativo-voce-sabia?back=/articles

image Erros na condução de um projeto de software, conheça este paradoxo nada legal.

https://web.digitalinnovation.one/articles/nove-gravidas-nao-geram-um-bebe-em-apenas-um-mes?back=/articles

image Passo a passo, rotinas hierarquizadas e caminhos críticos, conheça mais sobre workflow.

https://web.digitalinnovation.one/articles/conceitos-funcionais-workflow?back=/articles

image Informática é uma ciência humana, entenda o porque.

https://web.digitalinnovation.one/articles/triplice-alicerce-da-informatica-peopleware?back=/articles

image Saiba fazer as perguntas certas, nao assuma responsabilidades que possam te prejudicar.

https://web.digitalinnovation.one/articles/dilema-da-seringa-em-programacao-de-sistemas?back=/articles

image Evite confusões, analise, pense e faça o seu trabalho direitinho, evitando a síndrome do Dr. Ivon Saf

https://web.digitalinnovation.one/articles/deu-ruim-no-levantamento-de-requisitos-a-sindrome-de-dr-ivon-saf?back=/articles

Espero ter ajudado ate o próximo artigo.

image

image Mais momento jabá, para distrair, visite meu vídeo e veja para onde fui desta vez : https://www.youtube.com/watch?v=gCGw4jSqyc0

Bom curso a todos.

image https://www.linkedin.com/in/vagnerbellacosa/

image https://github.com/VagnerBellacosa/

Pode me dar uma ajudinha no YouTube?

image https://www.youtube.com/user/vagnerbellacosa

Compartilhe
Comentários (6)
Vagner Bellacosa
Vagner Bellacosa - 10/11/2021 22:55

Renato e ISAC, obrigado pelas feedbacks... como estao os seus cursos? um forte abraço

Isac Leite
Isac Leite - 10/08/2021 14:26

Muito bom o artigo, parabéns pela idéia!!!!

RE

Renato Elbaco - 17/08/2021 14:40

bem bacana, valeu amigo

Julio Lima
Julio Lima - 10/08/2021 08:16

Muito bom, gosto de lasanha.

Vagner Bellacosa
Vagner Bellacosa - 10/08/2021 11:18

Amigo Leandro e Julio, muito obrigado pelas palavras amigas.


Bom curso a todos...


eu tbm adoro uma boa parta... lasagna `tudo de bom... pizza é um sonho

Leandro Carvalho
Leandro Carvalho - 10/08/2021 07:38

Parabéns pelo excelente artigo e por te compartilhado com todos o seu conhecimento sobre esse assunto.