Mastering en copy - paste.

Mucha gente es muy floja, pero para disfrutar de no tener nada que hacer, hay que pensar mucho y aplicar conocimiento para que una tarea complicada se facilite. En esta entrada voy a describir un procedimiento que te ayude a seguir flojeando:

a) Localiza codigo que se repite constantemente en cada proyecto, este codigo debe de ser de pocas lineas (esto es relativo), y no puede aplicar para hacer una libreria, por ejemplo, el acceso a la base de datos, el manejo de cadenas, crear threads, etc.

b) Busca en internet codigo que haga esa tarea, investiga y entiende perfectamente su funcionamiento.

c) Antes de hacer un copy - paste debes de entender bien los requerimientos, una vez que los hayas entendido, aplica el copy - paste, y edita el codigo para que cumpla los requerimientos.

d) Una vez que verifiques que esta trabajando bien, afina el codigo que tienes, con los conocimientos ya obtenidos.

e) Si te ayudan otros programadores para revisar y mejorar el codigo, el resultado tendra mas calidad (buena observacion hecha por ezamudio y OscarRyz).

e) Junta mucho codigo, para diferentes tareas, siguiendo los puntos arriba mencionados y mantenlo actualizado.

Despues de un tiempo ese codigo que tienes, debido a que esta probado, va a ser muy seguro, algo asi como contra bugs, y te va evitar dolores de cabeza debido a que ya esta probado.

Haciendo un resumen de lo que mencionaron ezamudio, OscarRyz y bferro (y esperando que no se escape ningun comentario importante):

1) Debes de tener cuidado con el tipo de licencia que tiene el codigo que agregas a tus proyectos.

2) Debes mencionarle a tu cliente, o la empresa en donde trabajas, si agregaste codigo que tiene licencia y las restricciones de esta licencia.

3) Si la aplicacion tiene codigo o librerias GPL o similares, deberas de poner a disposicion el codigo del proyecto, al usuario.

4) Si la licencia es GPL o similar, el cliente no esta forzado a ofrecer la aplicacion a otra persona o empresa (es decir, puede ser de uso personal).

5) Si la licencia es GPL o similar, el dueño del proyecto esta forzado a poner a disposicion el codigo al usuario, si quiere lucrar con la aplicacion.

Aunque creo que estas observaciones aplican a cualquier proyecto de software.

El siguiente paso seria crear una libreria, pero prefiero escribir antes de otras cosas.

Atentamente:
El flojo mayor.

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de ezamudio

probado?

Y cómo sabes que está probado? Porque lo copiaste de internet?

Y qué tal si lo copiaste de un blog que puso alguien con el propósito expreso de que lo copiaras confiando en que está probado, y es código que compila bien y parece funcionar bien, pero trae errores muy sutiles? Y el blog parece perfectamente válido porque el que lo puso tiene dos o tres cuates que comentan en el mismo y luego deshabilitan comentarios para evitar que alguien los delate... una especie de honeypot para "programadores" flojos...

Ya en serio... un lugar donde puedes poner tus pedacitos de código es en github. No tienes que subirlo a un repositorio porque como dices son pedacitos que realmente no tienes como parte de un proyecto; pero puedes tenerlos como gists.

Tener tu código a la vista de todos te motiva a escribirlo mejor. Es como hacer ejercicio en un gimnasio vs. hacer ejercicio en tu casa: si eres muy disciplinado, harás ejercicio en tu casa siguiendo una rutina estricta y estarás en buena forma. Si eres como la mayoría de la gente, pues al principio tal vez seguirás la rutina pero luego te da flojera y un día preferiste levantarte más tarde y otro día te dio hambre a la mitad de la rutina y la dejaste y otro día hacía mucho frío y mejor no hiciste las abdominales en el suelo, etc etc etc. Si vas a un gimnasio y hay más gente, nomás por la pena de que te vean vas a hacer el ejercicio que tienes que hacer, tal vez porque te quieres lucir con alguien ahí o simplemente porque no quieres quedar como el flojonazo que nomás hizo 3 abdominales y se fue.

