Etiquetas

, , ,


Aunque es del 14 de marzo pasado, sólo me dí cuenta ayer cuando lo enviaron a Menéame. Se trata de un apunte de David Santo Orcero: Yo si estoy a favor del Colegio. Aunque por el título parecía una defensa en positivo, me encuentro con lo siguiente:

No suelo leer a Ricardo Galli; no es santo de mi devoción, y lo que escribe no me suele parecer especialmente interesante. Especialmente porque a veces le dan ataques en contra de sus diversas fijaciones…

… lo que no termino de entender de Ricardo es otra de sus pulsiones: la de repetir incesantemente lo poco que aprendió en la carrera de informática… Tengo que reconocer que desconozco el sistema educativo argentino; … Como ya dice uno de los comentarios de la noticia, no termino de entender como consiguió la homologación,… Lo bueno de esta entrada es que gracias a ella puedo entender el porqué de la opinión de Ricardo respecto a los estudios de informática y al colegio. …hasta entiendo que considere que el Ingeniero en Informática sabe menos de informática que el físico -como se desprende de esta entrada de su blog-.

Mi historia personal es bien distinta a la de Ricardo. A diferencia de él, todo lo que comenta en su blog yo sí lo aprendí en la carrera.

La verdad es que estoy muy cansado de leer a gente como Ricardo echando mierda sobre el tejado de la casa de la Ingeniería Informática. Estoy muy cansado de leer y escuchar a presuntos popes y gurús diciendo que, si quieres saber de informática, hazte teleco, físico o biólogo… Porque antes entrará Chikilicuatre que un Ingeniero en Informática en la Comisión Interministerial de la Sociedad de la Información y de las Nuevas Tecnologías en España. Y siempre habrá un Ricardo que dirá que aprendió más informática afinándole la guitarra a Chikilicuatre que en cinco años de Ingeniería Informática.

Y, Ricardo; no sabes lo que siento que no hayas podido aprender informática en tu universidad cursando estudios de informática, y hayas tenido que ir a aprenderlo a un laboratorio de física. Yo tuve la suerte de aprenderlo estudiando Ingeniería Informática en Málaga.

Me dejó pasmado, sin palabras (luego le contesté con comentarios, quedaban como moderados todos, el último que le dejé no lo aprobó, así que abandoné la idea de debatir allí).

Más que una defensa de la necesidad de colegios informáticos es casi un apunte dedicado a desacreditarme, poner en duda mis conocimientos y tratarme de un «ingeniero Chikiluatre», todo por un inocente apunte donde contaba una anécdota personal (de hace casi 20 años) y en parte explicar el porqué siento un especial respeto profesional por otros profesionales no informáticos, y lo bien que me vino hacer mi PFC en un centro de investigación de tanto prestigio, fue le mejor época de mi vida, aunque no tenía ni para comprarme tabaco.

No me interesa repetir las razones de porqué estoy en contra de los colegios informáticos, creo que poco de valor puedo añadir a lo ya comentado en Monopolios legales a cambio de nada, Los falaces argumentos de los colegios oficiales, Respuesta –y última– a ingenieros de primera y que poco avanzaremos en el debate, se ha convertido casi en un «ir a matar a Galli por cualquier opinión suya sobre los colegios».

No será eso el tema fundamental, sino valorar y responder lo más objetivamente posible a las acusaciones tan graves que me hace este colega, ingeniero informático y profesor de universidad.

Uno de los puntos fundamentales del apunte que generó esta reflexión es que afirmé que aprendí varios temas importantes durante el desarrollo de mi PFC (en 1990). Parece que la «confesión» de que hace 18 años no conocía algunos lenguajes fue el detonante hasta para acusarme de «Chikiluatre» o de que no debería tener mi título de ingeniero homologado [*].

[*] Entre otras cosas me lo homologaron porque según la ley hay que tener en cuenta los estudios en el extranjero –me pidieron hasta el último programa de asignatura y el historial de todas mis notas– más el curriculum académico científico. Por aquellos años yo ya había acabado dos años de cursos de doctorado, presentada mi memoría de investigación de doctorado y tenía unas pocas decenas de publicaciones científicas.

Parece no haber quedado claro que yo diferencio claramente el haber visto un tema en la carrera, a saber sobre ese tema. Insisto en esa diferencia.

Afortunadamente en este caso se puede hacer un análisis más objetivo sobre si es verdad que el haber visto asegura saberlo. El mismo lo dice su biografía:

David Santo Orcero también ha sido un conocido desarrollador de software libre, en proyectos como el sistema de clusters libre OpenMosix, o el visor libre de imágenes médicas radiológicas kradview, y de abundante documentación libre. Podemos encontrar aquí algunas de sus contribuciones al software libre.

en sus contribuciones al software libre:

Show me the code

