Como programador iniciante, devo favorecer a criação de minhas próprias bibliotecas em vez de usar bibliotecas de terceiros?


12

Como programador iniciante em Python, é uma boa ideia criar e entender minhas próprias bibliotecas antes de pular para bibliotecas avançadas de terceiros que contenham a funcionalidade de que preciso?

Alguns projetos (por exemplo, estruturas da web como o Django) provavelmente são grandes demais para essa abordagem. Mas outros projetos (por exemplo, rastreadores da Web, bibliotecas de gráficos, analisador de HTML) parecem viáveis.

Eu me preocupo que a dependência precoce de bibliotecas de terceiros atrapalhe meu crescimento.

Nota: essa pergunta e essa pergunta parecem focar mais os programadores experientes, que provavelmente estão mais focados na eficiência da reutilização do que no benefício da aprendizagem. Minha pergunta, eu acho, é focada em iniciantes.


5
"nada mais que um integrador de bibliotecas e não um programador": os clientes querem que você seja produtivo. Ser capaz de avaliar e integrar bibliotecas existentes é uma habilidade importante que você precisa para ser produtivo. Se não houver uma biblioteca disponível que se adapte às suas necessidades ... caso contrário, se concentrar em resolver o problema de negócio que a sua candidatura está a tratar
Hamish Smith

2
Que distinção você faz entre "integrador de bibliotecas" e "programador". Em 30 anos - mesmo fabricando controladores de dispositivos incorporados em nível de chip - nunca trabalhei sem bibliotecas. Você pode explicar essa distinção?
precisa saber é o seguinte

Mal formulado. Editou.
MikeRand

Prefiro contratar um integrador de bibliotecas. Por que se concentrar em como você pode se concentrar nos recursos? Depois de ver algumas dúzias de bicicletas mal reinventadas, me encolho ao pensar em ver outra. O design da biblioteca é um trabalho árduo e um ato de equilíbrio. Uma loja de software típica não é especializada em design de bibliotecas, não possui as habilidades, recursos e paciência certos para fazê-lo corretamente. Cuidado com reescritas. É melhor usar o código que foi testado por outras pessoas do que começar do zero. Somente quando existe um vácuo é que alguém deve inventar, a IMO.
Job

Respostas:


12

Isso é sempre uma troca.

Como programador iniciante, você deve fazer duas perguntas a si próprio ao considerar reutilizar código e reinventar a roda quadrada:

  1. Vou aprender mais sobre o problema que quero resolver escrevendo tudo do zero ou concentrando-me no domínio do problema e deixando de lado a complexidade não crítica para o problema no qual estou interessado?
  2. É mais importante para mim resolver o problema em questão ou é mais importante que eu compreenda alguns conceitos fundamentais?

Se você não precisa terminar seu projeto, não há problema em girar suas rodas sobre problemas complexos que outras pessoas já resolveram, porque você aprenderá alguma coisa. Mas você provavelmente passará para outra coisa antes de "terminar", o que pode ou não ser importante para você. Outros projetos começarão a parecer brilhantes rapidamente quando você entrar em um domínio complexo que parece simples até você começar a tentar resolvê-lo.

Não fique obcecado em abrir mão do controle, porque está adiando a maneira de pensar de outra pessoa; concentre-se mais no que você está tentando realizar.

Se seu objetivo é escrever um analisador de HTML porque você deseja entender como os analisadores funcionam, faça-o. Se seu objetivo é escrever um analisador de HTML porque você deseja higienizar a entrada do usuário ou transformar alguns bits aleatórios de HTML, provavelmente está focado na coisa errada, porque provavelmente está mais interessado no aplicativo de análise do que na própria análise. . Se você deseja escrever um analisador de HTML porque não quer gastar tempo para entender a biblioteca de outra pessoa, provavelmente está perdendo tempo, porque, pelo menos nesse caso, garanto que outra pessoa passou mais tempo tentando descobrir como para resolver esse problema efetivamente do que você terá. Em casos realmente triviais, você pode economizar tempo não reutilizando código, mas em casos complexos, a menos que a biblioteca que você usa seja uma porcaria ou sua capacidade de ler a documentação e as amostras de código seja uma porcaria,

Por outro lado, eu diria que vale a pena escrever sua própria biblioteca de gráficos, já que você estará mais focado em algoritmos fundamentais e estruturas de dados transferíveis que poderá aplicar a outros domínios, mesmo se acabar usando biblioteca de outra pessoa quando você trabalha nesses problemas.


Estrutura fantástica para pensar sobre o problema. Muito apreciado.
precisa saber é o seguinte

8

A maioria dos programadores iniciantes subestima muito a complexidade de um problema. Isso leva a muitas situações desagradáveis, mas vou me concentrar em apenas uma: eles descartam muitas bibliotecas de terceiros por serem "inchadas" ou "muito complicadas". Em seguida, eles tentam escrever seu próprio código para fazer o mesmo trabalho e fazer uma bagunça completa, porque não previram todas as coisas com as quais teriam que lidar.

