El programador matrix

Hace ya tiempo que no veo un anuncio de CEAC o CCC, pero siempre me llamó la atención que con un sencillo curso a distancia podías aprender a ser auxiliar de enfermería, o tocar la guitarra para ligar en las fiestas, o ser electricista, por ejemplo.

Hoy he visto un tuit de movilforum en el que enlazaban a una web que te enseña a programar (en JavaScript de momento). No pienso enlazar a la web en cuestión. Según lo cuentan parece casi como en matrix: “Tank, cárgame un curso de programación”.

Me ha recordado la frustración que he sentido muchos años con este tema en lo que se refiere a “la informática”, nombre vulgar de la Ingeniería de Software :)

Para que quede claro, es relativamente fácil aprender a programar por tu cuenta, incluso dominar un lenguaje de programación, y crear programas relativamente sencillos. Pero de ahí a crear un sistema distribuido con capacidad para cientos de miles de usuarios, por poner un ejemplo, va un mundo.

Veréis, mi padre es albañil desde muy temprana edad (ya está a punto de jubilarse), es un hombre inteligente, trabajador y al que le encanta su trabajo. Gracias a eso se ha labrado su vida y es un profesional de primera categoría. Mi padre puede hacer una casa de de dos plantas sin necesitar los planos de un arquitecto, doy fe, pero lo que nunca podría hacer es un edificio de 25 plantas, o un puente colgante.
Todos asumimos sin dudarlo que para eso hay que ser arquitecto, porque necesitas aprender sobre estructuras, cálculo de cargas y resistencias, y otras muchas cosas donde las matemáticas complejas suponen un factor importante.

Bien, pues la informática es exactamente lo mismo. Si no vas a la universidad y aprendes algoritmia, estructura de datos, teoría de autómatas o programación concurrente, difícilmente podrás crear algo grande con ciertas garantías. Y creedme, yo al menos tuve que hacer matemáticas realmente difíciles, diferentes a las que estudia un arquitecto, pero no más fáciles.
No es que no puedas aprender esto con libros de forma autodidacta, también puedes aprender así arquitectura, pero no es lo mismo.
Yo empecé a programar a los 13 años (hace ni más ni menos que 26) en basic, y rápidamente en ensamblador (lo que había a mi disposición). Lo hubiera hecho a los 11, pero hasta los 13 no tuve ordenador. Cuando llegué a la universidad sabía programar bastante bien, y aprendi C/C++ por cuenta propia muy rápido. Es algo que me apasiona y que siempre me ha resultado sencillo de hacer. Pero yo sólo no hubiera descubierto lo que me enseñaron, al menos no rápidamente y de forma eficiente. De eso va el progreso: de aprender de lo que otros hicieron antes, construir sobre lo construido, no empezando de cero cada vez.

Durante mi carrera profesional he tenido la oportunidad de trabajar con gente de muchas empresas, grandes y pequeñas, de formaciones y universidades muy dispares. Si hay algo que puedo decir es que sólo los que estudiaron informática eran realmente productivos y capaces de generar un código de calidad. Un licenciado en biología, o en ciencias empresariales, con todos mis respetos, no puede crear código de calidad porque desconoce conceptos como la notación O (Big Oh) (no pretendo hacer aquí nada académicamente correcto, sólo ilustrativo).
Esta notación permite calcular y clasificar los algoritmos en varios grupos que miden la eficiencia del mismo, el tiempo que tarda en procesar ciertas cantidades de datos. Por ejemplo, un algoritmo de complejidad n2 (cuadrático) hace que el tiempo de proceso se incremente muy rápidamente con el volumen de datos, siendo sólo funcional para pequeños volúmenes. Pero uno de complejidad log(n) crece su tiempo de ejecución de forma muy lenta, por lo que puede usarse en volúmenes de información muy superiores.
Quizás esto no te parezca muy importante, al fin y al cabo los ordenadores son cada vez más potentes. Pues debes saber que metiendo más hardware igual consigues una ganancia de 100 veces, mientras que con un algoritmo más eficiente puedes conseguir una ganancia de 30.000 veces (por ejemplo). ¿Qué ocurre si tu servicio web tarda en procesar una petición 1 segundo? Bueno, eso es poco, ¿cierto? ¿Qué ocurre si lo usan a la vez 100 personas? ¿y 1.000? ¿y 100.000?