Cojamos un tema sencillo que pueda ser analizado objetivamente y que no necesite mucha explicación para un informático.

En mi apunte comentaba que aprendí C y C++ cuando estaba haciendo mi PFC. Este colega asegura que ese tema lo aprendió en la universidad. Veamos si es verdad, su código me servirá para analizarlo objetivamente.

Seguramente por las contribuciones anteriores, un amigo de él envío al menéame enlaces al CVS del proyecto OpenMosix. Desafortunadamente, rápidamente quedó más o menos claro cuáles eran las «contribuciones sustanciales», bastante poco en realidad.

Curiosamente, a los pocos minutos, un chaval de 20 años, sin estudios formales de informática –pero no erraría por mucho si afirmase que de las personas que conozco es el que más domina el tema de seguridad–, que sería considerado un «intruso» y que no podría pertenecer a un colegio de informática, le descubre un bug de seguridad grave a las librerías del OpenMosix.

Tampoco es para escandalizarse.

Como ya comenté en un apunte, el tema de seguridad requiere de una mentalidad especial. Aunque varios «ingenieros» me criticaron –algunos sin siquiera tener idea de quién es Bruce Schneier, es bestial–, este es un pequeño detalle más que los títulos de ingenieros no garantizan que no cometamos o dejemos pasar esos errores, ni siquiera los importantes de seguridad.

De todas formas la intención es analizar cómo programa una persona. Debido a que hay pocas contribuciones de código real, fue difícil encontrar código para analizar, pero encontré algo «sustancial», el cambio de unas pocas líneas de código «efectivo».

El código original era el siguiente:

code1

Después del cambio enviado por David Santo Ocero quedó de la siguiente forma:

Me sorprendió mucho la función modificada. A pesar de ser tan breve tiene varios problemas básicos de programación:

  • No respeta el estilo sangrado de la mayoría del código, incluso el sangrado que hace del else no aparece en ningún estilo, ni siquiera una vez en libros de C.
  • Usa los «;» de separador después de otro separador (el «}»). Es incorrecto, el «}» ya es un separador –de bloques–, «;» es separadora de intrucciones. Lo que hace en este caso es introducir instrucciones nulas.
  • Pone como dos «if» independientes, y por lo tanto en dos expresiones lógicas separadas cuando en realidad es una sola con el operador «AND» («&&»).

Así la versión correcta y en buen estilo sería como la siguiente:

De todas formas tampoco es tan importante tener un error de esos de vez en cuando, todos tenemos nuestros días tontos.

Así que me puse a mirar el código fuente de su otro programa liberado. Es una aplicación KDE, parece que generada con el kdevelop, en C++, aunque la mayoría del código que desarrolló es en C estándar e incluso mezcla funciones de entrada salida del ANSI C con las del iostream del C++ (que no debe hacerse, por eso luego tiene que recurrir a tantos flush() para vaciar los buffers internos del printf(), aunque la solución hubiese sido la función setlinebuf() llamada una sola vez al principio del programa).

En el codigo del kradview se pueden ver los mismos problemas de sangrados erróneos:

Como puede verse el código es casi ilegible, incluso con bucles for como el siguiente:

Lo correcto es un for (int i = 0; i < …; i++), el C++ permite definir y asignar variables locales en un for. Pero en la figura anterior pueden verse dos incrementos consecutivos al puntero paux.

Eso ya denota un problema más grave, desconocimiento del funcionamiento de la aritmética de punteros en C o C++. Las dos instrucciones se reducen a una sola: paux += 2; Todo ventajas: es la forma correcta, más clara de interpretar, y más eficiente. El C en su máximo esplendor.

Este error de principiante me llamó mucho la atención y busqué en el código algo similar, lo encontré, y todavía más grave:

El código de arriba inicializa tres enteros a partir de un buffer (es un char * que se recibe como argumento en la función), para leer los tres de forma secuencial usa un puntero temporal bufferT. Aunque esto yo lo hubiese hecho con una estructura de tres enteros, asumamos que es válido. Sin embargo tiene problemas graves de algoritmia básica que se estudia en programación de primero:

  • La variable entera count acaba siempre con valor 8, por lo que no tiene sentido hacer el incremento ocho veces. Basta con inicializarla a 8, aunque es una constante y podría haber usado directamente el literal 8, o un macro si interesa darle «significado» al literal.
  • Entre cada lectura incrementa el puntero dos o cuatro veces consecutivas, cuando podría incrementarse de una vez –gracias a la aritmética de punteros como en el caso anterior–.
  • Menos importante, pero también vuelve a denotar una falta de dominio de la evaluación de expresiones lógicas. Los paréntesis que rodean al operador de desigualdad son redundantes y sin efecto alguno.

Así el código de la forma correcta, y más eficiente, queda de la siguiente forma:

