it-swarm-es.com

¿Cuál es su opinión sobre el uso del código de otras personas?

Según esto pregunta: decidí implementar la especificación de BitTorrent para hacer mi propio cliente/rastreador.

Ahora, estaba revisando la especificación, había terminado el 70% de la implementación de BEncoding cuando encontré un enlace a una implementación de BEncoding en C # escrito por otra persona.

Normalmente, si estuviera trabajando en el código de producción, lo usaría como referencia para verificar mi propio trabajo y una línea de base para escribir algunas pruebas para ejecutar mi código, pero me encontré pensando "Estoy haciendo esto, es un proyecto por diversión sin plazos; realmente debería implementarlo yo mismo, podría aprender mucho ", pero una voz en mi cabeza decía" ¿Por qué molestarse en reinventar la rueda? Tome el código, trabaje para que sea usted eres estilo/convención de nombres y ya está ".

Entonces estoy un poco en conflicto. Terminé haciendo lo último, y en algunas partes me pareció mejor que lo que había escrito, pero casi siento que 'hice trampa'.

¿Cuál es tu opinión? ¿Me está engañando? ¿Perfectamente normal? ¿Una oportunidad perdida para aprender por mi cuenta? ¿Una buena oportunidad para haber aprendido del ejemplo de otra persona?

29
Steven Evers

Si he visto más, es poniéndome sobre los hombros de gigantes.

Isaac Newton

No es una trampa si el código es de código abierto y te has tomado el tiempo para entenderlo. Ahora, obviamente, esto no siempre es posible debido a limitaciones de tiempo, pero trate de tener una visión general de alto nivel del código que está utilizando. Recuerde siempre que C se derivó de B.

24
ChaosPandion

Copia de uno, es plagio; copia de dos, es investigación.

n buen oyente no solo es popular en todas partes, sino que después de un tiempo se entera de algo.

En otras palabras, copie todo lo que quiera, pero también aprenda algo de él. Ningún gran investigador/científico/ingeniero llegó a ninguna parte confiando solo en su propio trabajo.

14
Rook

Mientras que Newton podría decir: "Si he visto un poco más lejos que otros, es porque me he parado sobre los hombros de gigantes", me veo obligado a decir: "Hoy nos paramos los unos sobre los otros". Quizás el problema central al que nos enfrentamos en toda la informática es cómo debemos llegar a la situación en la que construimos sobre el trabajo de los demás en lugar de rehacer tanto en un trivialmente diferente manera.

- R.W. Hamming , conferencia del Premio Turing de 1968 [énfasis mío]

6
Roger Pate

En esa situación, realmente depende de cómo sted se siente al respecto. Revisé un par de cosas y las hice compatibles con Markdown. ¿Reescribí el analizador de rebajas en PHP? No, prestado el de otra persona. También agregué PDF conversiones. ¿Escribí mi propio convertidor PDF?) Una mirada a la documentación de Zend_PDF me hizo querer correr gritando a las colinas, así que lo haré confiesa nuevamente usar el código de otra persona.


Si la expectativa es un proceso de aprendizaje, lo usaría como guía. Escribe el tuyo y luego compara. Use la comparación para mejorar su propio código.

4
Josh K

La mejor manera de responder a esta pregunta es evaluar sus objetivos. ¿Por qué empezaste este proyecto tuyo?

¿Querías aprender la tecnología, o experimentar con un nuevo idioma o una nueva técnica? Si es así, escribe el tuyo.

¿O empezaste porque querías un producto final que funcionara? ¿El proyecto llena alguna necesidad tuya? Si es así, pida prestado y pida prestado con frecuencia.

3
AShelly

bueno, aquí están mis 2 centavos ... ¿Por qué las universidades insisten en que los estudiantes escriban sus propias tablas hash, listas de enlaces, matrices, etc. en lugar de permitirles usar las bibliotecas existentes? 1) para que comprendan los conceptos subyacentes de esas estructuras de datos ...

Pero, como desarrollador profesional, estoy dispuesto a no reinventar la rueda, a menos que esté aprendiendo algo nuevo o mejorando la "rueda" actual. Estoy dispuesto a aprender del código de otras personas porque a veces no tengo tiempo para escribir una nueva biblioteca, o a veces solo necesito un módulo funcional sin saber que funciona internamente ... como si condujera un automóvil sin comprender realmente todo maquinaria ...

Pero, para el enriquecimiento personal, bueno, depende totalmente de usted: P. Aprender todo lo que pueda sin reinventar la rueda sería un buen director. O ... inventa algo que reemplace la rueda ...

2
aggietech

Está utilizando C #, por lo que supongo que ya está utilizando un marco (.Net o Mono). El .Net Framework viene con muchas cosas ya hechas por usted (por ejemplo, la comunicación tcp), y estoy seguro de que también copia algunos fragmentos de código que encuentra en algunos sitios como stackoverflow.com, entonces, ¿por qué reinventar la rueda?

Además, ya aprendiste lo suficiente (haciendo el 70% por ti mismo) para entender el código del otro chico y darte cuenta de que en algunos puntos era mejor que el tuyo.

Si el código se ajusta a tus necesidades y es de código abierto, tómalo. Pero, por otro lado, lo que no haría es cambiar el código para hacerlo más como el tuyo. Agregue sus comentarios, configure algunos encabezados para saber de dónde extrajo el código, pero no lo modifique si no puede mejorarlo.

2
jmservera

"El mejor código es el código que no tienes que escribir". - Desconocido

Si el código es de uso gratuito y los términos de la licencia son adecuados para lo que lo usará, ¿cuál es el problema?

Usar el código de otras personas es una excelente manera de ahorrar tiempo y esfuerzo, y mientras lo hagas legalmente, creo que solo pueden salir cosas buenas.

2
Jasarien

Mi respuesta será sesgada desde mi punto seguro, pero usar código de otras personas es como jugar con un cuadro negro: sabes la entrada y la salida, pero no sabes qué está pasando en absoluto, pero también hay algo cierto: tú no es necesario reinventar la rueda todos los días

Dependiendo de cómo se escribió el código de terceros, también puede trazar una línea con una advertencia "desde aquí ingresamos al dominio de las consecuencias desconocidas"

1
rmontagud