Skip to content

Domains of CS draft (WIP)

Ahmad Shalabi edited this page Feb 9, 2019 · 4 revisions

Domains of Computer Science

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.

How to use this section

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.

Relation to other OSSU curricula

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).

Computational Geometry Domain

Computer Graphics Domain

Human-Computer Interaction Domain

  • visualization
  • user interfaces

Deep Learning Domain

Artificial Intelligence Domain

Computer Vision Domain

Complexity Theory Domain

Type Theory Domain

Cryptography Domain

Robotics Domain

Quantum Computing Domain

Programming Languages Domain

Process Management Domain

  • depends on: Tools of CS: Development Infrastructure

Software Engineering Domain

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.

Software Architecture 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.

Unikernels Domain

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.

Distributed Computing Domain