martes, diciembre 11, 2007

Modelos en arcilla

Me ha gustado mucho la comparativa que ha hecho Doods entre la industria del automóvil y la producción de software. Producir software no es como esas líneas de dedicados robots y humanos especializados, en las que es fácil determinar cuántos coches (idénticos, bien definidos...) salen por hora de la factoría. En realidad, es más parecido al tipo que se encarga de hacer el modelo en arcilla:
"Have you seen a car ad that shows a design studio with a clay mock-up? That’s like software development. The guy on the factory floor can easily know how long it takes to assemble an automobile. It’s much more difficult for the guy sculpting clay to predict how much work and how many revisions it will take to get to the final design".

Esto confirma la idea acerca de la auténtica esencia del software: la información y el conocimiento. De hecho:
"Software development is an exploration. It’s learning about the problem domain, the customer’s needs, and how a solution can be realized with the available resources. Learning requires space and time for experimentation and failure".

¡Es algo fundamental! ¡Nadie aprende por acertar! Si ahora aciertas, es porque antes has fallado de muchas maneras distintas. ¿Por qué no aprendemos a fallar? Creo que tiene que ver con que nos han educado para esperar un castigo si hacemos algo "mal"... No hay que castigar si uno se equivoca... Hay que castigar cuando uno se equivoca reiteradamente. Y ni siquiera en esos casos. Defiendo en esos casos una buena herramienta: enseñar.
Y ya para terminar, categórica, la auténtica definición de "manufactura del software":
"Software manufacturing, at its least adorned, is a file copy operation".

Ahí queda eso [las negritas son mías].

lunes, diciembre 10, 2007

Declaración de variables al principio de un método

Cada vez estoy más a favor de declarar las variables justo antes de que sea utilizadas. Un argumento a favor de ello, entre otros, es que no provocas que el lector del código se pregunte “¿para qué se usan estas variables?” antes de tiempo… Si declaras las variables justo antes de que sean usadas, la respuesta viene casi inmediatamente…

Por contra, favoreces el diseño CopyPaste, que es pecado.

jueves, diciembre 06, 2007

Sencillez (aparente)

No sé dónde lei que cuanto más sencilla es una aplicación para el usuario, más complicado es para los desarrolladores construirla. Y también es cierto que cuando un stakeholder te presenta sus necesidades, el primer modelo mental que se construye es francamente sencillo (o sea, poco detallado).

Cuando por fin vas pasando de un análisis del problema al diseño de una solución, el número de detalles aumenta naturalmente. Este tipo de detalles tiene muchas veces que ver directamente con el problema y siempre con los requisitos del usuario, tanto funcionales como no funcionales. Así, lo que antes era sólo introducir información se transforma en un conjunto de decisiones relativas a la validez de esos datos, a su tipo, a la estructura entre ellos, a qué hacer cuando los datos son parcialmente incorrectos. Sin decir nada sobre los mecanismos de seguridad, que determinan quién puede introducir qué datos y cuando. ¿Habrá un proceso de introducción por una clase de usuarios y otro de validación por parte de otra clase distinta? ¿Se querrá registrar quién introdujo la información? ¿Sólo la última modificación, o un histórico de ellas?

Para los que diseñamos y construimos sistemas de gestión, un síntoma de este Big Bang que transforma un problema primordial en un universo de soluciones galácticas (y el energético proceso que pasa de una a otra) aparece cuando tenemos que agregar "un campo más". Un campo más, es revisar desde la base de datos hasta todas las capas de presentación (incluyo informes), qué partes se ven afectadas... Sí, es cierto, es la más fácil de las modificaciones... :-) Imagínate cualquiera otra...

Por cierto, me niego a traducir "stakeholder" por tenedor de apuestas. Creo que la traducción más cercana podría ser "implicado en" o "interesado por" un proyecto. ¿Alguien tiene alguna otra sugerencia?

miércoles, diciembre 05, 2007

Anhelar el vasto e interminable mar

En uno de los posts el blog de Reginald he leído una frase preciosa de Saint-Exupery, sobre "liderazgo".
"If you want to build a ship, don’t drum up the men to gather wood, divide the work and give orders. Instead, teach them to yearn for the vast and endless sea". —Antoine de Saint-Exupery (1900–1944), “The Wisdom of the Sands

¡Cuán lejos estamos de esto!

Un ingrediente esencial de la Felicidad

"El animal humano, como otros animales, está adaptado a una determinada lucha por la vida, y cuando con grandes riquezas el homo sapiens puede satisfacer todos sus caprichos sin esfuerzo, la nueva ausencia de esfuerzo hace que en su vida se [elimine] un ingrediente esencial de felicidad. El hombre que adquiere fácilmente cosas por las que siente no más que un deseo moderado, deduce que el logro del deseo no proporciona la felicidad. Si tiene aficiones filosóficas, deduce que la vida humana es esencialmente miserable, puesto que el hombre que consigue todo lo que quiere sigue siendo desgraciado. Olvida que la falta de algunas de las cosas que desea es un elemento indispensable de felicidad"


