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


42

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?


3
Você quis dizer " ambiente não corporativo " ou um ambiente em que as pessoas não cooperam ?
Bryan Oakley

Eu pensei que a razão por que escrever em interfaces e classes abstratas é tão nossas bibliotecas são mais universal, menos dependente, mais flexível ...
iAbstract

1
Tão ruim, de fato, que o cinto do pai está saindo.
Thomas Eding 27/03

Lembre-se de prestar homenagem e dar crédito onde o crédito é devido. Se você nunca alegou que o código como o seu, em seguida, O Cinturão definitivamente
hanzolo

3
Não, isso não o torna um programador ruim, mas também não o torna um programador melhor.

Respostas:


85

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.


Isso foi o que eu pensei. Talvez eu deva começar um projeto open source para se livrar desse sentimento :)
Henrik P. Hessel

25
+1 de mim. As pessoas nunca devem usar código que eles não entendem. Isso vale para trechos e bibliotecas.
Tim Post

5
Quanto aos trechos, eu sempre reescrevo o código sozinho, apenas para ter certeza de que sei como ele funciona. Bibliotecas, nunca reescrevo, a menos que não funcione para mim por qualquer motivo.
Rei Miyasaka

12
Tim: Em relação às bibliotecas, não preciso entender como isso faz alguma coisa, desde que eu saiba o que faz. Por exemplo, muitos de nós usam bibliotecas de criptografia; Não sei como o AES funciona, mas sei o que faz e quando usá-lo.
precisa saber é o seguinte

@Rei Miyasaka Parece que os Snippets geralmente têm menos qualidade do que uma biblioteca independente. Eu próprio refatorei várias partes dos trechos que usei.
Henrik P. Hessel

24

bons programadores escrevem um bom código; grandes programadores roubam ótimos códigos.


+1 para a linha. É original?
precisa saber é o seguinte

Eu desejo, não, é um ditado estranho.
dan_waterworth

Eu estou no meu iPhone, mas eu acho que é uma citação de Pablo Picasso (substitua programadores com artistas)
Henrik P. Hessel

21
Picasso disse Good artists copy, Great artists steal.
dan_waterworth

3
Ótima citação. Acho que vou roubar ^ H ^ H ^ H ^ H ^ H reutilizá-lo.
Wonko the Sane

24

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.


13

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.


Você descreveu minha aversão ao jQuery +1.
Aaaaaaaaaaaa

5

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ê.


3

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.


3

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.


3

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.


Você me pegou lá. Também me refiro a copiar muitas linhas de códigos do trabalho de outros (não de bibliotecas), pois é legal no meu caso. O que você acha?
Arman28

1
@ Arman Ainda é uma boa ideia. Do ponto de vista da manutenção, não é tão bom porque, quando o desenvolvedor original corrige um bug em seu código, ele ainda existe no seu. Ainda é melhor que nada, porque pelo menos o código é bastante semelhante nos dois projetos e você pode aplicar a correção de erros separadamente, sem precisar fazer o mesmo.
Pwg # 27/13 /

: Uma última pergunta: como o que Mason disse, se, por exemplo, descobri que as 2500 linhas de código (novamente não estou enfatizando as bibliotecas) são úteis para iniciar o meu trabalho, e você me permite copiá-lo, você acha que é bom pra mim? É ético?
Arman27

@ Arman Se for legal, provavelmente também ético. Se foi escrito por um desenvolvedor da mesma organização, geralmente a organização possui o código e você tem todo o direito de usá-lo (de acordo com as políticas da organização). Se foi escrito em uma organização diferente, você precisa da permissão dessa organização. Geralmente, se o código não estiver coberto por nenhuma licença, o desenvolvedor original não se importa com a maneira como você o usa, mas sempre atribuirei o desenvolvedor original a comentários de código destacados (com um link, se possível).
Pwg # 27/13

4
Idealmente, você também deve entender como o código copiado funciona.
Mike Partridge

1

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.


1
Eu me pergunto se "copiar e colar" uma centena de linhas de código feitas por meu generoso colega programador ainda é ético.
precisa

2
@Arman: Tente perguntar a ele.
Mason Wheeler

1
Se a licença permitir, por que não seria ético? Se você está tentando fazer um trabalho, e uma roda já foi inventada e disponibilizada para você gratuitamente, seria errado (por exemplo, antiético) você perder um minuto do seu tempo reinventando-a. Se você precisa aprender a reinventar uma roda, isso é completamente diferente.
Darius X.

1

Reutilizar legalmente o código quase não tem desvantagens e duas grandes vantagens:

  1. Isso finaliza o trabalho. Este é o mais importante para o desenvolvimento profissional. Por fim, você tem um emprego bem remunerado, porque sabe como fazer as coisas acontecerem, o que prejudicaria a maioria dos não programadores; a reutilização permite alcançar esse objetivo mais rapidamente, tornando-se 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 outras pessoas. Mesmo códigos ruins escritos por outras pessoas geralmente ensinam alguma coisa! E não há melhor maneira de entender como uma biblioteca, API, idioma ou domínio funciona do que ler e melhorar soluções já escritas por outras pessoas. As duas coisas geralmente acontecem quando você reutiliza o código existente, porque nenhuma solução pré-existente faz exatamente o que você precisa - e a conseqüente modificação da fonte é a origem do aumento do conhecimento.

Esse é realmente o meu objetivo, aprender. Por enquanto, vale mais do que terminar meu projeto. É por isso que me sinto mal ao tentar ter o trabalho de alguém com pouco esforço (e não apenas com referência a bibliotecas).
Arman28

1

O uso pesado de bibliotecas e trechos de código faz de você um programador ruim?

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.


0

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).


0

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:

  1. Você pode estar desperdiçando intencionalmente o tempo de seus empregadores OU
  2. Você pode estar entregando intencionalmente um produto menor

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.


0

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 /

uma mentalidade que chamo de "Nunca invente aqui" (NeIH). Com essa mentalidade, os ativos externos são supervalorizados e, frequentemente, implicitamente confiáveis, deixando os engenheiros gastando mais tempo se adaptando às peculiaridades dos ativos disponíveis no mercado e menos tempo construindo seus próprios.

Sempre há um equilíbrio.


-2

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.


parte desse problema não é tanto as bibliotecas, mas a constante rotatividade de tecnologias de linguagens e ferramentas de programação que significa que você precisa procurar novas bibliotecas na nova tecnologia para fazer a mesma coisa.
precisa

-2

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.