-
Notifications
You must be signed in to change notification settings - Fork 21.7k
Domains of CS draft (WIP)
Pure computer science is ultimately only useful if you intend to become a theorist. Otherwise, your next step after learning the fundamentals of computer science is to specialize in a domain. This section helps guide you towards such a domain, but it should not be considered complete. Mastery of any of these domains takes many years and this is just a starting point to transition you out of this curriculum and into the real world.
After you finish Core CS, your next step is to take electives from Advanced CS. You can either just take whatever interests you and decide on a domain later, or you can immediately choose a domain listed below and base your elective selections on the prerequisites of the domain. Note that some domains may depend on others.
OSSU already has curricula for Data Science and Bioinformatics. (There is a repository for Game Development but this curriculum has not yet been developed.) Students should immediately switch to these curricula as soon as they realize that these are the fields they are interested in.
However, some subdomains of these other fields will have a domain listed in this curriculum for those students who want to specialize in a particularly CS-heavy subset of a different field, such as Deep Learning (a subset of Data Science) or Computer Graphics (a subset of Game Development).
- visualization
- user interfaces
- start with this video
- Homotypy Type Theory
- book
- depends on: Tools of CS: Development Infrastructure
Note: we reject, with Dijkstra, the popular definition of "software engineering" as a synonym for general software development. This domain is focused on the practice of producing programs that are mathematically proven to meet a formal specification. The content related to the popular definition can be found under the Process Management Domain.
While the Software Engineering Domain focuses on formal specifications and implementations, this domain focuses on everything that leads to the production of those specifications — namely, requirements gathering and systems design.
TODO: explain why someone would want to study unikernels
There are numerous unikernels, but MirageOS is likely the most widely known, actively researched, production-ready, and well-documented. This domain section focuses on learning what's needed for getting involved in MirageOS research or using it in production. Feel free to submit pull requests for other projects, as long as they are active projects at least as well documented as MirageOS.
- Functional Programming in OCaml: A Principled Approach
- Unix System Programming in OCaml
- "Unikernels: The Rise of the Virtual Library Operating System"
- "Unikernels: Library Operating Systems for the Cloud"
- "Jitsu: Just-In-Time Summoning of Unikernels"
- "Mergeable Persistent Data Structures"
- "Declarative foreign function binding through generic programming"
- MirageOS Documentation