¿Qué se necesita para convertirse en un programador tan bueno como un programador típico que trabaja en Google?

Sugeriría que para ser un buen candidato para Google, o para ser un mejor desarrollador en general:

Visión general

  • Conozca muy bien uno o dos de C ++, Java o Python (los tres se usan en Google, aunque yo, y muchos otros desarrolladores, prefiero C a C ++)
  • Comprenda las fortalezas y debilidades de cada lenguaje de programación y su plataforma / API
  • Sólida comprensión de los principios básicos, tales como algoritmos (clasificación, búsqueda, etc.), estructuras de datos (listas vinculadas, árboles, etc.)
  • Sistema operativo sólido y comprensión de sistemas (desarrollo Unix)
  • Consejos sobre preguntas de la entrevista de Google para darle una idea de lo que se espera de un desarrollador en Google (http://stackoverflow.com/questio…)

Libros

  • Estructura e interpretación de programas de computadora (SICP) (http://mitpress.mit.edu/sicp/ful…)
  • El lenguaje de programación C (http://en.wikipedia.org/wiki/The…
  • El programador pragmático (http://www.pragprog.com/the-prag…)
  • Código Completo (http://cc2e.com/)
  • El manual de C ++ (http://www.amazon.com/Primer-Plu…)
  • C ++ efectivo (http://www.aristeia.com/books.html)
  • Patrones de diseño orientados a objetos (grupo de cuatro) (http://www.amazon.com/Design-Pat…)
  • El entorno de programación de UNIX (aprender UNIX) (http://www.amazon.com/exec/obido…)
  • The Art of Computer Programming (libro) (muy avanzado) (http://en.wikipedia.org/wiki/The…)

Los cursos

  • MIT OpenCourseware es un excelente recurso con diapositivas en línea, videos de conferencias, notas, etc. Obtenga una educación MIT CSCI desde su hogar.
  • Introducción a la informática y la programación (Python) (http://ocw.mit.edu/courses/elect…)
  • Estructura e interpretación de los programas de computadora (según el libro de arriba) (http://ocw.mit.edu/courses/elect…)
  • Introducción a los algoritmos (http://ocw.mit.edu/courses/elect…)

Blogs

  • Muchos de estos están inactivos, pero los archivos están llenos de excelentes publicaciones.
  • Joel en Software (http://www.joelonsoftware.com/)
  • Paul Graham (http://paulgraham.com/articles.html)
  • Raymond Chen (http://blogs.msdn.com/b/oldnewth…)
  • Google Testing Blog (http://googletesting.blogspot.com/)
  • Miguel De Icaza (http://tirania.org/blog/)
  • Aprendiendo C ++ (http: //learningcppisfun.blogspot…)
  • Fabulosas aventuras en la codificación (http://blogs.msdn.com/b/ericlipp…)

Las comunidades

  • Conoce gente de ideas afines, haz preguntas, aprende
  • Noticias Hacker (http://news.ycombinator.com/)
  • Desbordamiento de pila (http://stackoverflow.com)
  • Progit (http://www.reddit.com/r/programming)

Para convertirse en un desarrollador por encima de la media lleva años (5-6). Ya sea un título superior en CSCI o una experiencia equivalente y un autoaprendizaje combinado con aproximadamente 3 años de experiencia en proyectos sólidos en la industria.

Estos libros y cursos le brindarán una sólida base de conocimientos, donde podrá recoger tecnologías como JavaScript (lenguaje de programación) fácilmente. Algunos también sugerirían aprender Programación Funcional como Lisp, Erlang (lenguaje de programación), Haskell (lenguaje de programación) o Scheme (lenguaje de programación), ya que es una verdadera revelación en un estilo diferente de resolución de problemas (no tiene que hacerlo). aprendelo completamente, pero al menos entiende que es y como funciona).

Nada supera la experiencia real con problemas complejos de desarrollo. Encuentre un proyecto de código abierto o inicie su propio proyecto y comience a piratear.

Lo más importante es que su aprendizaje nunca puede detenerse: la informática es un campo relativamente joven, pero es muy diverso y profundo. Encuentre un área que le interese y aprenda los fundamentos buceando en profundidad.

Personalmente, creo que es una pregunta difícil de evaluar, ya que existe una gran variedad de talentos en un lugar tan grande como Google. He escuchado a Erich Schmidt decir que su mejor ingeniero produce órdenes de magnitud más valor para la compañía que su ingeniero promedio.

Dicho esto, diría que ser un programador calificado para una empresa como Google se reduce a algunas cosas (y de ninguna manera soy necesariamente un experto en lo que Google valora al contratar empleados):

  1. Comprensión bastante fuerte de algoritmos y estructuras de datos.
  2. Pasión por el desarrollo de tecnología en un producto para usuarios en una escala extremadamente grande.
  3. Capacidad para aprender muy rápidamente y comprender conceptos con facilidad, y tal vez mostrar cierta curiosidad intelectual con respecto a muchos componentes técnicos.

En cuanto a los lenguajes de programación que usan, creo que la última vez que revisé Google hace muchos algoritmos de back-end en C ++, muchos scripts en python y renderización web en java. También está el lenguaje de programación Go, que se está “utilizando para cosas reales”, según Rob Pike. Aunque estoy bastante seguro de en qué lenguaje de programación está bien versado no es tan importante como sus capacidades generales de CS.

Peter Norvig, de Google, ha escrito un ensayo titulado Teach Yourself Programming in Ten Years ( http://dorvig.com/21-days.html).