Por qué estudié a tiempo completo durante 8 meses para una entrevista de Google

por Googley as Heck

Mi pizarra blanca bien gastada, adornada con el algoritmo del camino más corto de Dijkstra.

Es cierto. He pasado miles de horas leyendo libros, escribiendo código y viendo conferencias de informática, todo para preparar la entrevista de ingeniero de software de Google.

Si quieres prepararte para una entrevista de Google, aquí tienes mi plan de estudio:

jwasham/google-interview-university
google-interview-university – Un completo plan diario de estudio para convertirte en ingeniero de software de Google.github.com

Cómo llegué hasta aquí

Empecé a programar en la escuela secundaria, pero cuando llegó el momento de ir a la universidad me decanté por la carrera de Economía. Mi razonamiento era que habría demasiados programadores buscando trabajo para cuando me graduara. Me equivoqué.

Más tarde, me alisté en el ejército para ser programador, pero el reclutador me convenció para que ocupara un puesto en la inteligencia militar, y pasé los dos años siguientes estudiando el idioma coreano. Después serví en Corea del Sur durante dos años.

Antes de dejar el ejército, intenté volver a programar y me sorprendió la dificultad. Había aprendido BASIC en la escuela secundaria y seguí programando durante el instituto. Pero retomé mis estudios de programación con C++, y el salto fue demasiado grande. No pude entenderlo.

Sin embargo, me gustaba hacer páginas web, pero utilizaba un software con una interfaz parecida a la de Word que usaba para publicar mis páginas web. No sabía cómo hacer sitios web desde cero.

Después del ejército, decidí quedarme en Corea durante un año y enseñar inglés. Utilicé mis noches y fines de semana para estudiar programación web, utilizando Perl, HTML, CSS (que era nuevo en ese momento), JavaScript y SQL.

Después de un año de intenso estudio, conseguí un trabajo en el área de Seattle, y he estado aquí desde entonces.

Haciendo algo de trabajo desde el balcón en la hermosa Bellevue, WA.

He sido un desarrollador web ahora durante 15 años. He iniciado 3 empresas, 2 de las cuales todavía están funcionando y generando ingresos. He trabajado en empresas grandes y pequeñas, he ayudado a startups a lanzarse y crecer, y he reclutado y gestionado equipos. He sido director de producto, director general, diseñador y comercializador.

He tenido una carrera exitosa y he aprendido mucho por el camino. Pero aún no he terminado.

Buscando un cambio de carrera

¿Recuerdas la parte en la que no obtuve un título de informática? Ha marcado la diferencia.

Hace unos años, pensaba que me podían contratar en cualquier sitio. Pensaba que era un material caliente: el escurridizo desarrollador web full-stack. Pero durante mi búsqueda de empleo en 2013, me di cuenta de que mis habilidades eran deficientes. Había pasado tanto tiempo persiguiendo dólares dirigiendo startups en mi tiempo libre, que había dejado que mis habilidades se atrofiaran. No me había mantenido al día con la tecnología.

Durante años, había aprendido lo justo para salir adelante. Tenía un amplio conjunto de habilidades, pero no era un experto en nada.

No me malinterpreten, todavía podía ser contratado, pero no en las tecnologías o áreas en las que quería trabajar. Podía conseguir que me contrataran para áreas en las que el stack tecnológico estaba algo desfasado, como yo. Hay mucho dinero ahí, pero no veía perspectivas emocionantes.

La constatación llegó a su punto álgido el año pasado en una feria de empleo. Me interesaba tal vez trabajar en una de las empresas locales que eran laboratorios de startups dirigidas por empresas de capital riesgo. Sin embargo, el hecho de que careciera de un título de ciencias de la computación, y de las habilidades y conocimientos que acompañan a dicho título, significaba que no tenía ninguna posibilidad.

En ese momento estaba trabajando a tiempo completo en mis negocios, y todavía lo estoy hoy.

A principios de 2016, decidí que era el momento de hacer un cambio de carrera de desarrollador web a ingeniero de software. Tendría que estudiar mucho y practicar para comprimir un título de informática en unos pocos meses, pero una vez que lo hiciera, podría empezar una nueva carrera.

Puede que no veas el desarrollo web y la ingeniería de software como puestos diferentes. Ambos implican programación y artesanía, pero la ingeniería de software añade conocimientos sobre estructuras de datos y algoritmos, lenguajes compilados, consideraciones de memoria y comprensión del impacto de las decisiones de codificación y arquitectura en las máquinas donde residen.

Las grandes empresas que contratan para puestos de ingeniería de software esperan que los candidatos tengan estos conocimientos.

Me puse en contacto con un conocido que trabaja en Google y le hice preguntas sobre su experiencia en la empresa. Había estado leyendo How Google Works y ya estaba bastante familiarizado con Google.

A través de otro contacto, recibí una copia de las notas de entrenamiento de Google que se proporcionan a los candidatos a las entrevistas. Esto se convirtió en la base de mi plan de estudio.

