No geral, estou na programação há cerca de 8 anos e parece-me que estou confiando cada vez mais em bibliotecas de código-fonte aberto e trechos (caramba, GitHub!) Para "fazer o trabalho". Sei que, com o tempo, poderia me escrever sua própria implementação, mas gosto de me concentrar no design geral.
Isso é normal (ambiente não corporativo)? O que poderia dar errado se minha "programação" nada mais é do que colar diferentes bibliotecas?
Eu sei sobre "não reinvente a roda", mas o que acontece quando você não inventa mais uma única roda?
programming-practices
libraries
code-reuse
Henrik P. Hessel
fonte
fonte
Respostas:
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 cola e investe tempo para tornar tudo consistente (em vez de uma colcha de retalhos de estilos e abordagens diferentes), não há nada de errado nisso.
fonte
fonte
Good artists copy, Great artists steal
.A codificação é o nível mais baixo de programação de fato. Quanto maior o nível de abstração possível, melhor o programador. Escolher as bibliotecas corretas (não necessariamente de código aberto), conectá-las adequadamente e manter a construção é muito mais difícil ainda mais eficiente e com economia de tempo e custo do que escrever tudo sozinho.
fonte
Eu amo escrever minhas próprias bibliotecas. Também adoro concluir meus projetos a tempo. Penso que, com o tempo, a maioria dos bons programadores constrói uma coleção de bits úteis e reutilizáveis. Não conheço você, mas sempre me sinto bem sempre que uso uma biblioteca que escrevi há cinco anos.
Não há absolutamente nada de errado em usar o código da biblioteca que foi testado e amado ao longo do tempo. Você sabe como funciona, pode contar com sua complexidade e implementá-la rapidamente.
Dito isto, suponho que você entenda o código na biblioteca. Estou assumindo que, se tiver tempo suficiente, você poderá implementar algo de qualidade semelhante.
Conheço alguns bons programadores de C que poderiam implementar a biblioteca C padrão, alguns deles que têm apenas como exercício de aprendizado / aprimoramento. Uma das coisas mais divertidas que tive durante o tempo no hobby foi trabalhar na biblioteca C do HelenOS.
Portanto, não há nada de errado em usar o código da biblioteca, desde que você continue curioso e aprenda. Escusado será dizer que você não deve usar código que não entende, a menos que seu uso seja um esforço para entender como ele funciona.
fonte
Vou melhorar um pouco do que alguns outros nesta pergunta: nem acho que o desenvolvedor "cliente" de uma biblioteca precise "entender" o código nessa biblioteca.
Sou um desenvolvedor de iPhone relativamente novo (comparado a alguns). Existem MUITAS bibliotecas que eu uso todos os dias que eu nunca poderia gerar por conta própria, e cujo código está muito acima da minha cabeça. Não importa nem um pouco FORNECIDO:
1) Compreendo perfeitamente a interface para essas bibliotecas (sou um ninja ASIHTTPRequest!)
2) Estou escolhendo bibliotecas que são de uso geral e amplo, para ter certeza de que elas foram bem analisadas e exploradas quanto a problemas (por exemplo: ASIHTTP, a biblioteca JSON do Stig Brautaset, a biblioteca obj-c do Facebook etc.)
3) Na falha 2, é simples o suficiente para que eu possa escolher o caminho e encontrar / corrigir / personalizar qualquer coisa que precise ser encontrada / corrigida / customizada .
Esse # 2 será a parte controversa disso, aposto. O fato é que estou confiando na comunidade de código aberto, uma comunidade de desenvolvedores que é certamente mais experiente e provavelmente mais inteligente do que eu. Mas esse é o ponto principal do código aberto. Então, lá vai você.
fonte
Eu gostaria de lançar um aviso para usar bibliotecas. Como usuário frequente de bibliotecas científicas em Perl an R (e algumas em Java), muitas vezes tive que invadir uma biblioteca para evitar custos indiretos hediondos. O uso de bibliotecas é ótimo, mas cada vez mais bibliotecas dependem de outras bibliotecas, 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. 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 a compatibilidade retroativa ou não contêm bugs. De fato, todas as bibliotecas contêm alguns bugs, essa é a natureza do código. Portanto, quanto mais dependente você estiver das bibliotecas, mais possíveis erros você digitará no seu código. E aqueles bugs que você não pode resolver sozinho com facilidade sem invadir as bibliotecas novamente.
O uso de bibliotecas é uma decisão muito inteligente, mas se e somente se você conhece bem as bibliotecas e seu comportamento.
Eu sei, pensar dói e computadores são baratos, mas ainda assim. Não pensar pode doer mais.
fonte
Geralmente, copiar grandes quantidades de código fonte é uma prática inadequada. Se o código foi desenvolvido para outro aplicativo na sua empresa, você deve reutilizá-lo, extraindo-o em uma biblioteca para ser usado pelos dois aplicativos. Você não deve copiar o código. A cópia do código forçará a manutenção de duas cópias em vez de uma cópia comum.
fonte
A reutilização de código é uma ideia muito boa. Reduz a redundância e promove a manutenção.
O título sugere que você esteja usando o código como uma biblioteca, mas o texto da sua pergunta implica que você pode estar copiando o código-fonte em um novo projeto. Eu continuaria usando o código de outros desenvolvedores como uma biblioteca, tanto quanto possível.
Existe um problema se o código estiver incorreto ou de alguma forma quebrado ou com base em um modelo que não se encaixa muito bem no seu aplicativo. Nesse caso, pode ser mais simples descartar parte ou todo o código e começar do zero do que tentar entender por que ele foi escrito de uma determinada maneira. Mantenha o outro código para referência, no entanto; você pode encontrar um problema que não tem certeza de como resolver. Provavelmente, o outro desenvolvedor provavelmente encontrou o mesmo problema, e vale a pena ver como eles o resolveram.
fonte
Geralmente, é uma boa ideia, desde que não haja problemas legais.
No entanto, reserve um tempo para entender o que a biblioteca faz e como ela faz. Usar uma biblioteca "mágica" para cuidar de coisas que você não entende é uma boa maneira de explodir uma parte dela porque você a usou incorretamente e, então, você não tem idéia de como corrigi-la.
fonte
Reutilizar legalmente o código quase não tem desvantagens e duas grandes vantagens:
fonte
Se você usar bibliotecas e trechos de código em locais apropriados, então 'Não' , isso não significa que você é um programador ruim. Isso significa que você é um programador inteligente que pode aplicar a sabedoria de outras pessoas em locais apropriados.
Contudo...
Leva tempo para encontrar bibliotecas e trechos de código; portanto, se você não pode escrever código por conta própria e precisa gastar horas para encontrar bibliotecas e trechos de código para implementar tarefas triviais, então 'Sim' , você é um péssimo programador.
fonte
Não. Os programadores devem usar bibliotecas que já existem. Não reinventar a roda. Se você tem um método melhor, pode fazê-lo, caso contrário, o que ele realmente faz ao escrever o mesmo código. A única coisa é que você deve saber qual é o código (e somente se for importante).
fonte
Além dos motivos das outras respostas, não usar o código (desde que seja adequado para o seu problema) pode ser considerado antiético porque:
Lembre-se de que ambos são difíceis de determinar com antecedência.
Além disso, observe Não inventado aqui , que geralmente é chamado de padrão anti-an.
fonte
Para fins de conclusão, permita um contra-argumento: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -Irmão-de-não-inventado-aqui /
Sempre há um equilíbrio.
fonte
Sou a favor de não usar bibliotecas, a menos que seja absolutamente necessário. As dependências limitam a portabilidade e a vida útil. Tenho 34 anos em desenvolvimento de software e gostaria que pelo menos 1 dos meus programas durasse mais de 3 anos sem ser destruído pela erosão (mudança).
COM (Component Object Model), a resposta há 17 anos, em teoria, na prática, componentes questionáveis e reutilizáveis não são realmente, apenas os componentes muito básicos e somente se for necessário.
APIs e SDKs não são muito úteis. Se eu quebrar o número de linhas de código que eu realmente uso em uma biblioteca, o tempo que gasto para fazê-las funcionar e escrevê-las, acho que é uma lavagem. Eu parei de usar SDKs completamente, a sobrecarga é extrema.
Estruturas: Zend, Silverlight, WCF, .NET, os sistemas em camadas, sim, eles podem acelerar o desenvolvimento inicial, mas quando eu atingi seus limites, o tempo que gasto consertando as rachaduras não vale o esforço. Quantos anos eles têm e são imunes à erosão?
Eu fui para JavaScript e HTML apenas com minhas bibliotecas. Eu reduzi o JavaScript usando apenas os tipos de instrução mais comuns. Espero que em 10 anos eu possa escrever algo que dure.
fonte
Tudo depende. Se você está codificando um jogo, faz uso de uma biblioteca (ex. Allegro), mas você não pode ser considerado um programador se estiver copiando / roubando / pegando emprestado o código de outras pessoas. Não digo reinventar a roda, mas a um ponto razoável. Não faça todo o seu programa de trechos que outras pessoas escreveram. Sente-se no seu computador e faça você mesmo ... pare de roubar código. Hoje em dia, as pessoas ficam com preguiça e copiam e colam.
fonte