Archivos mensuales: julio 2008

¿Programando a los 50? No, por favor

Los que me conocen saben que uno de mis blogs habituales es Navegapolis, de Juan Palacio. Es un tío muy coherente y con mucha experiencia en el ámbito de la gestión de proyectos de software, pero lo mejor de todo es que habla desde el punto de vista de un técnico, no de un “director de”, y de los problemas que se encuentran los desarrolladores por culpa de la mala gestión de los equipos. Este artículo hace referencias a algunos de sus posts de los últimos meses:

Como referencia a uno de ellos, muy interesante también Circuitos de pérdida de talento, por José Medina.

El viernes pasado, cenando con un alto cargo de RRHH de una multinacional, surgió el tema de los equipos y las selecciones de personal en IT.  Esta persona, antes de su actual puesto, desempeñó puestos similares en consultoras y telecos, con lo que algo sabe del tema. Me sorprendieron, sin embargo, algunas de sus opiniones. Este artículo es la mía.

Desde mi punto de vista y basándome en mi experiencia, un equipo de desarrollo es más que un grupo de gente. Salvo excepciones, son personas con una elevada formación y muy especializada, acostumbradas a pensar, a crear, a diseñar, a las que les apasiona su trabajo, construir, hacer cosas que otros van a utilizar. Esto no se puede entender de otro modo, nadie en su sano juicio se metería en este sector si no le gustase, los salarios son ridículos y el trabajo estresante.

Para entender la mentalidad de un desarrollador debemos comenzar por entender la estructura de un equipo de desarrollo.

Los últimos de la cadena son ellos, los programadores, los que construyen el trabajo, los que afrontan los problemas, los buscan, los solucionan, los preveen, cumplen los plazos… y sólo son los últimos eslabones de la cadena. A continuación tendríamos al responsable del equipo, la pieza clave, el encargado de motivarlos, de valorarlos, de mimarlos. Es el Luis Aragonés de un equipo de desarrollo. Un buen responsable debería preocuparse por la situación personal de su gente,  si tienen problemas (hipotecas, parejas, divorcios, niños…) no rendirán como se espera de ellos. La solución no es pegarles el puro y que se espabilen, es la solución fácil pero la menos buena. Si una persona tiene problemas no necesita que tu le crees más. Es una persona, no un recurso, cuanto antes lo entiendas antes conseguirás formar un equipo.

Encima del equipo y su responsable están toda una maraña de jefecillos y directores de, en general preocupados exclusivamente por su culo y su nómina a final de mes. Gente que hace años pudo ser programador pero se dió cuenta que no tenian un buen futuro y ahora son jefes. Gente para la que su trabajo es cumplir ocho horas e irse a sus casas. No les gusta especialmente su trabajo ni sienten pasión por él, es necesario para llegar a final de mes y punto.

Finalmente están los departamentos comerciales, los encargados de preguntarte plazos y recortarlos a su antojo. Los encargados de decir que sí a todo lo que los clientes solicitan, independientemente de que sea o no viable, ya habrá algún programador que lo solucione, y si no, a trabajar 12 horas diarias y fines de semana para cumplir los plazos.

Bajo esta estructura es fácil adivinar que muy pocos programadores (o ninguno) sienten, con 30 años, que quieren seguir siendo programadores a los 50, picacódigos que decimos. Todos aspiramos a ser responsables o, a poder ser, directores de algo y que otros hagan el trabajo. Triste pero cierto. Hay comerciales, gente de marketing, rrhh… con salarios de 50 a 70.000 euros al año pero nunca habrá un programador, ni siquiera un analista, que llegue a esas cifras. ¿Por qué?. Ellos hacen un trabajo imprescindible, fabrican, piensan, se echan a la espalda un duro trabajo. Un trabajo para el que, en muchos casos, se han pasado años y años en la facultad estudiando, soportando asignaturas y profesores duros (¿ingenierías vs. ADE, derecho, psicología…?). ¿Todo para qué? ¿Para empezar con 800 euros al mes y con suerte, en un par de años, llegar a los 1.000?

Esta persona con la que hablaba me comentaba que, para ella, un equipo eran un par de buenos programadores y el resto picacódigos. Imagino que la estructura que pasaba por su cabeza hablaba más de analistas que de programadores. Aún así es un grave error pensar así. Es como pensar que un equipo de fútbol son dos galácticos y 9 jugadores de relleno que se encargan de dar balones a las estrellas. Qué queréis que os diga, yo prefiero un equipo bien formado de 11 jugadores donde la integración del conjunto cree una estructura sólida y eficaz, un equipo del que ninguno de sus componenes quiere salir pero tampoco necesite destacar, que se sientan valorados y que sientan que participan en algo importante. Alguien diría, claro, ese es el trabajo del responsable del equipo, motivarlo. Y yo le contestaría, entre basura no se puede motivar a nadie. No le puedes hablar de motivación a alguien que cobra 15.000 euros anuales. Su motivación es buscar quien le de 16.500 y cambiar de trabajo. La motivación comienza por el salario y las políticas de mejoras. Si un empleado no puede pagarse un piso, irse de vacaciones unos días o salir a tomar unas copas… ¿cómo vas a motivarle? ¿le vas a contar milongas de que lo que hace es importantísimo? ¿que aquí va a aprender mucho? Yo, sinceramente, me reiría de ti en tu cara.