Veja o rastreamento da Web e a análise de HTML. Você parece ter uma atitude bastante casual em relação a essas tarefas - o que me leva a acreditar que você nunca tentou executá-las em nada além de uma escala muito pequena. Aqui está apenas uma lista curta e não abrangente dos possíveis problemas com os quais um rastreador da Web real precisa lidar:

  • HTML malformado.
  • Múltiplas codificações de caracteres (o mundo inteiro não roda em ASCII).
  • Links gerados ou modificados por JavaScript.
  • Links para arquivos binários de vários gigabytes.
  • Tipos MIME incorretos.
  • Falhando no meio de uma sessão de rastreamento.
  • Poços de alcatrão.
  • Consultores de SEO.
  • Microsoft

6

Eu me preocupo que a dependência precoce de bibliotecas de terceiros atrapalhe meu crescimento e me torne nada mais que um integrador de bibliotecas e não um programador.

Isso é falso.

A dependência precoce de bibliotecas de terceiros ensinará como as boas bibliotecas funcionam.

O desenvolvimento prematuro é sempre uma perda de tempo. Escrever suas próprias bibliotecas sem estudar cuidadosamente (ou seja, usar) as bibliotecas existentes o condenará a reinventar a roda - mal - pelo resto de sua carreira.

Passei muitas horas faturáveis ​​limpando essas bagunças.


Não tenho certeza se concordo totalmente com isso. Às vezes, as bibliotecas de terceiros são mal escritas e podem realmente ensinar maus hábitos. Se os algoritmos subjacentes são bem compreendidos, em seguida, re-inventar a roda pode ser uma boa idéia, e , em seguida, comparando-as com outras bibliotecas para ver quão bem ou mal o seu empilha até os outros. Em ambos os casos, obviamente, algum tipo de orientação é extremamente benéfico :)
Demian Brecht

Dito isto, não é benefício para estudar API existente :)
Demian Brecht

2
@Demian Brecht: "Às vezes, as bibliotecas de terceiros são mal escritas e podem realmente ensinar maus hábitos". Embora isso possa ser verdade, a maioria dos projetos de código aberto é fortemente examinada por uma comunidade de usuários e as más idéias não suportam a sabedoria da multidão. Além disso, "mal escrito" é um julgamento que o n00b não pode fazer com eficácia.
precisa saber é o seguinte

@ S. Lott: Bem dito (re: n00b) :) E eu acho que você só tem que ter cuidado com que bibliotecas 3o partido que você olhar, como alguns têm muito pequena (se houver) comunidades. Examinar projetos aleatórios no github, por exemplo, pode começar a levá-lo ao caminho errado.
Demian Brecht

2
@Demian Brecht: Você não pode desenvolver nenhum julgamento até ver uma variedade de bibliotecas. Não há como "pré-filtrar" as bibliotecas para um n00b usar. É todas as bibliotecas ou nenhuma biblioteca.
precisa saber é o seguinte

4

Esta frase, que é a primeira, é muito lógica para mim:

Como programador iniciante em Python, é uma boa ideia criar e entender minhas próprias bibliotecas antes de pular para bibliotecas avançadas de terceiros que contenham a funcionalidade de que preciso?

Como você pode acreditar que pode escrever efetivamente bibliotecas de funcionalidades avançadas (sua palavra) como iniciante que sejam tão corretas, com recursos completos e testados quanto as bibliotecas existentes?

Isso nem sequer menciona a quantidade enorme de tempo que você desperdiçaria reinventando uma roda que você não entende como iniciante, eventualmente abandonará quando, se tiver sorte, perceber que está acima da cabeça e precisar aprender o saindo da biblioteca de qualquer maneira.

Pegue a análise de HTML, por exemplo, você menciona isso como possível, não há como você fazer um trabalho melhor do que a Beautiful Soup como iniciante. Puro e simples, você irá falhar. As coisas que você pensa que são viáveis ​​têm enormes problemas de complexidade que você não está levando em consideração; você não conhece o domínio do problema com detalhes suficientes para entender a complexidade; está fadado ao fracasso apenas por causa disso.

Minha opinião é aprender o que outras pessoas fizeram e já resolveram o seu problema para você, até que você não encontre algo que o resolva.


1

Esta é apenas a minha opinião, mas eu sugiro que você crie suas próprias bibliotecas para um código bastante simples e reutilizável. Para algo mais complexo, você pode usar bibliotecas de terceiros, que foram construídas e testadas completamente (espero!). Criar uma biblioteca robusta pode consumir muito tempo, dependendo do que é. Tenho certeza de que você terá muita prática de programação apenas criando seu aplicativo!


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.