Me he encontrado unas cuantas veces con comentarios respecto a este estilo de programación, y todos los que he encontrado fallan en mencionar gran parte de los problemas que esto puede acarrear.
¿Cuales son estos problemas?, pues empezando por los más conocidos:
- Copiar y pegar sin entender lo que se está haciendo puede ser una oportunidad desaprovechada para aprender algo y mejorar como desarrollador.
- Es fácil pasar por alto varios detalles si simplemente se copia y pega, la mente es una experta en engañarnos haciéndonos creer que leyó algo cuando no fue así. El tener que teclearlos forza a asegurarse de que se está leyendo con detenimiento todo (un tip que me dieron en un grupo de escritores es que para revisar un escrito es buena idea leerlo en voz alta, así evitas saltarte cosas accidentalmente).
- Si en tu programa hay código que no entiendes, en el momento que tengas que hacerle cambios no vas a saber qué hacer.
... si bien todo esto es cierto, desafortunadamente también he escuchado la opinión de que puede ser conveniente recurrir al famoso Ctrl+C, Ctrl+V (ó Ctrl + Insert, Shift + Insert para los nostálgicos) si la prioridad no es aprender sino entregar el proyecto rápido.
El problema con esta forma de ver las cosas es que ignora por completo la calidad del trabajo o incluso la posibilidad de implicaciones legales.
¿Cuales son estois otros problemas de copiar y pegar código de internet?, pues estos puntos son los que me gustaría que se mencionaran más:
- El código escrito dentro de respuestas a preguntas(como en Stackoverflow o incluso el que es escrito por bots de chats) tiene el propósito de ser un código fácil de entender y auto-contenido.
No tiene como prioridad ser eficiente, ni versatil, ni mucho menos acoplarse al proyecto que estés desarrollando (es decir, seguir su estilo de código, usar las funciones que ya se hayan escrito, y separarse en varias funciones/clases si es pertinente).
Sería como estar escribiendo una novela, preguntar en un chat de Whatsapp por inspiración, y copiar y pegar directamente los mensajes en lugar de entender lo que dicen y escribir ésas ideas siguiendo el tono y narrativa presentes en la novela.
No hay que olvidar que nuestro código está escrito para ser leido tanto por programas(compiladores/interpretes) como por humanos. - Mucho código de internet está licenciado, si se toma de un proyecto de software libre es posible que tenga en su licencia condiciones que exijan que sólo se use únicamente en proyectos de software libre.
Si se toma de una publicación de Stackoverflow, existe el riesgo de que hayan copiado el código de otro lado y se trate de código licenciado.
Incluso en teoría el que escribe algo es automáticamente dueño del copyright de lo que escriba, y salvo que ceda los derechos explícitamente a la comunidad, es posible meterse en problemas legales si se utiliza su código sin su permiso.
Hay ocasiones en las cuales el autor da su permiso, sin embargo, si no lo hace en términos legales claros, es posible meterse en problemas debido a posibles ambigüedades del lenguaje.
El pequeño esfuerzo de escribir el código por uno mismo es bastante menor que lo que supondría consultar con un abogado la posibilidad de copiar y pegar.
Por último, cabe abordar el caso de copiar y pegar código dentro del propio proyecto (en lugar de tomarlo desde internet). En este caso me parece súmamente útil para las pruebas unitarias, pero fuera de las pruebas unitarias hay que tener algo de cuidado, ya que hay que seguir el principio DRY(don't repeat yourself).
Yo no soy nadie para decirles que es malo copiar y pegar tu propio código para producción, e incluso yo mismo lo hago a veces. Cada quien tiene su manera de escribir código y de organizarse y es algo enteramente personal.
Mi intención con decir que hay que tener cuidado y seguir el principio DRY no se trata de decirles que no escriban código repetido sino que libren a sus compañeros (o a sus yos del futuro) de tener que leer código repetido.
No importa si su procedimiento para escribir código implica repetición, lo que importa es el código que llega al repositorio al final del día, y ése código debe de evitar la repetición (salvo para tapar un mal mayor).
No importa si su procedimiento para escribir código implica repetición, lo que importa es el código que llega al repositorio al final del día, y ése código debe de evitar la repetición (salvo para tapar un mal mayor).
"Los buenos programadores copian"
"... los grandes pegan"
No hay comentarios.:
Publicar un comentario