¿Qué habilidades se esperan de los ingenieros de software de nivel básico en Google, Facebook, Microsoft, Amazon, Twitter, etc.?

Por supuesto, hay muchas cosas que los entrevistadores buscan para ingenieros de software de nivel básico. En lugar de proporcionarle una lista de decenas de elementos, creo que destacar varios puntos importantes con consejos específicos sería más útil para usted. Vale la pena señalar que comprender qué habilidades se esperan es solo un punto de partida, trabajar mucho para mejorar es mucho más importante.

Estructura de datos y algoritmo

Entre esas habilidades, la más importante es absolutamente la estructura de datos y el algoritmo. Durante la entrevista, esperará resolver algunas preguntas de codificación. Sin una comprensión clara de esas estructuras / algoritmos de datos básicos, no podrá proporcionar la solución correcta. Además, la mayoría de los entrevistadores le pedirán que analice la complejidad de tiempo / espacio de su solución, lo que también requiere una buena comprensión de este tema.

Recursos:

  • Introducción al algoritmo

Habilidades de codificación

Como ingeniero de software, su trabajo diario consiste principalmente en escribir un buen código. Como resultado, las habilidades de codificación son extremadamente importantes en una entrevista. En la mayoría de los casos, los entrevistadores le pedirán que escriba un código sólido de su solución y lo optimice aún más cuando sea posible. Entonces su código primero debe ser correcto. No es un pseudocódigo y debería devolver la respuesta correcta. En segundo lugar, debe ser de buen estilo. Aunque no es obligatorio, un buen estilo de codificación seguramente impresionará a los entrevistadores. Por último, debería ser eficiente.

De hecho, no tengo ningún recurso para recomendar, ya que las buenas habilidades de codificación requieren muchas prácticas y será mejor que escriba más código y trabaje en más proyectos para mejorar.

Comunicación

No puedo enfatizar lo suficiente la importancia de la comunicación, que es exactamente lo que hace que las entrevistas sean diferentes de los exámenes. No solo presentará sus soluciones de código a los entrevistadores, sino que deberá mantener muchas discusiones. Debería poder explicar sus ideas, soluciones con claridad y hacer que sus enfoques sean muy fáciles de entender, incluso sin una sola línea de código.

Recursos:

  • Gainlo: construimos esto para permitir que las personas tengan entrevistas simuladas con entrevistadores de Google y otras compañías y obtengan comentarios reales.

Diseño de sistemas

Si está solicitando un puesto a tiempo completo, seguramente tendrá al menos una entrevista de diseño del sistema. Se le pedirá que diseñe un sistema para resolver un problema desde cero. Pasará toda la sesión de entrevista para discutir su enfoque con el entrevistador. A veces puede ser un nivel bastante alto y a veces puede ser muy detallado que necesite explicar muchos detalles técnicos. La entrevista de diseño del sistema es difícil e interesante, ya que está más cerca de los proyectos de la vida real.

Recursos

  • Puerta de cristal
  • Patrones de diseño

Conclusión

Para los ingenieros de nivel de entrada, definitivamente no se requieren cosas como experiencias. También algunos otros puntos, como la capacidad de resolución de problemas, son demasiado vagos o están cubiertos por una de las viñetas anteriores. Como dije, lo más importante es trabajar duro para mejorar en estas áreas.

Puedo contarte las cosas que busco al entrevistar a un graduado reciente o pendiente.

  1. Pasión, inteligencia, habilidades de comunicación.
  2. Capaz de explicar su pensamiento, enfoque y analizar las fortalezas / debilidades de un enfoque.
  3. Buena resolución de problemas, capacidad de iterar sobre soluciones. Pensamiento rápido.
  4. Comprensión clara de la frontera entre lo que hacen y lo que no saben.
  5. Buena actitud.

Para las habilidades técnicas, espero encontrar un conocimiento sólido de las estructuras de datos centrales y algoritmos, y buenas y precisas habilidades de codificación.

Por ejemplo:

  • Conocimiento de listas enlazadas, árboles binarios, árboles k-arios, intentos, listas, montones, colas, pilas, matrices multidimensionales. Todas las operaciones estándar en estos.
  • Tablas de hash y hashing.
  • Varios tipos: burbuja, inserción, fusión, clasificación rápida.

Y todo lo demás califica como núcleo en estos días.

Finalmente, la comprensión del espacio, el tiempo y la complejidad de los algoritmos.

Conozco a varios ingenieros de software que recientemente obtuvieron trabajos en lugares como Google, Facebook, Apple y Amazon fuera de la universidad. Incluso entrevisté a algunos de ellos. Muchos también esperan subir de nivel esta próxima mitad y compartir un montón de habilidades y experiencias comunes.

