En general, estoy en la programación durante unos 8 años y me parece que estoy confiando cada vez más en bibliotecas y fragmentos de código abierto (¡maldita sea GitHub!) Para "hacer el trabajo". Sé que con el tiempo podría escribir mi propia implementación, pero me gusta centrarme en el diseño general.
¿Es esto normal (entorno no corporativo)? ¿Qué podría salir mal si mi "programación" no es más que unir diferentes bibliotecas?
Sé sobre "no reinventar la rueda", pero ¿qué sucede cuando ya no se inventa una sola rueda?
programming-practices
libraries
code-reuse
Henrik P. Hessel
fuente
fuente
Respuestas:
Usar bibliotecas en lugar de reinventar la rueda: ¡Genial! Así es como todos deberían hacerlo. No te pagan por hacer lo que ya has hecho.
Uso de fragmentos: siempre que comprenda lo que copia y pegue, y siempre que invierta el tiempo para hacerlo todo coherente (en lugar de un mosaico de diferentes estilos y enfoques), no tiene nada de malo.
fuente
fuente
Good artists copy, Great artists steal
.La codificación es el nivel más bajo de programación de hecho. Cuanto mayor nivel de abstracción puedas alcanzar, mejor programador serás. Elegir las bibliotecas correctas (no necesariamente las de código abierto), conectarlas adecuadamente y mantener la construcción es mucho más difícil pero más eficiente y ahorra tiempo y dinero, que escribir todo usted mismo.
fuente
Me encanta escribir mis propias bibliotecas. También me encanta terminar mis proyectos a tiempo. Creo que con el tiempo, la mayoría de los buenos programadores crean una colección de bits útiles y reutilizables. No sé sobre ti, pero tengo una gran sensación cada vez que uso una biblioteca que escribí hace cinco años.
No hay absolutamente nada de malo en usar el código de la biblioteca que ha sido probado y amado con el tiempo. Usted sabe cómo funciona, puede contar con su complejidad y puede implementarlo rápidamente.
Dicho esto, supongo que entiendes el código de la biblioteca. Supongo que, si se le da el tiempo suficiente, podría implementar algo de calidad similar.
Conozco algunos programadores de C realmente buenos que podrían implementar la biblioteca de C estándar, algunos de ellos que simplemente tienen como ejercicio de aprendizaje / agudización. Una de las cosas más divertidas que he tenido durante mi tiempo libre fue trabajar en la biblioteca C en HelenOS.
Por lo tanto, no hay nada de malo en usar el código de la biblioteca, siempre y cuando continúes siendo curioso y aprendas. No hace falta decir que usted debe no utiliza código que usted no entiende, a menos que su uso es un esfuerzo para entender cómo funciona.
fuente
Iré mejor que otros en esta pregunta: ni siquiera creo que el desarrollador "cliente" de una biblioteca necesite "entender" el código de esa biblioteca.
Soy un desarrollador de iPhone (en comparación con algunos) relativamente nuevo. Hay MUCHAS bibliotecas que uso todos los días que nunca podría haber generado por mi cuenta, y cuyo código está muy por encima de mi cabeza. No importa en lo más mínimo PROPORCIONADO:
1) Entiendo completamente la interfaz de esas bibliotecas (¡soy un ninja ASIHTTPRequest!)
2) Estoy eligiendo bibliotecas que son de uso general, por lo que puedo estar seguro de que se han revisado y explorado en busca de problemas. (por ejemplo: ASIHTTP, la biblioteca JSON de Stig Brautaset, la biblioteca obj-c de Facebook, etc.)
3) Si falla # 2, es lo suficientemente simple como para que pueda abrirme paso y encontrar / arreglar / personalizar cualquier cosa que necesite encontrar / arreglar / personalizar .
Apuesto a que el # 2 será la parte contenciosa de esto. El hecho es que estoy confiando en la comunidad de código abierto, una comunidad de desarrolladores que ciertamente tiene más experiencia y es muy probable que sea más inteligente que yo. Pero ese es el punto de código abierto. Ahí vas.
fuente
Me gustaría lanzar una advertencia por usar bibliotecas. Como usuario frecuente de bibliotecas científicas en Perl an R (y algunas en Java), a menudo tuve que hackear una biblioteca para evitar costos indirectos espantosos. El uso de bibliotecas es excelente, pero cada vez más bibliotecas dependen de otras bibliotecas, lo que llama a una tercera biblioteca que usa la biblioteca estándar para realizar una tarea bastante común. Y cada paso del proceso requiere algunas comprobaciones de entrada y salida. Muchos de esos controles son completamente redundantes, pero de todos modos pesan en la aplicación. Y cuando se usa en un bucle, puede comenzar a pesar bastante.
Además de eso, no puede estar seguro de que las bibliotecas siempre mantengan la compatibilidad con versiones anteriores o que no contengan errores. De hecho, todas las bibliotecas contienen algunos errores, esa es la naturaleza del código. Por lo tanto, cuanto más dependiente sea de las bibliotecas, más errores potenciales ingresará en su código. Y esos errores no se pueden resolver tan fácilmente sin volver a hackear las bibliotecas.
Usar bibliotecas es una decisión muy inteligente, pero solo si conoce las bibliotecas y su comportamiento bastante bien.
Lo sé, pensar que duele y las computadoras son baratas, pero aún así. No pensar puede doler más.
fuente
Por lo general, copiar grandes cantidades de código fuente es una mala práctica. Si el código fue desarrollado para otra aplicación en su empresa, entonces debe reutilizar el código extrayéndolo en una biblioteca para ser utilizado por ambas aplicaciones. No debes copiar el código. Copiar el código lo obligará a mantener dos copias en lugar de una copia común.
fuente
La reutilización de código es una muy buena idea. Reduce la redundancia y promueve la mantenibilidad.
El título sugiere que está utilizando el código como una biblioteca, pero el texto de su pregunta implica que podría estar copiando el código fuente en un nuevo proyecto. Me apegaría a usar el código de otros desarrolladores como biblioteca tanto como sea posible.
Hay un problema si el código es malo o de alguna manera está roto o se basa en un modelo que no se ajusta muy bien a su aplicación. En ese caso, podría ser más sencillo desechar parte o todo el código y comenzar desde cero que tratar de entender por qué se escribió de una manera determinada. Sin embargo, mantenga el otro código como referencia; puede encontrar un problema que no está seguro de cómo resolver. Lo más probable es que el otro desarrollador probablemente haya encontrado el mismo problema, y vale la pena ver cómo lo resolvieron.
fuente
En general, es una buena idea, siempre que no existan problemas legales.
Sin embargo, asegúrese de tomarse el tiempo para comprender qué hace la biblioteca y cómo lo hace. Usar una biblioteca "mágica" para encargarse de cosas que no entiendes es una buena manera de hacer explotar parte de ella porque la usaste mal y luego no tienes idea de cómo solucionarla.
fuente
La reutilización legal del código casi no tiene inconvenientes y dos enormes ventajas:
fuente
Si usa bibliotecas y fragmentos de código en lugares apropiados, entonces 'No' no significa que sea un mal programador. Significa que eres un programador inteligente que puede aplicar la sabiduría de los demás en los lugares apropiados.
Sin embargo...
Se necesita tiempo para encontrar bibliotecas y fragmentos de código, por lo que si no puede escribir código por su cuenta, y necesita pasar horas para encontrar bibliotecas y fragmentos de código para implementar tareas triviales, entonces 'Sí' , es un mal programador.
fuente
No. Los programadores deberían usar bibliotecas que ya están disponibles. No reinventar la rueda. Si tiene un método mejor, puede utilizarlo, de lo contrario, ¿qué hace realmente al escribir el mismo código? Lo único es que debe saber cuál es el código (y solo si es importante).
fuente
Además de las razones en las otras respuestas, no usar el código (siempre que sea adecuado para su problema) puede considerarse poco ético porque:
Tenga en cuenta que ambos son difíciles de determinar de antemano.
Además, mire No inventado aquí , que comúnmente se conoce como un patrón anit.
fuente
Para fines de finalización, permita un argumento contrario: http://web.archive.org/web/20150326134617/https://michaelochurch.wordpress.com/2015/03/25/never-invent-here-the-even-worse -hermano-de-no-inventado-aquí /
Siempre hay un equilibrio.
fuente
Estoy a favor de no usar bibliotecas a menos que sea absolutamente necesario. Las dependencias limitan la portabilidad y la vida útil. Tengo 34 años en desarrollo de software y me gustaría que al menos 1 de mis programas dure más de 3 años sin ser destruido por la erosión (cambio).
COM (Modelo de objetos componentes), la respuesta de hace 17 años, en teoría genial, en la práctica componentes cuestionables, reutilizables, no realmente, solo usaré los componentes muy básicos y solo si es necesario.
Las API y los SDK no son muy útiles. Si desgloso la cantidad de líneas de código que realmente uso fuera de una biblioteca, el tiempo que dedico a que funcionen en lugar de escribirlas, creo que es un lavado. Dejé de usar SDK por completo, la sobrecarga es extrema.
Frameworks: Zend, Silverlight, WCF, .NET, los sistemas en capas, sí, pueden acelerar el desarrollo inicial, pero cuando alcanzo sus límites, el tiempo que paso reparando las grietas, simplemente no vale la pena. ¿Qué edad tienen y son impermeables a la erosión?
He ido a JavaScript y HTML con solo mis bibliotecas. He eliminado JavaScript usando solo los tipos de instrucciones más comunes. Espero que en 10 años pueda escribir algo que dure.
fuente
Todo depende. Si está codificando un juego, entonces es necesario usar una biblioteca (por ejemplo, Allegro), pero realmente no puede ser considerado un programador si está copiando / robando / tomando prestado (lo que sea) el código de otras personas. Yo digo no reinventar la rueda sino a un punto razonable. No haga todo su programa de fragmentos que otras personas escribieron. Siéntate en tu computadora y hazlo tú mismo ... deja de robar código. La gente se ha vuelto demasiado perezosa en estos días y solo copia y pega.
fuente