Como puede verse es totalmente equivalente, pero más legible, breve y eficiente. Incluso puede mejorarse, el siguiente trozo de código es equivalente, aún más eficiente, breve y de fácil lectura a ojos entrenados:

¿Y?

He analizado unos pequeños trozos de código de una persona que es ingeniero en informática, profesor de universidad y que además afirma que esos temas los aprendió durante la carrera, a diferencia de mi caso, que aprendí casi todo lo que conté durante el desarrollo de mi PFC, o quizás aún más tarde. Los segmentos analizados tienen graves problemas de programación básica general, y otras específicas de programación en esos dos lenguajes.

Si el código analizado hubiese sido de una «intruso», ¿qué hubiese dicho el ingeniero David Santo Ocero?

¿Cómo hubiese sido mi respuesta si tuviese la misma «ética deontológica» de este colega o de varios «comentaristas»? Seguramente hubiese salido algo así:

Vaya mierda de ingeniero, no tiene idea siquiera de programar cosas básicas, comete errores que no cometería ni un estudiante de primero. No sé a qué universidad ha ido, vaya universidad, deberían cerrarla, ¿cómo es que ha obtenido el título? ¿cómo le dejan ser profesor de universidad? deberían echarlo ahora mismo por estar dando el peor ejemplo que puede dar un ingeniero… Estos Chikilicuatres son los que tanto daño están haciendo a la profesión.

Pero no, esa respuesta sería éticamente errónea, simplista, generalista y falaz (valga la redundancia). No llega ni al mínimo nivel que debe haber en un debate entre «profesionales».

Como siempre comento, la universidad nos da los conocimientos básicos y el entrenamiento básico que necesitamos –sino la carrera sería interminable–. Lo que aprendamos individualmente depende mucho del interés de cada uno, y no todos podemos ser buenos en todos los temas informáticos… no sé, aunque uno pueda ser un mal programador de C o C++ quizás sea muy bueno es diseño de algoritmos distribuidos, o en modelado de elementos finitos, o en biotecnología. Por estas mismas razones es que es muy difícil definir todavía «competencias», hacen falta especializaciones y algún que otro «cisma» en las carreras informáticas (tal como la tuvieron los ingenieros eléctricos de los físicos a principios del siglo XX).

Además, cuando salimos de la universidad estamos obligados a seguir el ritmo del avance de la ciencia y la tecnología. Hoy mis alumnos están aprendiendo Python y programación web con modelos MVC o MTV, eso era impensable hace pocos años, porque ni siquiera existía el web (menos mal que nadie todavía me incineró por no saber lo que era HTTP cuando acabé mi carrera, pero todo llegará 🙂 ).

Pero tampoco es tan poco.

Hay errores demasiados fundamentales para cualquier programador. En este caso además se trata de un ingeniero informático, profesor universitario de informática, y que además afirmó:

Estoy a favor de unos estudios duros, como los que hice en su día, que formen gente muy cualificada.


El código que heredamos de MOSIX era muy malo; y lo dije en público. Amnon Barak es uno de los científicos más brillantes que he conocido, pero sus programadores eran discutibles.

No sé los demás, pero dada la evidencia me parecen muy contradictorias estas frases, o cínicas como mínimo. Parece obvio que tampoco es mejor programador de los que acusa de «discutibles», y que a pesar que lo afirma, obviamente no aprendió C o C++ durante su carrera en la Universidad de Málaga. De hecho su código demuestra que todavía no los sabe, o que se olvidó.

Independiente de lo anterior, no entiendo que para defender las ideas favorables a los colegios informáticos se dediquen casi exclusivamente a un ataque ad-hominem, llamándome un Chikilicuatre sin que venga absolutamente a cuento, en mi vida le critiqué [*] y no veo las razones para que le haya subido tanto la bilis. Quizás sea porque también soy un talibán… y si Richard Stallman se merece todo su desprecio y ataques, ¿por qué habría de salvarme yo? 😉

[*] Incluso fui a una de sus conferencias, creo que en Elche y si no me equivoco otra en Málaga, porque también me dedicaba a jugar con el OpenMosix cuando era novedad para mí — en realidad lo monté porque el director del Dept. me pidió que lo ponga en marcha para un profesor cubano que estaba en la UIB y lo necesitaba para probar sus programas–).