Aquí están los 10 mejores que se destacan.

  1. Saben cómo enseñar lo que codifican y, lo que es más importante, por qué y cómo piensan sobre el problema.
  2. Se comunican increíblemente bien. Pueden hacer que otros entiendan sus puntos de manera muy simple.
  3. Nunca dejan de aprender. Conozco a un amigo que literalmente acaba de leer “Entrevista de descifrado” para divertirse en el camino de regreso después de un viaje de Navidad. ¡Solo por diversión!
  4. Reciben comentarios mejor que otros. Como ingeniero de software de nivel básico, casi todo es aprendizaje. Claro, está agregando valor, pero lo que absorberá en términos de información valdrá la pena en los próximos años y la empresa en la que está espera que esté con ellos.
  5. Son rápidos en sus pies. No se trata de resolver los problemas de la manera más rápida, sino de la mayoría de las veces, llegar primero a la forma más simple de solución.
  6. Son ingeniosos Ser un ingeniero de software de nivel básico significa que tienes mucho que aprender. También significa que cuanto más eficiente sea en un equipo para encontrar información y no tener un ROI negativo como empleado, mejor.
  7. Saber lo que sabe y lo que no sabe será el mayor acelerador de su éxito. No seas esa persona que lo sabe. Sé esa persona que está dispuesta a aprenderlo todo.
  8. John casi acertó en el dinero al conocer listas vinculadas, árboles binarios, árboles k-ary, intentos, listas, montones, colas, pilas, matrices multidimensionales, tablas hash y hash. También compensaciones de algoritmos por espacio, tiempo y complejidad. Por último, entienda el sistema operativo tan profundamente como pueda. Linux o Windows (Microsoft) son los más populares.
  9. Las estructuras de datos y los algoritmos son 100% esperados y cuanto mejor seas, más impresionarás. Solía ​​decirles a los posibles candidatos que practicaran con amigos que tienen al menos 1 año de experiencia en el mundo real. Si puede llegar a un punto en el que está a la par con ellos, es un buen punto de referencia. Incluso si no están en una gran empresa de tecnología.
  10. Los talentos de la gente. Estás trabajando en un equipo donde necesitas saber cómo contribuir, cómo trabajar con otros y cómo impulsar el impacto en un equipo (mucho más difícil de medir que una sola persona).

Si está tratando de conseguir un trabajo en una gran empresa de tecnología, hay algunas cosas que puede hacer para aumentar sus posibilidades. Escribí una publicación aquí en Quora sobre cómo la gente realmente consigue trabajo en lugares como Google, Facebook, Amazon, etc.

¡La mejor de las suertes!

Ya hay muchos recursos en línea (en Quora y en otros lugares) que describen los procesos de entrevista de compañías tecnológicas conocidas. Asumiré que lo que quieres saber es lo que se espera de ti cuando comienzas el trabajo.

Solo puedo responder por Google, por supuesto.

Cuando comencé en Google, varias personas me dijeron que los nuevos empleados tienen mucho tiempo para aumentar, y que durante los primeros seis meses, se sentirá como si estuvieras tratando de beber agua de una manguera contra incendios, y el Lo mejor que puede hacer es hacer muchas preguntas, incluso cuando sienta que podría estar haciendo demasiadas, y simplemente haga lo mejor que pueda y no se preocupe por ser despedido por su bajo rendimiento en menos de seis meses; Que yo sepa, eso simplemente no les sucede a los ingenieros de tiempo completo en Google.

Realmente no se espera que tengas habilidades específicas, a menos que, por supuesto, afirmes tenerlas y tu equipo te haya seleccionado en base a esa afirmación. Incluso es posible ser contratado si no conoce ninguno de los lenguajes de programación utilizados en Google, pero es competente en algún otro idioma y puede obtener buenos resultados en la codificación de entrevistas utilizando este último.

Google contrata a generalistas para puestos de nivel de entrada. Aprenderá las habilidades que necesita a través de la inteligencia y el trabajo duro. Honestamente, creo que los ingenieros de nivel básico somos en su mayoría engranajes intercambiables, pero solo porque necesitamos ser razonablemente inteligentes y capaces de aprender, o de lo contrario no seríamos contratados por Google en primer lugar.

Después de que haya aumentado, debería poder asumir proyectos de ingeniería razonablemente complejos dentro de la base de código de su equipo (que probablemente sea bastante grande), que generalmente duran alrededor de una cuarta parte, con mucha orientación de ingenieros más experimentados. Poco a poco, se vuelve capaz de proyectos de mayor alcance y con más independencia.

La pantalla técnica inicial no parece importarle en absoluto la experiencia, más o menos lo mismo para principiantes o experimentados durante décadas, todo lo que necesita es algoritmos de nivel secundario y habilidades matemáticas, tome en serio la clase de algoritmos del primer semestre y eso es todas.

Tengo esta experiencia con Atlassian y otras dos grandes.

Lee los libros de Gayle Laakmann McDowell. Si, todos ellos.

More Interesting

¿Los ingenieros de software excepcionales leen libros / publicaciones de blog sobre cómo convertirse en un ingeniero de software excepcional o simplemente resuelven problemas sin descanso?

¿Cuáles son algunas listas de reproducción en Spotify que un programador debe seguir y jugar para aumentar su productividad?

¿Cuál es la diferencia entre un desarrollador full stack y un desarrollador de software?

¿Con qué tipo de gerentes de productos prefieren trabajar los ingenieros de software?

¿Merecen la pena los programas de certificado de ingeniero de software?

¿Qué es lo mejor para un ingeniero de software: Samsung, Adobe o Arista?

Si quiero ser ingeniero de software en Google, ¿cuáles son los principales lenguajes de programación que debo dominar?

Soy ingeniero de software sénior. ¿12 años de experiencia laboral anulan un GPA bajo de pregrado cuando solicitan una Maestría en Ciencias Comp en universidades del Reino Unido?

¿Es posible crear una función emergente en la PC como lo hace en los teléfonos inteligentes?

¿Cómo puede un ingeniero de software encontrar trabajo en el campo de la robótica? Estudié ingeniería eléctrica e informática y trabajé como ingeniero de software. Tengo experiencia con sistemas embebidos y programación en el entorno Linux kernel / userspace.

¿Pueden los ingenieros de software hacer videojuegos?

¿Es justo que el gerente de contratación le diga al candidato desarrollador de software de nivel básico que desarrolle un proyecto de software (no prueba de codificación) para ser contratado?

¿Qué es la ingeniería de software real, en comparación con la simple codificación?

¿Cómo es ser desarrollador de software en NestAway?

Soy un ingeniero de software de la India y he pasado mis últimos 15 años en el extranjero en varios países. ¿Qué lugar en la India es mejor para que un NRI como yo se establezca al regresar a la India con un trabajo decente?