El código es tu enemigo

Hace unos días apareció una pequeño listado de consejos para escribir código más comprensible que me pareció bastante interesante. Los puntos descritos son los siguientes, y en realidad no hacen más que afirmar lo que cualquier programador con experiencia hace en su día a día (y si no, es que la experiencia no le ha servido de mucho):

  • Comenta como una persona inteligente
  • Usa #define mucho (o lo que equivalga en tu lenguaje favorito)
  • No uses nombres de variables ridículos
  • Haz comprobación de errores.
  • “La optimización prematura es la raíz de todos los males” – Donald Knuth
  • No te pases de listo

En fin, que es una lectura bastante recomendable pero lo que realmente me ha llegado ha sido lo que he leido en uno de mis blogs favoritos, “The best code is no code at all“.

El objetivo del artículo es hacer comprender que el problema del código es que hay demasiado código, y eso solo trae desventajas. Por supuesto que uno programa con las mejores intenciones pero a veces para solucionar un problema el camino es tan largo y tedioso que es un problema en sí mismo.

Todo se resume a seis parámetros básicos que conforman un hexágono:

  • Brevedad
  • Cantidad de funcionalidad
  • Velocidad de ejecución
  • Tiempo de desarrollo
  • Robustez
  • Flexibilidad

Lo que ocurre es, como tantas otras veces en la ingeniería que aumentar cualquiera de estos parámetros va en detrimento de los otros, así que nada es perfecto a no ser que no sea.

Y no podría estar más de acuerdo con la conclusión y es que la principal dimensión que hay que optimizar es la brevedad. Y tenerla siempre en mente.

Un código breve en general es sencillo de mantener, es comprensible y fácilmente ampliable y corregible por lo que los otros aspectos como la flexibilidad o la robustez pueden ser dejados para más adelante, sin perder de vista la simplicidad y la brevedad.

He visto ya en demasiadas ocasiones que el código crece y crece sin que nadie pare a observarlo y darse cuenta que cada vez se está más lejos de la solución yendo por caminos secundarios y perdiendo de vista el objetivo en una especie de orgía teclística que no va a ningún lugar. A veces hay que parar, leer lo que se está haciendo y pensar si no habrá una forma más simple de llegar a buen fin. Si es demasiado complicado, probablemente esté mal.

Ademas, Jeff hace una referencia a otro atrículo llamado “Code is our enemy“, dónde se centran básicamente en lo mismo: se escribe demasiado código y ese es el problema de los programadores, no tenemos medida.

Así que, la próxima vez que os pongáis delante de un editor a programar, pensad en que vuestro código ha de ser breve y sencillo y veréis como a la larga se agradece.

12 tipos de clientes (y cómo tratarlos)

Leo a via LifeHacker que FreelanceSwitch ha publicado un interesantísimo artículo titulado “12 breeds of client and how to work with them”, que sería más o menos el título de esta entrada.

Es interesante ver como no importa donde trabajes, los clientes siempre son iguales. Puede que en unos sitios haya más de un tipo o de otro, pero creo que han conseguido agrupar la mayor parte de ellos. Quería hacer una traducción completa, pero me voy a quedar solamente en la superfície.

Entre los que más me encuentro en mi día a día agruparía al 1, 5, 6, 7 (aghh), 8 (ufff), 9 y 11. ¿Con cuales te enfrentas tu más?

1. El cliente de baja tecnología

“Parece confuso y desorientado cuando se habla de tecnología. Llama en vez de enviar mails y quiere que todo se envíe por fax. Hay que explicarle todo dos veces, pero al final acepta nuestros consejos”

Bueno, creo que por lo menos en España de estos hay unos cuantos y si los han puesto los primeros imagino que en EEUU también. Cuando consigues que confíen en tí no están mal pero a veces no hay forma y pierdes mucho tiempo explicándoles las cosas 100 veces, hablando por teléfono y visitándoles. Personalmente no me gustan demasiado, pero s lo que hay.

2. El cliente desinteresado

Es una bestia extraña. Cuando los otros clientes no paran de llamar a ver cómo van las cosas, el cliente desinteresado quiere realizar el mínimo esfuerzo posible. [...] Raramente te darás la información y materiales que necesitas y te pedirán que hagas cosas distintas a tu trabajo habitual con tal de ahorrarle faena porque no tienen tiempo

