De TDD y otras hierbas

24 08 2008

Mr. T

He andado un poco ausente debido a un viaje y diversos proyectos, pero estamos de regreso para seguir con el blog.

Uno de los perfiles que mas he notado en los C.V. que nos llegan a la empresa es de un programador parecido a este:

  • Uso de Java 1.4 y un poco de J2EE
  • Servidor de aplicaciones utilizado Tomcat, Websphere Application Server o JBoss
  • Manejo de algún framework como Spring o Struts.
  • Manejo de algo de JavaScript pero sin llegar a usar una libreria de AJAX.

Normalmente los programadores con esas características son buenos usando ese set de tecnologías y todo va bien en las entrevistas hasta que preguntamos, ¿Cómo realizas tus pruebas unitarias? ¿Usas algo de TDD?

Si eres un programador que no sabe a que me refiero con las 2 preguntas anteriores o eres como algunoes que he escuchado que tienen diversas excusas para no probar su código, excusas como las siguientes: “¡No tenemos tiempo para pruebas!” ó “Las pruebas unitarias no nos van asegurar el éxito” , no te sorprendas ni aflijas, eres de la mayoria de los programadores que no prueban su código, la buena noticia es que no es muy díficil comenzar y que te va a dar muchas ganancias. El gran valor de las pruebas unitarias es que te forza a pensar y resolver con anticipación estas preguntas sobre tu código:

  • ¿Cómo *fregados* pruebo esto?
  • ¿Cuáles tests debería crear?
  • ¿Cuál es el camino feliz?
  • ¿Cuáles son los casos poco comunes?
  • ¿Cuántas dependencias tenemos?
  • ¿Cuáles son las fallas que debería encontrar aquí?

Pero esto es sólo el comienzo en caso de que tu código este hecho, piensa por un momento que pasaría si sigues los siguientes pasos:

  1. Usando la librería de tu preferencia, escribe una prueba que llame a tu cógido pidiendole el resultado esperado y que como el código no existe todavía esta prueba fallará, esta prueba al fallar probocara una barra roja en la mayoría de los IDE’s.
  2. Crea tu código de manera que pase la prueba pero nada más, esto te dara un barra verde, pero si necesitas revisar alguna excepción por ejemplo, primero modifica el test para que falle.
  3. Limpia el código para eliminar redundancia y que sea legible.
  4. Conforme crezca tu paquete de pruebas puedes usar ant, rake o algúna tecnología que te permita correr tus pruebas con un simple comando. Ejemplo “ant tests.run”

Esto es conocido como Test Driven Development y te brindara muchas ganancias. Sobre todo que podras estar seguro de que remperas menos el build y no te enviaran fotos como esta cada vez que lo hagas.



Tips sobre Firefox 3

17 06 2008

Download Day

Hoy, como ustedes saben se liberó Firefox 3, ha sido mi navegador favorito desde que deje de programar en .Net y el Master me lo presento allá por el lejano 2004, con el paso del tiempo he ido acostumbrándome a usar algunos de los add-ons o extensiones que tiene y que siento son muy productivas, estas son las que yo uso:

  1. Mouse Gestures.
  2. GMail notifier.
  3. Auto copy.
  4. Firebug.
  5. Delicious Bookmarks

En la mañana el Inge Gil  me lo presento y yo totalmente equivocado trate de desdeñarlo,  el estaba entusiasmado con la idea de lograr el récord mundial de descargas de software y de participar en ello. Yo había tenido una triste experiencia con uno de las versiones beta durante el Sábado pasado, bajo Windows XP dí una clase y el beta trono varias veces y las veces que corrió me pasmó la maquina, así que me decepcionó.

Despues de mucha insistencia por parte de gente de la empresa, lo descargue y obtuve esto:

Despues lo  instale, el primer problema fue que de mis 5 extensiones, la más importante para mi trabajo (Firebug) no funcionaba, empeñado en hacerla funcionar, lo que hice fue instalar una versión beta de la misma, la 1.1.0 y con eso funcionó al a perfección.

Al comenzar a usarlo noté algunos tips que creo los hara instalarlo o al menos actualizarlo, ya que para mí fueron grandes mejoras a simple vista, estoy seguro dejo escapar algunos muy importantes, pero al menos estos se me hicieron sobresalientes.

1.  La integración con Growl en Mac es muy buena, no tienes que actualizar nada y es demasiado benefica para mi gusto, sobre todo por su potencial. Hasta el momento pude ver notificaciones de GMail notifier y de Downloads. Growl Firefox Growl!.

2. Firefox ahora también dejo de lado el horrible pop up que usaba antes para preguntarte si deseabas guardar la contraseña e interrumpiendo la carga de la página siguiente, ahora te muestra una pequeña leyenda en la parte superior que te ayuda a decidir y lo más importante es que no interrumpe el envío de la forma en la que estés.

