Simetría

Lo siento, si alguien espera un post navideño (a pesar de los copitos cayendo por el blog) al estilo retrospectiva o propósitos de nuevo año, que se vaya buscando otro artículo. Creo que soy de esos que no tiene mucho apego por la Navidad. Sin embargo, ¡Feliz paso de año y que el 2011 os trate mejor que el 2010! (A todos, aunque hayamos sido -algo- malos) :-)

Bueno, al tema.

Picado por no haber podido estar ayer en el codingdojo de (la comunidad de Ruby en Madrid a la que, por fin, se acercó mucha gente que conozco), estaba yo practicando la codekata de los números romanos (una parte de ella, realmente, la de pasar a “romano”) y se me ocurrió hacer un pequeño cambio. En vez de usar un java.util.Map (sí, en Java, qué pasa :-) ) pensé en usar un array. Pensé que no debería afectarme mucho porque había escrito mi código haciendo mi mejor TDD (lo cuál no quiere decir que lo haga bien).

Para que tengáis una primera imagen de lo que hablo, mi método “String to_roman(int n)” es como sigue:

NUMERALS es un Map<Integer,String> ordenado para que “int find_biggest_numeral_that_fits(int i)” sea más fácil (y de paso eficiente). Pero lo que os quiero contar no es si es mejor usar un Map o un array para guardar esta tabla. De hecho, sobre esto se me ocurre otro artículo muy chulo sobre SRP (aunque no pueda superar éste de Hadi Hariri, claro). El caso es que, al cambiar la estructura de datos que soporta esto, mi algoritmo ha tenido que cambiar incluso hasta el método de más alto nivel de abstracción “to_roman”.

Recordemos el “Implementation Patterns” que, aunque no lo tengo a mano, recuerdo que hace hincapié en cuidar que nuestros métodos mantengan un nivel de abstracción coherente. En este caso es evidente que estamos llamando a “find_biggest_numeral_that_fits” para abstraernos de los detalles técnicos pero luego, en el mismo “to_roman” usamos NUMERALS para obtener el valor correspondiente. Hemos introducido una asimetría que no es muy dañina (en este caso que el problema es pequeño, que por eso es pequeño, para que podamos practicar sin que nos duela tanto como “en la vida real”).

Al refactorizar he cambiado “find_biggest_numeral_that_fits” por una llamada a “find_biggest_numeral_using_an_ordered_map” y ahí, al cambiar mi solución basada en un array y llamar al nuevo “find_biggest_numeral_using_an_ordered_array” me he dado cuenta de que no he cambiado NUMERALS y que sigue siendo un Map. .

He renombrado NUMERALS a NUMERALS_AS_MAP para que sea más evidente y así, he ocultado ese “código feo” en un bonito “String get_numeral(int i)”, lo cuál deja el método “to_roman” mucho más limpio.

Por cierto, observad también el leve cambio que he hecho en el orden de la linea 6, donde inicializo el StringBuffer. Me ha parecido que inicializarla “tan lejos” de donde la uso le daba un cierto tufillo que no me gustaba nada. ¿A que se lee mejor ahora? :-)

Espero vuestros comentarios. Seguro que se puede mejorar mucho aún.

Ea, lo dicho, ¡Feliz 2011!

Eclipse en colores

Por si queréis probar con los colores en Eclipse. El leer mejor (más fácil) nuestro código nos puede ayudar a escribirlo mejor. :-)

Yo he cambiado el color de fondo y he resaltado algunos elementos sintácticos:

El color de fondo:
Window > Preferences > General > Editors > Text Editors > Appearance color options:

  • Background color = color personalizado R:217, G:217, B: 236 (un gris clarito para distinguir la ventana de edición del resto pero suficientemente clara para no tener que hacer muchos cambios en el resto de colores)

Colores “sintácticos”:
Window > Preferences > Java > Editor > Syntax Coloring > Java:

  • Inherited Method Invocations : Pink (R: 255, G: 0, B: 255). Esto hace que las llamadas a métodos heredados destaquen pero no demasiado.
  • Method Declarations: Orange (R: 255, G: 128, B: 0) y negrita. Esto hace que el inicio de un método destaque sobre el resto del código.
  • Methods: Dark green (R: 0, G: 128, B: 0) y negrita. Esto hace que los verbos destaquen frente a los sustantivos.

En fin, espero que os resulte útil. :-)

La Movida Madrileña 2.0

En tiempos de crisis el ser humano exprime su imaginación. Un ejemplo que se me viene a la cabeza es la Movida Madrileña de los ochenta. (Me encanta eso de la Madrilenian groove scene). Una crisis social y cultural hace que la juventud madrileña busque maneras diferentes de hacer sociedad y cultura. Salvando las distancias (o no), creo que la crisis del dichoso modelo productivo está llevando en estos momentos a muchos jóvenes, en todo el mundo, en España y en particular en Madrid, a reinventar maneras de ser productivos.

Iniciativas como las de Jesús Jiménez o la proliferación de iniciativas similares (o diferentes) que se están viendo desde un tiempo a esta parte creo que demuestran lo que digo. Hay algo en común entre todos nosotros: las ganas de hacer. Sabemos que nuestro sector (el desarrollo de software) tiene un modelo en el que claramente no estamos a gusto. No nos permite hacer lo que sabemos, podemos, queremos… y como consecuencia, sólo parece haber una salida inteligente: crear otro modelo. Pero no tenemos más herramientas a nuestro alcance que nosotros mismos. En general no disponemos de grandes recursos financieros que nos permitan cambiar nuestro modelo y hacer las cosas de otra manera. Así que nos dedicamos a buscarnos entre nosotros y a explorar otras maneras de hacer las cosas.

Algunos, como Carlos Blé (con Mavencharts) o (con Wiseri) o Martín Pérez (con Jobsket) … o muchos otros, yo hablo de los que conozco (y me acuerdo ahora mismo) son tan valientes que se arriesgan mucho más y ponen su carrera en manos de un sueño. Otros nos dedicamos a “cantar nuestras canciones por los garitos”. Pero todos, absolutamente todos, tenemos algo en común: queremos cambiar nuestro mundo y hacemos algo para ello. Igual que la Movida Madrileña en su momento eran vistos por muchos como algo cutre, seguro que muchos (sobre todo compañeros de profesión) nos ven ahora como una panda de “frikis”, “talibanes de la tecla” o lo que sea. Pero es algo que, al menos a mi, no me preocupa lo más mínimo. Me gusta programar. Quiero poder llegar a los 67 (e incluso más) programando y, si puede ser, disfrutando de ello. Quién sabe, algún día, quizás, lleguemos a conseguirlo. Algunos seguro que lo consiguen. Mientras tanto, tampoco es que me preocupe mucho no conseguirlo porque me lo estoy pasando muy bien. (Lástima que los Hombres G no sean estrictamente de la Movida Madrileña, habría encajado muy bien). ;-)

Corrección: Me dicen y que Hombres G sí son de la Movida Madrileña. (Aunque la canción se publicó en 1989)

Corrección 2: me sugiere este video de La Mode, que es mucho más representativo de La Movida, pero… me quedo con la letra del que elegí originalmente.