Bertrand Russell, en "La Conquista de la Felicidad", página 44, 1930. Editorial Espasa Calpe, S. A.

Las negritas son mías. He sustituido la palabra "remueve" por "elimine", que me parece un término más adecuado. Imagino que la palabra en el original en inglés sería "remove", que significa eliminar.

Por lo demás, estoy totalmente de acuerdo con el texto.

lunes, diciembre 03, 2007

Mort, Elvis, Einstein, y tú

Jeff Atwood sobre una manera de aplicar la ley de Pareto a los programadores, contestando a otro post anterior que ha provocado un montón de respuestas.

"La" manera de hacer las cosas versus "una" manera de hacer las cosas

Lo reconozco, estoy muy negativo. Esta entrada es negativa.

Acabo de leer en el blog de James Fallows una entrada (via raganwald), y comparan la forma en la que unos japoneses repostan un avión, con la forma en la que lo hacen unos chinos. Como bien dice, no es un estudio científico, pero a pesar de ello concluye que:
With usual caveats against sweeping generalization, what this made me think was: Japan is all about the way of doing things. Practice, ritual, perfectionism, as much fanatical attention to the process as to the result. China is all about finding a way to do things. Improvisation, little interest in rules, putting up with whatever is necessary to attain the result.
[El subrayado es mio, las negritas suyas]. Opino que la conclusión puede extenderse también a la idiosincrasia nacional: nos preocupa mucho lo que vayamos a conseguir, pero no tanto cómo lo conseguimos. En el mundillo informático en el que me muevo, el paradigma de "una" manera de hacer las cosas es "pero funciona", mientras que "la" manera de hacer las cosas ni siquiera se piensa, mucho menos se documenta ni se practica.

No lo veo ilógico. En el ámbito laboral, no prima tanto cómo haces las cosas (la manera en la que haces las cosas), sino qué resultados has conseguido en última instancia. Y en particular, tanto mejor si lo consigues en el menor tiempo posible, aunque eso suponga saltarse pasos "innecesarios" que luegon afectan directamente a la calidad de los resultados, o al (invisible) trabajo que hay que rehacer más adelante debido a la baja calidad de lo producido.

Tom deMarco y Tim Lister ya nos lo adelantaron en su libro Peopleware el año 1999. En su capítulo 4 (Quality, if time permits) nos sugieren que hagamos un experimento. Preguntad por ahí a 100 personas que os digan un país asociado a la alta calidad, y es muy probable que el país sea Japón. Y luego preguntad también por ahí qué país está asociado con una alta productividad. Y es muy posible que el país también sea Japón. ¿Alta calidad y alta productividad a la vez?

A ver si la influencia oriental del Japón se nota más allá de la creciente conversión de la gente al budismo.

Malicia e incompetencia

raganwald recoge una cita en una entrada de su blog que me ha encantado: ¡la ley de Gray!
Any sufficiently advanced incompetence is indistinguishable from malice.
¡Genial!

viernes, noviembre 30, 2007

¡Que viene la TDT!


Estos de Muchachada Nui son la cañaspaña...


miércoles, noviembre 28, 2007

De democratia

He encontrado dos maneras de hacer que el desarrollo de software se hagan según cierta manera, que vamos a llamar buena (no utilizaré el término mejor). La primera de ellas es utilizar plantillas para crear los distintos artefactos necesarios a lo largo del proceso. De esa forma, siguen una estructura predefinida. Si la plantilla llega al status de "formulario", entonces el tema es todavía más rápido. Existe un riesgo, que es fácil caer en el diseño por copiar y pegar. Si te das cuenta tarde de que puedes factorizar algo, el trabajo puede ser un tanto tedioso.

El segundo método es elaborar un diseño que obligue a que se utilice una determinada estrategia durante el desarrollo (esto se aplica más a la parte de construcción o codificación). Por ejemplo, con un framework de persistencia que obligue a que todo los accesos a la base de datos, incluidas las consultas, se realicen por medio de procedimientos almacenados, permite que la gestión de permisos o la modificación de la estructura física de la base de datos se pueda cambiar en ciertos casos sin que afecte a la aplicación, además de todas las demás ventajas conocidas del uso de procedimientos almacenados frente al acceso directo a las tablas en seguridad, rendimiento, coherencia de los datos...

Sí, lo sé, suena dictatorial y lo es. Pero no estamos hablando de que un proyecto sea una democracia. Sin control, sin ciertas restricciones, es imposible que llegue a nada. También entiendo que la democracia se puede hacer entre iguales, y no suele ser el caso...

