The link you gave has all the prerequisites given . So , what exactly do you want to know ? In that link , it clearly states that Foundations of Computing 1 automata , finite state machines is a prerequisite for Data Structures and Parallelism which in turn is a prerequisite for Intro to compilers . And this is the correct order . Just follow that guideline to see the prerequisites of the course you want to take . But if you still want an order , here is a general order intro to programming 1 intro to programming 2 discrete maths data structures algorithms many universities have separate courses for data structures and algorithms OOP software design no corelation with algo but you should do at least data structures before taking this insert database anywhere after this theory of computation no corelation with oop or software design but should take at least algo before taking this systems programming unix hardwaresoftware interfacing no corelation between OS or compilers . So you can take both of them in one semester . Note You should talk to TA ' s to get better answers on which courses you should take