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

Es verdad. Pasé miles de horas leyendo libros, escribiendo código y viendo conferencias de informática, todo para prepararme para la entrevista del ingeniero de software de Google.

Si desea prepararse para una entrevista de Google, este es mi plan de estudio:

jwasham / google-entrevista-universidad

google-entrevistas-universidad: un plan diario completo para estudiar para convertirse en ingeniero de software de Google. github.com

Cómo llegué aquí

Comencé a programar en la escuela secundaria, pero cuando llegó el momento de ingresar a la universidad, me gradué en Economía. Mi razón fundamental era que habría demasiados programadores buscando trabajo para cuando me graduara. Chico, estaba equivocado.

Más tarde, me uní al ejército para convertirme en programador, pero el reclutador me convenció para ocupar un puesto de inteligencia militar y pasé los siguientes dos años estudiando el idioma coreano. Serví en Corea del Sur durante 2 años después.

Antes de dejar el Ejército, intenté volver a programar y me sorprendió la dificultad. Había aprendido BÁSICO en la escuela secundaria y seguí programándolo hasta la escuela secundaria. Pero reinicié mis estudios de programación con C ++ y el salto fue demasiado grande. Simplemente no pude entenderlo.

Sin embargo, disfruté creando sitios web, pero usé software con una interfaz similar a Word que usé para publicar mis sitios 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. Usé mis noches y fines de semana para estudiar programación web, usando 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.

He sido desarrollador web desde hace 15 años. He creado 3 empresas, 2 de las cuales aún están funcionando y generando ingresos. He trabajado en empresas grandes y pequeñas, he ayudado a iniciar y crecer nuevas empresas, y he reclutado y gestionado equipos. He sido gerente de producto, director ejecutivo, diseñador y comercializador.

Tuve una carrera exitosa y aprendí mucho en el camino. Pero aún no he terminado.

Buscando un cambio de carrera

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

Hace unos años pensé que podrían contratarme en cualquier lugar. Pensé que era una persona de moda: el escurridizo desarrollador web full-stack. Pero durante mi búsqueda de trabajo en 2013, me di cuenta de que me faltaban habilidades. Había pasado tanto tiempo persiguiendo dólares dirigiendo nuevas empresas 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 suficiente para salir adelante. Tenía un amplio conjunto de habilidades pero no era un experto en nada.

No me malinterpretes, aún podrían contratarme, pero no en las tecnologías o áreas en las que quería trabajar. Podrían contratarme para áreas donde la pila tecnológica estaba algo desactualizada, como yo. Hay mucho dinero allí, pero no vi perspectivas interesantes.

La realización alcanzó su punto máximo el año pasado en una feria profesional. Estaba interesado en quizás trabajar para una de las empresas locales que eran laboratorios de puesta en marcha dirigidos por empresas de capital de riesgo. Sin embargo, el hecho de que no tuviera un título en ciencias de la computación y las habilidades y conocimientos que acompañan a ese título significaban que no tenía la oportunidad.

En ese momento trabajaba a tiempo completo en mis negocios y todavía lo estoy.

A principios de 2016, decidí que era hora de hacer un cambio de carrera de desarrollador web a ingeniero de software. Necesitaría estudiar mucho y practicar para comprimir una licenciatura en informática en unos pocos meses, pero una vez que lo hiciera, podría comenzar una nueva carrera.

Es posible que no vea el desarrollo web y la ingeniería de software como posiciones diferentes. Ambos involucran programación y artesanía, pero la ingeniería de software le agrega conocimiento de 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 este conocimiento.

Me comuniqué con un conocido que trabaja en Google y le hice preguntas sobre su experiencia en la empresa. Había estado leyendo Cómo funciona Google 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 para entrevistar a los candidatos. Esto se convirtió en la base de mi plan de estudios.

Google es un lugar increíble para trabajar, pero antes de que me diera cuenta, Google era mi objetivo.

¿Por qué Google?

Google establece un listón muy alto para la contratación. Quieren contratar solo a los mejores. Entonces, si pongo mi mirada alta (que me contraten en Google), todavía seré bastante contratable en otro lugar, incluso si no soy seleccionado.

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

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

El proceso de contratación está calibrado para incorporar personas inteligentes y apasionadas. Google ha perfeccionado el proceso de contratación y entrevistas a lo largo de los años. Las preguntas del rompecabezas se acabaron hace mucho tiempo. Hoy en día, los candidatos se eligen en función de la capacidad de codificación, el conocimiento técnico y el estilo de Google. Están sucediendo muchas cosas en esa palabra.

La gestión es diferente. Los gerentes no microgestionan. Confían en los ingenieros para tomar las decisiones correctas. La confianza en los empleados cambia el rol de los gerentes en Google de lo que la mayoría de la gente imagina cuando piensa en la administración. Además, los gerentes no pueden contratar, despedir ni ascender unilateralmente. Muchas de las decisiones administrativas importantes que podrían percibirse como políticas de oficina son manejadas por un comité para eliminar ese peligro.

Las operaciones de personal (RR.HH.) de Google han aprendido lo que funciona con el tiempo y utilizan los datos y los comentarios de los empleados para mejorar los sistemas de evaluación, el proceso de contratación, las promociones, la compensación, los beneficios y más. ¡Lea las reglas de trabajo! por Laszlo Bock (SVP, Operaciones de personas) para obtener más información.

Sí, los beneficios son asombrosos. Hice un recorrido por la oficina de Google en Kirkland, WA, y superó mis expectativas. Y mis expectativas ya eran altas.

