Well, first let us look at the curriculum for three of the top CS programs in the US:
- (CS 1) Intro to Computer Programming 1 - Python. data types, variables, assignment, control structures, functions, scoping, compound data, string processing, modules, basic I/O, recursion, exceptions handling and OO. Debugging, testing, and documentation.
- (CS 2) Intro to Programming Methods 1 - Data structures: lists, trees, and graphs; common algorithms; recursion and dynamic programming; concurrency and network programming; basic numerical computation methods. Compiled languages and dev tools.
- (CS 4) Fundamentals of Computer Programming - functions and procedures, conditionals, recursion and looping, scoping and environments, compound data, side effects, higher-order functions and functional programming, and object-oriented programming, and complexity
- (CS 21) Decidability and Tractability - automata and Turing machines, decidability and undecidability, reductions between computational problems, and the theory of NP-completeness
- (CS 24) Intro. to Computing Systems - C. Basic introduction to computer systems, including hardware-software interface, computer architecture, and operating systems.
- (CS 38) Introduction to Algorithms - Major design techniques (greedy, divide and conquer, dynamic programming, linear programming). Methods for identifying NP-completeness.
- (CS 117) Computability Theory - Turing machines, recursive functions, Markov algorithms; proof of their equivalence. Church’s thesis. Decision problems. Undecidable problems. Complexity of decision procedures. Polynomial deterministic vs. nondeterministic algorithms, NP-complete problems and the P = NP question
- (CS 139) Analysis and Design of Algorithms - advanced topics in the design and analysis of algorithms
- (CS 149) Algorithmic Economics - algorithmic game theory and mechanism design; auctions; matching markets; and learning in games
- (CS 219) Quantum Computation - The theory of quantum information and quantum computation. Overview of classical information theory, compression of quantum information, transmission of quantum information through noisy channels, quantum error-correcting codes, quantum cryptography and teleportation.
- (CS 148) Advanced Topics in Computer Vision - computational vision: recognition, vision-based navigation, 3-D reconstruction
- (CS 187) Neural Computation - neurons. supervised and unsupervised learning; development; spike-based computing; single-cell computation; error and noise tolerance.
- (CS 142) Distributed Computing - Programming distributed systems. Mechanics for cooperation among concurrent agents. Programming sensor networks and cloud computing applications. Applications of machine learning and statistics by using parallel computers to aggregate and analyze data streams from sensors.
- (CS 143) Communication Networks - This course focuses on the link layer (two) through the transport layer (four) of Internet protocols.
- (CS 144) Networks: Structure & Economics - what do networks actually look like? How do search engines work? Why do memes spread the way they do? How does web advertising work?
- (CS 115) Functional Programming - Haskell. recursion, first-class functions, higher-order functions, algebraic data types, polymorphic types, function composition, point-free style, proving functions correct, lazy evaluation, pattern matching, lexical scoping, type classes, and modules. Advanced topics: monad transformers, parser combinators, dynamic typing, and existential types.
- (CS 121) Relational Databases - relational data model, relational algebra, and SQL. schema design, entity-relationship model, functional dependency analysis, and normal forms. writing and using stored procedures, working with hierarchies and graphs within relational databases, transaction processing and query evaluation.
- (CS 122) Database System Implementation - Java. file storage formats, query planning and optimization, query evaluation, indexes, transaction processing, concurrency control, and recovery.
- (CS 124) Operating Systems - C and IA32. kernel architectures, process abstraction, and process scheduling, system calls, concurrency within the OS, virtual memory management, and file systems. Work in groups to implement major components of an instructional OS.