¿Las compañías tecnológicas están exigiendo demasiado a los ingenieros de software en estos días?

Esto es en lo que consiste una entrevista de programación típica: Fundamentos de ciencias de la computación, especialmente estructuras de datos y algoritmos. He hecho esta pregunta sobre qué preparar para programar entrevistas, así que he creado una lista de verificación de la respuesta del usuario de Quora a ¿Qué debo esperar en una entrevista de Ingeniero de Software en Google y cómo debo prepararme?
Aquí está la versión abreviada de la publicación anterior.

  • Competencia en lenguaje (s) de programación de su elección
  • Preguntas de programación :
  • Conceptos generales de informática

sistemas operativos (subproceso vs proceso, sincronización, punto muerto, etc.) , redes de computadoras (paquete IP, direccionamiento IP, enrutamiento, paquete TCP, protocolo – ventana deslizante, protocolo de enlace de tres vías, control de congestión, ataque de hombre en el medio, TCP vs UDP, HTTP – canalización, GET vs POST)

  • diseño orientado a objetos y patrones de diseño

Método de fábrica, iniciación diferida, grupo de objetos, Singleton, decorador, publicación / suscripción, estado, monitor

  • Notaciones Big-O (no se puede adivinar la complejidad de su solución es tan malo como no tener una solución)
  • Clasificación (montón, fusión, rápida. No utilice la clasificación de burbujas).
  • Estructuras de datos

Picadillo
Lista enlazada
Árboles: complejidad y uso del árbol de búsqueda equilibrado
Intentos

  • Búsqueda ~ búsqueda binaria, primera búsqueda de amplitud, primera búsqueda de profundidad y otras variantes.
  • Preguntas de diseño
  • Recursividad
  • Algoritmos fundamentales como divide y vencerás, programación codiciosa y dinámica. y problemas comunes como la mochila, el vendedor ambulante, etc. Aquí hay una lista específica de Algoritmos importantes para dominar para resolver acertijos de programación.
  • Otros temas útiles para conocer

        Dijkstra , A *
Algoritmos heurísticos / aproximados para problemas NP difíciles
conceptos básicos de algoritmos aleatorios (ordenación rápida aleatoria, máximos locales y conceptos de IA relacionados)
Mapa reducido
        Computación distribuida y paralela (y resolución distribuida de problemas para problemas a gran escala)

Con respecto a las otras tecnologías que mencionó, desde AWS hasta Hadoop, acabo de enterarme de Hadoop en el trabajo (no me lo preguntaron durante mis entrevistas), ¡y ni siquiera tengo la menor idea sobre AWS! Entonces, aparte de las preguntas estándar de pizarra blanca, las tecnologías varían de una posición a otra, y estoy seguro de que no todas las posiciones requieren todas las tecnologías que ha enumerado.

Por último, tenga en cuenta que las empresas más grandes, especialmente aquellas en la parte superior de la jerarquía (FB, GOOG, etc.) se preocupan menos por sus habilidades tecnológicas y más por sus habilidades básicas de ingeniería. Respuesta del usuario de Quora a ¿Se espera que escriba un código perfecto en su primer intento en entrevistas tecnológicas?

Algunas compañías se están alejando de un modelo de pizarra blanca para exigir a los aspirantes de trabajo que completen un mini proyecto, pero personalmente prefiero la pizarra blanca que perder dos o tres días de mi vida para cada compañía con la que me gustaría entrevistarme.

Las empresas tecnológicas están exigiendo muy poco de los ingenieros de software en estos días.

Entre el 25% y el 50% de los ingenieros de software es mejor dejarse llevar en el acto en función de cada mes elegido al azar o incluso semana de su trabajo.

Desafortunadamente, si estamos hablando de los EE. UU., A) tenemos un problema con la legislación laboral (a veces una decisión obviamente correcta para el producto / negocio no es la mejor ruta legal), yb) tenemos dificultades para contratar e incluso encontrar ingenieros que son lo suficientemente buenos

Por lo tanto, en este extraño status quo, lo mejor que pueden hacer las empresas tecnológicas es comenzar a exigir un poco más de lo que solían hacerlo. Todavía no es suficiente, pero esa es nuestra mejor oportunidad. Algunas personas pueden quejarse; Somos conscientes de ello y lo consideramos un estado de la salud saludable.


Me siento obligado a agregar que mi filosofía personal es seguir con las personas que ya forman parte del equipo, seguir invirtiendo en su capacitación y en su carrera, pagarles de más, etc.

No solo porque es la mejor opción a largo plazo, aunque casi con seguridad lo es, sino porque la mayoría de los ingenieros con la mentalidad correcta pueden hacer que sean superestrellas, y observar y desempeñar un papel en este proceso es una experiencia que vale la pena.

