Si y no.
Personalmente, creo que el énfasis en lo básico está fuera de lugar. Sí, necesita conocer los conceptos básicos: cuáles son y cuándo usarlos. Pero realmente no necesita poder recrear todos los diferentes tipos de clases, por ejemplo. Es por eso que tenemos libros de referencia y bibliotecas. Principalmente, tienes que saber qué buscar y dónde.
Lo que realmente necesita es conocimiento de la materia: cómo encontrar, comprender, adaptar y usar algoritmos específicos para el problema en cuestión (por ejemplo, programar entregas, volar un avión, etc.). Y sí, ahí es donde a veces tienes que desarrollar nuevos algoritmos y heurísticas (¡y necesitas saber la diferencia!). Si está haciendo ciencia de datos, por ejemplo, sus algoritmos y heurística provienen de su conocimiento de matemáticas, no de ingeniería de software.
- ¿El hashing criptográfico es una buena manera de identificar imágenes de forma exclusiva?
- ¿Cuáles son las mejores prácticas para implementar la paginación en un sitio web con una gran cantidad de datos?
- ¿Qué problema exacto está resolviendo el 'comercio conversacional'?
- ¿Cuál es el mejor algoritmo para encontrar el camino con dos limitaciones?
- Cómo acceder a la raíz de un árbol binario si está almacenado en una estructura
En general, para cualquier cosa complicada, debe prestar mucha más atención a la estructura del SOFTWARE (arquitectura): flujos de datos y transformaciones, y flujos de control. Luego coloca estructuras y funciones de datos (algoritmos) en los flujos.