¿Existen razones concretas para no usar bibliotecas y fragmentos de código en gran medida? [cerrado]

42

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?

Henrik P. Hessel
fuente
3
¿Quiso decir " ambiente no corporativo ", o un ambiente donde la gente no coopera ?
Bryan Oakley
Pensé que la razón por la que escribimos en las interfaces y clases abstractas es tan nuestras bibliotecas son más universales, menos dependiente, más flexible ...
iAbstract
1
Tan malo, de hecho, que el cinturón de mi padre se está cayendo.
Thomas Eding
Solo recuerde rendir homenaje y dar crédito cuando sea necesario. Si alguna vez reclamó ese código como suyo, entonces The Belt definitivamente
Hanzolo
3
No, no te hace mal programador, pero tampoco te hace un mejor programador.

Respuestas:

85

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.

usuario281377
fuente
Es lo que pensaba. Tal vez debería comenzar un proyecto de código abierto para deshacerme de este sentimiento :)
Henrik P. Hessel
25
+1 de mi parte La gente nunca debe usar código que no entienda. Eso va para fragmentos y bibliotecas.
Tim Post
55
En cuanto a los fragmentos, siempre reescribo el código solo para estar seguro de saber cómo funciona. Bibliotecas, nunca reescribo a menos que no me funcione por alguna razón.
Rei Miyasaka
12
Tim: Con respecto a las bibliotecas, no tengo que entender cómo hace algo, siempre que sepa lo que hace. Por ejemplo, muchos de nosotros usamos cripto libs; No sé cómo funciona AES, pero sé qué hace y cuándo usarlo.
user281377
@Rei Miyasaka Parece que los fragmentos suelen ser de menor calidad que una biblioteca independiente. Yo mismo pude refactorizar varias partes de fragmentos que usé.
Henrik P. Hessel
24

buenos programadores escriben buen código; Los grandes programadores roban un gran código.

dan_waterworth
fuente
+1 para la línea. ¿Es original?
apoorv020
Deseo, no, es un adagio extraño.
dan_waterworth
Estoy en mi iPhone pero creo que es una cita de Pablo Picasso (reemplazar programadores con artistas)
Henrik P. Hessel
21
Dijo Picasso Good artists copy, Great artists steal.
dan_waterworth
3
Gran cita. Creo que voy a robar ^ H ^ H ^ H ^ H ^ H reutilizarlo.
Wonko el sano
24

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.

Pedazos aliados de Eugene Mayevski
fuente
13

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.

Tim Post
fuente
Más o menos describiste mi aversión contra jQuery, +1.
aaaaaaaaaaaa
5

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.

Dan Ray
fuente
3

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.

Joris Meys
fuente
3

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.

Kevin Cline
fuente
3

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.

pswg
fuente
Me atrapaste. También me refiero a copiar muchas líneas de códigos del trabajo de otros (no bibliotecas), ya que es legal en mi caso. ¿Qué piensas?
Arman
1
@Arman Sigue siendo una buena idea. Desde una perspectiva de mantenimiento, no es tan bueno porque cuando el desarrollador original corrige un error en su código, todavía está allí en el suyo. Todavía es mejor que nada porque al menos el código es bastante similar en ambos proyectos y puede aplicar la corrección de errores por separado sin tener que hacer tanto.
pswg
: Una última pregunta: Entonces, como dijo Mason, si, por ejemplo, descubrí que las 2500 líneas de código (una vez más, no estoy haciendo hincapié en las bibliotecas) son algo útiles para comenzar mi trabajo, y me dejas copiarlo, hazlo crees que es bueno para mi? ¿Es ético?
Arman
@Arman Si es legal, probablemente también sea ético. Si está escrito por un desarrollador de la misma organización, generalmente la organización posee el código y usted tiene todo el derecho de usarlo (de acuerdo con las políticas de la organización). Si fue escrito bajo una organización diferente, necesita permiso de esa organización. En general, si el código no está cubierto por ninguna licencia, al desarrollador original realmente no le importa cómo lo use, pero siempre atribuiré el desarrollador original en comentarios destacados del código (con un enlace si es posible).
pswg
44
Idealmente, también debe comprender cómo funciona el código copiado.
Mike Partridge
1

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.

Mason Wheeler
fuente
1
Me pregunto si "copiar y pegar" cien líneas de código hechas por mi generoso programador sigue siendo ético.
Arman
2
@Arman: Intenta preguntarle.
Mason Wheeler
1
Si la licencia lo permite, ¿por qué no sería ético? Si está tratando de hacer un trabajo, y una rueda ya ha sido inventada y puesta a su disposición de forma gratuita, sería incorrecto (es decir, poco ético) que pierda un minuto de su tiempo reinventándola. Si necesita aprender a reinventar una rueda, eso es completamente diferente.
Darius X.
1

La reutilización legal del código casi no tiene inconvenientes y dos enormes ventajas:

  1. Se hace el trabajo. Este es el más importante para el desarrollo profesional. En última instancia, tiene un trabajo bien remunerado porque sabe cómo hacer que sucedan cosas que perjudicarían a la mayoría de los no programadores; la reutilización le permite alcanzar ese objetivo más rápido, por lo que se vuelve más valioso en su trabajo.
  2. Aprendes cosas Esta es la razón más importante para la superación personal. No hay mejor manera de mejorar la codificación que leer un buen código escrito por otros. ¡Incluso el código incorrecto escrito por otros generalmente te enseña algo! Y no hay mejor manera de entender cómo funciona una biblioteca, API, idioma o dominio que leyendo y mejorando soluciones ya escritas por otros. Ambas cosas suelen ocurrir cuando la reutilización de código existente, porque no hay solución preexistente volverá a hacer bastante lo que necesita - y la consiguiente jugando con la fuente es donde el impulso del conocimiento viene.
Kilian Foth
fuente
Ese es realmente mi objetivo, aprender. Por ahora, vale más que terminar mi proyecto. Es por eso que me siento mal cuando intento hacer que alguien trabaje con poco esfuerzo (no solo refiriéndome a las bibliotecas).
Arman
1

¿El uso intensivo de fragmentos de código y bibliotecas lo convierte en un mal programador?

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.

Jim G.
fuente
0

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
0

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:

  1. Puede que esté malgastando intencionalmente el tiempo de su empleador O
  2. Podría estar entregando intencionalmente un producto menor

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.

Zachary Yates
fuente
0

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í /

una mentalidad que llamo "Nunca inventes aquí" (NeIH). Con esa mentalidad, los activos externos se sobrevaloran y, a menudo, se confía implícitamente en ellos, lo que deja a los ingenieros dedicar más tiempo a adaptarse a las peculiaridades de los activos estándar y menos tiempo a construir sus propios activos.

Siempre hay un equilibrio.

Dimitrios Mistriotis
fuente
-2

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
Parte de este problema no es tanto las bibliotecas, sino la continua rotación tecnológica de los lenguajes y las herramientas de programación, lo que significa que tienes que buscar nuevas bibliotecas en la nueva tecnología para hacer lo mismo de siempre.
gbjbaanb
-2

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.

Jadzia
fuente