«Moralejas»

  • Como dije muchas veces, se echa en falta en la carrera al menos una asignatura obligatoria con temas básicos de ética, deontología y lógica filosófica.
  • Se confirma una vez la estudiada disfunción metacognitica que sufrimos los informáticos (y todos los profesionales de ciencias o técnicas que avanzan y cambian tan rápido).
  • Por el punto anterior, es fácil criticar a los demás –sin evidencias o enlaces– pero no darse cuenta de los «agujeros de conocimiento propios», ni siquiera de los numerosos errores graves que cometemos –me incluyo– en nuestros programas.
  • Dada la complejidad inherente de los programas (muchos más elementos independientes y combinaciones posibles que los sistemas físicos) es muy difícil no cometer errores. Es todavía difícil detectarlos, ya sea manualmente o con herramientas automatizadas.
  • Programar es fácil, programar bien es muy difícil [Richard Stallman dixit]. La única forma de programar bien es mirando mucho código de otros, reconociendo y aprendiendo de sus errores.
  • Show me the code debería ser la regla fundamental en cualquier discusión, es la única forma de analizar lo menos subjetivamente posible la capacidad, conocimientos o méritos de un informático (code también pueden ser artículos científicos, proyectos exitosos, o estudios publicados de cómo se ha gestionado un proyecto grande). Creo que se demostró una vez más que hablar y criticar es fácil, lo difícil es saber hacerlo tan bien como decimos saber hacerlo.

Nota: Perdón por ser repetitivo, todos los puntos anteriores los suelo comentar en mi blog — que una vez más hace falta repetir–, de hecho son parte importante del «núcleo» de mis «genes profesionales» (aunque no ha sido siempre así, quizás hace diez años hubiese estado a favor de colegios). Quizás por estas ideas algunos piensan que estoy «echando mierda a la profesión», pero la intención es la contraria, intentar reflexionar sobre los problemas de fondo, que no creo se solucionen con colegios, mucho menos demonizando a los que opinan distinto. Por lo demás, soy un feliz apasionado de mi profesión, tengo la suerte de poder dedicarme y divertirme full time, y encima vivo de eso. Me considero un privilegiado, vivir de mi hobby.

Bonus: defendiendo a los informáticos a pesar del colegio oficial de informática

Mientras escribía este apunte me acordé de un caso que hice de perito de parte –lo ganamos– en un juicio contra Bitel por temas laborales.

Una de las cosas que me acusan es de «no interesarme por mejorar la situación laboral de los informáticos», cuando en realidad soy el primero en hacerlo cada vez que pueda, incluso aunque tenga que ganarme algunos «enemigos».

El contexto.

Un compañero mío de la universidad –Damià, incluso éramos amigos, fue uno de los primeros que conocí cuando vine a Mallorca, es muy majo y salía a pasear en uno de sus múltiples veleros :-)– fue perito de parte del PP en el caso del «espionaje electrónico de Bitel/Jaume Matas». Cuando el PP ganó las elecciones de Balears lo nombran a él como director de la empresa Bitel. Damià fue el impulsor del colegio de informática de Balears, la ley se aprobó bajo el gobierno de Matas y cuando él ya era director de Bitel –creo que se notan las relaciones políticas–. En cuanto se crea el colegio Damià es elegido Decano.

En el 2006 se pone en contacto conmigo un abogado especialista en temas laborales. Empleados informáticos de Bitel (FP2 e ingenieros técnicos en su mayoría) afirman que la categoría que tienen en Bitel no corresponde a sus tareas de acuerdo al convenio de trabajo, estaban contratados y cobrando como auxiliares administrativos cuando le correspondía como mínimo la categoría de operador de ordenadores.

Analizo lo que me cuentan, los manuales de procedimiento que les pedí, el convenio colectivo de trabajo y les informo que opino lo mismo, y que no tenía problemas en preparales un informe pericial y declarar en el juicio –a sabiendas que me metía en contra de la administración, de un colega y que además era el Decano del Colegio… el mismo que decía defender los derechos de los informáticos–.

Este es el informe pericial que presenté (sólo oculté el nombre del abogado y los últimos dígitos de mi DNI). En él se puede evaluar qué pienso y cómo actúo en la defensa de los derechos de los trabajadores informáticos. A pesar que en el juicio oral me tuve que ver sentado en el otro lado de la mesa –defendiendo los intereses de la empresa en contra de empleados informáticos– al Decano del Colegio. Y además con dos peritos «colegiados» que se presentaron sorpresivamente y que fueron capaces defender cosas como las relatadas antes.

Por eso no creo en que el Colegio vaya a defender los intereses y la valoración de los informáticos.

En primer lugar porque ese tema es un tema sindical y de convenios colectivos, en segundo lugar porque los colegios deberían velar por el interés social y no por el corporativo. En último lugar porque he vivido esta contradicción en vivo y en directo, delante de un juez y unos abogados de la administración bastantes agresivos. De hecho la primera pregunta que me hicieron fue «¿Está usted colegiado?» [*]

Sólo respondí «no», aunque debería haber dicho «no, afortunadamente para los informáticos demandantes, no» 😉

[*] En se momento podía ser perito por ser profesor de universidad, me han dicho que ahora es obligatorio. Así que no creo que vuelva a hacer algo así durante un largo período de tiempo.