Hoy en España muchos de los ingenieros en informática que salen de las universidades aprobaron sus asignaturas, pero cuando les preguntan dicen que no quieren programar, quieren dirigir proyectos, no les gusta programar. Claro, es que programar bien es algo rastrero y difícil :) y eso de hacer cosas difíciles, pues da mucho cansancio. ¿Y por qué dicen esto? Pues porque la proliferación de los programadores matrix durante la burbuja .com de finales de los 90 propició un mercado poco profesional en el que al final los “programadores se vendían al peso”, denostando la profesión y rebajando los salarios de forma drástica.
Ahora le preguntáis a señores como Darmesh Shah, o James Gosling si han dejado de programar. Vale que Goslin es una semi-deidad :D , pero Shah (a quien sigo desde el comienzo de HubSpot) ha creado una de las 500 empresas del mundo de mayor crecimiento, levantado sumas ingentes de capital riesgo (más de 50M$) entre otros de Google, y sin embargo sigue programando (ahora en Python).

No os engañéis, la informática es una disciplina joven comparada con otras como la arquitectura o la medicina, pero su importancia es ya mucho mayor de lo que pensáis, y si le dedicáis un momento os daréis cuenta de que vuestro coche no podría funcionar sin software de calidad, ni el cajero automático, ni los bancos, ni ese increíble aparato médico que hace más seguras y rápidas las intervenciones, ni la planificación que hacen los arquitectos, ni tu teléfono móvil, ni las centrales nucleares, ni los satélites de comunicaciones, ni el GPS,… ¿sigo?

Si todo eso lo hubieran programado programadores matrix creedme que aún estaríamos en el siglo 19.

PS: Con todo mi respeto para CEAC y cualquier método de enseñanza rápida, no es que lo que hacen sea malo, pero la mayor parte de la gente no tiene claras las diferencias y expectativas, en lo que a informática se refiere al menos.

Editado: hago generalizaciones porque si no el artículo sería infumable, y lamentablemente cuando se generaliza se cometen errores. Leedlo bajo esa luz.

