¿Cómo se compara un ingeniero de compiladores con un ingeniero de software normal? Técnicamente, trabajo diario, conjunto de habilidades, etc.

Soy ingeniero de compiladores. Eso significa que tengo una especialidad. Sé algunas cosas que la mayoría de los otros ingenieros de software no saben. Y, probablemente conozco algunos rincones oscuros del lenguaje, que ni siquiera puedes imaginar. Incluso puedo imaginarme casos de esquina para lenguajes que no conozco, porque conozco la tecnología subyacente y lo que los implementadores probablemente hayan hecho.

Sin embargo, eso tiene una contrapartida. Hay cosas de las que sé menos que el ingeniero medio. No sé mucho sobre cómo escribir una interfaz de usuario, especialmente una gráfica. Puede que no sepa tanto sobre la web o las redes o las bases de datos o, lo que es más importante, sobre la lógica empresarial. Todas esas son cosas que no he hecho mucho.

Eso resultó ser un problema en Google.

No era que quisieran que programara primero en Python y luego en Java, dos lenguajes que no había usado antes de trabajar allí. Muchos ingenieros competentes pueden aprender un lenguaje en el tiempo que se tarda en entender la aplicación, sobre todo si hay muestras existentes de aplicaciones relacionadas en las que fijarse. Por eso, la gente te dice que el lenguaje de programación no importa, no te fijes en él.

No, fue que me pidieron que diseñara un algoritmo para compartir la carga después de haber trabajado en Intel, donde teníamos clientes de telecomunicaciones con requisitos de compartir la carga en tiempo real. Y en Intel queríamos demostrar que se podían resolver con ordenadores COTS (commodity off-the-shelf), es decir, cualquier chip que Intel impulsara para su segmento de mercado. Eso requería unos algoritmos muy inteligentes. Así que me senté a diseñar uno de esos sistemas.

Eso no era en absoluto lo que el equipo hermano quería construir. Sólo querían una simple base de datos para usar como cola de trabajos en espera y que se enganchara a su sistema de contabilidad. Sin embargo, no se dieron cuenta (ni yo al principio) de que estaba sobrediseñando seriamente la solución. Creo que veían todas las cosas que me preocupaban para que el sistema hiciera como "campanas y silbatos" y simplemente asumían que debajo de todo eso estaba su simple base de datos. Así que no me dejaron construir lo que había diseñado, y tardamos 9 meses en superar esa brecha de comunicación. Para entonces, el proyecto estaba retrasado.

Así que, si quieres un ingeniero de compiladores, probablemente lo quieras de verdad. Incluso puedes decirle a tu jefe que me busque y, si no estoy disponible, puede que conozca a alguien que sí lo esté.

Pero, si no quieres un ingeniero de compiladores, probablemente no soy la persona que deberías contratar. Quieres a alguien que conozca el área en la que estás trabajando. Por eso muchos anuncios de trabajo enumeran tantos requisitos. Una persona que hace el tipo de trabajo adecuado, a menudo cumplirá la mayoría de esos requisitos porque eso es lo que hizo en su último trabajo y en el anterior y así sucesivamente.

Y aunque puedo diseñar un sistema de base de datos simple, tienes que estar seguro de que sé que eso es lo que necesitas. No asuma que entiendo los requisitos de su base de datos sólo porque he construido parsers para SQL. Lo que sé sobre SQL tiene poco que ver con el diseño de tablas en forma normalizada.