¿Cómo puedo prepararme para ser ingeniero de software en Google?

6 puntos importantes desde la perspectiva de un Googler.

  • Antes de proporcionarle la lista de cursos, lea los puntos 1 y 2.
  • Profesionales que trabajan a tiempo completo: lea esta respuesta “selectivamente” sobre la base de su experiencia en la industria y su conocimiento académico.
  • Estudiantes preuniversitarios: omita todo y salte al punto 7.

# Punto 1 : Vayamos a la pregunta real, es decir

¿Cómo puedo prepararme para ser un “buen” ingeniero de software?

¡Sí! El resto de la pregunta es opcional. Unirse a Google no es un tiro a la luna. Cualquier buen ingeniero de software tiene buenas posibilidades de ser parte de la cultura laboral de Google.
El problema es cómo define “Bueno”.


** Punto 2 : Ajuste de actitud.

Antes de impresionar a los reclutadores en Google, veamos si una función de ingeniería de software en Google es algo que realmente desea.

La ingeniería de software no es tan divertida como la noción popular dice al respecto. Además de las posiciones UI / UX, en general, no importa qué editor de texto use (Eclipse, Vim o Emacs). Su pantalla será Negra, Aburrida y Aburrida. Una función de ingeniería de software a tiempo completo no solo requiere la capacidad de trabajar en algoritmos complejos sino también suficiente tolerancia y paciencia para centrarse en los detalles meticulosos de un programa grande.

En Google, en general, la mayoría de las funciones de ingeniería de software se reduce a las matemáticas . No importa cuántos lenguajes conozcas o cuán genial seas con Java, C, C ++, etc.

Lo que importa son estos cuatro objetivos :

  • Tu habilidad para crear algoritmos eficientes .
  • Sus habilidades meticulosas para leer códigos escritos por otros y detectar problemas, si los hay.
  • Su curiosidad por aprender e implementar nuevas tendencias tecnológicas y adaptarse a la demanda.
  • Último pero más importante: ¿Qué construyes, cómo construyes ?

Debo señalar que alcanzar estos cuatro objetivos no es fácil. La mayoría de nosotros en Google tiene dificultades para alcanzar estos objetivos, pero lo intentamos , tú también deberías hacerlo .

Todos tienen un enfoque diferente hacia el aprendizaje. Para mí, leí los enlaces de un trabajo de investigación que encuentro en Quora (mayo / mayo no está relacionado con CS) y un trabajo de investigación en Google (registros internos) todos los días.

Cuando te unas a Google, tendrás acceso a toda la base de códigos, bases de datos, foros, trabajos de investigación y proyectos que te proporcionarán un gran apoyo para aprender cosas que no encontrarás en Wikipedia …

… Pero mientras se prepara para estar en Google, hay algunas cosas que son comunes en el proceso de aprendizaje. En el punto 5 , aprenderá más sobre esto, cómo alcanzar estos cuatro objetivos, pero antes de que haya algunos requisitos previos que deben considerarse. Entonces, vamos al siguiente paso. es decir


# Punto 3 : Guía para el desarrollo técnico en 2014: de Google.

Tener una base sólida en informática es importante para ser un ingeniero de software exitoso. La siguiente guía de Google es un camino sugerido para que los estudiantes universitarios desarrollen sus habilidades técnicas académica y no académicamente a través del aprendizaje práctico a su propio ritmo. Puede usar la siguiente guía de cursos para determinar los cursos a tomar, pero asegúrese de tomar los cursos requeridos por su especialidad o facultad para graduarse. Los recursos en línea proporcionados en esta guía no están destinados a reemplazar los cursos disponibles en su universidad. Sin embargo, pueden ayudar a complementar su aprendizaje o proporcionar una introducción al tema.
Usando esta guía:

  • Utilice esta guía a su discreción.
  • Puede haber otras cosas que quiera aprender o hacer fuera de esta guía, ¡adelante!

