Existem razões concretas para não usar bibliotecas e trechos de código com força? [fechadas]

40

No geral, estou programando há cerca de 8 anos e parece-me que estou confiando cada vez mais em bibliotecas e snippets de código aberto (maldito você, GitHub!) para "fazer o trabalho". Eu sei que com o tempo eu pude escrever minha própria implementação, mas gosto de focar no design geral.

Isso é normal (ambiente não corporativo)? O que poderia dar errado se a minha "programação" nada mais é do que colar bibliotecas diferentes?

Eu sei sobre "não reinventar a roda", mas o que acontece quando você não inventa mais uma única roda?

    
por Henrik P. Hessel 06.01.2011 / 09:28
fonte

16 respostas

84

Usando bibliotecas em vez de reinventar a roda: ótimo! É assim que todo mundo deveria fazer isso. Você não é pago para fazer o que já foi feito.

Usando trechos: Contanto que você entenda o que você copia e cole, e desde que você invista tempo para tornar tudo consistente (ao invés de uma colcha de retalhos de estilos e abordagens diferentes), não há nada de errado com isso. / p>     

por 06.01.2011 / 09:47
fonte
23

good programmers write good code; great programmers steal great code.

    
por 06.01.2011 / 09:32
fonte
23

A codificação é o nível mais baixo de programação, de fato. Quanto mais alto nível de abstração você conseguir, melhor será o programador. Escolher as bibliotecas certas (não necessariamente as de código aberto), conectá-las adequadamente e manter o constructo é muito mais difícil, porém mais eficiente e economiza tempo e dinheiro do que escrever tudo sozinho.

    
por 06.01.2011 / 10:11
fonte
13

Adoro escrever minhas próprias bibliotecas. Também adoro realizar meus projetos no prazo. Eu acho que com o tempo, mais bons programadores constroem uma coleção de bits úteis e reutilizáveis. Eu não sei sobre você, mas tenho uma ótima sensação toda vez que uso uma biblioteca que escrevi há cinco anos.

Não há absolutamente nada errado ao usar o código da biblioteca que foi testado e amado com o tempo. Você sabe como funciona, pode contar com sua complexidade e implementá-lo rapidamente.

Dito isto, estou supondo que você entenda o código na biblioteca. Eu estou supondo que, se dado tempo suficiente, você poderia implementar algo de qualidade semelhante.

Eu conheço alguns programadores C realmente bons que poderiam implementar a biblioteca C padrão, alguns deles que têm simplesmente como um exercício de aprendizagem / afiação. Algumas das mais divertidas que tive durante o tempo de passatempo foi trabalhar na biblioteca C do HelenOS.

Portanto, não há nada de errado em usar o código da biblioteca, contanto que você continue curioso e aprenda. Escusado será dizer que você deve não usar código que você não entende, a menos que seu uso seja um esforço para entender como funciona.

    
por 06.01.2011 / 09:50
fonte
5

Eu vou melhor do que alguns outros nessa questão: Eu nem acho que o desenvolvedor "cliente" de uma biblioteca precisa "entender" o código naquela biblioteca.

Sou um desenvolvedor de iPhone relativamente novo (comparado a alguns). Existem MUITAS bibliotecas que eu uso todos os dias que eu nunca poderia ter gerado sozinha, e cujo código está muito acima da minha cabeça. Não importa nem um pouco FORNECIDO:

1) Eu entendo perfeitamente a interface para essas bibliotecas (eu sou um ninja ASIHTTPRequest!)
2) Estou escolhendo bibliotecas que são, em geral, de uso geral, para que eu possa ter certeza de que elas foram bem exploradas para problemas (por exemplo: ASIHTTP, biblioteca JSON de Stig Brautaset, biblioteca obj-c do Facebook, etc.)
3) Falha # 2, é simples o suficiente para que eu possa escolher meu caminho e encontrar / corrigir / personalizar qualquer coisa que precise encontrar / corrigir / personalizar.