No vas a ganar la Eurocopa si no tienes equipo. No necesitas a los mejores, pero sí a unos cuantos válidos, compenetrados y motivados. Empieza por un sueldo decente. Trátalos como si fuesen personas, no como animales (de hecho a los animales se les trata muchas veces mejor que a los empleados). Preocúpate por sus vidas y que se sientan valorados. Esa es la motivación que te toca, que sientan que hacen algo útil y que su opinión cuenta, no son simples machacas, es gente que piensa y le gusta encontrar mejores soluciones. Si consigues una maquinaria bien engrasada y trabajando en equipo, sin competencias internas, sin que nadie busque medallitas, con lealtad, con capacidad para reconocer el error de uno y solucionarlo entre todos, amigo, tu trabajo así será mucho más sencillo y productivo.

Cuando un responsable de equipo consigue formar un buen grupo de gente intentará por todos los medios llevárselo con él allá donde vaya, es su garantía de trabajo y confía plenamente en ese equipo, los valora por encima de todo, sabe que su trabajo, si no tiene debajo un buen equipo, será casi imposible.

Siempre se dice que nadie es indispensable, y es cierto, nadie lo es, pero el hecho de que una persona abandone el equipo y entre una nueva puede llevar a tu equipo al fracaso. Puede desestabilizarlo, crear competencias que no existían por el simple hecho de buscar las conocidas medallitas… ¿En serio vale la pena dejar marchar a un buen trabajador sólo por no negociar con él? ¡Qué fácil es pensar que dónde había ese hay más! De un modo o de otro, tu equipo se resentirá y tu serás el primero en sufrir las consecuencias, tu planificación se irá por la borda y los plazos comenzarán a agobiarte.

Hablemos también de los de más arriba, de los directores de. Sí, esos con tan poca autoestima que en cuanto aparece alguien que intenta hacer bien las cosas hacen todo lo posible para cargárselos creyendo que así salvan su puesto de trabajo cuando en realidad están destruyéndolo lentamente. Como argumenta José Medina:

los números uno se rodean de números uno, y los doses, de treses y cuatros

Sobran más comentarios. Más aún en esta conocida cultura que hace jefes a los que ayer eran machacas, la cultura del peloteo, sí. El machaca convertido en jefe será siempre un número tres o cuatro que intentará que un número uno no se le suba a las barbas.

Un programador es una persona que se tiene que reciclar contínuamente, cada año su trabajo cambia, cambian las tecnologías, los lenguajes, las máquinas… y él está ahí al pié del cañón. ¿Os imagináis la experiencia que debe tener un tío de 50 años que lleve 25 programando? Impresionante. Pero nadie lo va a valorar. No. Más bien al contrario. Pensarán, vaya, menudo paquete tiene que ser este para ser un simple programador a su edad… En efecto, esta es la realidad.

Que nadie olvide que, por mucho director de que haya, no estarías ahora utilizando un ordenador si no existiesen los programadores. Es un trabajo donde te acuestas pensando y te levantas buscando soluciones. Piénsalo la próxima vez que arranques tu ordenador.

Por todo esto, no, a los 50 prefiero ser el responsable de un buen equipo e intentar hacer lo que hoy no nos dejan y que los que vengan detrás crean que ser programador es un buen trabajo, digno, gratificante y que te permitirá jubilarte.

Alguien que conozco me llamará ahora idealista icon wink ¿Programando a los 50? No, por favor sector programar Personal Opinion Management informatica cualificado , que todo esto está muy bien pero la realidad es bien distinta. En efecto, así es, pero a mi también me queda algo de idealismo aún. Esperemos que dure.

Sé que se me han quedado algunas cosas que quería decir en el tintero, pero ya está bien de aburriros, me ha quedado más largo de lo que esperaba. Hasta la próxima icon smile ¿Programando a los 50? No, por favor sector programar Personal Opinion Management informatica cualificado .

Insertar en Sql-Server desde fuentes de datos con php en la línea de comandos

La aparentemente cosa más tonta del mundo me ha tenido todo el día liado. Y no es la primera vez. Anteriormente me había pasado al procesar RSS, hoy ha sido al consumir unos webservices (SOAP).

Nuestros sistemas trabajan con MsSql, Apache, PHP5 y Windows 2003 Server. De vez en cuando necesitamos crear tareas que lean desde determinadas fuentes de datos y los inserten en una base de datos. La última vez que me había ocurrido era leyendo un RSS. Si lo lanzaba a través de la línea de comandos con php.exe la codificación que se guardaba en la base de datos era errónea, todos los acentos, eñes y demás caracteres no ASCII se perdían. El caso es que al ejecutarlo a través de Apache todo funcionaba bien.

La otra vez, por falta de tiempo, lo dejé pasar y montamos la tarea a través de Apache con wget. Pero ahora no era la mejor solución, hay que procesar varios webservices y la tarea se puede prolongar durante mucho tiempo, con lo que tener un hilo de apache corriendo tanto tiempo no me parece lo más adecuado.

Después de mucho googlear he encontrado la solución. Resulta que al ejecutar la tarea desde la línea de comandos se produce una conversión automática de ANSI a OEM:

Any clients running Windows NT or Windows 95/98 are considered ANSI clients. Console-based applications, such as the isql utility, are considered OEM clients.

Por lo tanto nos cambia la codificación sin remedio. Para ello hay una solución, y es ejecutar nuestro script a través de un wrapper que lance el proceso sin ser bajo consola, digamos que engañando al sistema operativo. En tu instalación de php tendrás un php-win.exe que hace exactamente lo mismo que el cliente habitual pero sin lanzarlo en la línea de comandos, parecerá que no ha hecho nada pero si abres el administrador de tareas verás el proceso php-win.ese corriendo e insertando correctamente en la base de datos.