cibernoticias EXPRESS

La cara oculta de las noticias

‘La red social’: protocolos de los programadores de Sion

Néstor Díaz de Villegas

La idea de que las protestas del Cairo responden a desigualdades sociales es precibernética.

Mark Zuckerberg (Jesse Eisenberg), joven estudiante judío de Harvard, concibe la idea de un sitio Web que ponga al alcance del ciudadano común todo aquello que un estudiante (gentil o no) buscaría en un portal para asociales, sororitutas y bachilleres solitarios: relación a larga distancia, módico roce interpersonal, promesa de sexo, y una lista de falsos amigos. (En las universidades americanas, las sororities son cofradías estudiantiles femeninas).

Zuckerberg, niño prodigio de la programación, se entrega a la tarea de construir ese no-lugar poblado por no-personas. Claro que, a estas alturas del campeonato cibernético, existen unos gemelos malvados, Tyler y Cameron Winklevoss (el actor Armie Hammer en ambos roles), en contubernio con Divya Narendra, un hindú del Bronx (Max Minghella, el hijo del director Anthony Minghella), a quienes se les ha ocurrido exactamente la misma idea.

Mark Zuckerberg los plagia, los birla, los neutraliza, los retarda, finge colaborar con ellos y finalmente desbarata sus planes (Yea, I’m going to fuck them!, grita en uno de sus privados emilios, ya de dominio público).

Pronto aparece The Facebook, álbum de colegio universal que, al estilo estudiantil, promete empatarnos y conectarnos. No es raro entonces que ese no-lugar llegara a expandirse en pocos años, o que llegara a colegiar el mundo. Es el “desmesurado mapa” de Jorge Luis Borges (a quien también se adjudica la invención del ciberespacio): “…los Colegios de Cartógrafos levantaron un mapa del Imperio que tenía el tamaño del Imperio y coincidía puntualmente con él”. Finalmente The Facebook se mudó a Palo Alto, descartó el the y adoptó la grafía de f minúscula. Hoy facebook acoge a más de 600 millones de habitantes.

La revolución accidental

¿Qué pasó con los jimaguas Winklevoss?  ¿Acaso fue a caer el hindú del Bronx en uno de esos oscuros cubículos donde un agente de ventas de Mumbai atiende quejas y sugerencias? De ninguna manera. Todos llegaron a ser lo que el autor Ben Mezrich denomina, en su libro homónimo, “multimillonarios accidentales”. Es decir, ganaron 65 millones de dólares, colectivamente, en una demanda contra facebook.

El guión de Aaron Sorkin está basado en el libro de Mezrich, por lo que el talentoso míster Zuckerberg terminó haciendo ricos a los actores, guionistas y editores del filme, así como a los ya acaudalados procuradores de Columbia TriStar.

Como Marx, como Freud, como Woody Allen antes que él, Mark Zuckerberg ha desatado una auténtica revolución epistemológica: la rebelión de los Abelarditos. Notemos aquí su momento estelar. Un día (sábado) Zuckerberg enfrenta a su doble en Saturday Night Live: la criatura mediática abraza en pantalla a su programador. Hay una carátula de álbum (Hours, 1999) en la que Bowie lleva en brazos a Bowie, y hay un video de Eurythmics en el que Annie Lennox vestida de Elvis besa en la boca a Annie Lennox. El creador encara a su criatura; es el golem de sí mismo en tiempo real. La Historia es primero comedia y, después, cine. El medio es el masaje, que es ahora el medio para llegar al mensaje.

Entonces, como era de esperarse, estalla la revolución global. Las armas modernas son el móvil, los apps y la cuenta de Twitter. Sólo como abonados de las grandes transnacionales de las comunicaciones accederemos a la libertad. Al contrario de la antigua Voice of America, ahora Windows, iPhone y Yahoo son los héroes, y no los villanos, de la penetración imperialista.

Mientras debatimos si aceptar o no en nuestros viejos diccionarios los verbos “guglear”, “cliquear” y “blogear”, todavía coreamos “¡Abajo los gringos!”, es cierto; pero Nietzsche predijo (en la Genealogía) que un día los débiles llegarían a gritar “¡Abajo yo!”, y ese día paradójico ha llegado para el musulmán que enarbola un teléfono móvil en la Plaza Tahrir y entona “¡Muerte a América!”.

La falla del musulmán está en no reconocerse como americano —en el sentido cibernético del gentilicio— un error que, por cierto, el judío Franz Kafka había subsanado al enviar por delante a su doble, el joven Karl Rossman, para hacerlo desembarcar en Amerika. Por ser Amerika perennemente joven, sus revoluciones globales arrancan de un dormitorio estudiantil en Cambridge.

Disneyficación del universo

