Você deve usar uma biblioteca quando pode executar a tarefa sem ela? [fechadas]

33

Estou em uma situação em que posso usar um plug-in JavaScript de código aberto para realizar uma tarefa. Mas quando tentei usá-lo, percebi que precisava redesenhar muitas coisas do que já havia feito e isso acrescenta certa complexidade, na minha humilde opinião, ao projeto. Considerando que posso realizar a mesma tarefa com um código limpo, posso me elaborar e sem precisar alterar o que fiz até agora.

Você deve optar por uma biblioteca de qualquer maneira nesta situação (por uma questão de código de melhor qualidade?)

Billal Begueradj
fonte
3
Como você está medindo "qualidade". Pelo número de linhas de código? Aulas? Complexidade? Manutenção? Resiliência?
LAIV
3
A resposta é NÃO, não importa o que você considere de qualidade ou não. Mas se você nos fornecer sua idéia de qualidade, as respostas abordarão o raciocínio deles para explicar por que o número de bibliotecas não melhora o que você considera qualidade. É uma mera questão de precessão. Como é agora, um simples NÃO responderá à pergunta sem necessidade de explicação.
LAIV
4
Não é uma resposta direta à sua pergunta, mas a idéia de que "esse número" inevitavelmente garante "melhor qualidade" é um erro ao reconhecer as dificuldades de aumentar a qualidade do código. Não há solução rápida para garantir a qualidade. Se houvesse, o problema não existiria. Qualquer um que afirme que uma certa abordagem simples é a solução "tudo para o fim" é (na melhor das hipóteses) generalização excessiva ou (na pior das hipóteses) empurrando sua idéia defeituosa como uma verdade.
Flater
3
O que faz você pensar que usar a biblioteca aumentaria a qualidade do código?
Pare de prejudicar Monica
1
Votou para fechar porque a pergunta parece ter sido reformulada significativamente, e as respostas superiores respondem à versão antiga ... é melhor publicar novamente a pergunta como ela está agora por si própria (além de adicionar os detalhes para evitar o quadro "demais" "votes) ...
AnoE 15/10

Respostas:

54

Como engenheiro, talvez seja adequado pensar nisso como um problema de otimização. Naturalmente, devemos ter um objetivo de otimização . Uma situação comum nesse tipo de situação seria minimizar o Custo Total de Propriedade .

Se você acredita que adicionar o componente de terceiros economizará custos a longo prazo, use-o. Se não, você não deveria. Certifique-se de considerar o custo da manutenção contínua (por exemplo, quando uma nova versão do O / S é lançada, ou uma falha de segurança é encontrada, ou alguma nova especificação do W3C é lançada).

Para muitos problemas triviais, será mais barato aumentar o seu, mas para problemas moderadamente complexos fora da competência principal da organização, geralmente fará sentido contratar terceiros.

Existem outros objetivos a serem considerados também (por exemplo, risco), mas o TCO é o grande.

John Wu
fonte
1
Eu acho que essa resposta precisa de mais votos. - A confiabilidade a longo prazo das bibliotecas pode ser um grande problema. E mesmo que exista uma biblioteca, quem sabe se as APIs mudarão? As bibliotecas são fáceis a curto prazo, mas podem causar problemas a longo prazo. (Observação: as bibliotecas como código-fonte atenuam alguns dos problemas.)
DetlevCM 15/18
6
@DetlevCM A resposta também está dizendo que pode facilmente mudar o caminho. Bibliotecas não triviais terão custos de manutenção associados a eles que você, como usuário da biblioteca, não precisa pagar e talvez não possa pagar se fosse necessário (por exemplo, se você fosse o proprietário da biblioteca).
Cubic
Concordo, mas não se esqueça de considerar também o custo da biblioteca - erros, alterações de design fora de seu controle e grupos de códigos que você não está usando apenas para criar uma única função. Além disso, a biblioteca geralmente não é tão expressiva quanto sua solução pode ser para o seu problema. Além disso, você não pode depurar uma biblioteca externa com a mesma facilidade e, se precisar, terá que lidar com mais problemas de mesclagem posteriormente. Não pense apenas que uma solução de biblioteca é mais leve, considere todos os fatores e não tenha medo de codificar sua própria solução se a biblioteca não se encaixar perfeitamente!
Bill K
36

Bill Gates disse certa vez:

"Medir o progresso da programação por linhas de código é como medir o progresso da construção de aeronaves em peso".

Essa citação vem à mente porque, em última análise, o mesmo pode ser dito para o número de bibliotecas. Como regra, eu não uso bibliotecas, a menos que:

  1. Não há outra maneira de fazê-lo. Ficar sem já não seria economicamente viável produzir o produto dentro do prazo e do orçamento.
  2. Isso economizaria muito tempo, pois exigiria muitos dos recursos da referida biblioteca.
  3. A biblioteca é bem utilizada e qualquer problema em potencial que eu possa ter seria bem documentado.

Idealmente, todas as três condições são atendidas, mas eu aceitaria duas. Resumindo, você não deve adicionar uma biblioteca ao seu programa, a menos que sirva a um propósito. Se você precisar perguntar qual é esse objetivo, provavelmente não deve adicioná-lo ao seu programa. A qualidade do código do seu programa, portanto, se beneficia, pois chama elegantemente cada biblioteca sem ser sobrecarregada pela necessidade de necessariamente reescrever as bibliotecas dentro do seu programa.

Boa sorte!

Neil
fonte
4
@BillalBegueradj Citações significativas, sim. Adequado, não. Não estamos falando de progresso, estamos falando de qualidade de software, e as linhas de código têm uma correlação muito forte com o número de defeitos encontrados. Consulte o artigo O Efeito Confundidor do Tamanho da Classe na Validade das Métricas Orientadas a Objetos, que mostra que todas as outras métricas não têm poder preditivo nos defeitos encontrados após o ajuste pelo LOC, o que significa que o LOC é o melhor preditor de defeitos (ou era na época: 2001). E, a propósito, artigos científicos superam citações famosas.
Theraot
5
@Theraot Você está sugerindo que, como o número de linhas determina o número de defeitos, os programas maiores têm pior qualidade de código do que os programas menores? Não concordo com sua métrica, desculpe. Além disso, se a citação realmente o incomoda, fique à vontade para ignorá-lo.
Neil
3
@ Neil para ser claro, o número de linhas não determina o número de defeitos, tem uma forte correlação com o número de defeitos encontrados. Isso é fácil de entender: quanto maior o código, mais oportunidades de apresentar defeitos. Obviamente, o número de defeitos diminuiria após serem encontrados e corrigidos. Afinal, isso é apenas correlação. Adendo: o LOC supera muitas métricas comuns; consulte o documento para obter detalhes.
Theraot
5
@ Theraot Meu argumento não foi com a correlação de defeitos com o número de linhas. Meu argumento foi com o grande número de defeitos que equivale a má qualidade do código. O Chrome teve sua parcela de defeitos ao longo dos anos, mas eu argumentaria a legitimidade de qualquer reivindicação que sugira que ela seja escrita pior do que um plugin jQuery de 10 linhas mal escrito no github.
305 Neil
3
@Theraot "artigo científico supera citações famosas". - Parece que seu papel realmente suporta a citação ao invés de batidas isso ...
npostavs
14

(Nota: A pergunta original era: o número de bibliotecas melhora a qualidade do código?)

Você provavelmente pode responder a si mesmo: Não, é claro que o simples fato de usar bibliotecas não melhora seu código. Se o fizesse, seria fácil escrever um ótimo código para tudo sem nenhum esforço.

O que as pessoas querem dizer quando recomendam a reutilização por conta própria é que o código em uma biblioteca conhecida provavelmente é mais correto, eficiente e / ou utilizável do que você imaginaria, simplesmente porque os autores passaram muito mais tempo em uma área específica de funcionalidade que você (com seu prazo final para todo o projeto) pode pagar.

Mas isso é apenas uma tendência, não uma lei. Certamente, pode haver bibliotecas que não são tão úteis quanto o roll-your-own. Freqüentemente, isso acontece quando a biblioteca realmente faz muito mais do que o necessário e o faz de uma maneira que o forçaria a adaptar sua própria base de código às convenções deles muito mais do que o razoável. Parece que foi exatamente isso que você encontrou nesta instância.

Kilian Foth
fonte
4

Embora o uso das bibliotecas corretas possa economizar muito trabalho, também há muito custo oculto:

  • As bibliotecas precisam ser atualizadas. Você precisa verificar regularmente se eles receberam atualizações (que podem ser relevantes para a segurança!) E aplicá-las. Cada atualização da biblioteca pode quebrar algo no seu aplicativo. Isso significa que você precisa executar um teste de integração completo posteriormente. Portanto, toda biblioteca de que seu projeto depende aumenta a sobrecarga de manutenção a longo prazo.
  • Algumas bibliotecas Javascript são tão poderosas e usam padrões tão únicos que as pessoas começam a percebê-las como áreas técnicas especializadas. Portanto, cada biblioteca adicional que você adicionar pode assustar os desenvolvedores que não se sentem confiantes em editar código que se baseia em uma estrutura com a qual não estão familiarizados. A contratação de novos programadores de manutenção familiarizados com todas as bibliotecas que você usa pode se tornar um desafio.
  • A adição de uma biblioteca ao seu site aumenta o tempo de carregamento, porque o usuário precisa carregar a biblioteca inteira, mesmo que você use apenas uma pequena parte dela. Algumas bibliotecas populares permitem que você baixe compilações personalizadas apenas com a funcionalidade necessária, mas mesmo assim você ainda incluirá muito código que nunca será executado (ou pior: código que é executado, mas não faz nada útil, porque apenas prepara estruturas de dados para a funcionalidade que você não usa).

Portanto, antes de adicionar outra dependência ao seu projeto para incluir algo que você poderia escrever, faça uma análise de custo / benefício.

Philipp
fonte
E repita essa análise quando você realmente tiver dados reais. Você pode ter subestimado o custo / superestimado o benefício ou a situação pode ter mudado.
Deduplicator
1

Isso não precisa ser uma decisão binária: use apenas uma biblioteca OSS ou programe uma nova solução do zero. Outra opção pode ser a reutilização de partes da biblioteca, se a licença permitir.

Por exemplo, no meu campo (software numérico), uma biblioteca pode ter módulos básicos finos e alguns módulos especializados com os quais estou apenas 80% satisfeito. Então, eu usaria os módulos principais e escreveria um invólucro para os módulos especializados. Ou posso desenvolver meus próprios módulos especializados usando o design e o código dos módulos OSS. Os bits algorítmicos mais difíceis geralmente são reutilizados a partir deles, com apenas o código do andaime modificado. Também posso limpar um pouco do código original. Isso provou uma boa experiência de aprendizado e uma economia de tempo, em comparação com o desenvolvimento do zero.

Tupolev._
fonte
0

Se alguém já fez o trabalho para você, é claro que você deve usá-lo.

A exceção à regra é javascript. Onde eles importaram uma dúzia de outras bibliotecas (versões obsoletas, é claro) para adicionar os recursos de idioma que desejam usar e, em seguida, fizeram o trabalho para você.

Escolha sua estrutura e permaneça nela. Se a biblioteca funcionar com sua estrutura ou js simples, tudo bem. Mas se precisar de uma estrutura diferente, procure outra opção.

Ewan
fonte
4
Muitos fãs de javascript aqui
FCin
0

Bibliotecas e quando usá-las é uma decisão complicada.

Por um lado, você testou bem coisas quase padrão (no meu campo, o FFTW, por exemplo, se enquadra nessa categoria, ou algo como libsndfile), que geralmente são reconhecidos por apenas funcionar, e têm sido coisas padrão nos últimos 20 anos que todo mundo usa.

Por outro lado, você tem coisas aleatórias no github, sem suíte de testes e apenas cerca de 1 mantenedor, geralmente por que se preocupar?

O teste de ácido para mim é, em primeiro lugar, a biblioteca se encaixa na minha arquitetura (às vezes, se você sabe que deseja usar uma determinada biblioteca, acaba projetando em torno disso), e acho que vou acabar depurando o código da biblioteca de outra pessoa ? Um bom proxy para a segunda pergunta é "Existe um conjunto de testes automatizado e como é a documentação?".

Um pouco de depuração não é um grande problema, mas nesse momento o código da biblioteca começa a contar com o meu próprio tamanho de código de uma perspectiva de manutenção (mais ainda se minhas correções não puderem ser enviadas para o upstream por algum motivo).

Eu também diferenciaria bibliotecas e estruturas, apesar de a distinção às vezes não ser tão clara, as estruturas no meu mundo (pequeno núcleo, pesado em DSP) tendem a ser um pé no saco, especialmente se você estiver tentando mesclar mais do que isso. um ou fazer algo um pouco fora das linhas, as bibliotecas às vezes são úteis. Estou ciente de que isso é visto de maneira muito diferente na cena de desenvolvimento da web.

No final das contas, é uma decisão que se resume ao gosto e à experiência, e mesmo os experientes às vezes escolhem mal, ainda pelo menos com uma biblioteca, você sempre pode separá-lo e escrever sua própria implementação, se isso for muito irritante.

Decisões decisões....

Dan Mills
fonte