Software Engineering Java Programming Advanced Data Structures Computer Organization Formal Languages and Automata Theory Principles of Programming Languages