Como programador principiante de Python, ¿es una buena idea construir y comprender mis propias bibliotecas antes de saltar a bibliotecas avanzadas de terceros que contienen la funcionalidad que necesito?
Algunos proyectos (por ejemplo, marcos web como Django) son probablemente demasiado grandes para este enfoque. Pero otros proyectos (por ejemplo, rastreadores web, bibliotecas de gráficos, analizador HTML) parecen ser factibles.
Me preocupa que la dependencia temprana de bibliotecas de terceros obstaculice mi crecimiento.
Nota: esta pregunta y esta pregunta parecen centrarse más en programadores experimentados, que probablemente estén más centrados en la eficiencia de la reutilización que en el beneficio de aprendizaje. Mi pregunta, creo, se centra en los principiantes.
fuente
Respuestas:
Esto siempre es una compensación.
Como programador principiante, debe hacerse dos preguntas al considerar la reutilización del código frente a la reinvención de la rueda cuadrada:
Si no tiene que terminar su proyecto, está bien hacer girar sus ruedas sobre problemas complejos que otras personas ya han resuelto, porque aprenderá algo. Pero probablemente pasarás a otra cosa antes de "terminar", lo que puede o no importarte. Otros proyectos comenzarán a verse brillantes rápidamente cuando entres en un dominio complejo que parece simple hasta que comiences a tratar de resolverlo tú mismo.
No te obsesiones con ceder el control porque te estás refiriendo a la forma de pensar de otra persona; concéntrate más en lo que estás tratando de lograr.
Si su objetivo es escribir un analizador HTML porque desea comprender cómo funcionan los analizadores, hágalo. Si su objetivo es escribir un analizador HTML porque desea desinfectar la entrada del usuario o transformar algunos bits aleatorios de HTML, probablemente esté centrado en lo incorrecto, porque probablemente esté más interesado en la aplicación del análisis en lugar del análisis en sí . Si tiene ganas de escribir un analizador HTML porque no quiere tomarse el tiempo para comprender la biblioteca de otra persona, probablemente esté perdiendo el tiempo, porque, al menos en este caso, le garantizo que otra persona ha pasado más tiempo descubriendo cómo para resolver este problema de manera efectiva de lo que tendrás. En casos realmente triviales, puede ahorrar tiempo al no reutilizar el código, pero en los complejos, a menos que la biblioteca que usa sea mala o su capacidad para leer documentación y muestras de código sea mala,
Por otro lado, diría que vale la pena escribir su propia biblioteca de gráficos, ya que estará más enfocado en algoritmos y estructuras de datos fundamentales y transferibles que podrá aplicar a otros dominios, incluso si termina usando la biblioteca de otra persona cuando trabajas en esos problemas.
fuente
La mayoría de los programadores principiantes subestiman enormemente la complejidad de un problema. Esto lleva a muchas situaciones desagradables, pero me enfocaré en una sola: descartan muchas bibliotecas de terceros por estar "hinchadas" o "demasiado complicadas". Luego intentan escribir su propio código para hacer el mismo trabajo, y hacer un lío completo, porque no anticiparon todas las cosas que tendrían que manejar.
Tome el rastreo web y el análisis de HTML. Parece que tienes una actitud bastante informal hacia esas tareas, lo que me lleva a creer que nunca intentaste hacerlas en otra cosa que no sea una escala muy pequeña. Aquí hay una lista breve y no exhaustiva de los problemas potenciales que un rastreador web real debe resolver:
fuente
Eso es falso
La confianza temprana en bibliotecas de terceros enseñará cómo funcionan las buenas bibliotecas.
El desarrollo prematuro es siempre una pérdida de tiempo. Escribir sus propias bibliotecas sin estudiar cuidadosamente (es decir, usar) las bibliotecas existentes lo condena a reinventar la rueda, mal, para el resto de su carrera.
He pasado muchas horas facturables limpiando esos líos.
fuente
Esta oración, que es la primera, es lógicamente problemática para mí:
¿Cómo puede creer que puede escribir efectivamente bibliotecas de funcionalidad avanzada (su palabra) como principiante que serán tan correctas, completas y probadas como las bibliotecas existentes?
Esto ni siquiera menciona la gran cantidad de tiempo que desperdiciarías reinventando una rueda que no entiendes como principiante, que finalmente abandonarás cuando, si tienes suerte, te das cuenta de que estás loco y tienes que aprender el saliendo de la biblioteca de todos modos.
Tomemos como ejemplo el análisis HTML, mencionas esto como factible, no hay forma de que puedas hacer un mejor trabajo que Beautiful Soup como principiante. Claro y simple, fracasarás. Las cosas que crees que son factibles tienen problemas de gran complejidad que no estás teniendo en cuenta, no conoces el dominio del problema con suficiente detalle para comprender la complejidad, estás condenado al fracaso solo por eso.
Mi opinión es aprender lo que otras personas han hecho y ya han resuelto su problema por usted, hasta que no pueda encontrar algo que solucione su problema.
fuente
Esta es solo mi opinión, pero sugeriría crear sus propias bibliotecas para un código bastante simple y reutilizable. Para cualquier cosa más compleja, puede usar bibliotecas de terceros, que se han creado y probado exhaustivamente (¡con suerte!). Crear una biblioteca robusta puede llevar mucho tiempo, dependiendo de lo que sea. ¡Estoy seguro de que obtendrás mucha práctica de programación con solo construir tu aplicación!
fuente
Mira esta pregunta similar, las respuestas son relevantes:
/programming/991487/how-to-assemble-a-project-with-software-products-and-your-own-code
fuente