Existe um termo para excesso de complicações do POO?

18

Há um ou dois anos, vi um excelente artigo sobre OOP (Java), que mostrava a progressão de um simples logger concreto de duas ou três linhas de código, e um excesso de processos teóricos por parte do desenvolvedor inexperiente que basicamente dizia oh, eu deveria adicione isso caso desejemos isso! No final do artigo, esse simples logger era uma enorme bagunça que o desenvolvedor original mal conseguia entender.

Existe um termo comum para esse tipo de complicação excessiva? Esse artigo (que eu gostaria muito de encontrar novamente) mostra o conceito maravilhosamente para um caso isolado, mas me deparei com projetos inteiros nos quais os desenvolvedores essencialmente se programavam em um nó pelo uso excessivo de padrões, estruturas, bibliotecas e outros problemas. A seu modo, isso é tão ruim (ou até pior) que os aplicativos espaguetes VB6 herdados que herdamos para substituição.

O que realmente estou procurando é trazer isso à tona durante as entrevistas. Quero saber se alguém está ciente e consciente de como é fácil cair nessa com falta de arquitetura / pré-planejamento (e se desentender se parece que eles têm o equilíbrio correto no lugar), mas não é realmente algo Eu posso encontrar muitas informações sobre.

jleach
fonte
25
Sim, isso se chama OOP.
precisa saber é o seguinte

Respostas:

28

O termo mais frequente que ouvi para descrever esses projetos é superengenharia . O significado original dessa palavra, no entanto, não está relacionado ao desenvolvimento de software e, fora do desenvolvimento de software, provavelmente não tem um tom tão ruim.

Em um nível mais geral, Joel Spolsky deu aos designers que complicam demais os projetos arquitetônicos o nome " astronautas da arquitetura ".

No entanto, especialmente para uma entrevista, acho que é mais importante saber como se chama o contrário, colocando apenas coisas em um design que são realmente necessárias e esquecer a abordagem doentia do tipo "apenas no caso" - isso é chamado de princípio YAGNI .

Doc Brown
fonte
Obrigado. Sou grande defensor de YAGNI, não tinha certeza se havia um oposto em comum.
jleach
Eu enfatizaria que yagni é sobre "o que é realmente necessário agora". Você ainda deve deixar as coisas de fora, mesmo que se saiba que serão necessárias mais tarde, desde que não sejam necessárias no momento.
Bent
7
@Bent Gostaria de enfatizar também que isso não significa ignorar completamente as coisas / alterações que você sabe com certeza que vão acontecer no recurso próximo ... saber como o software será estendido depois pode orientá-lo a escrever código que será mais facilmente refatorável ao longo desses eixos de mudança.
Bakuriu 4/03/2017
Eu tenho usado o termo "engenharia pobre" em oposição a "engenharia excessiva". Eu trabalhei com pessoas que gostam de adicionar todos os tipos de recursos e extensões "just in case" que não têm casos de uso claros. Se você não entender o problema que está tentando resolver, é apenas uma engenharia ruim.
21717 Josh Johnson
4

Sim, superengenharia é o termo mais simples para descrever isso. Eu já vi projetos superengenharia e desnecessariamente complicados mais vezes do que me lembro ao longo dos anos. Muitos anos atrás, ao fazer um curso Microsoft GWBasic, o instrutor repetidamente martelou o método KISS (Keep it Simple Stupid). Isso é tão verdadeiro hoje como era então.

Por isso, lembro-me sempre do KISS e sempre projetei com os princípios do SOLID em mente. Porém, com isso dito, ainda é possível sobreaquecer um projeto com os princípios do SOLID totalmente considerados. Você precisa equilibrar uma abordagem pragmática do senso comum com o desejo de ser puro e aderir às diretrizes de OOP geralmente aceitáveis. Se você tiver tempo suficiente e se gosta de criar soluções complexas, pode acabar desenvolvendo um motor para um skate, porque pensou que ele acabaria sendo transformado em carro. Felizmente, fui disciplinado o suficiente para não fazer isso ao longo dos anos, mas já o vi muitas vezes.

Então, para resumir, para evitar a complicação excessiva do código:

1) BEIJO (Mantenha Simples Estúpido)

2) Siga os princípios do SOLID com praticidade em mente.

3) Não tente projetar para todas as eventualidades. E, às vezes, abstrações pequenas e vazadas não são coisas horríveis, se isoladas, intencionais e se o esforço para evitá-las supera em muito os efeitos de mantê-las.

4) Considere a implementação de soluções ao projetá-las. Você não pode simplesmente dizer "ah, isso é um detalhe de implementação" e assumir que seu design é prático. Eu costumava trabalhar com um arquiteto que fazia isso com frequência e, infelizmente, seus projetos nunca funcionavam e, como resultado, não trabalho mais lá.

5) Codifique como se você fosse o responsável por mantê-lo.

David Spenard
fonte
-3

Então, você terá esta entrevista e pretende induzir o candidato a exibir o que ele sabe sobre engenharia de software e então dirá "Nah, você provavelmente deseja aplicar tudo o que sabe em sua primeira tarefa, siga em frente agora , seu criador de valor acima dos negócios, que não empresta ouro à engenharia! Shoo! "

Eu acho que seria mais seguro apresentar um exemplo concreto e discutir os prós e contras da aplicação de certos padrões. Do que você solicitaria respostas como "Depende, você quer isso rápido? Isso é tudo? Qual é o problema do complicado? Que padrões já existem?" e você pode aprender algo sozinho. Isso também permitiria ao candidato provar seu senso de contexto, enquanto seria uma pergunta mais aberta. Esperando e desejando uma resposta específica, você terá, na melhor das hipóteses, alguém com a mesma maior preocupação que a sua. Se você não receber sua resposta, pode ser que o candidato considere isso um acéfalo.

Martin Maat
fonte
4
Sinto muito, mas estava realmente me perguntando se havia um termo para isso. Eu não estava procurando conselhos sobre como conduzir uma entrevista (ou para que minha pergunta fosse percebida de alguma maneira sobre como eu conduziria uma entrevista). Obrigado pela sua preocupação embora ...
jleach
1
Bem, você escreveu esse último parágrafo na sua pergunta, que é difícil de ignorar e uma afirmação bastante. Se você não aprecia comentários sobre determinadas partes do seu texto, pode ser mais restritivo no que escreve.
Martin Maat