** Punto 4 : Recomendaciones para el aprendizaje académico.

  • Curso de Introducción al CS
    Notas: Curso de Introducción a la Informática que proporciona instrucciones sobre codificación.
    Recursos en línea:
    Udacity – introducción al curso de CS,
    Coursera – Informática 101
  • Código en al menos un lenguaje de programación orientado a objetos: C ++, Java o Python
    Recursos en línea para principiantes:
    Coursera – Aprender a programar: los fundamentos,
    Introducción del MIT a la programación en Java,
    Python Class de Google,
    Coursera – Introducción a Python,
    Libro electrónico de código abierto de Python

    Recursos en línea intermedios:
    Diseño de programas informáticos de Udacity,
    Coursera – Learn to Program: Crafting Quality Code,
    Coursera – Lenguajes de programación,
    Brown University – Introducción a los lenguajes de programación

  • Aprende otros lenguajes de programación
    Notas: Agregue a su repertorio: Java Script, CSS, HTML, Ruby, PHP, C, Perl, Shell. Lisp, Scheme.
    Recursos en línea: w3school.com – Tutorial HTML, Aprenda a codificar
  • Prueba tu código
    Notas: aprenda a detectar errores, crear pruebas y romper su software
    Recursos en línea: Udacity – Métodos de prueba de software, Udacity – Depuración de software
  • Desarrollar razonamiento lógico y conocimiento de matemáticas discretas.
    Recursos en línea:
    MIT Matemáticas para Informática,
    Coursera – Introducción a la lógica,
    Coursera – Optimización lineal y discreta,
    Coursera – Modelos gráficos probabilísticos,
    Coursera – Teoría de juegos.
  • Desarrollar una sólida comprensión de los algoritmos y las estructuras de datos.
    Notas: Aprenda sobre los tipos de datos fundamentales (pila, colas y bolsas), algoritmos de clasificación (clasificación rápida, combinación combinada, clasificación múltiple) y estructuras de datos (árboles de búsqueda binarios, árboles rojo-negros, tablas hash), Big O.
    Recursos en línea:
    Introducción a los algoritmos del MIT,
    Coursera – Introducción a los algoritmos Parte 1 y Parte 2,
    Wikipedia – Lista de algoritmos,
    Wikipedia – Lista de estructuras de datos,
    Libro: El manual de diseño de algoritmos
  • Desarrollar un sólido conocimiento de los sistemas operativos.
    Recursos en línea: UC Berkeley Computer Science 162
  • Aprenda recursos de inteligencia artificial en línea:
    Stanford University – Introducción a la robótica, procesamiento del lenguaje natural, aprendizaje automático
  • Aprende a construir compiladores
    Recursos en línea: Coursera – Compiladores
  • Aprende criptografía
    Recursos en línea: Coursera – Criptografía, Udacity – Criptografía aplicada
  • Aprender programación paralela
    Recursos en línea: Coursera – Programación paralela heterogénea

** Punto 5 : Recomendaciones para el aprendizaje no académico.

  • Trabajar en proyectos fuera del aula.
    Notas: Cree y mantenga un sitio web, cree su propio servidor o cree un robot.
    Recursos en línea: Lista de proyectos de Apache, Google Summer of Code, Google Developer Group
  • Trabaje en una pequeña parte de un sistema grande (base de código), lea y comprenda el código existente, rastree la documentación y depure cosas.
    Notas: Github es una excelente manera de leer el código de otras personas o contribuir a un proyecto.
    Recursos en línea: Github, Kiln
  • Trabaja en proyectos con otros programadores.
    Notas: Esto lo ayudará a mejorar su capacidad para trabajar bien en equipo y le permitirá aprender de los demás.
  • Practica tus conocimientos algorítmicos y habilidades de codificación
    Notas: Practique su conocimiento algorítmico mediante competencias de codificación como CodeJam o el Concurso internacional de programación colegiada de ACM.
    Recursos en línea: CodeJam, ACM ICPC
  • Conviértete en asistente de enseñanza
    Notas: Ayudar a enseñar a otros estudiantes ayudará a mejorar su conocimiento en el tema.
  • Prácticas en ingeniería de software.
    Notas: Asegúrese de solicitar pasantías con bastante anticipación al período en que se realizan las pasantías. En India y EE. UU., Las pasantías se realizan durante el verano, de mayo a septiembre, y las solicitudes suelen abrirse con varios meses de anticipación.
    Recursos en línea: google.com/jobs