Pocos hay de estos. De los que no te pasan información cientos, pero luego quieren resultados lo antes posible y se extrañan cuando les dices que es que necesitas que te pasen material. Además la mayor parte de esas tareas “no habituales” suelen ser engorrosas y no le gusta hacerlas ni al cliente ni a tí tampoco.

3. El cliente manitas

“Es un artista frustrado. Te recordará siempre sus aptitudes como dibujante, fotógrafo, diseñador o escritor. El manitas tiene una idea clara de lo que quiere y poco o nada valorará tu opinión”

Estos siempre me hacen gracia. A veces es verdad que saben, pero la mayor parte solamente son una fuente de problemas que no está de acuerdo con nada y lo quieren todo como ellos tienen en su cabeza. Aunque eso pase por saltarse todas las convenciones establecidas y tu experiencia previa. Recomiendan que no les lleves mucho la contraria y estoy de acuerdo. A fin de cuentas ellos pagan y si el trabajo es malo no deberían echarte las culpas (aunque lo harán, claro).

4. El cliente paranóico

“El papeleo legal aparece desde el principio y es muy elaborado. A veces ni te hablan del proyecto sin un acuerdo de confidencialidad y seguro que este es favorable a ellos en todos los casos”

En España no hay una presencia del papeleo y de temas legales tan grande como en EEUU y hasta donde yo sé, en mi trabajo nunca he encontrado algo así. Por supuesto que hay gente reticente y mirada, pero todo tiene un límite.

5. El cliente apreciativo

“El cliente apreciativo te hará sentir especial con sus cumplidos y alabanzas. !Me encanta tener clientes de estos!”

Una rara species donde las haya, aunque alguno se encuentra. No dicen nada en su contra salvo que hacen parecer a todos los demás como malos clientes. A mi también me encantan y se agradecen de vez en cuando. No ponen problemas y todo les parece genial, son muy motivadores y el resultado final seguro que no es peor que el de los más exigentes.

6. El cliente “hazme un buen precio”

“Este cliente es un embaucador que piensa que tu primera oferta solamente es el punto de partida para negociar. Sabrás que lo tienes delante porque llegar a cualquier acuerdo económico implica una larga serie de tira y afloja. [...]“.

Habitualmente no lidio con temas de negociación de los proyectos pero me consta que existen. Supongo que la solución es convertirte en uno de ellos y disfrutar de la negociación.

A veces hay clientes que al principio son reticentes a los presupuestos que se plantean, pero solamente es falta de confianza y con el tiempo acaban firmándolos sin mirar ni siquiera la cifra.

7. El cliente “lo sabré cuando lo vea”

“Este cliente es parecido al desinteresado pero más frustrante. Su indecisión y falta de habilidad para decir qué es lo que desean hacen que sean de los pocos clientes con los que mejor no tratar”.

Razón tienen. Estos son de la peor calaña que se puede encontrar. No saben lo que quieren, pero no quieren eso que pareció que querían la última vez que los viste. Exasperantes y hacen que cualquier presupuesto se quede corto.

8. El cliente con urgencia

“Sus correos siempre son de altra prioridad y sus mensajeros llegan siempre corriendo. Trabajan a destajo los fines de semana y a altas horas de la madrugada y creen que todos hacemos lo mismo. Además piensan que son tu único cliente y que su proyecto por supuesto merece la más alta prioridad sobre los demás”.

La experiencia me enseña que esta gente es así, lo tomas o lo dejas. No solamente te están espetando a tí sino también a todo cuanto les rodea. Su vida es una urgencia. En realidad si no cumples al 100% sus altas exigencias tampoco se mosquean demasiado salvo que te pases de listo.

En realidad las prioridades se suelen establecer por motivos económicos, así que si son de estos clientes y encima pagan bien (y lo saben), tendrás que perder el culo por ellos. Si no, pues a la cola como todos.

9. El cliente que decide por comité

“Habitualmente habitando en grandes corporaciones, este cliente también se puede encontrar en lugares más pequeños donde las decisiones se toman con la esposa, el vecino o el perro. Carece te la más mínima autoridad y cada decisión debe ser tomada por un grupo de personas”.

Como molestan estos clientes si no se organizan bien. A veces tu contacto es el último mono y cualquier cambio o propuesta tardan días en aprobarse. Luego llega una respuesta que no parece ir ligada a la pregunta que se hizo. Lo mejor es conseguir reunir al comité y validar el proyecto juntos.

10. El cliente majo

