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.
fonte
Respostas:
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:
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.
fonte
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:
fonte
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.
fonte
Esta frase, que é a primeira, é muito lógica para mim:
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.
fonte
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!
fonte
Confira esta pergunta semelhante, as respostas são relevantes:
/programming/991487/how-to-assemble-a-project-with-software-products-and-your-own-code
fonte