¿Por qué estudiamos arquitectura computacional?

Contestaré contándote una historia real.

Comencé como programador informático en 1962, cuando obtuve una pasantía de verano en una importante empresa de automóviles. Continué en este trabajo de verano a lo largo de mis años en la universidad. [Por cierto, aprendí mucho más sobre programación mientras trabajaba para una compañía que aplicaba computadoras de lo que habría aprendido en una compañía que creó computadoras o software. Baso esta afirmación en comparar notas con colegas que hicieron lo último y tendían a ser muy especializados y centrados en lugar de obtener una perspectiva amplia.] En el transcurso de hacer esto durante varios veranos, me frustraba ver cómo los compiladores no hacían lo que debía hacer. Yo quería que lo hicieran. Así que aprendí a escribir compiladores en los últimos años de mi trabajo de pasantía de verano. (En aquellos días no había programas de pregrado en ciencias de la computación en los Estados Unidos y solo unos pocos graduados).

Soy bastante bueno en compiladores, tanto que cuando me gradué en ciencias de la computación escribí mi tesis doctoral sobre la optimización del código del compilador. Y escribí varios artículos técnicos sobre el tema. Pero me frustraba cómo los sistemas operativos hacían mi vida miserable como escritor de compiladores. Así que aprendí a escribir sistemas operativos. Pude conseguir un trabajo en el centro de computación de la universidad trabajando en el sistema operativo, lo que me ayudó bastante. (Esa era la era de las computadoras mainframe y podrías profundizar en las “agallas” de un sistema operativo si tuvieras el trabajo correcto).

Tengo bastante buenos sistemas operativos. Modifiqué varios de los grandes, escribí algunos pequeños y escribí varios artículos técnicos sobre el tema, pero me frustraba ver cómo las computadoras hacían mi vida miserable como diseñador de sistemas operativos. Así que aprendí sobre arquitectura de computadores.

Conseguí bastante bien en arquitectura de computadoras y escribí varios artículos técnicos sobre el tema. Aprendí por qué hicieron mi vida tan miserable. El problema básico es que hay muchas formas diferentes de construir una computadora, al igual que hay muchas maneras de construir una casa. Las diferentes arquitecturas tienen diferentes capacidades, fortalezas y debilidades, y si desea escribir buenos sistemas operativos, compiladores o software, es útil comprender cómo funcionan las computadoras en general y cómo funciona la arquitectura de su computadora en particular. Lo que funciona bien en una computadora puede funcionar muy mal en otra. De hecho, cuando enseñé arquitectura de computadoras más adelante en mi carrera, les asigné a los estudiantes la tarea de diseñar una función simple que usara una gran cantidad de recursos informáticos, como ordenar una gran variedad, y ejecutarla en diferentes computadoras para ver qué tan diferente es se realizó Luego tuvieron que explicar las diferencias en cuanto a la arquitectura.

Por las razones anteriores, cuando estaba en la posición de diseñar planes de estudio de ciencias de la computación, ya sea para universidades individuales o como modelos para ser utilizados por muchas universidades, recomendé que esos planes de estudios incluyan cursos sobre arquitectura de computadoras, sistemas operativos y diseño de compiladores.

En grado variable, diferentes lenguajes de programación proporcionan abstracciones que ocultan el diseño de la computadora subyacente al programador.

Por muy útiles que sean, ninguna de estas abstracciones es perfecta. De vez en cuando, ves que los programas se comportan de maneras que solo pueden explicarse por cómo se construyó la máquina que los ejecuta.

Una gran razón para estudiar la arquitectura de la computadora es poder entender y razonar sobre tales explicaciones cuando surja la necesidad.

Si alguien se confunde o tiene problemas al escribir su asignación de arquitectura de computadora, aquí la Ayuda de Asignación de Arquitectura de Computadora tiene las mejores soluciones.