No me extrañaría que La Meca quedara en la misma dirección de Disneylandia. Si no fuese así, los Hermanos Musulmanes le estarían dando las espaldas al profeta de un “pequeño mundo” que hoy ha llegado a afectar la Realpolitik y las nociones más sagradas. Le estarían dando las espaldas a Walt Disney.

La idea de que las protestas del Cairo responden a desigualdades sociales, al rampante desempleo o al alza de los precios, es precibernética. El malestar moderno es una función de lo viral, y otro efecto de la aceleración informática.

La conglomeración de criterios prefigura el desencuentro, aunque a la larga nos devuelva a la hiperdemocracia (que es esa democracia donde Hezbolá gana las elecciones).

Pero el resultado de la hiperdemocracia mediática es la disneyficación de las causas y de las ideologías, un proceso paralelo al que han sufrido las ciudades: la subversión del orden del barrio y del suburbio en favor de la polis gugleada. Lo musulmán ocupa hoy una franja del Small World satelital.

La desorientación y la instantánea desubicación del suplicante al dirigir sus plegarias (aún después de haber sido privado del “santo cielo”), inmerso como está en una revolución orquestada en Harvard y en el Valle del Silicón, es lamentable. También su Libro fue superado por facebook, el Libro del Rostro: gracias al judío Mark Zuckerberg el proceso de californicación islámica está completo.

16 febrero, 2011 Posted by | 2.-INTERNET, INTERNET, redes sociales | , , , | Deja un comentario

Programadores que no programan

A raíz del artículo Programando para la Administración Pública, he recibido muchos correos y llamadas de colegas que se sentían plenamente identificados con el relato. Incluso ha habido quienes han indentificado a algunos de los aludidos y que no han dudado en contactarme con más historias sobre esta gente ya fuera del ámbito de la Administación.

Pero algo que me ha resultado francamente interesante es que, además de los comentarios de otros programadores, he tenido la oportunidad de hablar con quienes están al otro lado: consultoras y empresas. Responsables de algunos importantes departamentos de Recursos Humanos a nivel nacional me comentaban que el panorama actual a la hora de contratar personal es desolador: casi ninguno de los candidatos que se presentan como programadores son capaces de escribir algún tipo de código. Esto significa que, en muchas ocasiones, la demanda del sector obliga a destinar recursos sin la formación mínima que el cliente solicita, algo que la mayoría de estos, ha asumido con resignación.

Esta afirmación no me resulta nueva. Los años de experiencia me han llevado a estar numerosas veces presente en varios procesos de selección tanto a un lado como a otro de la mesa: cuando me ha tocado entrevistar a un programador para cubrir un puesto en mi empresa, muchas veces he dudado sobre si el Currículum que he leído corresponde realmente con la persona que tengo delante: todo lo que por escrito eran conocimientos sólidos, en la práctica pasan a ser nociones sobre algo que ha leído en Internet.

Como este tema ha llamado mi atención, me he puesto a investigar un poco sobre los procesos de selección y la información que obtienen las consultoras y empresas sobre el candidato en cuestión.

Algunas de las organizaciones más importantes de este país en términos tecnológicos, tienen un proceso de selección muy duro que dividen en varias entrevistas tanto teléfonicas como presenciales. En ellas, además de evaluar el perfil académico o los méritos, nos piden resolver algunos problemas técnicos para evaluar nuestros recursos. Es el sistema por ejemplo de Google, Softonic o Tuenti entre muchas otras.

Estas pruebas son las que más me han interesado ya que permiten medir con cierta precisión el nivel real del solicitante. Y el resultado es, tal y como me habían advertido, inquietante. Según una estadística rápida, de cada 10 candidatos que solicitan un puesto en la empresa, 7 de ellos no son capaces de escribir el algoritmo más simple en aquellos lenguajes en los que se definen como expertos.

Elena, jefa del departamento de Recursos Humanos de una conocida consultora, me confiesa que criban más del 80% de las candidaturas con una simple prueba sobre papel:

– Le pedimos al candidato que seleccione un par de lenguajes de programación de entre aquellos que figuran en su CV y que escriba para cada uno un programa capaz de contar de 1 a 100. Como entendemos que es una prueba muy sencilla, solo facilitamos lápiz, papel y 5 minutos. De cada 10 entrevistados, 3 comienzan a excusarse y no realizan la prueba; otros 3 la comienzan pero no la resuelven en el tiempo facilitado. Con suerte, otros 3 la completan correctamente porque realmente saben lo que hacen y, finalmente, la persona restante se siente ofendida en su orgullo y solicita abandonar la entrevista. Esto en una fría estadística supone un 70% de fracasos. Algo alarmante si tenemos en cuenta que tratamos con licenciados, ingenieros o graduados en Ciclos Formativos.

