Awesome Computer Science
Computer Scienceを扱う資料や関連プロジェクトをまとめたAwesomeリストです。
目次
概要
OSSUカリキュラムは、オンライン教材を使ってコンピューターサイエンスを完全に学ぶ教育課程です。 単なる就職訓練や職業能力開発を目的としたものではありません。 あらゆるコンピューティング分野の基礎概念を、適切かつ幅広く身につけたい人、 そして規律と意志、何より良い習慣を持ち、この教育の大部分を自力で修めようとする人を対象としています。 その学習は、世界中の仲間からなるコミュニティが支援します。
一般教養(非CS)要件を除き、大学のコンピューターサイエンス専攻の学位要件に沿って設計されています。 このカリキュラムの学習者の多くが、CS以外の分野ではすでに教育を受けていると想定しているためです。 講座はHarvard、Princeton、MITなどが提供する世界最高水準のものから、 次の基準を満たすものを選定しています。
講座の必須条件:
- 受講登録を受け付けていること
- 定期的に開講されること(理想は自己ペース形式、それ以外は年に複数回)
- 教材と教育原理の両面で総じて高品質であること
- CS 2013(コンピューターサイエンス学士課程のカリキュラム指針)の基準に適合すること
上記の基準を満たす講座がない場合は、書籍で学習内容を補います。 カリキュラムには収まらないものの質の高い講座や書籍は、 extras/coursesまたはextras/readingsに掲載します。
構成. カリキュラムは次のように設計されています。
- コンピューターサイエンス入門: CSを体験し、自分に合うかを確かめる課程
- コンピューターサイエンス基礎課程: 専攻者全員の必修科目を履修する、学士課程のおおむね最初の3年間に相当
- コンピューターサイエンス上級課程: 興味に応じて選択科目を履修する、学士課程の最終学年に相当
- 最終プロジェクト: 知識を検証・統合・公開し、世界中の仲間から評価を受けるプロジェクト
期間. 綿密に計画し、週約20時間を学習に充てれば、約2年で修了できます。このスプレッドシートを複製し、Timelineシートへ開始日と週あたりの予定時間を入力すると修了日を見積もれます。履修中はCurriculum Dataシートへ実際の修了日を入力して見積もりを更新できます。
警告: スプレッドシートは修了までの時間を見積もるのに便利ですが、常に最新カリキュラムと一致するとは限りません。履修する講座はOSSU CSウェブサイトまたはリポジトリで確認してください。
費用. ほぼすべての教材は無料ですが、課題・試験・プロジェクトの採点が有料の講座もあります。 CourseraとedXはいずれも学費援助を提供しています。
使える時間と予算に応じて、支出額を自分で決めてください。 ただし、成功そのものは購入できないことを忘れないでください。
進め方. 一人でもグループでも、掲載順でも順不同でも学習できます。
- 基礎課程の全講座を履修してください。内容をすでに修得済みだと確信できる場合に限り、その講座を省略できます。
- 特に基礎課程は上から順に進めることを推奨します。日や週ごとに内容を変えるため複数講座を並行する方法もあり、入門講座と数学講座の並行履修が一般的です。各講座の前提条件を準備状況の判断に利用してください。
- 上級課程は選択科目です。専門にしたい分野(例: 上級プログラミング)を一つ選び、その見出し以下をすべて履修してください。独自分野を構成し、Discordコミュニティから計画への助言を得ることもできます。
コンテンツ方針. 学習成果を公開する場合は、共有を許可されたファイルだけを公開してください。 各講座の開始時に同意した行動規範を守ってください。
ヘルプを得る(FAQとチャットルームの詳細)
コミュニティ
- Discordサーバーがあります!
ほかのOSSU学習者と話す最初の場所です。今すぐ自己紹介してみませんか? OSSU Discordに参加
- GitHub Issueでも交流できます。講座の問題やカリキュラムの変更提案は、ここで議論を始めてください。詳しくはこちら。
- LinkedInプロフィールにOpen Source Society Universityを追加しましょう。
警告: OSSUを検索すると、第三者提供・非推奨・古い教材が見つかることがあります。それらは使わず、OSSU CSウェブサイトまたはOSSU CS GitHubリポジトリだけを利用してください。既知の古い教材:
- 保守されていない非推奨のFirebaseアプリ。詳しくはFAQ。
- 保守されていない非推奨のTrelloボード
- 第三者提供のNotionテンプレート
カリキュラム
前提条件
- コンピューターサイエンス基礎課程では、代数・幾何・微積分準備を含む高校数学を履修済みと想定します。
- コンピューターサイエンス上級課程では、基礎課程をすべて履修済みで、 履修する選択科目を自分で判断できる知識があることを想定します。
- 上級システムでは、物理学の基礎講座(例: 高校のAP Physics)を履修済みと想定します。
コンピューターサイエンス入門
この講座ではコンピューターサイエンスとプログラミングの世界を紹介し、今後学ぶ内容を体験します。修了後もさらに学びたいと思えたなら、コンピューターサイエンスはあなたに向いているでしょう。
扱うトピック:
computation
imperative programming
basic data structures and algorithms
and more
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| Introduction to Computer Science and Programming using Python | 14週間 | 週6-10時間 | 高校代数 | チャット |
コンピューターサイエンス基礎課程
特記がない限り、基礎課程の全講座が必修です。
プログラミング基礎
扱うトピック:
functional programming
design for testing
program requirements
common design patterns
unit testing
object-oriented design
static typing
dynamic typing
ML-family languages (via Standard ML)
Lisp-family languages (via Racket)
Ruby
and more
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| Systematic Program Design | 13週間 | 週8-10時間 | なし | チャット: パート1 / パート2 |
| Class-based Program Design | 13週間 | 週5-10時間 | Systematic Program Design、高校数学 | チャット |
| Programming Languages | 11週間 | 週4-8時間 | Systematic Program Design | チャット |
| Object-Oriented Design | 13週間 | 週5-10時間 | Class-based Program Design | チャット |
| Software Architecture | 4週間 | 週2-5時間 | Object Oriented Design | チャット |
数学基礎
離散数学(CSのための数学)は前提科目であり、アルゴリズムとデータ構造の学習に密接に関係します。微積分は離散数学への準備となり、数学的成熟も促します。
扱うトピック:
discrete mathematics
mathematical proofs
basic statistics
O-notation
discrete probability
and more
| 講座 | 期間 | 学習時間 | 注記 | 前提条件 | チャット |
|---|---|---|---|---|---|
| Calculus 1A: Differentiation (代替) | 13週間 | 週6-10時間 | 代替講座は本講座と続く2講座を扱う | 高校数学 | チャット |
| Calculus 1B: Integration | 13週間 | 週5-10時間 | - | Calculus 1A | チャット |
| Calculus 1C: Coordinate Systems & Infinite Series | 6週間 | 週5-10時間 | - | Calculus 1B | チャット |
| Mathematics for Computer Science (代替) | 13週間 | 週5時間 | 2015/2019解答 2010解答 2005解答。 | Calculus 1C | チャット |
コンピューターサイエンスの道具
理論の理解は重要ですが、プログラムを作る力も必要です。開発を容易にする広く使われた道具を今学び、今後のプログラミングに備えます。
扱うトピック:
terminals and shell scripting
vim
command line environments
version control
and more
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| The Missing Semester of Your CS Education | 2週間 | 週12時間 | - | チャット |
システム基礎
扱うトピック:
procedural programming
manual memory management
boolean algebra
gate logic
memory
computer architecture
assembly
machine language
virtual machines
high-level languages
compilers
operating systems
network protocols
and more
| 講座 | 期間 | 学習時間 | 追加テキスト・課題 | 前提条件 | チャット |
|---|---|---|---|---|---|
| Build a Modern Computer from First Principles: From Nand to Tetris (代替) | 6週間 | 週7-13時間 | - | C系プログラミング言語 | チャット |
| Build a Modern Computer from First Principles: Nand to Tetris Part II | 6週間 | 週12-18時間 | - | これらのプログラミング言語のいずれか、From Nand to Tetris Part I | チャット |
| Operating Systems: Three Easy Pieces | 10-12週間 | 週6-10時間 | - | Nand to Tetris Part II | チャット |
| Computer Networking: a Top-Down Approach | 8週間 | 週4–12時間 | Wireshark Labs | 代数、確率、CS基礎 | チャット |
理論基礎
扱うトピック:
divide and conquer
sorting and searching
randomized algorithms
graph search
shortest paths
data structures
greedy algorithms
minimum spanning trees
dynamic programming
NP-completeness
and more
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| Algorithms: Design and Analysis, Part 1 (代替) | 8週間 | 週4-8時間 | 任意のプログラミング言語、Mathematics for Computer Science | チャット |
| Algorithms: Design and Analysis, Part 2 | 8週間 | 週4-8時間 | Algorithms Part 1 | チャット |
セキュリティ基礎
扱うトピック:
Confidentiality, Integrity, Availability
Secure Design
Defensive Programming
Threats and Attacks
Network Security
Cryptography
and more
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| Cybersecurity Fundamentals | 8週間 | 週10-12時間 | - | チャット |
| Principles of Secure Coding | 4週間 | 週4時間 | - | チャット |
| Identifying Security Vulnerabilities | 4週間 | 週4時間 | - | チャット |
次から一つを選択してください。
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| Identifying Security Vulnerabilities in C/C++ Programming | 4週間 | 週5時間 | - | チャット |
| Exploiting and Securing Vulnerabilities in Java Applications | 4週間 | 週5時間 | - | チャット |
応用基礎
扱うトピック:
Agile methodology
REST
software specifications
refactoring
relational databases
transaction processing
data modeling
neural networks
supervised learning
unsupervised learning
OpenGL
ray tracing
and more
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| Databases: Modeling and Theory | 2週間 | 週10時間 | プログラミング基礎 | チャット |
| Databases: Relational Databases and SQL | 2週間 | 週10時間 | プログラミング基礎 | チャット |
| Databases: Semistructured Data | 2週間 | 週10時間 | プログラミング基礎 | チャット |
| Machine Learning | 11週間 | 週9時間 | 基礎的なコーディング | チャット |
| Computer Graphics (代替) | 6週間 | 週12時間 | C++またはJava、線形代数基礎 | チャット |
| Software Engineering: Introduction (代替) | 6週間 | 週8-10時間 | プログラミング基礎と一定規模のプロジェクト | チャット |
倫理基礎
扱うトピック:
Social Context
Analytical Tools
Professional Ethics
Intellectual Property
Privacy and Civil Liberties
and more
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| Ethics, Technology and Engineering | 9週間 | 週2時間 | なし | チャット |
| Introduction to Intellectual Property | 4週間 | 週2時間 | なし | チャット |
| Data Privacy Fundamentals | 3週間 | 週3時間 | なし | チャット |
コンピューターサイエンス上級課程
基礎課程の全必修講座を修了した後、興味に応じて上級課程から講座を選びます。 各小分類の全講座を履修する必要はありません。 ただし、進みたい分野に関係する講座はすべて履修してください。
上級プログラミング
扱うトピック:
debugging theory and practice
goal-oriented programming
parallel computing
object-oriented analysis and design
UML
large-scale software architecture and design
and more
| 講座 | 期間 | 学習時間 | 前提条件 |
|---|---|---|---|
| Parallel Programming | 4週間 | 週6-8時間 | Scalaプログラミング |
| Compilers | 9週間 | 週6-8時間 | なし |
| Introduction to Haskell | 14週間 | - | - |
| Learn Prolog Now! (代替)* | 12週間 | - | - |
| Software Debugging | 8週間 | 週6時間 | Python、オブジェクト指向プログラミング |
| Software Testing | 4週間 | 週6時間 | Python、プログラミング経験 |
(*) Blackburn、Bos、Striegnitzによる書籍(ソースからコンパイルし、CCライセンスで再配布)
上級システム
扱うトピック:
digital signaling
combinational logic
CMOS technologies
sequential logic
finite state machines
processor instruction sets
caches
pipelining
virtualization
parallel processing
virtual memory
synchronization primitives
system call interface
and more
| 講座 | 期間 | 学習時間 | 前提条件 | 注記 |
|---|---|---|---|---|
| Computation Structures 1: Digital Circuits 代替1 代替2 | 10週間 | 週6時間 | Nand2Tetris II | 代替リンクは3講座すべてを含む。 |
| Computation Structures 2: Computer Architecture | 10週間 | 週6時間 | Computation Structures 1 | - |
| Computation Structures 3: Computer Organization | 10週間 | 週6時間 | Computation Structures 2 | - |
上級理論
扱うトピック:
formal languages
Turing machines
computability
event-driven concurrency
automata
distributed shared memory
consensus algorithms
state machine replication
computational geometry theory
propositional logic
relational logic
Herbrand logic
game trees
and more
| 講座 | 期間 | 学習時間 | 前提条件 |
|---|---|---|---|
| Theory of Computation (代替) | 13週間 | 週10時間 | Mathematics for Computer Science, 論理学, アルゴリズム |
| Computational Geometry | 16週間 | 週8時間 | アルゴリズム, C++ |
| Algorithmic Game Theory | 10週間 | 週12時間 | 理論基礎 |
上級情報セキュリティ
| 講座 | 期間 | 学習時間 | 前提条件 |
|---|---|---|---|
| Web Security Fundamentals | 5週間 | 週4-6時間 | ウェブ技術の基礎知識 |
| Security Governance & Compliance | 3週間 | 週3時間 | - |
| Digital Forensics Concepts | 3週間 | 週2-3時間 | セキュリティ基礎 |
| Secure Software Development: Requirements, Design, and Reuse | 7週間 | 週1-2時間 | プログラミング基礎とセキュリティ基礎 |
| Secure Software Development: Implementation | 7週間 | 週1-2時間 | Secure Software Development: Requirements, Design, and Reuse |
| Secure Software Development: Verification and More Specialized Topics | 7週間 | 週1-2時間 | Secure Software Development: Implementation |
上級数学
| 講座 | 期間 | 学習時間 | 前提条件 | チャット |
|---|---|---|---|---|
| Essence of Linear Algebra | - | - | 高校数学 | チャット |
| Linear Algebra | 14週間 | 週12時間 | 同時履修: Essence of Linear Algebra | チャット |
| Introduction to Numerical Methods | 14週間 | 週12時間 | Linear Algebra | チャット |
| Introduction to Formal Logic | 10週間 | 週4-8時間 | Set Theory | チャット |
| Probability | 15週間 | 週5-10時間 | Differentiation and Integration | チャット |
最終プロジェクト
実践することも学習の一部です。 各講座の課題と試験は、知識を使って現実の問題を解くための準備です。
基礎課程と、自分に関係する上級課程を修了したら、 身につけた知識で解決できる問題を見つけてください。 まったく新しいものを作っても、普段使う道具やプログラムを改善しても構いません。
プロジェクト作成について詳しい指針が必要な場合は、プロジェクト指向の連続講座を利用できます。 選択肢の一例を示します。 (ほかにも多数あります。この段階なら、自分にとって興味深く関連する講座群を選べるはずです。)
| 講座 | 期間 | 学習時間 | 前提条件 |
|---|---|---|---|
| Fullstack Open | 12週間 | 週15時間 | プログラミング |
| Modern Robotics | 26週間 | 週2-5時間 | 大学初年級の物理学、線形代数、微積分、線形常微分方程式 |
| Data Mining (Specialization) | 30週間 | 週2-5時間 | 機械学習 |
| Big Data (Specialization) | 30週間 | 週3-5時間 | なし |
| Internet of Things (Specialization) | 30週間 | 週1-5時間 | 十分なプログラミング経験 |
| Cloud Computing (Specialization) | 30週間 | 週2-6時間 | C++ プログラミング |
| Data Science (Specialization) | 43週間 | 週1-6時間 | なし |
| Functional Programming in Scala (Specialization) | 29週間 | 週4-5時間 | 1年間のプログラミング経験 |
| Game Design and Development with Unity 2020 (Specialization) | 6か月 | 週5時間 | プログラミング、インタラクションデザイン |
修了おめでとうございます
上記カリキュラムの要件を満たすと、 コンピューターサイエンスの学士号全課程に相当する学習を修了したことになります。 修了おめでとうございます!
次に何をするか。可能性は無限で、互いに重なり合っています。
- 開発者の仕事を探す。
- 技能を磨き知識を広げる古典を読書リストで探す。
- meetup.com)
- ソフトウェア開発の新技術に注目する。

行動規範
進捗を公開する方法
フォーク方法を参照してGitHubリポジトリを自分のアカウントへフォークし、修了した項目へ順次✅を付けてください。カンバンボードとして利用でき、ほかの方法よりすぐ導入できるため、講座に時間を使えます。
チーム
- Eric Douglas: OSSU創設者
- Josh Hanson: 技術主任メンテナー
- Waciuma Wanjohi: 学術主任メンテナー
- 貢献者