Alba on Tech

Talking about technology

Kata: Intercambio de variables

Es de sobra conocido el mito de que las personas ciegas agudizan el resto de sentidos para compensar su ceguera. En realidad, el resto de sus sentidos no están más agudizados. Simplemente, les prestan mayor atención, trabajan más con ellos, y los exprimen al máximo. Eso mismo ocurre en muchos aspectos de la vida. Cuando tenemos una carencia, optimizamos los recursos que tenemos. En nuestra profesión nos encontramos con carencias con frecuencia: consumo de memoria, velocidad de procesador, transmisión de datos… Hay muchos aspectos que pueden provocar un problema, y nos vemos forzados con frecuencia a utilizar el ingenio para solventarlos. Un ejemplo que me gusta mucho es este artículo: 1500 Archers on a 28.8: Network Programming in Age of Empires and Beyond, donde explican como solventaron los problemas de sincronización del juego Age of Empires frente a las carencias de red. Es largo, pero merece la pena, os lo recomiendo.

Así que, para aguzar un poco nuestro ingenio, os propongo una Kata con una carencia artificial. Es un problema clásico, así que puede que ya lo conozcáis. Se trata de intercambiar dos variables. Lo habitual es hacer esto de la siguiente forma:

a = 2
b = 3
temp = a
a = b
b = temp

Lo que os propongo es que penséis la forma de conseguir esto mismo, pero sin usar ninguna variable adicional. En los comentarios pondré las dos soluciones que conozco, pero seguro que hay más. ¿Se te ocurre alguna?

Y recuerda, no se trata de un concurso. Se trata de una kata. Practica y mejora. Siempre

Advertisements

22 October, 2013 Posted by | Kata | 3 Comments

Soy un ingeniero, no un artesano

Últimamente está muy de moda la expresión “artesano de software”. Desde la primera vez que la leí, esa expresión me chirrió. Entiendo que es una idea romántica, que suena bien, y se refiere a la parte del cuidado y el cariño que ponen los artesanos en su trabajo. No obstante, creo que hay algo fundamentalmente erróneo en ese concepto.

Según la wikipedia, artesanía se refiere al trabajo del artesano (normalmente realizado de forma manual por una persona sin el auxilio de maquinaria o automatizaciones). Dejando de lado el oxímoron de hacer software sin maquinaria, quiero centrarme en la parte de automatizaciones.

Salvo en raras ocasiones, los proyectos grandes los abordo utilizando un framework de desarrollo. En Kaleidos usamos principalmente python/django y groovy/grails. Obviamente, utilizamos cientos de bibliotecas de software que nos proporcionan piezas comunes, como envío de mails, abstracciones de la base de datos, o comunicaciones remotas. Además, seguimos convenciones de código, para crear un resultado lo más mantenible y uniforme posible. Por supuesto, utilizamos un sistema de control de versiones distribuido, git, con un protocolo de ramas que nos permite trabajar en paralelo con máxima eficiencia. Ni que decir tiene que somos grandes defensores de los test automáticos, de forma que nuestros proyectos rebosan de test unitarios y de integración. Eso nos lleva al uso de herramientas de integración continua, como Jenkins, que no sólo se encarga de pasar los tests en las diferentes ramas, sino que incluso realiza despliegues automáticos a preproducción.

Claramente, ¡las automatizaciones son básicas para el desarrollo de software de calidad!. Permiten no sólo ser muchísimo más eficiente, sino, y esto es lo más importante, ser consistente en el desarrollo. Y eso lleva a una calidad claramente superior. Hace el código mantenible, legible, y permite el trabajo en equipo.

¿Sabéis cómo se llama al proceso de creación, perfeccionamiento e implementación de estructuras para la resolución de problemas? Ingeniería.

Estoy muy orgulloso de todas las automatizaciones que utilizo al desarrollar software. Y siempre estoy en el proceso de mejorar aún más el sistema. Y por supuesto, le pongo mucho cariño y cuidado a lo que hago. Pero el cariño y el cuidado por sí solos no bastan. Hay que hacer las cosas bien. Hay que tener procesos claros, y estar siempre dispuestos a refactorizarlos y mejorarlos. Hay que automatizar las tareas para mejorar la calidad. Hay que ser ingenieros1.

Así que lo digo convencido: Soy un ingeniero, no un artesano.

 

 

 

(1) Disclaimer: Estoy hablando de la forma de trabajar y abordar los problemas, no de titulaciones. Conozco gente que ha estudiado módulos de FP y son magníficos ingenieros, y gente con titulación superior en informática a los que no les dejaría acercarse a un teclado.

10 October, 2013 Posted by | Software | 5 Comments