Esse # 2 vai ser a parte controversa disso, estou apostando. O fato é que estou confiando na comunidade de código aberto, uma comunidade de desenvolvedores que é certamente mais experiente e muito provavelmente mais inteligente do que eu. Mas esse é o objetivo do código aberto. Então lá vai você.

    
por 06.01.2011 / 14:10
fonte
3

Gostaria de lançar um aviso sobre o uso de bibliotecas. Como usuário freqüente de bibliotecas científicas em Perl e R (e algumas em Java), muitas vezes eu tive que invadir uma biblioteca para evitar custos gerais hediondos. Usar bibliotecas é ótimo, mas cada vez mais bibliotecas são dependentes de outras bibliotecas, o que chama uma terceira biblioteca que usa a biblioteca padrão para executar uma tarefa bastante comum. E cada etapa do processo requer algumas verificações de entrada e saída. Muitas dessas verificações são completamente redundantes, mas pesam no aplicativo, no entanto. E quando usado em um loop, pode começar a pesar bastante.

Além disso, você não pode ter certeza de que as bibliotecas sempre mantêm compatibilidade com versões anteriores ou não contêm bugs. Na verdade, todas as bibliotecas contêm alguns bugs, essa é a natureza do código. Portanto, quanto mais dependente você estiver das bibliotecas, mais erros em potencial você insere no seu código. E esses bugs que você não consegue resolver são tão fáceis sem invadir as bibliotecas novamente.

Usar bibliotecas é uma decisão muito inteligente, mas se e somente se você conhece bem as bibliotecas e o comportamento delas.

Eu sei, pensar que dói e os computadores são baratos, mas ainda assim. Não pensar pode doer mais.

    
por 06.01.2011 / 14:41
fonte
3

Geralmente, copiar grandes quantidades de código-fonte é uma prática ruim. Se o código foi desenvolvido para outro aplicativo em sua empresa, você deve reutilizar o código, extraindo-o em uma biblioteca para ser usado por ambos os aplicativos. Você não deve copiar o código. Copiar o código forçará você a manter duas cópias em vez de uma cópia comum.

    
por 27.03.2013 / 20:27
fonte
3

A reutilização de código é uma boa ideia. Reduz a redundância e promove a manutenção.

O título sugere que você está usando o código como uma biblioteca, mas o texto da sua pergunta indica que você pode estar copiando o código-fonte para um novo projeto. Eu prefiro usar o código de outros desenvolvedores como uma biblioteca, tanto quanto possível.

Existe um problema se o código for ruim ou de alguma forma quebrado ou baseado em um modelo que não se encaixa muito bem em seu aplicativo. Nesse caso, pode ser mais simples para desfazer parte ou todo o código e começar do zero do que tentar entender porque ele foi escrito de uma determinada maneira. Mantenha o outro código em torno de referência, no entanto; você pode se deparar com um problema que não tem certeza de como resolver. As chances são de que o outro desenvolvedor provavelmente tenha encontrado o mesmo problema, e vale a pena ver como eles o resolveram.

    
por 27.03.2013 / 19:32
fonte
1

Isso geralmente é uma boa ideia, desde que não haja problemas legais.

No entanto, certifique-se de ter tempo para entender o que a biblioteca faz e como ela faz isso. Usar uma biblioteca "mágica" para cuidar de coisas que você não entende é uma boa maneira de fazer explodir alguma parte dela porque você a usou de maneira errada, e então você não tem ideia de como consertá-la.

    
por 27.03.2013 / 19:18
fonte
1

O código de reutilização legal não tem quase nenhuma desvantagem e dois grandes benefícios:

  1. Realiza o trabalho. Este é o mais importante para o desenvolvimento profissional. Em última análise, você tem um emprego bem remunerado porque sabe como fazer as coisas acontecerem, o que poderia confundir a maioria dos não programadores; a reutilização permite alcançar essa meta mais rapidamente, para que você se torne mais valioso em seu trabalho.
  2. Você aprende coisas. Esta é a razão mais importante para o auto-aperfeiçoamento. Não há melhor maneira de melhorar a codificação do que ler um bom código escrito por outros. Até mesmo códigos ruins escritos por outros geralmente ensinam alguma coisa! E não há melhor maneira de entender como funciona uma biblioteca, API, idioma ou domínio do que ler e melhorar soluções já escritas por outras pessoas. Ambas as coisas geralmente acontecem quando você reutiliza o código existente, porque nenhuma solução preexistente fará o que for necessário - e os ajustes que surgem com a fonte é de onde vem o aumento do conhecimento.