Javier, desde su departamento en otra conocida empresa española, me facilita datos similares: a los aspirantes les hacen una prueba desde casa para evaluar su habilidad en aquellos lenguajes que ellos mismos escogen. Amablemente, me hace llegar uno de los enunciados para un puesto de ingeniería de Front-End: un PDF en inglés con el enunciado de un problema en el que tenemos que usar Javascript orientado a objetos. La prueba está planteada para ser resuelta en un par de horas, espacio de tiempo que personalmente estimo muy optimista. Se evalúa la compresión del problema, la calidad del código entregado y la eficiencia del algoritmo implementado.

– Tenemos diversos modelos de examen creados por nuestro equipo de ingenieros. Generalmente damos un par de horas a los candidatos para que realicen el ejercicio en aquel momento que estimen oportuno. Sólo tienen que solicitarlo y se les envía casi de inmediato; incluso fuera del horario de oficina. De cada diez propuestas que enviamos, solo recibimos 2 ó 3 respuestas. De los archivos recibidos, podemos concluir con que prácticamente nadie ha completado la prueba en el tiempo estimado: la media de tiempo para la entrega es de tres horas, por lo que nos hemos decidido por valorar más el resultado que la velocidad en ejecución. Nuestro criterio de evaluación se basa en la calidad del algoritmo y en la estructura del código: si el programador aspira a formar parte de un equipo de desarrollo, su código tiene que ser fácilmente interpretado por el resto de colegas. No queremos personas insustituibles por el simple hecho de que sus aplicaciones sean inaccesibles para el resto del equipo. En definitiva, de cada 10 propuestas enviadas, tramitamos para una segunda fase de 0 a 1.

Para aquellos interesados en ojear el problema, pueden descargarse el PDF desde aquí.

Me queda claro que las grandes corporaciones han establecidos unos eficaces filtros para seleccionar a su personal. El dato, sin embargo, es escalofriante: la mayoría de aspirantes no son capaces de resolver problemas triviales desde la comodida de su propio salón. Me pregunto si la situación es similar en empresas más modestas, por lo que contacto con algunas pymes para recoger más datos.

Juan, director de Marketing de una empresa poco conocida pero responsable de las más importantes tiendas de comercio electrónico de este país, me comenta que no disponen de mecanismos para evaluar candidaturas. Hasta ahora, se han basado en la evaluación de CVs a través de conocidos portales de empleo y de una entrevista personal. Ni siquiera confían en las consultoras. Cuando le pregunto qué resultado le ha dado hasta ahora su sistema, no puede esconder frustración.

– Mal; no has ido muy mal. Necesitamos analistas y desarrolladores capaces de escribir código PHP orientado a objetos. Ocasionalmente, necesitamos implementar mejoras en nuestra plataforma o replicar alguna de nuestras tiendas con éxito para un nuevo cliente. Hemos puesto diversos anuncios y se nos han presentado programadores con un perfil académico altísimo; sin embargo, en la práctica diaria del trabajo, no terminan siendo resolutivos: en muchos casos nos hemos encontrado con informáticos que no son capaces de leer un código y trabajar sobre él. Se pasan las mañanas escondidos tras sus monitores haciendo como que escriben cientos de líneas; sin embargo, al final de la jornada, el trabajo continúa como al principio. A veces, cuando no saben cómo resolver algo, sugieren cosas tan radicales como reescribir todo el código; da igual que se trate de un framework con más de un millón de líneas o un CMS utilizado por miles de usuarios con éxito. La solución del programador mediocre es volver a reescribirlo todo: al final, reinvetamos la rueda tantas veces como damos de alta en la Seguridad Social a un nuevo miembro en el equipo.

Es cierto; estoy plenamente de acuerdo con Juan y la reescritura de código: la solución rápida parece que es siempre rehacerlo todo. Por lo general, no estamos hablando de software mal escrito, sino de programadores que no poseen los conocimientos técnicos suficientes para entender cómo funciona.

Mi último contacto es un empresario madrileño dedicado por entero al mundo de los cruceros online. Se trata de un señor de mediana edad al que he tuve como alumno hace un par de años. Yo sabía que realizaba pruebas a los candidatos a los que entrevistaba, por lo que su opinión me resultaba muy interesante.