8 comentarios en El programador matrix

  • Ivan Freire

    Completamente en desacuerdo y es algo que tengo mas que comprobado. Lo único que si tengo claro en esta profesión, y por desgracia soy ingeniero, es que el paso por la universidad no es garantía de nada. Ojo el paso por la universidad española, en otras no tengo ni idea.

    Obviamente aquí las opiniones son variadas pero para mi la peor frase creo que es “Si hay algo que puedo decir es que sólo los que estudiaron informática eran realmente productivos y capaces de generar un código de calidad” . Entonces creo que no has trabajado todavía lo suficiente.

    Me llama la atención que para estas cosas siempre comparáis con profesiones en las que por ley esta limitado ejercer. Así es mas fácil la comparación.
    Pero mal que nos pese no es lo mismo hacer una aplicación que curar a un ser humano o realizar un edificio, no requiere el mismo nivel de especialización. Hay casos en los que sí, pero son menos del 1% del total y no justifican al resto.

    • narciso

      Iván,
      Mira, yo no soy ningún fan de la universidad (española) y creo que tiene mucho que mejorar. Precisamente yo comencé a estudiar en la Universidad Politécnica de Madrid, Licenciatura en Informática (por entonces no era ingeniería de nombre, y duraba 6 años), me cansé en 4º y me puse a trabajar, al cabo de unos años comprobé que era imposible terminar así la carrera, pero finalmente decidí matricularme en la UOC, donde terminé la titulación.
      Pero eso no quita para ser consciente, más ahora tras el paso de los años y la experiencia, de la importancia que tiene incluso cuando no estoy de acuerdo en la forma de impartir las asignaturas, ni en los temarios. Pero hay un núcleo de disciplinas que debes saber para ser un buen programador, y que aunque las puedes aprender de forma autónoma sin tener un título, es mucho más fácil hacerlo en la universidad.

      Ahora bien, creo que no te informas correctamente y no has leído con detenimiento lo que escribo cuando me dices que “no he trabajado lo suficiente”. Haz los deberes, no soy ningún genio, pero tengo ya algo de experiencia en este mundillo. Un poco de googling es suficiente, con mi nombre (para bien y para mal), el 95% de lo que te salga es sobre mi.
      Claro que la universidad no da garantía de nada, la garantía sólo la da que alguien disfrute de su trabajo y quiera aprender continuamente. Precisamente a eso me refiero cuando hablo de muchos de los recién titulados (a los que he entrevistado en numerosas ocasiones). Si te fijas no digo que todos los que estudiaron informática fueran buenos programadores (para nada), pero si al revés. Y esa es mi experiencia, que es de lo que puedo hablar.

      De nuevo, comparo con profesiones que tienen limitado el ejercer (porque son casi tan antiguas como la humanidad y están muy reguladas) por razones muy sencillas: la arquitectura tiene similitudes muy grandes con la informática (por favor, lee de nuevo porque diferencio muy claramente entre una casa de dos plantas y un puente colgante); respecto a la medicina, no comparo, sólo pongo de manifiesto que muchos de los avances en medicina (especialmente en robótica, pero no sólo en eso) tienen programas informáticos corriendo dentro de ellos. Al igual que muchas otras cosas que menciono y miles de ellas que no.

      Pero todo esto que dices es porque te centras en el mercado “nacional”, en España, donde lo normal es hacer “collages” con lo que se hace fuera de aquí (en trabajos de consultoría). Aquí lamentablemente se crea bien poco, y los que crean cosas terminan emigrando en muchos casos a países como USA donde si se crea. Ese 1% que dices es aquí. Prueba en USA, o incluso en UK o Alemania.
      Ahora vas y buscas en la red cómo son las entrevistas para ingenieros de software en empresas como Google o Amazon, por poner un par de ejemplos. Luego me cuentas que te parece y si hay en tu opinión una clara diferencia con el mercado nacional.

  • Ivan Freire

    Narciso tú las tú opinión y yo la mía. Y lo repito, si en tu experiencia profesional solo la gente que hizo ingeniería informática han sido productivos y buenos programadores es que has tenido poca experiencia profesional. No hay mas porque yo tengo una edad similar a la tuya, he trabajado en empresas de diversos ámbitos y nunca me ha pasado eso. Viendo el código y la manera de procedes de una persona nunca pude saber si era o no ingeniero.
    La programación se aprende trabajando y formándote mucho durante toda tu carrera profesional, para mi no hay mas. Simplemente tiene que apasionarte, y si por cualquier motivo te has dado de cuenta tarde de ello no tiene importancia porque con pasión podrás aprender mucho mas que en los 3 años que yo tiré a la basura.

    Sobre las entrevistas de Google y Amazon, de nuevo te fijas solo en lo bueno. Son mucho menos del 1% de la profesión en USA. En EEUU no he tenido la suerte de trabajar pero si en UK e Irlanda, donde he coincidido con gente de otros países y también lo tengo claro:son iguales que los españoles, no peores pero tampoco mejores. Y las empresas igual, hay el mismo porcentaje de empresas que aquí que no les preocupa la ingeniería y sí los resultados a corto plazo.

    • narciso

      Iván,
      Te agradezco tu opinión.
      En ningún momento pretendo decir nada de forma taxativa, pero es lo que tienen las generalizaciones.
      Tu si que tratas, o así lo entiendo, de hacer afirmaciones taxativas y absolutas, con lo cual yo no estoy de acuerdo. No me atrevo a juzgar tu experiencia laboral, ni pongo en duda tu buen hacer. Sólo discrepo.
      Como decían Extreme: “Three sides to every story: yours, mine, and the truth”.

      Y a pesar de lo que pueda parecer, se diría que tenemos bastante en común. Yo me considero fundamentalmente autodidacta, y conozco a muchos así que son buenos. También pensé hace tiempo que había perdido el tiempo en la universidad.
      Pero por suerte he podido conocer esto tanto desde el lado de la consultoría (donde sólo importan los plazos, no la mantenibilidad del código, ni el soporte), y desde del lado del cliente (tanto para terceros como desde hace 7 años en mi propia empresa). Eso me ha hecho valorar mucho más la calidad del código (en eficiencia pero también en otros aspectos como notación, etc, etc).
      Generalizar lleva sin duda a cometer injusticias, pero es que si no se alarga demasiado la redacción, compréndelo.

      Hay casos que conozco, que incluso para mi gusto actual son igual un poco exagerados, pero que parece que no les ha funcionado nada mal. Por ejemplo, Abiquo, que ahora tienen su sede principal en USA. Hace ya tiempo que conozco a uno de sus fundadores, Diego Mariño, y con el estuve en sus oficinas hace ya dos o tres años, antes de que consiguieran capital riesgo. Diego me decía que sólo contrataban Ingenieros Superiores, ni siquiera Ingenieros Técnicos. La cuestión es que ahí están, más lejos que la mayor parte de las startups que se forjan en España. Si eso ha sido un factor determinante o no, no lo sé, pero da que pensar aunque no comparto al 100% su forma de hacerlo.

      Gracias de nuevo por la aportación.

    • narciso

      Vaya, me acaba de llegar un post de Seth Godin que creo que va muy al caso:

      Mark Zuckerberg isn’t Mark Zuckerberg.

      Vale que dejó la carrera, Bill Gates también, y yo (aunque no me pueda comparar a ellos en éxito). Pero Bill Gates hace tiempo que también recomendaba estar en posesión del título correspondiente.
      Quizás la frase que más me quedó grabada de toda la carrera fue una que dijo el decano el primer día: “No vienen aquí a aprender informática, sino a aprender a aprender, a aprender a estudiar, porque se van a pasar toda su vida estudiando”.
      No le faltaba razón.

  • Ivan Freire

    Bueno Narciso no hay porque discutir sobre dos puntos de vista distintos.
    Hay miles de casos de empresas que han tenido mas éxito y menos que Abiquo y no miran las calificaciones, lo cual incluso corrobora mas la teoría de que no importa la formación universitaria cuando habiendo empresas que lo valoran y otras que no ves diferencia a largo plazo.

    De todas formas, y esto si que me llama la atención, tengo que indicarte que no existe en España el “ingeniero superior”. O se es ingeniero técnico o se es ingeniero, no se si también debía habértelo comentado el decano. Pero eso de “superior” me produce cuanto menos hilaridad.

    En fin, os dejo en vuestra burbuja ingenieril para que os hagáis la pelota en vuestra burbuja ingenieril y os quejéis de lo mal que va el mundo porque no todo el mundo es excelentísimo ingeniero ministro superior.

    Saludos.

  • Carles Palón

    Completamente de acuerdo con los comentarios. Le diría al autor del post que simplemente acepte el cambio. Es duro pero cuando antes lo hagas antes progresaras.

    Una nota: acabo de volver de SV y la tendencia en las empresas,las que buscan buenos programadores, es que te piden tu código directamente pero no el de tus proyectos sino cuando has colaborado con otros. Desde aportaciones en proyectos opensource, respuestas en stackoverflow etc etc. Quieren ver tu código y que te manejas bien trabajando en equipo. No miran casi nada más.

    • narciso

      Carles,
      Hay comentarios que no he publicado porque los insultos, en “mi casa” además, pues no me parecen la forma correcta (además de ciertos cortes fascistas y poco tolerantes). El resto, aunque no compartan mi opinión los publico, como este tuyo.

      Vamos a ver si me expreso con claridad, que se ve que no lo he hecho (igual hago otro post más genérico en educación que es a lo que realmente le quiero dar importancia):

      Yo precisamente no soy uno de esos con “titulitis”, como ya he dicho, siempre he sido un programador autodidacta y por pasión, y la mitad de mi carrera profesional la he hecho sin tener el título (no terminé la carrera entonces). La otra mitad, pues no me ha servido de gran cosa, como podréis comprender, porque llevo 7 años con mi propia empresa, donde el título está claro que es lo de menos.

      Para mi no hay nada duro en cambiar de opinión, es lo más natural en la vida, según uno va aprendiendo y se va encontrando con personas que aportan puntos de vista diferentes, bien argumentados y desde el respeto.

      Cuando yo entrevisto a alguien, me fijo en muchas cosas, en general más en actitudes que en aptitudes o conocimientos, pero lo que intento resaltar (y de eso todavía no he tenido ningún argumento en contra que me invite a cambiar de opinión) son dos cosas:

      1. Si tengo que elegir entre un ingeniero superior (ahora master, para los picajosos), un ingeniero técnico (ahora ingeniero), uno que empezó y no terminó, o uno de fp, pues depende de muchos factores, pero a igualdad de otras condiciones (incluído cómo encaje en el equipo) me quedaré con el que tenga el nivel más alto de formación. Los motivos son varios, incluídos que la administración lo fomenta, aunque no es para mi ni mucho menos el más importante. Ahora bien, frente a alguien que hizo otra titulación totalmente diferente, pues lo siento pero mi experiencia me dice que es una mala idea en el 90% de los casos. Así que ya veis que no se trata de títulos.

      2. Lo más importante que quiero resaltar es la importancia de los estudios universitarios, que yo mismo no les di en su momento, como elemento esencial para el progreso del CONOCIMIENTO humano en cualquier materia, y para la mejora sustancial de cualquier sociedad. Esa mejora sustancial no tiene que ver con los títulos, tiene que ver con el conocimiento que se adquiere, y con la apertura de mente e ideas. A esto creo que le dedicaré otro post, para ver si dejo más clara mi postura.

      En cualquier caso, los detonantes para escribir este artículo que tanta crítica me genera (lo cual miro siempre de forma constructiva), han sido varios y uno de ellos ha sido leer los procedimientos de entrevistas (qué preguntan y cómo) en empresas como Google o Amazon. ¿Que son el 1% incluso en EEUU? Pues puede ser, pero son el 1% que marca la diferencia de lo que se hace allí con lo que generalmente se hace aquí.

      Yo no tengo nada que esconder, muy al contrario, hay código mío en SourceForge a la vista de todo el mundo. De hecho ese código se ha descargado más de 45.000 veces desde sitios de todo el mundo, y han comentado mi código en foros en árabe o chino (de hecho tengo clientes de China), por poner ejemplos.

      En definitiva, que sinceramente no veo qué es lo que tengo que cambiar, salvo la redacción del post para hacer más clara mi postura actual.
      ¿No es importante conocer (que no saber de memoria que para eso están los libros) temas como algoritmos, estructuras de datos, patrones de diseño o programación concurrente?
      Tengo 100% claro que no hace falta tener el título para saberlo, y de hecho que tener el título tampoco garantiza que lo sepas.
      Me he encontrado con ejemplos de todos los colores, pero es que si no entiendes, por ejemplo, que las propiedades de clase de un servlet son compartidas por todas las hebras de proceso puesto que el contenedor usa varias hebras, y vas y las utilizas para mantener datos de estado de una petición, pues te puedes encontrar con que sirves datos a unos usuarios que son de otros usuarios (por ejemplo) sin tener forma de saberlo salvo que un usuario te lo diga (y eso es muy raro). Este es un ejemplo real que he visto, hecho por ingenieros de la UPV.

      Estamos de acuerdo, aunque igual no lo parezca, en que el título no tiene que ver con la calidad de un programador, pero encontrar a gente que sin haber hecho los estudios correspondientes tenga la suficiente motivación para estudiarlo por su cuenta, pues es más difícil, que es a donde voy a parar.

      ¿Acaso sois tan inteligentes como para vosotros solitos inventar algoritmos como los de el señor Dijkstra? Si es así me saco el sombrero. Aunque Dijkstra era realmente un teórico y científico de la computación. Y ahí radica la importancia del conocimiento como algo compartido por la humanidad, que se construye sobre el conocimiento previo, y la importancia de no “inventar la rueda” cada vez. Para eso sirven las universidades, entre otras cosas.