# OSSU-CS Academic Requirements This document contains the subjects (e.g. programming), topics (e.g. imperative programming), and projects the student must master to pass through this curriculum. The subject requirements are based on topics, rather than specific courses, because sometimes a certain course isn't available at the right time or doesn't fit the student's learning style. ## Subjects ### Programming #### Paradigms - Imperative programming - Procedural programming - Object-oriented programming - Functional programming - Logic programming #### Languages - C and/or C-derived languages - SQL - XML/HTML - JavaScript and/or related language - An ML-family language - A Lisp-family language - Python and/or Ruby ### Math - Logic and proofs - Discrete structures - Graph theory - Discrete probability - Linear algebra ### Systems - Memory - Caching - Virtualization - Concurrency - Compilers - Assembly - Networking ### Theory - Data structures - Sorting - Searching - Divide and conquer - Algorithms on graphs - Greedy algorithms - Trees - P and NP ### Applications - Software product management - REST - Databases - Computer graphics - Cybersecurity - Machine learning ## Projects Students are required to complete a project at the end of [Core CS](README.md#core-cs) and at the end of [Advanced CS](README.md#advanced-cs). For Core CS, students have two options: - They can use the Capstone course at the end of [Core applications](#core-applications) as their Core CS Project, in which case they are not required to share their project code. - They can skip that Capstone project and make their own project, in which case they *are* required to share the project code. For the Advanced CS Project (also known as the Final Project), students again have two options: - They can take one of the Specializations under [Advanced applications](#advanced-applications), all of which include Capstone Projects. Students *must* share their project code unless the course's honor code forbids it. - They can create their own Final Project, and must share the project code to be evaluated by the community.