La mayoría de las grandes empresas tecnológicas como Microsoft se centran principalmente en las estructuras de datos. Parece que las estructuras de datos son lo único que esperan de un graduado.
No, hay mas. Por ejemplo, también esperamos que sea un aprendiz rápido que pueda aprender nuevos marcos, API o incluso lenguajes de programación en un corto período de tiempo. Esa es una barra mínima. Alguien que tome mucho tiempo para aprender un nuevo marco, API o lenguaje no será un desarrollador exitoso en la mayoría de los equipos de Microsoft.
Y, por supuesto, hay muchos más aspectos en los que nos centramos en las entrevistas, además del conocimiento en bruto de las estructuras de datos. Capacidad para manejar especificaciones ambiguas, por ejemplo, o capacidad para reconocer patrones de codificación que producen código inseguro, o una docena de otras cosas. Pero la capacidad de comprender las estructuras de datos ciertamente es muy grande.
Es particularmente el caso que las entrevistas están sesgadas hacia la prueba del conocimiento de las estructuras de datos para los recién graduados de CS. No se espera que los graduados recientes, la mayoría de los cuales no tienen mucha experiencia en el mundo real, sean buenos en el mismo tipo de cosas en las que alguien con quince años de experiencia en la industria sería bueno.
Debo confesar que no era tan fuerte en las estructuras de datos.
Es bueno que lo sepas sobre ti. Si no puede o no quiere cambiar eso sobre usted, mi recomendación es que no solicite un trabajo que requiera instalaciones con estructuras de datos.
Existe esta perspectiva general de que un buen programador es necesariamente uno con un buen conocimiento sobre las estructuras de datos.
Es tautológico que un buen programador es un programador que es bueno en la construcción de los tipos de programas que deben construirse. Muchos programadores trabajan en tareas que no requieren un conocimiento profundo de las estructuras de datos. Algunos de ellos trabajan en tareas que requieren un conocimiento profundo del diseño de la interfaz de usuario, por ejemplo. O la normalización de la base de datos. O lo que sea. Esas personas aún pueden ser "buenos programadores" en sus dominios.
¿Por qué todo este énfasis en las estructuras de datos?
Hago preguntas de entrevista sobre estructuras de datos porque en mi equipo los desarrolladores diseñan, implementan y manipulan estructuras de datos complejas todo el día todos los días. Ayer tuvimos cuatro horas de reuniones en las que media docena de desarrolladores discutieron los pros y los contras de agregar un solo campo booleano a un nodo de árbol en particular. Probablemente no haya ninguna habilidad en mi equipo más importante que la capacidad de comprender las estructuras de datos a un nivel profundo. Sería una tontería no hacer preguntas de entrevista al respecto, ya que eso es lo que hacemos.
¿No tener conocimiento en estructuras de datos realmente afecta la carrera de uno en programación?
Bueno, ciertamente evitará que consigas un trabajo en mi equipo. Pero como dije antes, la programación es un campo enorme . Hay muchos tipos de programación de computadoras que no requieren conocimiento de las estructuras de datos.
¿Es el conocimiento en este tema realmente una base suficiente para diferenciar un buen y un mal programador?
No. Pero casi siempre es suficiente detectar a los desarrolladores que es poco probable que tengan éxito en Microsoft. Como eso es lo que principalmente me interesa detectar, el conocimiento de las estructuras de datos es uno de los factores que evalúo en las entrevistas.