Первые два предмета (структуры данных и ООП), похоже, имеют зависимость - вы должны понять ООП, прежде чем переходить к структурам данных.
Последний предмет (язык ассемблера и компьютерная архитектура) было бы неплохо взять параллельно со структурами данных, но я бы взял базовый класс программирования и изучил ООП, прежде чем углубиться в сборку.
Для справки, это структура, которую берет моя школьная программа с отличием (и это было здорово):
1st Semester:
Data Structures and Algorithms
Intro to Logic
2nd Semester:
Intro to Computer Architecture
Discrete math
3rd Semester:
Advanced Computer Architecture
Application of theory(e.x. compression, encryption, error correction)
Programming languages
4th Semester:
Operating Systems(done in x86, uses MIT course material) - challenging but very fun and rewarding class
Sometime after 4th semester:
Algorithms or Automata Theory
После четвертого семестра в моей школе вы можете свободно брать все, что хотите (в качестве отличника) - в этот момент большинство людей посещают аспирантуру.
Моя цель в перечислении этого заключается в том, чтобы продемонстрировать, что моя школа использует "теорию двух моделей" теории (логика, дискретное соответствие и т. Д.) И реализации (архитектура, операционные системы и т. Д.). Если вы заинтересованы в CS, важно хорошо разбираться в обоих. Чтобы быть хорошим «разносторонним» ученым-компьютерщиком, вам нужно как понять теорию, так и правильно ее реализовать.
Мой совет - следовать аналогичной модели. Берите уроки архитектуры, а также уроки теории.