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?
- ¿En qué campos de desarrollo de software tienen más poder los individuos?
- Cómo convertirte en el mejor analista de negocios o probador de software que podrías ser
- ¿Los ingenieros de DevOps se consideran ingenieros de software o son diferentes?
- Estoy trabajando como ingeniero de software en Gurgaon, India, ¿qué otras cosas puedo hacer lado a lado para tener otra fuente de ingresos aparte de FD, fondos mutuos, inversiones de capital? No tengo mucho capital.
- Cómo reiniciar mi vida laboral y personal y convertirme en un buen ingeniero de software y un buen padre / esposo
¡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 PythonRecursos 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 )
- 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.
- 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. - 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. - 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. - 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.