Google es un lugar de trabajo bastante impresionante, pero antes de saberlo, Google era mi objetivo.

¿Por qué Google?

Google pone el listón muy alto a la hora de contratar. Quieren contratar sólo a los mejores. Por lo tanto, si me pongo el listón muy alto (para que me contraten en Google), seguiré siendo bastante contratable en otros lugares aunque no me seleccionen.

Cuanto más aprendo sobre Google, más me apetece trabajar allí.

En resumen, Google es una empresa que contrata a personas inteligentes y creativas, y las trata bien. Google premia el mérito, fomenta las grandes ideas y da a los empleados la libertad de tomar buenas decisiones para el usuario.

El proceso de contratación está calibrado para atraer a personas inteligentes y apasionadas. Google ha perfeccionado el proceso de contratación y entrevista a lo largo de los años. Las preguntas de enigma ya no existen. Hoy en día, los candidatos se eligen en función de su capacidad de codificación, de sus conocimientos técnicos y de su «Googleidad». Hay mucho en esa palabra.

En un viaje por carretera en 2015, visité la sede de Mountain View. Eso plantó la semilla.

La gestión es diferente. Los directivos no microgestionan. Confían en los ingenieros para que tomen las decisiones correctas. Confiar en los empleados cambia el papel de los directivos en Google de lo que la mayoría de la gente imagina cuando piensa en la gestión. Además, los directivos no pueden contratar, despedir o promocionar unilateralmente. Muchas de las decisiones de gestión importantes que podrían percibirse como políticas de oficina son gestionadas por un comité para eliminar ese peligro.

El departamento de operaciones de personal de Google (RRHH) ha aprendido lo que funciona a lo largo del tiempo, y utilizan los datos y las opiniones de los empleados para mejorar los sistemas de evaluación, el proceso de contratación, los ascensos, la compensación, los beneficios y mucho más. Si quieres saber más, lee Work Rules, de Laszlo Bock (SVP, People Operations).

Sí, los beneficios son increíbles. Fui a visitar la oficina de Google en Kirkland, WA, y superó mis expectativas. Y mis expectativas ya eran altas.

Google Interview University

¿Recuerdas las notas de entrenamiento que recibí diciéndome qué debía estudiar? La lista de temas parecía manejable, aunque no sabía nada de la lista.

Convertí los temas de las notas en un esquema y empecé a rellenar los temas con vídeos de YouTube de conferencias del MIT y de la UC Berkeley. Un vídeo sobre listas enlazadas en un lugar, un vídeo sobre colas en otro. La lista empezó a crecer.

Publiqué la lista en Github porque mi cuenta de Github estaba bastante vacía. Como todo el código que escribía para mis negocios y trabajos era privado, mi cuenta de Github hacía parecer que no codificaba en absoluto. Necesitaba construir un portafolio. Al principio llamé al proyecto «Proyecto 9894». Google se lanzó el 4 de septiembre de 1998. De ahí el nombre. Más tarde lo renombré como «Google Interview University».

Con el tiempo añadí algunos temas opcionales que descubrí por el camino.

Mi lista de lecturas de verano. Un poco por encima.

Estaba bastante asombrado de haber llegado tan lejos en mi carrera sin saber siquiera cómo una CPU procesaba un programa, cómo funcionaba la memoria, ni nada de eso. Había sabido «lo justo» para tener éxito.

Mi pequeño proyecto de Github empezó a recibir unas cuantas estrellas, y publiqué una entrada en el blog celebrando 20 estrellas.

Una mañana, me desperté para descubrir que había crecido hasta 120 estrellas. Alguien famoso había tuiteado sobre él durante la noche, y eso hizo que terminara en el informe de tendencias diarias de Github. Fui el número 1 en tendencias en Github durante unos días.

Muchas personas amables se pusieron en contacto conmigo para darme las gracias y animarme. Resulta que hay miles de personas que no sólo quieren trabajar en Google, sino que quieren trabajar como ingeniero de software, y esta lista era justo la lista de tareas que necesitaban.

Ahora está en más de 21.000 estrellas.

Todavía no puedo creerlo.

¿Y si no consigo el trabajo?

No será el fin del mundo.

He invertido tiempo y dedicación en mis estudios con el objetivo de que me contraten como ingeniero de software de Google, pero incluso si no lo consigo, seguiré teniendo las habilidades y los conocimientos necesarios para trabajar como ingeniero de software en cualquier empresa.

Dondequiera que acabe, voy a entrar como ingeniero de software de nivel básico. No voy a entrar con 15 años de experiencia en ingeniería de software porque simplemente no la tengo. Cuando se trata de estas cosas, soy el equivalente a un recién graduado de CS.

Pero tengo el entusiasmo de un recién graduado, también. Este es un mundo nuevo para mí. Acabo de empezar. No tengo miedo de cometer errores. Sé que los cometeré. También quiero aprender todo lo que pueda y ser una excelente incorporación a cualquier equipo.