Universidad de entrevistas de Google

¿Recuerdas las notas de entrenamiento que recibí diciéndome qué 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 comencé a completar los temas con videos de YouTube de conferencias del MIT y UC Berkeley. Un video sobre listas vinculadas en un lugar, un video sobre colas en otro. La lista empezó a crecer.

Publiqué la lista en Github porque mi cuenta de Github estaba bastante vacía. Dado que todo el código que escribí para mis negocios y trabajo era privado, mi cuenta de Github hizo que pareciera que no codificaba en absoluto. Necesitaba crear una cartera. Originalmente llamé al proyecto “Proyecto 9894”. Google se lanzó el 4 de septiembre de 1998. De ahí el nombre. Más tarde lo renombré a "Google Interview University".

Con el tiempo agregué algunos temas opcionales que descubrí en el camino.

Estaba bastante sorprendido de haber llegado tan lejos en mi carrera sin siquiera saber cómo una CPU procesaba un programa, cómo funcionaba la memoria o nada de eso. Sabía "lo suficiente" para ser un éxito.

Mi pequeño proyecto Github comenzó a obtener algunas estrellas y publiqué una publicación de blog celebrando 20 estrellas.

Una mañana, me desperté y descubrí que había crecido a 120 estrellas. Alguien famoso había tuiteado al respecto durante la noche, y eso llevó a que terminara en el informe de tendencias diarias de Github. Estuve en la tendencia # 1 en Github durante unos días.

Muchas personas amables se acercaron para agradecerme y animarme. Resulta que hay miles de personas que no solo quieren trabajar en Google, sino que también quieren trabajar como ingenieros de software, y esta lista era solo la lista de tareas pendientes que necesitaban.

Ahora tiene más de 21.000 estrellas.

Todavía no puedo creerlo.

¿Qué pasa si no consigo el trabajo?

No será el fin del mundo.

He invertido tiempo y dedicación en mis estudios con el objetivo de ser contratado como ingeniero de software de Google, pero incluso si fallo, seguiré armado con las habilidades y el conocimiento necesarios para trabajar como ingeniero de software en cualquier empresa. .

Donde sea que termine, entraré como ingeniero de software de nivel de entrada. No voy a entrar con 15 años de experiencia en ingeniería de software porque simplemente no los tengo. Cuando se trata de estas cosas, soy el equivalente a un recién graduado de CS.

Pero también tengo el entusiasmo de un recién graduado. Este es un mundo nuevo para mí. Recién estoy comenzando. No tengo miedo de cometer errores. Sé que lo haré. 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, comete errores y hace cosas que hacen perder el tiempo. Hay muchas cosas que desearía volver y hacer de manera diferente.

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

Pasé 3 semanas leyendo un libro de 1000 páginas sobre C ++. No recuerdo el valor de 1,000 páginas, pero ahora sé un poco sobre 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.

Leí muchos más libros de los que necesitaba. Solo hay 3 o 4 libros que debería haber leído.

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

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

Debería haber dejado de leer libros y ver videos antes y comenzar a codificar problemas antes. Habría podido dedicar más tiempo a aplicar los temas que aprendí.

La repetición espaciada es la clave para la memorización. Una vez que aprenda algo, revíselo de nuevo más tarde y de nuevo incluso más tarde. En cada repetición, refuerza su aprendizaje. Pasar horas y horas a la vez en colas prioritarias no lo convertirá en un experto. Te conviertes en un experto revisando y revisando con el tiempo. Si lo hace, llegará al punto en el que no podrá olvidar los detalles.

Para ayudar en la revisión, hice 1,792 flashcards (flashcards digitales). Esto es demasiado. Los reviso en mi teléfono o tableta cada vez que tengo un momento libre (como durante las compras navideñas). Las tarjetas de memoria flash y la repetición espaciada van de la mano. Una vez que obtengo una respuesta correcta en una tarjeta de memoria flash, no la marco como conocida. Lo guardo en el mazo y una vez que lo he visto y respondido correctamente muchas veces, lo marco como conocido.

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

Pero no solo quería prepararme para la entrevista, quería prepararme para una carrera en Google, resolviendo problemas a gran escala. Eso significa conocer algoritmos que ahorrarán 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 surge la situación (sin memorizar la implementación) y puedo reconocer su aplicación a un espacio problemático.

Conclusión

Al principio, deseaba poder saltarme todo este aprendizaje, y apurarme y ser contratado para poder dedicar mi tiempo a aprender los idiomas y las herramientas del equipo al que me uno. Pero a lo largo del camino, me di cuenta de lo importante que es este conocimiento y, aunque la mayor parte puede no ser aplicable a diario, me alegro de haberme esforzado. Tengo una nueva apreciación de la historia de la informática, los grandes en el campo, las estructuras de datos y los algoritmos (y cómo se complementan entre sí), y cómo funcionan los sistemas informáticos a bajo nivel.

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

Estoy tan preparado como puedo. No puedo seguir estudiando y posponiendo la solicitud para siempre. En algún momento, tengo que dar el salto.

Veo un futuro brillante por delante.

Gracias por tomarse el tiempo de leer mi historia.

El artículo también está 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! ¡Me contrató Amazon para trabajar como ingeniero de desarrollo de software en Amazon Web Services!

Donde encontrarme

Escribo un blog en Startup Next Door.

Google Interview University en Github:

jwasham / google-entrevista-universidad

google-entrevistas-universidad: un plan diario completo para estudiar para convertirse en ingeniero de software de Google. github.com