3. Extensiones recomendadas, con estas podras descargar con un solo click desde el menú de Firefox y sobre todo ver los reviews.

4. El manejador de descargas mejoró demasiado, asi que ahora pueden tener una mejor organización y notificación del mismo.

5. Y para los pacientes lo mejor de todo, el rendimiento de Firefox que tantos dolores de cabeza nos dio en versiones anteriores ha mejorado, y ahora puede competir en velocidad también, eso es lo que más me gusto ya que a veces estuvo a punto de hacerme cambiar de navegador.

FF3, tiene muchas otras mejoras, como adaptar el tema visual de acuerdo al sistema operativo donde corre de una mejor manera, y muchas características más que iré descubriendo en próximos día, pero por lo pronto a descargar se ha dicho y sobre todo a navegar mejor.



Tu Certificado de ¡Jala en mi maquina!

29 05 2008

Certificado en alta resolución. (Recuerde que los derechos de este certificado son de mandeasuamigoalblogware ó chismosoware)

Como una oferta como una promoción, le venimos ofreciendo certificaciones de alta calidad y poco esfuerzo. Para certificarse en !Jala en mi maquina!, usted solo necesita seguir los siguientes pasos:

  1. Compile su código. El obtener la última versión del control de código es meramente opcional y más que nada inseguridad de desarrollador en cuestión.
  2. Corra la aplicación en questión. Si el cambio es de menos de 5 líneas o sólo cambio una condición puede brincar al paso 4 y no hacer el caso 2 y 3.
  3. Pruebe sólo el caso más sencillo sin ninguna variante.
  4. Agregue sus cambios al control de versiones ó de código.

Nota: Si usted no sabe que es el control de código o versiones la certificación es automática

¡Felicidades!, usted se ha graduado en ¡Jala en mi maquina!, no necesita hacer más que esperar por su kit de bienvenida y el agradecimiento de todos sus compañeros que arreglaran el código cuando usted se fue a jugar fútbol más temprano. Cabe aclarar que para conservar la certificación es necesario contestar a cualquier reclamo con la frase “Pero si… ¡En mi maquina si jala!”

Bueno, ya retomando la seriedad, ¿Quién no ha pronunciado nunca estas celebres palabras?, tantas veces lo hemos hecho que ahora es la primera excusa de todos los desarrolladores en múltiples sitios y blogs. Esta certificación me fue mencionada por un compañero de trabajo al hacerle mención de Phyllis, que se encarga justamente de reclamarte cuando le mencionas que en tu maquina tu código si funciona, el me comento de la versión en inglés de la certificación en el blog de Jeff Atwood. Aunque debo decir me parece un poco innecesario llegar hasta el paso 3 si sólo hiciste un pequeño cambio. (Hablaré de los pequeños cambios en próximas entregas)

He presenciado despidos por causa de no seguir la metodología adecuada para prevenir que tus cambios no hagan que todo el build deje de funcionar y que mucha gente pierda horas investigando que es lo que pasa, ¿Pero a que me refiero con el build? , me refiero a la integración continua del código, en mi anterior empleo usabamos un sistema de integración manual, pero en mi actual proyecto, hacemos uso de CruiseControl, este software te va a ayudar a que cada entrega de código y cada compilación pueda generar un correo que te notifique que esta pasando.

Las ventajas de hacer esto son la siguientes:

  • Reducción del tiempo de integración.
  • Detección de errores los más pronto posible.
  • Testeos inmediatos tras un cambio en el código.
  • Disponibilidad continua de la última versión del código para test, demos, etc.

Este software lo puedes complementar con CCMenu ó con la extraordinaria idea de la lava lamp que te va a indicar el estado del código. También ayuda el hacer que la gente entienda la importancia de tener el código estable así que hacer que paguen un peso (o dólar en SF) y hacer que usen un gorro de albañil o una peluca rosa si truenan el build puede hacer que la próxima vez revisar mejor su código.

En entregas siguientes hablare sobre las mejores formas de no ganarse esta certificación, mientras tanto traten de no ganársela.



Gente Inteligente

18 05 2008

Para seguir el camino,
ubica al maestro,
sigue al maestro,
camina con el maestro,
ve a traves del maestro,
conviertete en el maestro.

Poema Zen.

Durante todas las entrevistas a candidatos que he estado haciendo ultimamente, me he encargado de remarcar que una de las ventajas de mi compañia es que en ella trabajará con mucha gente inteligente y con mucha experiencia programando, eso no significa le este diciendo que las demás compañias esten llenas de gente que no es inteligente, solamente significa que nuestra compañia valora mucho el conocimiento tacito de las personas y por ello mucha gente brillante continua trabajando con nosotros en vez de buscar otro lugar. Yo creo esta “prestación” está altamente infravalorada y no es lo suficientemente buscada por la comunidad Tapatía y también del resto del país o inclusive del mundo, yo en lo personal creo que nunca lo valoré suficiente hasta este momento, y si algún día tengo que cambiar de empleo será una de las cosas primordiales que pediré junto con paquetes interminables de Bonice en el refrigerador (gracias Tacit :-) ).