No estudies tanto como yo

Sí, tardé 8 meses. Pero podría haber abreviado el proceso. Como cualquier startup con un gran objetivo, cometes errores y haces cosas que te hacen perder tiempo. Hay muchas cosas que desearía volver atrás y hacer de forma diferente.

Estudié temas que no necesitaba, algunos porque pensé que los necesitaría para la entrevista, y otros porque quería tener los conocimientos a mano para cuando empezara a trabajar. No quería ser una carga para el equipo al que estoy asignado. Resulta que simplemente me preparé demasiado.

Me pasé 3 semanas leyendo un libro de 1.000 páginas sobre C++. No recuerdo el valor de 1.000 páginas, pero ahora sé un buen pedazo de C++. Resulta que estoy usando Python para la entrevista, no C++. Había asumido que necesitaba C++, C o Java, pero estaba equivocado. Es bueno preguntar, no asumir.

He leído muchos más libros de los que necesitaba. Sólo hay 3 o 4 libros que debería haber leído.

Tengo un catálogo de código de docenas de algoritmos que reviso, la mayoría de los cuales no esperaría en una entrevista. No es necesario hacer eso.

Una pila de algoritmos, impresos para su revisión.

Vi muchas horas de vídeos de YouTube, pero podría haber visto mucho menos, y repartir los temas a lo largo del tiempo.

Debería haber dejado de leer libros y ver vídeos antes y haber empezado con los problemas de codificación antes. Habría podido dedicar más tiempo a aplicar los temas que aprendí.

La repetición espaciada es la clave de la memorización. Una vez que aprendes algo, repásalo de nuevo más tarde, y de nuevo incluso más tarde. En cada repetición, refuerzas tu aprendizaje. Pasar horas y horas de una sola vez en las colas prioritarias no te convertirá en un experto. Te conviertes en un experto repasando y revisando a lo largo del tiempo. Si lo haces, llegarás al punto de no poder olvidar los detalles.

Para ayudar a repasar, hice 1.792 flashcards (tarjetas digitales). Esto es demasiado. Las repaso en mi teléfono o tableta cada vez que tengo un momento libre (como durante las compras navideñas). Las fichas y la repetición espaciada van de la mano. Una vez que consigo acertar una respuesta en una ficha, no la marco como conocida. La guardo en la baraja y una vez que la he visto y respondido correctamente muchas veces, entonces la marco como conocida.

Mi sensación de miedo («¿Y si me hacen una pregunta sobre los árboles rojo-negro?») me llevó a estudiar muchos más temas de los que necesitaba.

Pero no sólo quería prepararme para la entrevista, quería prepararme para una carrera en Google, resolviendo problemas a gran escala. Eso significa conocer algoritmos que ahorren recursos informáticos de tiempo, espacio y E/S.

Puede que nunca necesite conocer un algoritmo de flujo máximo (Ford-Fulkerson), pero es bueno saber que tengo esa herramienta disponible si se presenta la situación (sin memorizar la implementación), y puedo reconocer su aplicación a un espacio de problemas.

Conclusión

Al principio, deseaba poder saltarme todo este aprendizaje, y simplemente darme prisa y ser contratado para poder dedicar mi tiempo a aprender los lenguajes y las herramientas del equipo al que me uniera. Pero por el camino me di cuenta de lo importante que son estos conocimientos, y aunque la mayoría de ellos no sean aplicables en el día a día, me alegro de haber hecho el esfuerzo. Tengo una nueva apreciación de la historia de la computación, los grandes en el campo, las estructuras de datos y algoritmos (y cómo se complementan entre sí), y cómo los sistemas informáticos funcionan a bajo nivel.

Pondré mi solicitud pronto. Ha sido un largo viaje para llegar a este punto – casi un año entero. Empezó en enero, pero no pude comprometerme a estudiar a tiempo completo hasta abril.

Estoy todo lo preparada que puedo estar. No puedo seguir estudiando y aplazando la solicitud eternamente. En algún momento, tengo que dar el salto.

Veo un futuro brillante por delante.

Gracias por tomarse el tiempo de leer mi historia.

Artículo también disponible en árabe, vietnamita y coreano.

Actualización: 10 de enero de 2017

No me contrataron. Sigue leyendo. Gracias a todos por su increíble y abrumador apoyo.

Actualización: 6 de marzo de 2017

¡La historia tiene un final feliz! He sido contratado por Amazon para trabajar como Ingeniero de Desarrollo de Software en Amazon Web Services!

Donde encontrarme

Tengo un blog en Startup Next Door.

Google Interview University en Github:

jwasham/google-interview-university
google-interview-university – Un plan diario completo para estudiar para convertirse en un ingeniero de software de Google.github.com

Deja una respuesta

Tu dirección de correo electrónico no será publicada.