このページの内容

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ウェブサイトまたはリポジトリで確認してください。

費用. ほぼすべての教材は無料ですが、課題・試験・プロジェクトの採点が有料の講座もあります。 CourseraedXはいずれも学費援助を提供しています。

使える時間と予算に応じて、支出額を自分で決めてください。 ただし、成功そのものは購入できないことを忘れないでください。

進め方. 一人でもグループでも、掲載順でも順不同でも学習できます。

  • 基礎課程の全講座を履修してください。内容をすでに修得済みだと確信できる場合に限り、その講座を省略できます。
  • 特に基礎課程は上から順に進めることを推奨します。日や週ごとに内容を変えるため複数講座を並行する方法もあり、入門講座と数学講座の並行履修が一般的です。各講座の前提条件を準備状況の判断に利用してください。
  • 上級課程は選択科目です。専門にしたい分野(例: 上級プログラミング)を一つ選び、その見出し以下をすべて履修してください。独自分野を構成し、Discordコミュニティから計画への助言を得ることもできます。

コンテンツ方針. 学習成果を公開する場合は、共有を許可されたファイルだけを公開してください。 各講座の開始時に同意した行動規範を守ってください

貢献方法

ヘルプを得る(FAQとチャットルームの詳細)

コミュニティ

  • Discordサーバーがあります! Discord ほかのOSSU学習者と話す最初の場所です。今すぐ自己紹介してみませんか? OSSU Discordに参加
  • GitHub Issueでも交流できます。講座の問題やカリキュラムの変更提案は、ここで議論を始めてください。詳しくはこちら
  • LinkedInプロフィールにOpen Source Society Universityを追加しましょう。

警告: OSSUを検索すると、第三者提供・非推奨・古い教材が見つかることがあります。それらは使わず、OSSU CSウェブサイトまたはOSSU CS GitHubリポジトリだけを利用してください。既知の古い教材:

  • 保守されていない非推奨のFirebaseアプリ。詳しくはFAQ
  • 保守されていない非推奨のTrelloボード
  • 第三者提供のNotionテンプレート

カリキュラム


前提条件

コンピューターサイエンス入門

この講座ではコンピューターサイエンスとプログラミングの世界を紹介し、今後学ぶ内容を体験します。修了後もさらに学びたいと思えたなら、コンピューターサイエンスはあなたに向いているでしょう。

扱うトピック: computation imperative programming basic data structures and algorithms and more

講座期間学習時間前提条件チャット
Introduction to Computer Science and Programming using Python14週間週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 Design13週間週8-10時間なしチャット: パート1 / パート2
Class-based Program Design13週間週5-10時間Systematic Program Design、高校数学チャット
Programming Languages11週間週4-8時間Systematic Program Designチャット
Object-Oriented Design13週間週5-10時間Class-based Program Designチャット
Software Architecture4週間週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: Integration13週間週5-10時間-Calculus 1Aチャット
Calculus 1C: Coordinate Systems & Infinite Series6週間週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 Education2週間週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 II6週間週12-18時間-これらのプログラミング言語のいずれか、From Nand to Tetris Part Iチャット
Operating Systems: Three Easy Pieces10-12週間週6-10時間-Nand to Tetris Part IIチャット
Computer Networking: a Top-Down Approach8週間週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 28週間週4-8時間Algorithms Part 1チャット

セキュリティ基礎

扱うトピック: Confidentiality, Integrity, Availability Secure Design Defensive Programming Threats and Attacks Network Security Cryptography and more

講座期間学習時間前提条件チャット
Cybersecurity Fundamentals8週間週10-12時間-チャット
Principles of Secure Coding4週間週4時間-チャット
Identifying Security Vulnerabilities4週間週4時間-チャット

次から一つを選択してください。

応用基礎

扱うトピック: 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 Theory2週間週10時間プログラミング基礎チャット
Databases: Relational Databases and SQL2週間週10時間プログラミング基礎チャット
Databases: Semistructured Data2週間週10時間プログラミング基礎チャット
Machine Learning11週間週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 Engineering9週間週2時間なしチャット
Introduction to Intellectual Property4週間週2時間なしチャット
Data Privacy Fundamentals3週間週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 Programming4週間週6-8時間Scalaプログラミング
Compilers9週間週6-8時間なし
Introduction to Haskell14週間--
Learn Prolog Now! (代替)*12週間--
Software Debugging8週間週6時間Python、オブジェクト指向プログラミング
Software Testing4週間週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 代替210週間週6時間Nand2Tetris II代替リンクは3講座すべてを含む。
Computation Structures 2: Computer Architecture10週間週6時間Computation Structures 1-
Computation Structures 3: Computer Organization10週間週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 Geometry16週間週8時間アルゴリズム, C++
Algorithmic Game Theory10週間週12時間理論基礎

上級情報セキュリティ

講座期間学習時間前提条件
Web Security Fundamentals5週間週4-6時間ウェブ技術の基礎知識
Security Governance & Compliance3週間週3時間-
Digital Forensics Concepts3週間週2-3時間セキュリティ基礎
Secure Software Development: Requirements, Design, and Reuse7週間週1-2時間プログラミング基礎とセキュリティ基礎
Secure Software Development: Implementation7週間週1-2時間Secure Software Development: Requirements, Design, and Reuse
Secure Software Development: Verification and More Specialized Topics7週間週1-2時間Secure Software Development: Implementation

上級数学

講座期間学習時間前提条件チャット
Essence of Linear Algebra--高校数学チャット
Linear Algebra14週間週12時間同時履修: Essence of Linear Algebraチャット
Introduction to Numerical Methods14週間週12時間Linear Algebraチャット
Introduction to Formal Logic10週間週4-8時間Set Theoryチャット
Probability15週間週5-10時間Differentiation and Integrationチャット

最終プロジェクト

実践することも学習の一部です。 各講座の課題と試験は、知識を使って現実の問題を解くための準備です。

基礎課程と、自分に関係する上級課程を修了したら、 身につけた知識で解決できる問題を見つけてください。 まったく新しいものを作っても、普段使う道具やプログラムを改善しても構いません。

プロジェクト作成について詳しい指針が必要な場合は、プロジェクト指向の連続講座を利用できます。 選択肢の一例を示します。 (ほかにも多数あります。この段階なら、自分にとって興味深く関連する講座群を選べるはずです。)

講座期間学習時間前提条件
Fullstack Open12週間週15時間プログラミング
Modern Robotics26週間週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などで地域の開発者ミートアップに参加する。
  • ソフトウェア開発の新技術に注目する。
    • 実績あるErlang仮想マシンを基盤とするウェブ向け関数型言語Elixirで、アクターモデルを探究する。
    • ガベージコレクターなしでメモリ安全性とスレッド安全性を実現するシステム言語Rustで、借用とライフタイムを探究する。
    • 型駆動開発を強力に支援するHaskell系言語Idrisで、依存型システムを探究する。

keep learning

行動規範

OSSUの行動規範

進捗を公開する方法

フォーク方法を参照してGitHubリポジトリを自分のアカウントへフォークし、修了した項目へ順次✅を付けてください。カンバンボードとして利用でき、ほかの方法よりすぐ導入できるため、講座に時間を使えます。

チーム