Cuando escribes código que nadie ve, ni los otros miembros de tu equipo porque confiaron ciegamente en ti, ni el cliente porque lo único que le interesa es que el sistema funcione, etc... pues no vas a escribir tan buen código como cuando sabes que está disponible en internet y que cualquier persona lo puede ver; tal vez programadores con mucho menos experiencia que tu, tal vez programadores con mucha mas experiencia que tu...

Imagen de beto.bateria

Que tal ezamudio: Tal vez el

Que tal ezamudio:

Tal vez el codigo no este probado, pero como mencione en el punto "d" debes de verificarlo.

Y respecto al ultimo parrafo, pues se refleja en la calidad de codigo la responsabilidad que tienes como persona.

Aunque no se menciona explicitamente, existe un circulo de calidad en el procedimiento, el cual es: escribes, verificas y mejoras.

Mencione gente floja, como para llevar en relax el comentario, pero si eres irresponsable, verdaderamente flojo, apatico o algo similar, con cualquier metodologia vas a hacer las cosas mal.

Si y no. La idea no es mala,

Si y no.

La idea no es mala, pero tiene el inconveniente de que no escala cuando te empiezas a llenar y llenar de ejemplos.

Lo siguiente es pretender crear directorios y empezarlos a dividir por categorías ( Strings, IO, Threads, Listas, etc ) y los ejemplos seguirán creciendo.

Después de un tiempo se volverá un relajo y querrás hacer un mini sitio web para agregarle búsqueda y solo entonces lograrás haber replicado ( y mal ) lo que existe desde los primeros días de Java; existe un sitio que antes se llamaba The java almanac y ahora por alguna razón ( supongo que legal con Sun / Oracle ) se vino a llamar:

Pero aún así no te garantiza tener un buen ejemplo para la tarea ( aunque lograras ponerle un buscador que difícilmente vencerá a Google ), porque por más que lo analices para revisar su calidad siempre hay posibilidad de que lo entiendas mal y por lo tanto tu análisis de calidad ignore algunos aspectos. Es aquí donde entra en juego algo muy importante que menciona @ezamudio la revisión por otros.

Un ejemplo es: "Como leer en un string el contenido de un archivo"

En muchos lugares ( por ejemplo el exampledepot mismo ) el ejemplo luce más o menos así:

 

Y yo durante mucho tiempo cuando necesitaba leer un archivo así lo hacía ( que eran pocas veces la verdad ). Esta forma no esta mal en realidad, pero tiene una deficiencia importante: ¡transforma la entrada innecesariamente!. Se está eliminando el caracter nueva línea original y se está agregando otro que no necesariamente es el mismo.

Pero no se puede llegar a esta conclusión por si solo ( a menos que ya lo supieras en cuyo caso no lo estarías haciendo ).

Yo descubrí esto hasta que se me ocurrió preguntarlo en StackOverflow y recibí al menos dos respuestas de muchísima calidad y me explicaron que tenía de inconveniente

Algo similar me sucedió cuando hice otra pregunta acá sobre expresiones regulares donde @ezamudio me comentó como hacer de otra forma.

Así que incorporar la revisión de personas que tengan un conocimiento diferente al tuyo fortalece tu pedazo de código.

Coleccionar pedazos de código puede volverse difícil con el tiempo. Internet ya tiene dos herramientas super valiosas para ello: 1) sitios web 2) Google, lo único que hace falta es saber encontrar las palabras correctas para tu búsqueda.

Yo pensaba que ser flojo era una característica deseable de un programador, porque así piensas como hacerle para no repetir la misma tarea ( automatizar la solución ) pero ya con el tiempo me dí cuenta que ser flojo se parece mucho a ser muy listo pero no es igual. Ser flojo se queda corto y ser inteligente es mejor. Desde entonces no me considero un programador flojo sino inteligente :)

Imagen de Shadonwk

¿Que caso tiene bajarlo de