– Hace tiempo leí un artículo de un señor al que citabas en tus clases de informática, Jeff Atwood. En él, comentaba cómo era cada vez más frecuente encontrar a programadores titulados incapaces de escribir una sola línea de código o realizar una operación aritmética básica. Como ya había tenido problemas con un par de empleados, decidí coger un ejemplo de ese artículo para evaluar a los futuros candidatos. Se trata de escribir un simple programa que imprima en pantalla los primeros 100 números. Si un número es múltiplo de 3, se escribe “Fizz” en su lugar. Si el número es múltiplo de 5, se escribe “Buzz”. Si el número es múltiplo de ambos se escribe “FizzBuzz”. El único requisito es que el aspirante teclee el código delante de algún empleado para que lo supervise. Con esta prueba tan sencilla, he conseguido evitarme sorpresas.

Conocía el ejemplo; revisé el artículo de Atwood y busqué la referencia. Mirando en los comentarios del post, lo más sorprendente es que muchos erraron la respuesta: estamos hablando de que parte del público objetivo de un blog puramente técnico, tampoco supieron dar con una respuesta óptima desde la tranquilidad de su casa. Para aquellos lectores no programadores, el problema planteado puede resolverse en un par de minutos; al final del post, he puesto un par de soluciones para PHP y Javascript.

En definitiva, las conclusiones de algunos responsables de Recursos Humanos tanto de grandes empresas como de pymes, son cuanto menos inquietantes: un alto porcentaje de los programadores titulados que se presentan a un proceso de selección no son capaces de escribir el más simple de los programas en aquellos lenguajes en los que dicen ser expertos. Puedo entender que para algunos, escribir un algoritmo sobre un papel puede ser antinatural: cuando yo mismo lo intento durante mis clases, me doy cuenta de que a veces no recuerdo la sintaxis correcta de algún comando: parece que por lo general, nos defendemos mejor frente a un teclado que sobre una pizarra. También entiendo que la presión del momento puede jugarnos una mala pasada y hacernos quedar en blanco. Pero al fin y al cabo, para conseguir un trabajo, en la mayoría de especialidades tendremos que realizar algún tipo de prueba, por lo que esto no debe ser una excusa.

Jeff Atwood concluía su artículo con un párrafo que me parece inmejorable y que paso a transcribir íntegramente:

“Al menos, los malos programadores pueden ser reeducados; los no-programadores no son sólo inútiles, sino que también restan valor a los profesionales de su alrededor. Deben ser erradicados, comenzando con un simple test que debería formar parte de todo proceso de selección.”

Y ahí encontramos otro problema muy común en las empresas: ya que el rendimiento de la media de programadores en plantilla es limitado, se precisan más recursos para cubrir un proyecto. Si a esto sumamos que los presupuestos suelen estar limitados, cuanto mayor es el número de desarrolladores, menor es el salario que percibe cada uno. Finalmente, el empresario establece un rango salarial en función a su experiencia que termina modificando el mercado. Los sueldos tienden a la baja y los equipos al alza: hay muchas ofertas, pero casi todas mal remuneradas.

Solución a los problemas

En Javascript, legible:

for( var x = 1; x < 101; x++ ){
  if( x % 15 === 0 ){
    console.log( 'FizzBuzz' ); // 15 es el mínimo común múltiplo de 3 y 5
  } else if( x % 3 === 0 ) {
    console.log( 'Fizz' ); // Número múltiplo de 3
  } else if( x % 5 === 0 ) {
    console.log( 'Buzz' ); // Número múltiplo de 5
  } else {
    console.log( x );
  }
}

En PHP, legible:

for( $x = 1; $x < 101; $x++ ){
  if( $x % 15 === 0 ){
    echo "FizzBuzz\n";
  } elseif( $x % 3 === 0 ) {
    echo "Fizz\n";
  } elseif( $x % 5 === 0 ) {
    echo "Buzz\n";
  } else {
    echo $x . "\n";
  }
}

Además de estas, hay muchas otras. Podemos, por ejemplo, compactar el código para reducir su tamaño a costa de su legibilidad. Por ejemplo, en Javascript podríamos eliminar algunas llaves:

for( var x = 1; x < 101; x++ ){
  if( x % 15 === 0 ) console.log( 'FizzBuzz' );
  else if( x % 3 === 0 ) console.log( 'Fizz' );
  else if( x % 5 === 0 ) console.log( 'Buzz' );
  else console.log( x );
}

O simplificar los condicionales en un código más elegante:

for( var x = 1, y; x < 101; y = "" , x++ ){
  if( x % 3 === 0 ) y += 'Fizz';
  if( x % 5 === 0 ) y += 'Buzz';
  console.log( y || x );
}

Si queréis participar con más soluciones en otros lenguajes o mejorar los ejemplos propuestos, podéis escribir vuestro código en los comentarios indicando el tiempo que os ha llevado. Puede ser una prueba personal interesante para comprobar si pasaríamos o no algunas de las entrevistas aquí planteadas.

16 enero, 2011 Posted by | ARTÍCULOS de OPINIÓN | , | Deja un comentario