Pergunta

acabei de ver este comentário em uma enquete "qual JS lib você usa"

"@Xanti - sim, sim, modularização e abstração em programação é uma prática terrível.Funções que chamam outras funções?Desperdício."

E isso me deixou curioso porque estou usando o framework Kohana para PHP e a biblioteca Jquery para javascript.

Por que algumas pessoas consideram a abstração e a modularização uma má prática?Os frameworks e bibliotecas não são feitos para facilitar e acelerar o desenvolvimento?

aqui está um link para a enquete

Foi útil?

Solução

Descobri que muita abstração pode ser perigosa para sua produtividade:

  • Uma abstração mal escolhida pode ser pior do que nenhuma abstração.

  • Se você precisar ler quatro ou cinco módulos diferentes para entender como um algoritmo simples funciona, as barreiras de abstração provavelmente não estão nos lugares certos. Talvez haja uma boa maneira de refatorar o código, ou talvez seja mais fácil remover as barreiras.

  • Se a abstração não corresponder a uma idéia relativamente familiar, pode ser difícil para os membros da nova equipe aprender.

A abstração não é um "bem irracional"; Existe para servir a propósitos específicos. Entre os propósitos mais comuns estão

  • Para proteger os invariantes de uma estrutura de dados

  • Para encapsular decisões de design que provavelmente mudarão

Minha maior experiência com abstração atrapalhando foi com o nosso compilador de pesquisa para C--. Havia muito mais abstração do que os alunos estavam acostumados a ver na aula do compilador:

  • A máquina alvo era abstrata
  • A linguagem da montagem era abstrata
  • As convenções de chamada eram abstratas
  • O layout da estrutura de pilha usou uma abstração incomum "bloco"

Cada uma dessas abstrações serviu a um propósito importante para a nossa pesquisa, mas o efeito total foi que foi muito Difícil para os novos alunos aprendem o compilador. Então, mesmo que o comentário original estivesse em brincadeira, lá são Lugares onde a abstração pode causar problemas.

Outras dicas

Microsoft administra um programa de licença de volume para organizações de caridade qualificadas.Se você não envolveu um parceiro da Microsoft ou a própria Microsoft em relação a isso, essa seria minha primeira parada.

Você também pode verificar http://www.techsoup.org , software é doado e pode ser aplicado paralá.

Se houver um add / on ou serviço específico que você estiver interessado, eu abriria uma caixa de diálogo com esse fornecedor diretamente.Eles provavelmente vão dar a você ou em um profundo desconto com algumas concessões (como colocar em seu site que você está usando sua tecnologia).

Provavelmente, podemos assumir que o comentarista não estava falando sério.

Não consigo imaginar ninguém reivindicando modularização e abstração são más práticas e realmente o que significa.

A abstração e a modularização em geral são boas e essenciais. Pode haver abstrações ruins por aí, por exemplo: estruturas que não são mais suportadas ou caras ou simplesmente não utilizáveis, ou grandes ou desatualizadas, ou 2ª escolha, etc. A biblioteca "mercado" em geral é enorme. Que tipo de bibliotecas você se usa depende de circunstâncias e preferência pessoal.

Por que algumas pessoas consideram más práticas de abstração e modularização? As estruturas e as bibliotecas não são feitas para facilitar e acelerar o desenvolvimento?

Mudança e aprendizado às vezes são difíceis - então as pessoas lutam contra isso. Se você gosta de estudar esse tipo, pode iniciar sua pesquisa em: http://thedailywtf.com/ :-) Eu os ignorava e usava bibliotecas e estruturas enquanto elas o servem e melhoraria o seu programador.

Um desenvolvedor alegará que uma abstração ou modularização é uma prática ruim quando forem capazes ou necessários para interagir com a referida abstração ou modularização e não conseguem entender seu objetivo ou design.

Quando todas as funções (e funções auxiliares) estão em seu próprio módulo?

Estava quieto há algum tempo, mas um manual de um compilador Fortran recomendou escolher identificadores como strings do mesmo comprimento e letras selecionadas aleatoriamente.

Explicação?bem, ele permite a distribuição uniforme dos nomes na tabela hash do compilador interno e, por isso, fornece uma compilação mais rápida.

Acho que o texto que você está citando pertence logo ao lado desta recomendação

Boas abstrações são usadas com frequência

Boas abstrações são referenciadas em 2 ou mais lugares em seu software.

Exemplos:

  • Funções com mais de 2 sites de chamadas.
  • Classe abstrata com mais de 2 classes de concreto.
  • Interfaces com 2+ implementações.
  • Genéricos com mais de 2 instanciações
  • Bibliotecas com mais de 2 usuários.
  • etc.

Uma abstração referenciada em 2 ou mais lugares ajuda a reduzir o tamanho do código, considerando as coisas comuns, e isso é uma coisa boa.

Mas se você tiver muitas abstrações que são referenciadas apenas uma única vez, há uma boa chance de que a abstração não seja necessária.

Alguns exemplos quando surgem abstrações desnecessárias:

  • Escrever Objeto Happy Code (interfaces e classes abstratas em todos os lugares com apenas 1 implementação ou concreção). Essas interfaces e classes abstratas não são necessárias (nesse ponto de desenvolvimento). Princípio de Yagni.
  • Alguém constrói uma interface "nova e brilhante" na antiga, onde as novas funções após alguma conversão chamam apenas a interface antiga. Você pode imaginar o que uma grande bagunça é o resultado, se você repetir várias vezes. Nesse caso, as funções antigas terão um único site de chamada, para que não sejam necessárias. Você precisa mover o código das funções antigas para o novo ou não escrever um novo e modificar o antigo.

Alguns exemplos de abstrações realmente boas:

  • Camada de abstração de hardware: fornece uma única interface aos aplicativos para que eles não precisem desenvolver código para cada tipo de hardware.
  • Sistema de Arquivos: Não importa você usa gordura, NTFS, EXT3. Ele permite que você use arquivos e diretórios, o driver do sistema de arquivos faz o resto.
  • C Idioma: Você não precisa portar seu programa para cada arquitetura da CPU. Apenas compile.

Então, para responder sua pergunta pragmaticamente: As abstrações são ruins, quando são referenciadas de menos de 2 lugares.

No que diz respeito à modularização, é subjetivo: você pode organizar seu código o que quiser. Se o código -fonte da sua biblioteca estiver em um único arquivo de origem, não o tornará pior do que se você o colocar explodindo várias centenas de arquivos.

Ao classificar suas abstrações como boas ou ruins, sempre considere o quadro geral: todo o projeto, toda a linha de produtos, etc.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top