¿Que caso tiene bajarlo de internet si debes verificarlo?
¿Si son pedacitos de código, no es mejor que lo escribas tu?

Imagen de ezamudio

licencia de uso

Otra cosa que están ignorando por completo es la licencia de uso.

El hecho de que el código esté publicado en internet no significa que sea de dominio público. Deben revisar qué licencia tiene ese código. Y si escriben sus propios fragmentos y luego los tienen en algún lugar en internet, pónganle muy claramente qué licencia tiene dicho código.

Un ejemplo muy simple: Si tomas algo de código de jAlarms, ese código no es de dominio público. El copyright es mío, y la licencia es LGPL, que significa que puedes usar jAlarms tal como está, dentro de aplicaciones propietarias, siempre y cuando no metas el código en tu aplicación sino que se mantenga como una biblioteca de software separada. Si copias código de jAlarms y lo pegas en tu aplicación, entonces tu aplicación se vuelve GPL.

Imagen de beto.bateria

Que tal ezamudio:Una

Que tal ezamudio:
Una pregunta, en caso de que tomes algo de codigo de jAlarms (por ejemplo), que tanto debe de ser cambiado para que ya no sea considerado tuyo?

Hago esa pregunta porque comente:

c) Antes de hacer un copy - paste debes de entender bien los requerimientos, una vez que los hayas entendido, aplica el copy - paste, y edita el codigo para que cumpla los requerimientos.

d) Una vez que verifiques que esta trabajando bien, afina el codigo que tienes, con los conocimientos ya obtenidos.

e) Junta mucho codigo, para diferentes tareas, siguiendo los puntos arriba mencionados y mantenlo actualizado.

Si sigues esos tres puntos, con el tiempo el codigo va a cambiar.

Imagen de beto.bateria

Shadonwk¿Que caso tiene

Shadonwk

¿Que caso tiene bajarlo de internet si debes verificarlo?
¿Si son pedacitos de código, no es mejor que lo escribas tu?

Se supone que debes de investigar como trabaja ese codigo, acuerdate que estamos hablando de un Mastering (jojo), e irlo mejorando con el tiempo, tambien considera que la calidad de codigo que encuentras en internet no siempre es la optima.

El proposito es tener una coleccion de codigo, con buena calidad, que nos pueda ayudar con nuestra tarea diaria.

@beto.batería. que tanto

@beto.batería.

que tanto debe de ser cambiado para que ya no sea considerado tuyo?

Con que le pongas un espacio es suficiente. El copyright de ese espacio ( o de todas las modificaciones que hagas ) es tuyo solamente. El copyright de jAlarms sigue siendo de Enrique. Pero ahora tus contribuciones ( el espacio que agregaste ) deben de adherirse a la licencia GPL que esta hecho para evitar que ocultes esas modificaciones.

Por lo tanto si tú haces una aplicación y le das copy/paste al código de jAlarms que hace .. no sé envía mensajes por twitter, entonces toda tu aplicación tiene ahora licencia GPL ( aunque le hayas puesto un log solamente ).

Si modificas ese código para que no se parezca pasa exactamente lo mismo. ¿Hasta que grado? Pues hasta el grado que no sea un trabajo derivado. Es decir si dice:

 

Y tu modificación extrema ahora dice:

 

Pues entonces ya no es una derivación, ese ya es un trabajo original tuyo.

Imagen de ezamudio

copyright

OscarRyz tiene algo de razón, solamente...

El copyright del código es mío. Si lo copias a tu aplicación y le metes un espacio como dice, en un pleito legal donde se discuta si estás infringiendo mi copyright, voy a ganar. Lo tienes que modificar lo suficiente como para poder comprobar que no me lo copiaste y luego lo modificaste, al final es de que si se parece lo suficiente al original como para que parezca copiado o no.

Pero además del copyright, está lo de la licencia GPL y ahí Oscar tiene razón: Aunque lo modificaras mucho, si logro comprobar que es un trabajo derivado entonces ya no es cosa de que infrinjas el copyright de mi código o no, sino que además estás violando la licencia del mismo (si es que lo metiste a una aplicación que NO es GPL).