“Te dan cualquier cosa que necesites sin rechistar y esperan que vuelvas con un resultado. Son muy poco asertivos y parecen contentos esperando décadas a que se lo des o aceptando algo que dista de ser un buen resultado”.

No está mal que no te den prisas pero su falta de exigencia puede hacer que siempre sea un segundón y sus proyectos no terminen nunca, porque siempre hay cosas más importantes.

11. El cliente con poco presupuesto

“Todos los clientes tienen un presupuesto pero algunos parecen más ajustados que otros. Puede ser el resultado de hacerle un favor a un amigo o pariente o un cliente habitual que nunca tiene un duro”.

Solamente valen la pena si no te van a poner pegas y aceptan retrasos y una calidad aceptable. Si encima de pagar poco creen que merecen el mismo trato que cualquier otro cliente (o mejor), intenta no tener muchos de estos.

12. El cliente del que deberías sentirte afortunado

“Es mas guay que tú y lo sabe. Tienen un proyecto de poco presupuesto pero que es genial y trabajan en un sector en el que todos quieren trabajar (música, cine…)”.

En España quizás no hay mucha industria guay pero si que hay cosas que quedan muy bien en el portfolio de cualquier empresa. Si ellos lo saben van a pagar poco porque en realidad te hacen un favor ¿o no?

Via: How to work with difficult clients | lifehacker

Los 10 mandamientos de la programación no egocéntrica

10mandamientos.jpgLeyendo en uno de mis blogs favoritos, Coding Horror, encontré un interesante artículo que enlazaba finalmente con esta acertada y curiosa lista de mandamientos.

Fué escrita por Gerald Weinberg nada más y nada menos que en el año 1971 por este especialista en psicología y antropología del desarrollo de software en un libro titulado The Psychology of Computer Programming. Muchos de nosotros no habíamos ni siquiera nacido y él estaba ya de vuelta de los problemas que seguimos encontrando a día de hoy.

Paso a enumerar una traducción libre de dicha lista, que también se puede encontrar en el artículo original en inglés:

  1. Comprende y acepta que todos cometemos errores. Por suerte en este negocio, la mayoría de los errores que cometemos no van a destruir el mundo, pero vale la pena encontrarlos lo antes posible.
  2. No eres tu código. Cuando se revisa algo el objetivo es encontrar errores y ten por seguro que se encontrarán. No lo tomes como algo personal.
  3. No importa cuanto kárate sepas, alguien siempre sabrá más que tú. Te puede enseñar algunos nuevos movimientos. Busca y acepta consejos de otros, especialmente cuando crees que no es necesario.
  4. No reescribas código sin consultar. Hay una fina línea entre arreglar y reescribir. Conoce la diferencia y persigue la mejora estilística en cualquier revisión, pero no lo hagas como un justiciero solitario.
  5. Trata a la gente con menos conocimientos con respeto, deferencia y paciencia. La gente poco técnica que trata con técnicos suele tener la impresión de que somos de lo mejor cuando todo va bien pero unos lloricas cuando va mal. No refuerces el estereotipo con mal genio e impaciencia.
  6. La única constante en el mundo es el cambio. Sé abierto y acéptalo con una sonrisa. Toma cada cambio de especificaciones, plataformas y herramientas como un nuevo reto, no como un grave problema.
  7. La auténtica autoridad nace del conocimiento, no de la posición. El conocimiento engendra autoridad y la autoridad, respeto. Si quieres respeto en un ambiente libre de egocentrismos, adquiere conocimientos.
  8. Pelea por lo que quieres, pero acepta las derrotas. A veces tus ideas van a ser despreciadas. Incluso si tenías razón no te tomes la revancha diciendo: “Ya te lo dije” más de lo necesario. No lloriquees más de la cuenta ni te hagas el mártir.
  9. No seas “el tipo ese“. No te conviertas en el chaval que solamente se levanta de la silla a por cafés. Este tipo está desconectado, es invisible, fuera de control y no tiene cabida alguna en un entorno abierto y colaborativo.
  10. Critica el código y no a las personas. Sé amable con el programador, no con el código. Tanto como sea posible haz comentarios positivos con el objetivo de mejorar el código. Haz referencia a estándares, especificaciones, mejor rendimiento, etc.

A mí la que más me gusta es la 7 y recomiendo encarecidamente a todo el mundo que no se conviertan en el 9. También creo que la 1 es importante, tanto desde el punto de vista del programador como del que encuentra el error, pero está claro que no es buena señal que alguien cometa demasiados errores.