# Punto 6 : Programas y grupos recomendados / patrocinados por Google.

Pocos cursos adicionales puede optar por suscribirse con respecto a su dominio o interés. Estos cursos y programas son un excelente lugar para aprender, pero no aumentan ni disminuyen sus posibilidades de unirse a Google: no son equivalentes a las prácticas. ( Más información de Robert Love )

  1. Curso de Google: sentido de los datos
    Este curso en línea a su propio ritmo está destinado a cualquier persona que quiera aprender más sobre cómo estructurar, visualizar y manipular datos.
  2. Curso de Google: BOLD Discovery
    Esta conferencia interactiva de dos días brindará a los estudiantes entre su primer y segundo año universitario una introducción a la cultura de Google y las posibles carreras en la empresa.
  3. Google Summer of Code
    Google Summer of Code (GSoC)
    Un programa global en línea que ofrece a los desarrolladores de estudiantes postsecundarios mayores de 18 estipendios para escribir código para varios proyectos de software de código abierto.
  4. Beca de política de Google
    Este programa ofrece a los estudiantes la oportunidad de pasar el verano trabajando en temas de políticas de Internet y tecnología en organizaciones de interés público.
  5. Cumbre de estudiantes veteranos de Google
    La Cumbre de Veteranos para Estudiantes de Google incluye un plan de estudios de desarrollo profesional orientado a la transición de los veteranos al lugar de trabajo.

Lea también: Las opiniones de Ellen Spertus sobre ¿Cómo puedo usar de manera efectiva mis últimos dos años de universidad para prepararme para un excelente trabajo de Ingeniería de Software en Google / FB o una startup?


** Punto 7 : Recomendación para cursos en matemáticas.
(Para estudiantes preuniversitarios)

Vista personal: cualquier intento de ignorar estos temas lo colocará en la categoría de programadores promedio que aprenden cosas de manera completamente incorrecta.

Mantenerse preparado mucho antes haría que la codificación fuera mucho más divertida. Hay pocos requisitos previos, para la ingeniería de software, que necesita para comprender el núcleo del algoritmo. La mayoría de los errores creados por los ingenieros de software podrían haberse evitado si hubieran recordado las cosas simples de la educación escolar.

En sus estudios posteriores en Matemáticas o Ciencias de la Computación, se dará cuenta de la importancia de la “Estructura de datos en sus días universitarios” y la importancia del “Aprendizaje automático en sus días de posgrado”. Entonces, a continuación hay una lista detallada de cursos que debe dominar para diseñar algoritmos complejos. Para los graduados universitarios, si ha ignorado estas materias, le recomiendo que las revise de la mejor manera posible.

Una vez que haya terminado con el programa introductorio de sus libros escolares, practique los siguientes cursos para una comprensión más profunda. La mayoría de los estudiantes universitarios (incluso los profesionales que trabajan) subestiman la importancia de estos cursos y terminan siendo solo otros programadores promedio:

  • Álgebra lineal
    1. Álgebra lineal | Matemática | MIT OpenCourseWare (recomendado por mí)
    2. Codificación de la matriz: álgebra lineal a través de la aplicación informática (recomendado por un compañero de trabajo)

    Aprenderlos lo ayudará a comprender el modelo de regresión en el futuro: el paso básico del aprendizaje automático. No se le enseñarán estos cursos de álgebra lineal en ninguna escuela, universidad, laboratorio de investigación o institución. Aprende por tu cuenta.

  • Cálculo
    1) Cálculo 1 – Universidad Estatal de Ohio
    2. Cursos de Precálculo – Universitat Autonoma de Barcelona
    3. Cálculo para principiantes y artistas – MIT
  • Estadística y probabilidad
    1. Estadísticas uno
    2. RNG, Colocación avanzada – stattrek.com

