¿Hace falta ir a la universidad para ser un buen desarrollador?

Son muchos los artículos que hay en Internet, principalmente en inglés, defendiendo la idea de que no es necesario ir a la universidad para serlo, llegando algunos al extremo de decir que los mejores desarrolladores son los que no fueron. Las argumentaciones son de lo más variopintas. Algunos razonan que en un mundo teórico ideal el software sería determinista, desarrollado en lenguajes funcionales y por lo tanto libre de efectos secundarios, pero que en el mundo real los lenguajes, por ejemplo Java y todos los orientados a objetos, fueron creados para solventar las necesidades de los negocios, y por lo tanto aceptando que errores del software por casuísticas imprevistas son sobradamente compensados por el incremento en productividad, ductilidad del software, etc. Es decir, que no importa la calidad de la base teórica del software desarrollado, sólo importa si ayuda a cumplir los objetivos de la empresa, que a grandes rasgos sólo pueden ser dos: reducir los costes o aumentar lo beneficios.

Uno de los artículos más famosos que defienden la idea de que no es necesario ir a la universidad, aunque no es este el tema principal del artículo, lo escribió ya hace años Peter Norvig, empleado de Google y de la NASA, reputado científico computacional muy destacado en inteligencia artificial.

Grandes desarrolladores nunca fueron a la universidad o abandonaron a los pocos trimestres: Bill Gates, John Carmack o Jamie Zawinski son buenos ejemplos, Janus Friis no terminó ni el Bachillerato, mientras que buenos ejemplos de lo contrario son Dennis Ritchie, Ken Thompson, Linus Torvalds y Yukihiro Matsumoto.

La informática, en sus albores, fue creada por matemáticos, ingenieros y físicos. A principios del siglo XX se planteó en matemáticas la pregunta: ¿Es posible saber de antemano si un problema matemático tiene solución? Es decir, saber de antemano si hay problemas para los que no hay solución. Los problemas a los que hace referencia la pregunta no son cálculos matemáticos sino afirmaciones, la demostración que concluye si es correcta o no es la solución. Un ejemplo de afirmación es:

Los números primos son infinitos.

La solución es la demostración que concluye si la afirmación es cierta o falsa. Es el llamado problema de la decisión. Lo que el problema pregunta es si es posible saber de antemano si toda afirmación será o bien cierta, o bien falsa, o si existen afirmaciones que no se pueden demostrar.

Cuando el matemático británico Alan Turing creó el modelo matemático que ahora conocemos como máquina de Turing1, no tenía como objetivo crear la computación sino hallar la respuesta a este problema. Por un lado, Turing probó que cualquier método de implementar un problema se podía simplificar siempre a su máquina. Por otro, también probó que no se podía construir ninguna máquina de Turing capaz de demostrar si un problema iba a tener solución o no, por lo que la respuesta al problema de la decisión es un no. Por lo tanto, vemos que el nacimiento de la informática está íntimamente ligado a las matemáticas.

Otro de los padres de la informática, el húngaro John von Neumann, era matemático, ingeniero, físico e inventor. Además de sus aportes para que esta ciencia naciera, aportó a la física, las matemáticas (también a la estadística), la economía y la ingeniería.

Algunos de los desarrollos posteriores que tuvo la ciencia de la computación también fueron debidos a matemáticos y físicos. Unos, para avanzar más en sus respectivas disciplinas, debieron primero avanzar ésta. Otros, directamente dejaron de lado su ciencia para especializarse en la informática.

Creo que está fuera de discusión que la informática es una ciencia cuyas bases están en las matemáticas. Por lo tanto, opino que un conocimiento de la teoría que sustenta la informática, ya sea autodidacta o adquirido en la universidad, da una ventaja a quien lo poseé en un mundo donde la tecnología cambia cada 5 años, donde por ejemplo esas librerías que conocía al dedillo el programador de Visual Basic se convirtieron en conocimiento inútil cuando tuvo que migrar a .NET para no verse tirado en la cuneta por la tecnología. Esta ventaja consiste en la capacidad de aprender más rápido una nueva tecnología. Lamentablemente, a veces un «reclutador» puede preferir a un desarrollador Java recién salido de la universidad frente a otro licenciado años atrás y con experiencia en otro lenguaje pero que quiere migrar a Java, simplemente porque el recién licenciado se sabe más librerías de memoria, lo que frecuentemente sucede en las «cárnicas».

