03 mayo 2014

Buscando trabajo en EEUU: Tesla Motors IV


Como dije en mi última entrada, el ingeniero jefe me introdujo brevemente a la posición y por qué me habían elegido a mí. Una vez hecho eso, dio comienzo a la parte técnica de la entrevista con preguntas sobre el lenguaje de programación C. La pregunta en sí no era muy complicada, más bien consistía en un ejercicio de implementación aunque tenía un pequeño truco. La pregunta la formuló de la siguiente manera:

Escribe una función que reciba un sólo byte como parámetro y devuelva el mismo byte pero con cada uno de sus bits invertidos de posición, es decir, que el primer bit aparezca en última posición, el segundo en penúltima, etc.

Pensé, ¡menos mal! Por fin una pregunta sencilla de entender y podré resolver sin problemas. Nada que ver con las preguntas de los canallas en Amazon, en las que el entrevistador se tiraba 40 minutos formulándola y me daban 20 para responderla. No tenía ni idea de la mala jugada que me iban a pasar los nervios... Normalmente, no tengo ningún problema enfrentándome a todo tipo de problemas bajo presión, pero Tesla era esa empresa que me podría ofrecer el trabajo con el que siempre había soñado (o eso creía entonces). A medida que escribía código en la pizarra, notaba como el nudo de la corbata se hacía más y más pequeño. Me atragantaba, tartamudeaba y decía cosas sin sentido. El ingeniero jefe, que como ya he dicho en repetidas ocasiones era un tipo de aspecto muy amigable, me repetía que me calmase con una sonrisa. ¡Un mal entrevistador me podría haber lanzado por la borda fácilmente!

Casi habría preferido vérmelas con un grupo de piratas que pasar un minuto más atragantándome.

Hasta tal punto decía cosas sin sentido, que el entrevistador me llegó a preguntar cuál era la diferencia entre a & 0x05 y a && 0x05! Después de implementar la solución, me preguntó si era óptima y le dije que por supuesto que no. No tenía ni idea de que estaba buscando una solución óptima, pensé que sólo quería ver mi capacidad para implementar la solución al problema, fallo mío por no preguntar. Cuando me pidió que buscase una solución más óptima al problema, después de balbucear unos minutos, le dije que mandaría todo a tomar por saco y lo pondría todo en un switch bien gordo para que el compilador se las viese con el asunto. Pero, según él, había otra solución más eficiente...

¿Más eficiente? Pensé que me estaría poniendo una trampa como ya hicieron algunos entrevistadores en Zappos, así que le insistí que un switch bien compilado es sólo una instrucción de salto. ¡Nada más eficiente que eso! Pero no, él insistía en que había otra solución mejor... Le dije que la única manera de hacerlo mejor, a costa de un mayor uso de memoria, sería con algún tipo de estructura de datos cargada en RAM, tipo hashtable o similar. Viendo que me acercaba a la idea pero que no llegaría nunca a la solución que él buscaba, me acabé rindiendo. Según él, la solución más eficiente era crear un array cuyos índices se correspondían con el byte buscado y cuyos valores eran el byte invertido. A decir verdad, esa era la solución más elegante de todas, pero todavía dudo que sea más eficiente que mis otras proposiciones dependiendo de las circunstancias.

Mi solución al problema a los ojos del ingeniero jefe, evidentemente ineficiente.

Bueno, no pasa nada. Seguro que la siguiente entrevista me va mejor, pensé. Era el turno del ingeniero senior. Según me dijo, le ficharon en Tesla como empleado treinta y algo. Un tipo alto, de avanzada edad, que hablaba muuuuuy despacio. Me hizo varias preguntas sobre la implementación del proyecto que les había presentado poco más de una hora antes. Puso un par de objeciones y generalmente insistió en el porqué de mis decisiones de diseño más que en la implementación en sí. La entrevista no duró mucho y no fue mal aunque tampoco diría que fue bien. ¡Siguiente!

Era el turno de un ingeniero de hardware. Con desdén, me preguntó si realmente no sabía mucho de circuitos. Entonces me preguntó si sabía lo que era VHDL; había oído hablar de ello pero en realidad no tenía ni idea. Entonces me dijo que había visto a pocos candidatos que no venían de una universidad con mucho renombre, mencionó Standford, MIT, Berkeley, Princeton... Dijo que viniendo de una universidad con menos nombre reduciría mis posibilidades. ¡Maldito elitista! También me preguntó cómo me fue la entrevista con el anterior ingeniero, porque a veces le tenía que tirar de la lengua para saber qué estaba pensando. Me comentó que las oficinas de SpaceX estaban a tiro de piedra (probablemente una de las únicas compañía que elegiría para trabajar antes que Tesla Motors). Para cuando se pasó el tiempo de la entrevista, no me había hecho ninguna pregunta relevante.

En mi penúltima entrevista, me las vería con el más joven de todos los entrevistadores. Al parecer, tenía conocimientos más cercanos a mi área de especialidad, concretamente estadística y modelos matemáticos. Fue una de las entrevistas más entretenidas que recuerdo. Hablamos de distribuciones, márgenes de error, defectos de fábrica y métodos para reconocerlos y mitigarlos, y un sin fin de temas interesantísimos. En cierto punto, me estaba intentando ilustrar cómo los gigantescos brazos robóticos ponen el parabrisas a los coches en la fábrica, con sus brazos completamente estirados y caminando como un robot, y no pude evitar soltar una carcajada. Afortunadamente él también pensó que la situación era cómica.

Así son los robots que ponen los parabrisas en las fábricas.

Mi último entrevistador sería el vicepresidente de ingeniería; en otras palabras, un pez bastante gordo. Para mi gran sorpresa, me hizo una pregunta de programación puramente técnica. Me pidió que escribiese un método en C que tomase 2 strings como argumentos y devolviese 1 string cuyos caracteres fueran el resultado de los caracteres de los 2 argumentos intercalados. Por ejemplo, si la función recibía "abcd" y "1234", tendría que devolver "a1b2c3d4". ¡Pan comido! Estaba cansado pero mucho menos nervioso que al comenzar las entrevistas, pero lo solucioné perfectamente en cuestión de un par de minutos. El hombre parecía bastante impresionado, y me dijo: "Lo has solucionado muy rápido... ¿Has hecho esta pregunta antes?". En ese momento se me hizo un nudo en la garganta. Me paré a pensar, ya había hecho bastantes entrevistas, y también había practicado muchas preguntas por mi cuenta, pero no, nunca había hecho esa pregunta. Casi deseé que la respuesta fuera afirmativa, puesto que no quería que dudase de mi honestidad. Como quedaba tiempo de sobra, decidió hacerme OTRA pregunta. ¡Vaya premio! Aunque, a decir verdad, la segunda pregunta era mucho más interesante:

En un lago hay un hombre en una barca con una piedra de tamaño grande, pero suficientemente pequeña para que el hombre pueda levantarla y lanzarla al agua. ¿Cuando la piedra se hunde, el nivel de agua en el lago sube, baja, o se queda igual?

La verdad, no tenía ni idea. La última vez que tomé una clase de física fue al menos 5 años atrás. Por experiencia, la respuesta correcta a ese tipo de preguntas les importa poco. Están más atentos a tu capacidad de razonamiento. Sabiendo eso, razoné, pensé en alto, y le dije diferentes maneras con las que probaría si mi razonamiento era válido o estaba equivocado. Poco después, me dejó esperando al despistado de recursos humanos (otra vez) y me acompañaron al vestíbulo donde me dijeron que ya se pondrían en contacto conmigo en los próximos 7 días.

1 comentario: