¿Los pasantes de Google realmente usan los algoritmos que tuvieron que aprender para sus entrevistas?

En realidad, use los algoritmos que tuvieron que aprender para sus entrevistas. Los detalles están a continuación

Durante las últimas semanas, me entrevisté con Edit Credential · Go Anonymous · Go FullscreenGoogle para un trabajo que realiza principalmente desarrollo de JavaScript. No terminé obteniendo el trabajo, pero pensé que compartiría el proceso de entrevistas para Google, ya que fue una experiencia muy emocionante y humillante. No puedo revelar todo, ya que estoy bajo unos pocos NDA. No voy a mencionar los productos o equipos para los que estaba entrevistando, pero puede adivinar.

Para aquellos que no me conocen, soy un desarrollador / diseñador independiente. La mayoría de mi trabajo se enmarca en las cuatro categorías de desarrollo de JavaScript, desarrollo de WordPress, HTML5 / CSS3 o diseño de UI / UX. Me encanta dirigir mi propio programa y me llevaría bastante tiempo cambiarme.

Al principio

Entonces, hace unos meses, un empleado de Google me preguntó si estaba interesado en unirme a su equipo. Como dije, estoy muy contento con lo que estoy haciendo en este momento, pero no quería rechazar la oportunidad de entrevistar o incluso trabajar para Google. Felizmente pasé mi currículum y ese fue el final de eso durante unos 5-6 meses.

Hace unas 3 semanas, recibí un correo electrónico de un reclutador de Google preguntándome si estaba interesado en un trabajo de ingeniero de software en Boston. Le dije que sí y concertamos una entrevista telefónica.

En este punto, estaba realmente emocionado porque siempre ha sido un sueño para mí trabajar para Google, pero siempre he asumido dos cosas:

  • Google solo contrata a aquellos con formación académica en informática
  • Google solo contrata a personas con experiencia en muchos lenguajes de programación.

Fui a la escuela de Gestión de Tecnología de la Información en la Universidad de Ryerson, donde me gradué con una bComm. Mi educación fue más sobre metodologías de desarrollo, gestión de proyectos, análisis de sistemas y otras habilidades informáticas de alto nivel combinadas con demasiados enfoques matemáticos y de gestión. Tomé un curso sobre desarrollo que me dio una excelente introducción a C y Unix, pero estaba muy lejos de lo que aprenden los informáticos. He estado codificando desde que tengo memoria y acabo de recoger mis habilidades en el camino, principalmente centrándome en el desarrollo de PHP y los últimos años, JavaScript.

Entonces, no hace falta decir que no estaba tan versado en algunos algoritmos y una gran O como alguien que pasó 4 años en Comp Sci, pero tengo un buen manejo de los idiomas que conozco.

La primera entrevista

La primera entrevista fue por teléfono con un representante de Google HR. Fue una entrevista bastante rápida de 20 minutos en la que hablé sobre en qué tipo de proyectos me gustaba trabajar, cuáles eran mis idiomas favoritos y mis antecedentes tanto en el empleo como en la escolaridad. También le dije que estaría dispuesto a mudarme a Boston, pero que me encantaría tener un lugar en su oficina de Waterloo (que está a aproximadamente 1,5 horas en auto desde Toronto). Ella me dijo que contratan principalmente desarrolladores fuertes de C ++ y Java, algo con lo que tengo muy poca experiencia. Después de hablar sobre lo mucho que disfruté del desarrollo del front end, ella dijo que sería una buena opción para un lugar en su oficina de waterloo.

Acordamos hacer dos entrevistas en un día en aproximadamente una semana y media. El representante de Recursos Humanos envió un correo electrónico con algunas pautas y cosas para repasar, que incluyeron cosas de comp 101, como clasificar algos, tablas hash, árboles binarios, etc. Estaba familiarizado con algunas cosas en la lista, pero definitivamente tuve que leer mucho en la semana y media antes de mi entrevista.

Reunión con ingenieros de Google y codificación en una pizarra

Después de algunas tardes, noches de pánico y un puñado de problemas de Javascript realmente divertidos de mi buen amigo Darcy Clarke que hizo todo lo posible para prepararme, estaba listo para mis dos entrevistas con los ingenieros.

Mi primera entrevista fue con un desarrollador móvil y duró alrededor de una hora. Comenzó discutiendo diferentes tipos de clases, explicando qué algoritmos serían más efectivos, qué situaciones usaría un algoritmo específico y una gran cantidad de terminología de ciencia ficción que tuve que explicar. Me tropecé con algunos de estos y me sentí bastante avergonzado. Después de eso, pasamos a hablar sobre el rendimiento de JavaScript, ojalá pudiera decir más aquí, pero no revelar las preguntas formuladas fue una gran parte de la NDA. Después de eso pasamos a hablar sobre diseño para dispositivos móviles. Después de esto y las preguntas de JavaScript, comencé a sentirme bastante bien al respecto. Terminamos la entrevista con una pregunta de codificación de 25 minutos que tenía que ver con la ordenación eficiente de las matrices. Nunca antes había codificado en una pizarra y sentí que cometí algunos errores estúpidos.

El siguiente fue otro desarrollador móvil de otro producto en el que trabajan en la oficina de Google Waterloo. Comenzamos hablando sobre el rendimiento de JavaScript nuevamente y luego saltamos directamente al problema de codificación en la pizarra. Estaba bastante nervioso en este momento y cometí algunos errores más tontos que no habría cometido en un IDE adecuado. Terminamos la entrevista hablando sobre algunas cosas de video HTML5 en las que estaba trabajando y hablamos un poco sobre la compresión javascript mecanografiada.

Me fui después de esa sensación de que golpeé totalmente partes de la entrevista y bombardeé otras partes.

Menos mal, se acabó.

Unos días más tarde recibí una llamada de la persona de recursos humanos en Google y ella me dijo de la mejor manera posible que no era apto para el puesto. Dijo que me tendría en cuenta para futuros puestos, lo cual es bueno si lo decían en serio o no.

Al salir de esto, no estoy particularmente desanimado, fue una experiencia fantástica entrevistarme con Google, me siento honrado de que me hicieran venir y entrevistarme; es algo que nunca hubiera pensado que me pasaría. Todavía tengo un trabajo realmente increíble donde trabajo en algunos proyectos realmente increíbles y tengo un impulso increíble para seguir aprendiendo más sobre el desarrollo web. Para resumir lo que aprendí en algunos puntos:

  1. Los problemas de comp sci son muy divertidos de resolver en JavaScript. Practiqué mucho con la informática de Nicholas Zakas en publicaciones de JavaScript.
  2. Incluso si no eres un desarrollador de C ++ o Java, Google aún se interesa
  3. Aprender otro idioma te ayuda a convertirte en un desarrollador más completo. Esta experiencia no me ha hecho querer volver a escribir C, pero podría interesarme en otro lenguaje que no sea tan indulgente como JavaScript.
  4. Chuletas de codificación> Grado en ciencias comp.
  5. Un título de Comp Sci es muy útil cuando se trata de explicar tablas Hash, Vectores y Big O
  6. Siempre sé apresurado Hace unos años, nunca hubiera pensado que estaría entrevistando en Google apenas 9 meses después de salir de la escuela. Cualquier cosa puede suceder.

Haga clic aquí

No … más o menos .

Los algoritmos y el software son raros. Para la mayoría del desarrollo de software, realmente no utilizará un algoritmo o su fondo de teoría. Es una verdad dura. En su lugar, deberá utilizar la experiencia y el conocimiento en el diseño de software. El diseño no es realmente algo que muchas escuelas enseñen (al menos no en la medida en que lo necesites).

Sin embargo, comprender la teoría CS demuestra que puedes aprender diseño. Más importante aún, cuando finalmente llegas a un problema que requiere teoría, es MUCHO mejor saberlo que no.

La ÚNICA vez que necesitaba un algoritmo para hacer un desarrollo de software real fue durante mi segunda pasantía. El primero, pero me dieron, era escribir código para asegurar que la entrada del generador de código no tuviera una dependencia cíclica. Bueno, imagine un desarrollador autodidacta y lo que podría tener que buscar y aprender a resolver este problema. Puede que les lleve un tiempo resolver esto. Supe de inmediato que quería usar DFS para detectar bordes traseros. Entonces la teoría importa, pero no, no la usarás a menudo.

Espero que la elección de las palabras “tuvo que aprender” no significa que no le guste aprender algoritmos: ¡tendrá que aprender muchos algoritmos si va a estar en este negocio!

La respuesta es principalmente sí. No necesariamente los usará todos durante la pasantía, por supuesto, pero suponiendo que continúe con una carrera en desarrollo, cualquier algoritmo que haya aprendido para la entrevista de pasante de Google será algo que querrá tener en su kit de herramientas. .

¡Así que definitivamente no entres en esto con la sensación de que estás aprendiendo cosas inútiles con el propósito de pasar una entrevista! Es todo lo que eventualmente aprenderías (o ya deberías haber aprendido) de todos modos.