Con eso en mente, creo que las compañías de software piden muy poco en estos días. Después de contratar ingenieros en San Francisco, tengo que confesar: yo mismo incluido.

Es cierto que buscamos competencia en un par de idiomas, pilas y temas de informática; Al mismo tiempo, felizmente hacemos ofertas a los candidatos que son razonablemente competentes en 0,75 acumulaciones, tienen la intuición correcta y mantienen la mente abierta para desarrollar sus habilidades con nosotros, al tiempo que nos aseguramos de que la empresa avance por completo.

Probablemente depende de lo que estés haciendo. La mayoría de las cosas que describiste son para desarrolladores web (aplicaciones web, como las llames).

No sé mucho sobre LAMP, ni siquiera sé qué significa MEAN, no sé nada sobre SQL o NoSQL, y no conozco Hadoop, Map Reduce o AWS a ningún nivel significativo.

Tampoco tengo problemas para conseguir trabajo. Sin embargo, sé bastante sobre programación de bajo nivel, computación de alto rendimiento, programación concurrente y aprendizaje automático.

Ser capaz de resolver nuevos problemas rápidamente en una pizarra no es una habilidad técnica específica. Es algo que todos los ingenieros competentes tienen que hacer todo el tiempo, y tienen que ser buenos.

Así que no, no creo que las compañías pidan demasiado. Si se está promocionando a sí mismo como desarrollador web, probablemente debería saber las cosas que enumeró, ya que son las tecnologías principales que conforman la Internet moderna. No creo que realmente necesites saber mucho aprendizaje automático para esos trabajos.

Además, si eres un desarrollador junior, probablemente puedas conseguir un trabajo solo sabiendo la mitad de esas cosas. Y luego puede aumentar su cartera a medida que obtiene más experiencia en el trabajo. No debería tomar más de unos pocos años, que es el tiempo que tarda la mayoría de las personas para pasar de junior a senior.

Esperaría que los médicos conocieran la misma cantidad de temas. O ingenieros eléctricos. Etc. Ninguna profesión es “fácil”.

Está cometiendo un error común en su generación en el que confunde la programación web con toda la ingeniería de software.

Parece que no quiere aprender MEAN, LAMP, SQL, NoSQL, Hadoop, Map Reduce y AWS. Nadie lo esperará si no va a entrevistas para trabajos de programación web.

Si no te gustan esas cosas, concéntrate en las cosas que te gustan y ve a esas entrevistas. No parecerá mucho si lo disfrutas.

Creo que Quora User hizo un muy buen punto. Debe leer entre líneas en estas descripciones de trabajo. Si eres muy fuerte en los fundamentos de la informática y tienes un historial atractivo en la especialización que estás buscando (web en este caso), deberías estar bien. Los lenguajes y tecnologías específicos fortalecen su CV para roles específicos, pero al final del día, desea ser un ingeniero completo que pueda adaptarse a un montón de roles diferentes. El mercado de ingeniería de software está cambiando tan rápidamente que algunas de las cosas que mencionó podrían no ser relevantes en 6 meses o más. Por ejemplo, ¿qué tan genial fue reducir el mapa hace unos años?

Entonces, si seguimos este enfoque, no creo que las compañías estén pidiendo demasiado. Tener una comprensión profunda de los fundamentos de CS y algo de experiencia no es irracional en absoluto.

Esto es lo que necesitan resolverse, de modo que si los “ingenieros de software” no pueden manejarlo, no están calificados. Lo que importa es el espacio problemático del negocio, no las capacidades o los sentimientos del candidato.

Siendo realistas, solo necesitas lo último en esa lista. Debe poder escribir código y resolver problemas del sistema en una pizarra. El resto, quiero decir, deberías saber cuál es la pila MEAN si no solo te graduaste, sino más allá de eso, no realmente.

Sé capaz de escribir código, otros codificadores aprecian el código.

No.

Hay una gran variedad en las compañías de software y en sus prácticas y requisitos de contratación.

No se puede culpar a los exigentes por pedir lo que quieren.

Encontrarán los candidatos que coincidan con su entorno y los demás pueden ir a otro lado.

Tiene una buena lista: ahora duplíquela y vuelva a duplicarla.

Teniendo en cuenta que a los ingenieros se les paga una prima por su trabajo en la economía actual, creo que la mayoría de las empresas no solicitan suficiente experiencia.

Lea algunas de las preguntas aquí: veo toneladas de estudiantes de primer año prácticamente sin experiencia preguntando si deberían pasar a Google porque xyz startup.wanys les paga casi $ 200k / año (sin incluir acciones, bonificaciones, etc.) y no lo hacen ‘ No quiero sentirme engañado.

Seriamente.