Reconozco que estoy un poco sensible, pero creo que es más bien una reacción natural a la presión que impone el no poder comunicarme como me gustaría...

Creo que seguiré analizando este tema. Este pensamiento es simplemente una explosión, y hace falta destilarlo...

Física 2D (Enlaces)

Box2D en Flash: http://box2dflash.sourceforge.net/
El software te lo puedes bajar aquí: http://www.box2d.org/index.html

Muy interesante... Síp... Y muy educativo...

Por cierto, el código es abierto
(via Microsiervos)

martes, noviembre 27, 2007

Momentos de crisis

La diferencia entre fastidiarla y no fastidiarla se reduce en muchas ocasiones a tener una copia de seguridad, y una herramienta de comparación, estilo WinMerge (una magnífica herramienta gratuita que ha sustituido al differ de SourceSafe, no muy bueno, por cierto). Mejor decir que tienes dos versiones de un mismo elemento, y que tienes la posibilidad de compararlas.

Ya, lo sé, no descubro nada nuevo, pero es que acabo de sentirlo en mis carnes. Y gracias a que tenía dos versiones y un differ, he podido arreglar un problema grave, una de esas funciones críticas para un proceso crítico de un departamento crítico. Y después la tranquilidad. Esa que sientes cuando descubres que tu disco duro ha pasado a mejor vida, pero que tienes a ¡SuperCopia!, la copia de seguridad de tu disco duro que hiciste hace un par de días. La misma sensación de que tú y el Universo sois uno.

No diré lo evidente (evidente ahora, a principios de los noventa la cosa no estaba tan clara): Escoge uno, el que sea, incluso SourceSafe si no tienes otra cosa a mano, pero escoge un software de control de versiones. Ya. Yo por mi parte y por ahora, recomiendo Subversion.

Lo que me lleva a otro problema que tengo. Ahora mismo estoy versionando el proyecto VB.NET sobre el que trabajo. ¿Todo? ¡No! Una pequeña aldea gala... Errrr... Una serie de elementos no están versionados: los objetos de la base de datos, o para ser más precisos, sus scripts DDL. Voy a investgar qué hay por ahí para eso, con las herramientas que tengo.

¿Alguien sabe si hay algo por ahí para versionar una base de datos?

jueves, noviembre 22, 2007

Zodiaco

Acabo de modificar mi perfil en Blogger. Cuando he visto mis intereses, he cliqueado en uno de ellos para buscar gente con el mismo interés. Y me ha sorprendido ver que junto a su edad y sexo, claramente dos características importantes de una persona, también aparece su signo del zodiaco (el de los 12 meses, no el de los 12 años).

No deja de sorprenderme que a punto de terminar la primera década del siglo XXI, todavía nos dejemos llevar por algo tan poco científico como es el signo del zodiaco. ¿Han pensado los Hombres G de Google que alguien pueda pensar: "Voy a seguir a esta persona, que los libra nos llevamos bien con los leo"? ¿O acaso que se pase por la cabeza del alguien algo así como "seguro que este virgo tiene mejores ideas, que conozco las de los sagitario y.... ¡puf!"?

Te puedes definir por muchas cosas. Y la gente te podrá etiquetar por muchas otras. Pero que definas a los demás con esto, organizando a 6000 millones de personas (o más) en 12 grupos "bien definidos", haciendo que haya 12 formas de ser, 12 caracteres y 12 formas de entender la vida, me parece una manera muy limitada de pensar. Todavía peor, que acabes pensando que tienes que ser cabezón si eres tauro, o que tienes que ser sensible si eres piscis, o si eres muy vehemente si eres leo... ¡Qué manera de encasillarse uno a sí mismo!

Por cierto, yo soy piscis... ;-)

viernes, septiembre 07, 2007

Pienso que piensas que pienso que...

Leido en el blog de Maeda, acerca de lo que yo he llamado "pienso que piensas que pienso que...", pero expresado con mejores palabras.

domingo, julio 29, 2007

In Springfield

lunes, julio 23, 2007

Un par de citas

Always do right. This will gratify some people and astonish the rest. (Mark Twain)

The good life, as I conceive it, is a happy life. I do not mean that if you are good you will be happy - I mean that if you are happy you will be good (Bertrand Russell)

jueves, julio 19, 2007

Internet en un disquete

"Oye, necesito que me cuentes de qué va este PaqueteSoftware". "El PaqueteSoftware es un software complejo, muy grande. ¿Qué aspecto necesitas conocer? ¿Arquitectura lógica? ¿Implantación? ¿Comunicaciones con el exterior? ¿Cómo lo tenemos parametrizado?". "No, en general".

martes, julio 03, 2007

Fallen philosopher

