# Computer science program

Unofficial master program listing for all learning projects that are used by Computer Science Topics.
This is a list of all the learning projects offered by the school of computer science. This list attempts to maintain a prerequisite tree between learning projects, as well as to identify some of the key goals and topics of each learning project so that these can be reused rather than reduplicated everywhere.

### Recommended program

Introduction Courses I 1.1 Introduction to Computer Science
    Prerequisites - high school or advanced H.S. student
    Goals - to give understanding of computer science, both programming and hardware architecture.
1.2 Introduction to Calculus (from School of Mathematics)
    Prerequisites - high school or advanced H.S. student
    Goals - to teach basic calculus
1.3 Discrete Math I
    Prerequisites - high school or advanced H.S. student
    Topics - Logic, Sets, Functions, Counting, Graphs
1.4 Introduction to Linear Algebra (from School of Mathematics)
    Prerequisites - high school or advanced H.S. student
    Goals - to teach basic linear algebra
Introduction Courses II
2.1 Discrete Math II
    Prerequisites - Discrete Math I
    Topics - Complexity, Proof, Collections, Information Theory
2.2 Introduction to Theory of Computation
    Prerequisites - Discrete Math I
    Goals - learn about what can be computed and how fast it can be done; the hierarchy of finite state machines, pushdown machines, context free grammars and Turing machines; decidability, complexity theory and NP-Completness
2.3 Programming in C
    Prerequisites - Introduction to Computer Science, Discrete Math I
    Goals - to develop a small program in C
2.4 Calculus II (from School of Mathematics)
    Prerequisites - Introduction to Calculus
2.5 Data Structures (linked lists, stack, trees, hash tables, etc)
    Prerequisites - Programming in C
Intermediate Courses I
3.1 Object-Oriented Software Development
    Prerequisites - Introduction to Computer Science
    Goals - design and analysis of object-oriented programs.
    Topics include: classes, interfaces, fundamental object-oriented data structures, debugging and testing.
3.2 Statistics (from School of Mathematics) 3.3 Operating Systems
    Prerequisites - Introduction to Computer Science
    Goals - understand the services offered by an operating system to the user and programmer, using Linux as a model environment.
    Topics include: the shell, files, users, processes, threads & synchronization, pipes, sockets, security
3.4 Introduction to Networks
    Prerequisites - Operating Systems
    Goals - understand programming in a networked environment, including concerns about latency & bandwidth, trust, network topology
    Topics include: basic protocols, network topology and routing, application-level protocols, principles of distributed applications
3.5 Analysis of Algorithms
    Prerequisites - Introduction to Computer Science, Discrete Math I
    Goals - learn the common characteristics and differentiating factors of algorithms
    Topics include: counting, combinations and permutations, basic sorting and searching algorithms, notions of best-, worst-, and average-case performance, Big-O notation
3.6 Design and Analysis of Algorithms I
    Goals - become introduced to algorithms
    Topics include: sorting and searching, divide-and-conquer, dynamic programming, greedy algorithms, NP-completeness
Intermediate Courses II 4.1 Calculus III(Differential eqs, vector calculus - (from School of Mathematics)) 4.2 Numerical Algorithms 4.3 Introduction to Operating System design 4.4 Network Architectures
Advanced Courses I
5.1 Introduction to Databases 5.2 Artificial Intelligence 5.3 Compiler Design 5.4 Functional Programming 5.5 Theory of Programming Languages 5.6 Complexity Theory and Computability 5.7 Open Source Enhancement Project
Advanced Courses II 6.1 Image and Signal Processing 6.2 Computer Vision 6.3 Distributed Computing 6.4 Advanced Analysis of Algorithms 6.5 Bioinformatics 6.6 Machine Learning and Data Mining 6.7 Quantum Computing 6.8 Open Source Major Enhancement Project 6.9 Embedded Programming
Special Topics 7.1 Some advanced learning project (micro-OS, design small CPU, new network protocol, etcx) 7.2 Launch New Open Source Software Project / Thesis 7.3 Open Source Theory/Publication Project / Thesis

### Optional courses

list of all odds and ends, together with their difficulty rating (Introductory I, Advanced II)... List of pre-needs for Introductory 1 esp math requirements and concepts list and self-assessment pre-tests List of learning styles with suggestions for adapting material

## Examples of Degree Programs at Universities

* Computer Science at Carleton University
* Computer Science at the University of Waterloo
* Computer Science programs and courses at Stanford University
* University of Edinburgh links to programs and courses:
** http://www.inf.ed.ac.uk/cgi-bin/dotable?file=/teaching/courses/courses_0910.txt&numcols=3,4,5
** http://www.inf.ed.ac.uk/teaching/courses/
** https://www.star.euclid.ed.ac.uk/ipp/drps_inf.htm
** http://www.drps.ed.ac.uk/index.php