Nota: Para cuando llegues a la universidad y te gradúes, el plan de estudios se habrá movido hacia los algoritmos de Machine Learning. Para la mayoría de los estudiantes universitarios, las matemáticas les hacen pasar un mal momento durante los primeros 3 meses de los cursos de Aprendizaje Automático y cuando se ponen al día, el programa de estudios se traslada a áreas más sofisticadas de ML, como Aprendizaje profundo, Redes neuronales y NNSP.

# Preuniversitario: Programas recomendados / patrocinados por Google.

  • Google Code-in (GCI)
    Un concurso que presenta a los estudiantes preuniversitarios, de entre 13 y 17 años, a los muchos tipos de contribuciones que hacen posible el desarrollo de software de código abierto.
  • Premios RISE
    Google RISE es un programa de asociación y premios diseñado para promover y apoyar iniciativas de educación STEM e Informática para estudiantes de K-12 / Primaria y Secundaria / Clase 10 y 12 en todo el mundo.
  • Instituto de Informática LEAD (LEAD-CSI)
    Este programa expone a estudiantes de secundaria y preparatoria de diversas comunidades a universidades y carreras en los campos de Ciencia, Tecnología, Ingeniería y Matemáticas (STEM).
  • Hecho con código
    La codificación es la nueva alfabetización: tiene el potencial de crear, innovar y, literalmente, cambiar el mundo. Esta iniciativa está diseñada para inspirar a millones de niñas a experimentar el poder del código.
  • Simposio de secundaria
    Este es un programa de un día diseñado para proporcionar a los estudiantes de último año de secundaria de alto rendimiento habilidades empresariales valiosas antes de comenzar la universidad.
  • Trailblazer
    Trailblazer es una red global de líderes, defensores y embajadores de la educación en informática que se encargará de capacitar a los jóvenes y educadores de todo el mundo para que se conecten e inspiren con la informática.
  • Feria de Ciencia de Google
    Google Science Fair es una competencia global abierta a 13-18 años. Los estudiantes envían un proyecto en línea para tener la oportunidad de ganar increíbles premios.
  • Computer Science Summer Institute (CSSI)
    CSSI es un programa de verano de 3 semanas para estudiantes universitarios de primer año (estudiantes de último año de secundaria) que estén interesados ​​en estudiar ciencias de la computación.
  • Campamento de creadores en Google+
    30 días de hágalo usted mismo y haciendo. Maker Camp es un campamento de verano virtual gratuito en Google+, abierto a todos
    Maker Camp 2013: ¡Recargue su verano!
  • Aulas conectadas
    Colabora con maestros y organizaciones educativas para ofrecer oportunidades de aprendizaje experimental para estudiantes de K-12 en Google+.


Campos marcados con asterisco.
# Opcional.
** Obligatorio.

Próximamente en esta respuesta:

  • Estudiantes de posgrado (con especialización en cualquier campo relacionado con Física, Matemáticas, CS): la respuesta se actualizará este viernes.
  • Estudiantes de doctorado (Investigación en el campo de Física, C-Neurociencia, Matemáticas, CS): la respuesta se actualizará este viernes.

