Solíamos bromear sobre los manuales de sistemas e internos para el sistema operativo DEC VAX VMS: para leer y comprender cualquiera de ellos, tenía que haber leído y entendido previamente todo el resto. Para obtener el máximo valor de las estructuras de datos y las arquitecturas, encuentra el mismo tipo de relación: cuanto más entienda uno, más PUEDE entender el otro.
Comprender las estructuras de datos y los algoritmos, si se toma en un nivel abstracto, en realidad no requiere que comprenda cómo las computadoras están organizadas y diseñadas. Mientras tenga la noción de que hay memoria y de que las ubicaciones en la memoria tienen direcciones, no puedo pensar en nada fuera de lugar donde necesite una vista más profunda.
Del mismo modo, comprender la arquitectura y la organización no requiere un conocimiento más profundo de las estructuras de datos y algoritmos, si se mantiene por encima de un cierto nivel de detalle. La mayoría de los cursos de introducción no lo llevan al diseño de procesadores multi-core; tienes suficiente en tus manos razonando sobre cómo funcionan las cosas en un entorno de un solo subproceso.
- ¿Cuál es la mejor manera de crear una estructura de datos basada en valores clave en C ++ que admita memoria compartida entre procesos usando C ++ 11?
- Cómo buscar en internet con un programa que escribí
- ¿Qué pasaría si más personas se dieran cuenta de que la Ley podría entenderse como una serie de algoritmos sociales en un programa que se resiste a la compilación?
- ¿Cuáles son los mejores algoritmos de selección de apareamiento en informática evolutiva?
- ¿Qué es la eficiencia del algoritmo?
Sin embargo, una vez que se sumerge en la arquitectura y la organización, descubre que su visión abstracta de las estructuras de datos deja mucho en la mesa en términos de optimizaciones: las fallas de caché, por ejemplo, pueden convertirse en un gran problema; El uso de funciones de hardware especializadas a menudo se basa en elecciones específicas de la estructura de datos que luego impulsa la elección del algoritmo.
Comencé a construir hardware, y tuve que aprender a programar el hardware que había construido, llevándome a un punto de vista diferente al de muchos de mis colegas que llegaron a la informática desde un fondo más complejo. Siempre me gusta saber cómo y por qué del nivel más bajo posible antes de que la abstracción tenga sentido para mí, por lo que mi sesgo sería aprender más arquitectura y organización, e incluso programación en lenguaje ensamblador, antes de adentrarme en los temas más avanzados en estructuras de datos y algoritmos
Si lo hace, su código generalmente será mucho más eficaz que el de aquellos que abstraen los detalles.
Sin embargo, sin una comprensión básica de las estructuras de datos simples (estructuras, matrices y matrices, listas vinculadas), su código en el nivel de hardware no podrá hacer mucho.