P: ¿Se pueden aprender estructuras de datos sin practicar la programación? No tengo tiempo para practicar programación, pero quiero fortalecer mi comprensión de los conceptos de DS. Además, ¿qué temas de matemáticas son necesarios para aprender esto?
¡NO!
No puede hacerlo de manera efectiva, y no sirve de nada.
- Dado un grupo de nodos con solo información de sus grados individuales, ¿puedo determinar en tiempo polinómico si puedo formar un gráfico múltiple conectado a partir de ellos?
- ¿Cómo explicaría los servidores de bases de datos y el alojamiento de bases de datos a un novato que solo sabe crear bases de datos en una máquina local?
- ¿Cuál es la reputación del programa de informática de Cornell, en comparación con otros programas principales? ¿Qué tan bueno es Cornell con trabajos en grandes empresas tecnológicas (por ejemplo, Facebook, etc.), frente a Carnegie Mellon o Stanford?
- ¿Quién es el padre del correo electrónico?
- ¿Cuáles son algunos problemas interesantes y no resueltos en sistemas distribuidos?
Por mucho que se exalten y pregunten las estructuras de datos en las entrevistas, lo primero y más importante que la gente mira es siempre una buena ingeniería de software.
Puede observar la construcción básica de un lenguaje (recursividad, bucles, funciones, etc.), que puede llevarle un mes aprender, pero se convierte en un buen desarrollador solo una vez que realiza grandes proyectos.
Estas son las preguntas para las que tendrá respuestas una vez que haya realizado un buen proyecto con un equipo:
¿Cómo se organiza el código cuando se vuelve demasiado grande?
¿Sigues una guía de estilo específica? o qué tan fácil de mantener es tu código?
¿Alguien más descubrirá lo que está tratando de lograr dentro de 5 años mirando su código? (Por eso es importante un estilo bueno / consistente)
¿Cómo juegas y pruebas diferentes enfoques? ¿Tiene que escribir desde cero o puede conectar y tocar fácilmente diferentes piezas y componentes?
¿Puedes llevarte bien con otras personas y resolver grandes problemas?
Si se le dan responsabilidades separadas en trozos, ¿puede trabajar, fusionar su código de manera efectiva, no pisar los zapatos de otros, resolver, evitar colisiones, etc.?
Este será el 99% de tu trabajo. En la mayoría de los casos, no será necesario que optimice los algoritmos. ¡Si! serás menospreciado por no usar la búsqueda binaria para encontrar un número en una matriz ordenada, pero no es tan malo como escribir código ofuscado que solo tú entiendes, eso también solo para ese día, sin importar cuán eficiente sea .