Muchos de los candidatos no se detienen a pensar en lo importante de este mensaje y acto seguido preguntan sobre las prestaciones tangibles que proporcionará la empresa, acto seguido pierdo antención en seguirlos convenciendo ya que yo no soy el encargado de ofrecerles esas prestaciones, pero vamos a detenernos un momento y veamos la importancia de trabajar con personas más inteligentes que tu.

  1. Aprenderás mucho más rápido. Cualquier guru, super star, capo canonieri o excelente desarrollador conoce y práctica el poder de la colaboración y de la tutoría, punto. No hay discusión, un buen desarrollador o crack afecta a su compañia y equipo de trabajo de una manera positiva, como lo explica Jorge Valdano en su analogía futbolistica a este tema, existe la creencia que hay desarolladores extraordinarios que programan solos en una cueva y salvan equipos enteros, yo consideró eso en su mayoria como un mito urbano y dañino para la mayoria de los equipos de desarrolladores.
  2. Serás menos malo cada día. Todo programador humilde, en el cual te convertirás al trabajar con gente inteligente ya que lo primero que harás será tragarte tu orgullo, sabe que el código que escribiste hace un mes o hace un año de debe de dar verguenza, todos hacemos software con errores, si ves código de hace un año con el conocimiento de hoy y ya aprendiste nuevas maneras de hacerlo eficiente y elegantemente entonces te darás cuenta de lo que has crecido. Las mejores practicas de programación se aprenden de gente con vasta experiencia, ellos te apuntan en la dirección correcta y aprendes mucho más rápido que en lo que cotejas toda la información de la Web, eso no quiere decir dejes de tener a Google como amigo, si no que tienes varios frentes por los cuales recibiras información muy valiosa.
  3. Podrás pasar ese conocimiento a tu comunidad. Trabajando con gente de otros países constantemente he recibido muchos tips e información que platico a mis amigos y compañeros de trabajo, con el paso del tiempo me he dado cuenta que algunas de esas ideas que yo tomo o ellos me dan afectan al entorno en el que vivo y ellos replican esas buenas prácticas, esto a la larga hace que la comunidad se destaque por tener buenos desarrolladores y llame a mayor inversión en la ciudad o estado, como lo que esta occurriendo en Guadalajara.
  4. Satisfacción personal, el intercambio de ideas sera mucho más enriquecedor que el determinar por que las Chivas como superlíderes no vencierón al Monterrey, no digo que este tipo de platicas tengan algo de malo, pero de vez en cuando es sumamente apreciado el tener platicas sobre si SVN o GIT es mejor control de código, sobre como implementar VM’s para ahorrar tiempo de desarrollo en equipos o simplemente planear como atacar un problema de forma diferente en terminos de implementación.
  5. Por eso y muchas cosas más, despues de un tiempo valdrás mucho como persona y como profesional. Aprenderas a confiar en la gente, la sana competencia con grandes desarrolladores y sobre todo iras a una velocidad mayor que si trabajaras en una empresa que no cuenta con gente inteligente para poner en tu equipo.

Todavía le sorprende a algunos candidatos que hagamos entrevistas en las que el sólo proposito sea conocerlos, que nos conozcan y despues comer con ellos, confiamos en que ellos nos acepten por el tipo de personas que queremos tener que se sientan motivados por el trabajo que realizamos, que vean la clase de gente que trabaja con nosotros, en tu siguiente trabajo no lo veas como una cifra, hay mucho más que eso, si lo unico que consideras es el dinero, puede que por unos pesos pierdas muchas cosas más, como dice Joel, el dinero no es lo unico que le interesa a los programadores y no vamos a vender el alma por eso.



Mi primer programa funcional de Ruby (Whois)

11 05 2008
“No es libre quien no haya obtenido dominio sobre sí mismo.”
Demófilo

Tengo varios proyectos personales en puerta para enseñarme un par de tecnologías “nuevas”, entonces cansado de buscar dominios con whois y tratando de empezar a dar uno primeros pasos en Ruby, hice este programa que me va a ayudar a ver si los dominios que busco están activos o no.

class WhoIsQuery
query = ARGV[0]
puts "Querying whois with #{query} ..."
results = IO.popen("whois -Q #{query}")
message = "No more domain for you!!"
results.readlines.each do |line|
if line.include?("No match for ")
message = "Domain waiting for you..."
break
end
end
puts message
end

Si el dominio está disponible nos va a dar un mensaje de que el dominio espera por nosotros, y si no está disponible nos va a dar un mensaje de “¡No más dominio para ti!” Como el nazi de la sopa.

Lo iré complementando y modificando como vaya terminandolo e incluiré un par de pruebas automatizadas para ver que funcione bien en los próximos días.