Es lo mismo que cualquier otra compañía, de verdad. Debes ser bueno en algoritmos, pero quizás la habilidad más importante para cualquier buen programador es lo que yo llamo “navegar por capas de abstracción”. Debe poder comprender una capa de abstracción, y todo lo que implica, y luego poder saltar a la implementación para poder ver cómo se proporciona la abstracción. Es posible que la abstracción no esté bien documentada, por lo que a menudo tendrá que ver cómo se usa (es decir, las capas por encima de la cual se llama abstracción) y cómo se implementa.
Pero, por supuesto, la implementación probablemente llamará a otras abstracciones que a menudo tampoco están bien documentadas, por lo que deberá razonar sobre las abstracciones subyacentes, descifrarlas, observando sus llamadores y las capas de abstracción que llama, y luego vea si puede construir su propio modelo mental de cómo se supone que debe funcionar.
En algunos casos, habrá documentación, pero la documentación puede no ser correcta, especialmente en los casos de esquina. Por lo tanto, debe ser capaz de resolverlo a partir de la implementación y de los llamadores de la abstracción.
- ¿Cómo es la ingeniería mecánica para las niñas?
- ¿Cuáles son algunos temas de matemáticas que un ingeniero informático debe aprender?
- ¿Qué universidad debería elegir para ingeniería mecánica, IP o VIT?
- ¿Es seguro obtener el título de Ingeniería de Petróleo en 2016?
- En los campos especializados como la informática o la ingeniería biomédica, ¿por qué es un doctorado? a menudo no se recomienda (en Quora-verse y en otros lugares) comparado con el de un maestro desde la perspectiva de la industria?
Los verdaderamente capacitados podrán hacer esto para múltiples capas de abstracción al mismo tiempo, y podrán saltar entre diferentes capas de abstracciones de forma rápida y fácil. Por eso me gusta la frase, “navegar por las capas de abstracción”. Al igual que un surfista que tiene que saltar de ola en ola, un buen programador necesitará saltar de una capa de abstracción a otra.
Esto es especialmente importante para los programadores de Java; si no sabe cómo se implementan varias bibliotecas Java, arruinará los problemas de rendimiento; Está prácticamente garantizado. Por otro lado, si está tratando de mejorar el rendimiento, a menudo la mejor manera de hacerlo es tener al menos 3-4 capas de la definición e implementación de la interfaz de una pila de software en particular al mismo tiempo, y luego preguntar usted mismo, “¿esto tiene sentido”? Si no es así, muy a menudo has encontrado una oportunidad de optimización. 🙂
Google tiene una pila de software muy complicada internamente y, como todas las empresas, algunas capas que parecen estar bien documentadas y realmente lo están; otros parecen estar bien documentados, pero la documentación puede estar desactualizada, tal vez por un poco o tal vez por mucho; y algunos están documentados principalmente por el código fuente.
¿La línea de fondo? Sé un buen programador y un buen ingeniero.