Yes, I finally broke down... I have to admit it... Once again, I've started a new electronic venture, and once again I don't know when or where it will finish... Given the past experience, it will finish sooner than later, and anywhere in the Internet Digital Ocean...

I'm finally a user of twitter

You can follow me at http://www.twitter.com/wilsoke !!

jueves, junio 28, 2007

Hi Tech Consumism

I've been reading an article at DevX called Semantics and the Especialized Languages, and I've seen there the first mention (for me) of the brand-new so-called new-buzz-word Web 3.0. Yes, read it as it is. We've not exploited the now old concept of Web 2.0 yet, and we are already confronted with (babymosesinabasket!) the new version of it.

One reflections come to my mind. First, software is not free from consumism... Once you just savor the taste of a new technology, as fast as you touch it with your tech tongue, it's no more a new technology. Go fast! Go taste another new one! But wait! Over there! A new new newer technology... Now we walk our way from here to there, without obtaining all the benefits and deep understanding from these, leaving the path behind us full of new-becoming-old concepts, like one-bite'd apples.

As Newton said (paraphrasically) , he walked on giants' shoulders. We can't loose the oportunity offered by the past. We have to build on those proven foundations, on valid and demonstrated principles, and stop renaming them every now and then. Just try to call the things you know as you learned them, and make a new name up only if it is better than its predecessor. Get to a new name only if it represents and really new concept. At least, declare that one given name is synonim of another, without stating it as new.

But wait, Have you noticed that? Smells like... Smells like marketing!

PS: The marketing guys have done all a new business out of the "new" word... If it's not new, it's not good... Maybe that's the cause of older people being despised (sigh) :(

martes, mayo 22, 2007

La Historia Con Mayúsculas en peligro

Acabo de leer un artículo de Grady Booch, "Speaking Truth to Power" (IEEE Software, Marzo/Abril 2007), y me ha llamado la atención una frase en particular:
Email and other software-intensive mechanisms increase the velocity of communication; yet email and the aging of digital archives threaten the preservation of history.
Yo uso Historia en vez de historia para hacer evidente que el término usado por Booch es "history" y no "story".

¿Qué significa que los archivos digitales amenazan la conservación de la historia? Entiendo que la facilidad con la que puede modificarse (o hackearse) un archivo digital es más fácil que entrar en la Biblioteca Nacional y modificar un incunable o un tratado comercial del siglo XVI. Aunque no es menos cierto que es más difícil para un individuo desconsiderado con la memoria colectiva el modificar todas y cada una de las copias digitales de un documento. Creo que esto podría ser un motivo para argumentar la copia indiscriminada de contenido, o para ser políticamente más correcto, la extensión de la tecnología de firma digital :-).

Imagino que antes los archivos estaban gestionados por gente competente, y que la memoria colectiva estaba protegida por historiadores capaces en su trabajo. Sé que soy un poco ingenuo en ese sentido, porque otros podrían argumentar que como personas, serían falibles, y en todo caso, estarían inmersos en su contexto histórico, lo que significa que esa memoria histórica estaría siendo evaluada constantemente por este historiador del que hablamos. Esta evaluación podría llevarle a tergiversar la historia para favorecer algún interés inmediato. Podríamos decir que ante la disyuntiva entre sinceridad histórica y satisfacción de intereses, se dejó llevar por esta última opción.

Pero sigo siendo ingenuo. No creo que este hecho se haya dado con frecuencia, y ofrezco varias razones. En primer lugar, pienso que su verdad, la verdad de este historiador, tendría que enfrentarse con "las verdades de los otros". Si una mentira quiere progresar, debe ser coherente, disfrazarse de verdad. Sin embargo, la verdad emerge del contraste entre distintas visiones, como todo el mundo sabe, o al menos una interpretación compartida de la realidad. Una mentira sobrevive en tanto en cuanto los implicados la toman como verdad. A medida que el número de implicados aumenta, la posibilidad de que la mentira sobreviva decrece.

En segundo lugar, una mentira no supera el paso del tiempo, sobre todo mentiras de la entidad de la que hablamos. Evidentemente, si miento a una persona, puedo mantener con vida la mentira si su impacto es pequeño, de forma que... se olvide :-) Desde ese punto de vista, la mentira no existe (tampoco la verdad, claro está). Pero si hablamos de mentiras de más calado, con un mayor impacto, nos daremos cuenta de que ésta debe ser coherente con el resto de las "verdades" con las que tiene que convivir (¡un pensamiento fugaz! ¡la evolución darwiniana aplicada a la verdad y la mentira!). Entiendo que cuanto más calado, con más verdades tiene que hacerlo (convivir quiero decir), y más difícil es para el mentiroso.

Me quedo sin tiempo, creo que seguiré reflexionando sobre ello más adelante. Como siempre, espero comentarios.