Si sueña con ser ingeniero de software en Google, haga lo siguiente (suponiendo que aún no haya ingresado a la universidad o que esté al día en un programa de ciencias de la computación).

  1. Aprende sobre Google . Cambia tu ambición de una general a una específica. “Quiero trabajar en redes de Android” en lugar de “Quiero trabajar en Google”. Google / Alphabet es demasiado grande, tendrá que elegir, al menos para comenzar.
  2. Identificar las habilidades necesarias . ¿Quieres trabajar en infraestructura distribuida? Luego C / C ++ y sistemas distribuidos. Videoconferencia móvil? Aprenda sobre Android, Java y WebRTC. Si Google tiene trabajo de código abierto en el área, comience a leer parte del código y a comprenderlo mejor.
  3. Elija una universidad de Google recluta . Cuando solicite la universidad, mire para ver cuáles visitan Google (y, por extensión, otros buenos empleadores) para reclutar. Reclutar campus para pasantes e ingenieros a tiempo completo es, con mucho, la forma más fácil de obtener una entrevista. Hacer informática o un título relacionado.
  4. Programa, programa, programa . No tienes que leer este libro o eso, o hacer tele-cursos. Debe programar lotes, hacerlo por pasatiempos y hacerlo en el área en la que desea trabajar. Haga utilidades, juegos, aplicaciones, lo que sea. Pero código. Cada hora gastada debe ser una hora de diversión y una hora más de experiencia. Aprenda las bibliotecas y extensiones estándar para su idioma además del idioma en sí. Y aprenda las complejidades del lenguaje que le permiten escribir un mejor código.
  5. Conoce tus algoritmos . Mentí sobre lo de ‘no hay libros’. Debe leer partes de al menos un libro: Introducción a los algoritmos de Cormen et. Alabama. Aprenda las estructuras de datos y algoritmos estándar para la clasificación, selección, hash, colas, organización de datos, etc.
  6. Practica entrevistas . La forma más fácil de hacer esto es postularse en otras compañías que tienen entrevistas similares a google. También busque en Google ‘Preguntas de la entrevista de Google’ y vea si puede resolver esas preguntas. Acostúmbrate a pensar en voz alta mientras resuelves problemas. Pídale a un amigo que le pregunte un problema verbalmente de una lista grande que le dé, luego resuélvalo en una pizarra blanca o posiblemente en un editor de texto mientras explica lo que está haciendo y por qué.
  7. Hacer pasantías Si es posible, realice una pasantía en google o en otras compañías importantes. Una pasantía bien hecha casi garantiza una oferta del anfitrión de la pasantía.
  8. Si no vive en los EE. UU. Y desea trabajar en los EE. UU., Obtenga al menos una maestría. Esto ayuda a justificar la contratación de alguien del extranjero y facilita el proceso de visa.

Cuando entreviste en Google, asegúrese de entrevistar otros lugares también, idealmente al mismo tiempo. Esto puede llevarlo a tener más opciones y obtener mejores ofertas.

More Interesting

Cómo encontrar una lista de todos los empleados de SpaceX

¿Cuáles son algunos consejos para que los empleados jóvenes trabajen bien con compañeros de trabajo mayores y con más experiencia?

¿Cuáles son las diferencias entre enfermería y farmacia? ¿Como especializaciones y ocupaciones (clases, rasgos adecuados, demanda, trabajo, etc.)?

¿Cuán preferenciales para los empleadores son los solicitantes de empleo que se han graduado de un campamento de desarrollo en comparación con los desarrolladores normales con experiencia laboral similar?

¿Está mal si uno elige a la familia en lugar de una carrera?

Voy a reprobar mi Maestría en Matemáticas, ¿cómo afectará mi empleo?

¿Cómo ganan dinero los desarrolladores web autónomos?

¿Cuáles son las mejores consultoras con las que debo contactar para trabajos más nuevos en la industria del software como ingeniero de software en Hyderabad?

¿Por qué los empleadores buscan referencias de personas que no mencioné como referencia durante el proceso de entrevista?

Con $ 115k en deuda de préstamos estudiantiles y un nuevo trabajo que paga $ 85k, ¿cómo puedo pagar esta deuda de manera óptima y al mismo tiempo ahorrar dinero para invertir?

¿Qué trabajos hay para los ingenieros en el ejército de los Estados Unidos?

¿Debo elegir Infosys o Cognizant? He recibido cartas de oferta de Infosys y Cognizant. El dinero no me emociona. Me gusta aprender nuevas tecnologías y aprenderlas de la manera adecuada.

¿Qué trabajos de nivel de entrada son adecuados para los graduados de ingeniería aeronáutica?

¿Un desarrollador de software mantendrá un alto ingreso hasta la jubilación?

¿Cuál es el proceso de entrevista para estudiantes de primer año en PWC India?