Imagen de bferro

No es necesario "publicar" las modificaciones

The GPL does not require you to release your modified version, or any part of it.
You are free to make modifications and use them privately, without ever releasing them.
This applies to organizations (including companies), too; an organization can make a modified version and use it internally without ever releasing it outside the organization.

De esa forma, una compañía puede usar código con licencia GPL y no hacer público su sistema.

Ahh es verdad. Ahí solo

Ahh es verdad.

Ahí solo tienes que hacer tu código público si quieres "redistribuir" el trabajo derivado no bferro?

Por ejemplo, se hace una aplicación que incluye código de jAlarms, si lo uso internamente no pasa nada, pero si quiero poner: "Xyz system ( ahora con alarmas )" y permitir que lo descarguen ahí es donde entran las reglas en juego no?

Supongo que también aplica si yo hago software para alguien más ( no soy empleado de ese alguien sino una consultoría ) y cuando le entrego su producto ahí va el código de ezamudio y tengo que hacer publico los cambio ( que ahora que lo pienso no tiene sentido porque si construyo software para alguien de todas formas le entrego el código fuente )

Imagen de ezamudio

lo que hagan con fuente

No recuerdo si lo comenté aquí o en otro post, pero ya había comentado yo antes esto que dice bferro. Es muy cierto que no estás obligado a publicar nada. La GPL te obliga a entregar fuentes junto con binarios, si lo distribuyes, pero no te obliga a distribuir el software (eso sería absurdo).

Las broncas de meterle código GPL a tu software privado son:

- Un día se le ocurre al director que pueden vender ese software a otras empresas
- Alguien compra tu empresa y decide que ese software vale la pena venderlo a otras empresas
- Tu empresa es una consultora y un día alguien le pide un software idéntico a ese que ya tienen y pues se les hace fácil nomás moverle dos tres cosas y cobrárselo (ahí además pueden entrar otro tipo de broncas).

Y las broncas de meterle código GPL al software que haces para tus clientes son:

- Es algo difuso y confuso definir si estás distribuyendo el software porque es un trabajo por encargo que es solamente para el cliente... al hacerlo tú como empleado de empresa X pero desde el principio sabes que es para cliente Z, hay transferencia de propiedad intelectual que se pueda considerar "distribución"?
- El cliente está consciente y tiene super bien claro que le hiciste software GPL? Porque para él, entran en efecto las broncas que mencioné anteriormente (si lo quiere vender luego, etc).

Por supuesto un cliente puede pedirte que el software que le vas a hacer sea GPL. Por ejemplo yo te puedo pedir que me desarrolles un sistema de nómina para mi empresa, pero que lo hagas GPL. De entrada quiero que nada más me lo des a mí, pero tal vez en paralelo yo estoy haciendo tratos con otras empresas de cuates míos, las cuales no son mi competencia porque ni nos dedicamos a lo mismo, y les digo que me están haciendo un software de nómina super fregón y pues si lo quieren le pueden entrar con un varito y se los paso (explicándoles de la GPL y demás) y que ellos se lo pueden pasar a sus cuates, etc. Por qué tendría sentido esto? Pues porque la nómina es un requerimiento para mí, es puro costo, no es parte de mi core business, y lo mismo para los cuates a quienes se la ofrezco; si me ayudan a cubrir el costo de la misma y se quedan con una copia, luego ellos pueden pedir modificaciones o alguno encontró un bug y pide al consultor original que lo arregle pero los demás nos beneficiamos. Y al rato si lo ponemos en internet, pues otros lo podrán bajar gratis pero si le encuentran broncas o quieren agregarle monerías lo pueden hacer y yo me beneficio de esas mejoras que ya ni estoy pagando (pero el software existe porque al principio pues lo patrociné en su mayor parte yo).

Imagen de Sr. Negativo

Buenos puntos, aunque

Buenos puntos, aunque prefiero mi propio código