Los conocimientos teóricos no te ponen delante de alguien que lleva años trabajando en el sector, tampoco evitan que te pase la mano por la cara alguien que no los tiene pero sí tiene una elevada inteligencia. Lo único que pueden hacer es hacerte mejor desarrollador y en un mundo global, donde se puede trabajar a distancia para otros países, a veces en otros continentes, tal vez sea más sano no compararse con otros e intentar «sólo» ser mejor. Hace tan sólo 10 años, ser un reconocido desarrollador en Barcelona podía significar unos elevados ingresos, pero hoy una empresa puede contratar los servicios remotos de especialistas a nivel mundial, a sus tarifas, claro.

Otra ventaja, no ya de los conocimientos, sino del título, es que en una empresa muy establecida y grande puede ser una condición sine quan non. Incluso estando el reclutador, por ejemplo el jefe del departamento que necesita el empleado, dispuesto a ver el CV de candidatos sin el título pero con experiencia laboral que considere adecuada, puede verse incapaz de retirar este requisito de la oferta laboral por ser la cultura de la empresa.

Me ha sorprendido haberme encontrado en mi trayectoria profesional compañeros que hacía poco que habían acabado la carrera y afirmaban no entender para qué les habían puesto tantas matemáticas en la carrera: álgebra, análisis, estadística, matemática discreta… O bien pretendían confundirme o bien no entendieron que un ingeniero se las ingenia mejor con una base. En todo caso, tanto esfuerzo de la sociedad para escolarizarlos para que finalmente acabaran llegando a esta conclusión…


1 Este es el modelo que mejor representa un ordenador actual. Como una de sus características es que tiene dos registros capaces de albergar, cada uno, un número entero infinitamente grande, semejante máquina no puede construirse; se trata «sólo» de un modelo teórico.

Los campos meta que Facebook impone

Facebook imponiendo su criterio en la web (todavía libre):

Resultados de la herramienta Sharing Debugger de Facebook al procesar una URL

Pueden deducirse todos todos los valores de otros meta tags pero no le gustan que no sean estrictamente los suyos. Y no son pocos, aquí sólo unos cuantos:

<meta property="og:type" content="website" />
<meta property="og:title" content="Título de la página" />
<meta property="og:description" content="Descripción de la página" />
<meta property="og:site_name" content="bla bla bla" />
<meta property="og:url" content="http://www.bla.com/lang/bla-bla-bla/bla/" />
<meta property="og:image" content="http://www.bla.com/images/bla/1/bla.jpg" />

Sigue leyendo

¿Dónde están los hackers?

Cuando en los años 80 se popularizó el módem en los EUA y en menor medida en Europa, empezaron a salir en los medios de comunicación noticias sobre individuos, generalmente varones jóvenes, que habían conseguido acceso ilegítimo a ordenadores de grandes empresas, bancos, universidades e instituciones gubernamentales, a los que calificaban como «hackers». Aunque no sea el término adecuado así han sido bautizados hasta día de hoy. Para conocer mejor qué significan términos ingleses como hacker, cracker y otros se puede consultar The Jargon File, mantenido por Eric S. Raymond.
Sigue leyendo

Notepad 6.0 ha sido lanzado

NotepadDediqué una entrada a hablar sobre editores e IDEs y me olvidé de mencionar a ese editor que casi todos los programadores instalamos en Windows para suplir nuestras necesidades de edición rápida, el Vim de Windows: Notepad++. Y al igual que Vim, dispone de muchos plugins que lo pueden llegar a convertir en un auténtico IDE: FTP, Debuger, comparador de ficheros, corrector ortográfico y un largo etcétera.

Es esa herramienta que está ahí, que cada día usas pero no la valoras hasta el día que se estropea, como el limpiaparabrisas del coche. (A quién se le haya roto sabrá de su importancia: al llegar la noche ya no ves nada a través del vidrio) Aprovecho que acaba de salir la versión 6 para dedicar un breve espacio a este excelente editor.

Inefficiencies due to CakePHP ORM implementation

First let me say this article is not a critic against CakePHP (except one point I will talk about later), Object Relational Mapping, far than a trivial thing, it’s a very complicated one.

Let’s begin explaining what this TLA (three-letter acronym) is 🙂 Object Relational Mapping is a programming technique for allowing objects interact with a relational database, trying to allow the programmer to create, insert, update and delete objects in the database without typing a single line of SQL. The technical difficulties are well know (by the name «Object-relational impedance mismatch») and there is a lot of theory about them. In fact, some frameworks like CodeIgniter or Zend Framework avoid not only ORM but the models. This is not because these frameworks don’t follow the MVC pattern but because they follow a different philosophy: as it’s impossible to know how the datasource will be, better to don’t provide models and let them for the developer. They just provide some classes to interact with databases. The fact CakePHP implements ORM helps us to rapid develop an application, CRUD interfaces creation can be automatized, etc. CakePHP is RAD!
Sigue leyendo