por 27.03.2013 / 19:34
fonte
1

Does heavy library and code snippet usage make you a bad programmer?

Se você usa bibliotecas e trechos de código em locais apropriados, então, " 'Não' ", isso não significa que você seja um programador ruim. Isso significa que você é um programador inteligente que pode aplicar a sabedoria dos outros em lugares apropriados.

No entanto ...

Leva tempo para encontrar bibliotecas e snippets de código, por isso, se você não conseguir escrever código por conta própria, e precisar gastar horas para encontrar bibliotecas e snippets de código para implementar tarefas triviais, 'Sim' , você é um mau programador.

    
por 28.03.2013 / 13:08
fonte
0

Não. Os programadores devem usar bibliotecas que já estão por aí. Não reinventar a roda. Se você tem um método melhor, você pode ir para ele, senão o que ele realmente faz ao escrever o mesmo código. A única coisa é que você deve saber o que é o código (e somente se isso for importante).

    
por 06.01.2011 / 09:48
fonte
0

Além das razões nas outras respostas, não usar o código (desde que seja adequado para o seu problema) pode ser considerado antiético porque:

  1. Você pode estar desperdiçando intencionalmente o tempo do seu empregador OU
  2. Você pode estar entregando intencionalmente um produto menor

Tenha em mente que ambos são difíceis de determinar antecipadamente.

Além disso, veja Não inventado aqui , que geralmente é chamado de padrão anit.

    
por 27.03.2013 / 20:30
fonte
0

Para fins de conclusão, permita um contra-argumento: link

a mentality that I call "Never Invent Here" (NeIH). With that mentality, external assets are overvalued and often implicitly trusted, leaving engineers to spend more time adapting to the quirks of off-the-shelf assets, and less time building assets of their own.

Existe sempre um equilíbrio.

    
por 13.07.2015 / 17:45
fonte
-2

Eu sou por não usar bibliotecas a menos que seja absolutamente necessário. As dependências limitam a portabilidade e a vida útil. Eu tenho 34 anos em desenvolvimento de software e gostaria de ter pelo menos um dos meus programas durando mais de 3 anos sem ser destruído pela erosão (mudança).

COM (Component Object Model), a resposta há 17 anos, em teoria, grande, na prática questionável, componentes reutilizáveis não realmente, vou usar apenas os componentes muito básicos e somente se eu tiver que.

APIs e SDKs não são muito usados. Se eu dividir o número de linhas de código que eu realmente usei em uma biblioteca, o tempo que gasto para fazer com que elas funcionem versus escrevê-las, acho que é uma lavagem. Eu parei de usar os SDKs completamente, a sobrecarga é extrema.

Frameworks: Zend, Silverlight, WCF, .NET, os sistemas em camadas, sim, eles podem acelerar o desenvolvimento inicial, mas quando chego aos limites, o tempo que gasto corrigindo as rachaduras simplesmente não vale o esforço. Quantos anos têm e são imunes à erosão?

Eu fui para JavaScript e HTML com apenas minhas bibliotecas. Eu limpei o JavaScript usando apenas os tipos de instrução mais comuns. Espero que em 10 anos eu possa escrever algo que vai durar.

    
por 30.01.2011 / 09:01
fonte
-2

Tudo depende. Se você está codificando um jogo, então ele usa desde uma biblioteca (ex. Allegro), mas você não pode realmente ser considerado um programador se você estiver copiando / roubando / pegando emprestado (qualquer que seja) o código de outras pessoas. Eu digo não reinventar a roda, mas para um ponto razoável. Não faça todo o seu programa de trechos que outras pessoas escreveram. Sente-se em seu computador e faça você mesmo ... pare de roubar código. As pessoas ficaram muito preguiçosas hoje em dia e apenas copiam e colam.

    
por 18.07.2011 / 20:39
fonte