Merge branch 'master' of github.com:open-source-society/computer-science

This commit is contained in:
Eric Douglas 2017-04-11 08:54:25 -03:00
commit 4399f8c62f
3 changed files with 157 additions and 272 deletions

View File

@ -6,6 +6,11 @@ This project adheres *in spirit* to [Semantic Versioning](http://semver.org/):
- "MINOR" updates correspond to changing courses without changing the topics - "MINOR" updates correspond to changing courses without changing the topics
- "PATCH" updates correspond to aesthetic and non-essential additions/removals or changing order of classes for better progression - "PATCH" updates correspond to aesthetic and non-essential additions/removals or changing order of classes for better progression
## [7.1.1] 2017-04-11
### Updated
- Final touch to release
## [7.1.0] 2017-04-10 ## [7.1.0] 2017-04-10
### Updated ### Updated
- Reverted reformat of programming languages course - Reverted reformat of programming languages course
@ -170,12 +175,12 @@ Due to Coursera's platform changes, we had the following updates:
## [3.0.0] 2016-05-04 ## [3.0.0] 2016-05-04
### Removed ### Removed
- Section: **Introduction to Computer Science**: - Section: **Introduction to Computer Science**:
- Introduction to Computer Science and Programming Using Python - Introduction to Computer Science and Programming Using Python
- From Nand to Tetris (Part 1) - From Nand to Tetris (Part 1)
### Added ### Added
- Section: **Introduction to Computer Science**: - Section: **Introduction to Computer Science**:
- Introduction to Computer Science - CS50 - Introduction to Computer Science - CS50
## [2.0.1] 2016-04-04 ## [2.0.1] 2016-04-04
@ -187,7 +192,7 @@ Due to Coursera's platform changes, we had the following updates:
- Program Design section course's names and links - Program Design section course's names and links
### Removed ### Removed
- **Introduction to Computer Science**: - **Introduction to Computer Science**:
- Introduction to Computer Science - Introduction to Computer Science
- Introduction to Computational Thinking and Data Science - Introduction to Computational Thinking and Data Science
- **Algorithms** - **Algorithms**
@ -196,19 +201,19 @@ Due to Coursera's platform changes, we had the following updates:
- Principles of Reactive Programming - Principles of Reactive Programming
- **Math (Calculus)** - **Math (Calculus)**
- Multivariable Calculus - Multivariable Calculus
- **Software Architecture**: - **Software Architecture**:
- Web Application Architectures - Web Application Architectures
- **Software Engineering**: - **Software Engineering**:
- Agile Development Using Ruby on Rails - Basics - Agile Development Using Ruby on Rails - Basics
- Agile Development Using Ruby on Rails - Advanced - Agile Development Using Ruby on Rails - Advanced
- Startup Engineering - Startup Engineering
- **Computer Architecture**: - **Computer Architecture**:
- The Hardware/Software Interface - The Hardware/Software Interface
- **Operating Systems**: - **Operating Systems**:
- Operating System Engineering - Operating System Engineering
- **Computer Networks**: - **Computer Networks**:
- Introduction to Computer Networking - Introduction to Computer Networking
- **Cryptography**: - **Cryptography**:
- Applied Cryptography - Applied Cryptography
**ps**: These removed courses are now in the [extras](https://github.com/open-source-society/computer-science/tree/master/extras) section. **ps**: These removed courses are now in the [extras](https://github.com/open-source-society/computer-science/tree/master/extras) section.

View File

@ -1,156 +1,37 @@
# Projects # Projects
> Here, we are providing a list curated by the community of exercises and projects to practice and reinforce the skills we try to master.
>Here, we are providing a list curated by the community of exercices and projects to practice and reinforce the skills we try to master.
Projects created by OSSU's students for each course of our [**Computer Science**](https://github.com/open-source-society/computer-science) curriculum. Projects created by OSSU's students for each course of our [**Computer Science**](https://github.com/open-source-society/computer-science) curriculum.
### Introduction to Computer Science - [Introduction to Computer Science](#introduction-to-computer-science)
- [Programming](#programming)
- [Math](#math)
- [Systems](#systems)
- [Theory](#theory)
- [Applications](#applications)
## Introduction to Computer Science
Project Title | Description | Author(s) | Repository Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :-- :-- | :-- | :--: | :--
Binary Machine | Convert decimal numbers to binary | [Eric Douglas](https://github.com/ericdouglas) | [binary-machine](https://github.com/ericdouglas/binary-machine) Binary Machine | Convert decimal numbers to binary | [Eric Douglas](https://github.com/ericdouglas) | [binary-machine](https://github.com/ericdouglas/binary-machine)
### Math (Mathematical Thinking)
## Programming
Project Title | Description | Author(s) | Repository Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :-- :-- | :-- | :--: | :--
### Program Design ## Math
Project Title | Description | Author(s) | Repository Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :-- :-- | :-- | :--: | :--
### Math (Calculus and Discrete Math) ## Systems
Project Title | Description | Author(s) | Repository Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :-- :-- | :-- | :--: | :--
### Algorithms ## Theory
Project Title | Description | Author(s) | Repository Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :-- :-- | :-- | :--: | :--
### Programming Paradigms ## Application
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Software Testing
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Math (Calculus)
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Software Architecture
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Theory
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Software Engineering
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Math (Probability)
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Computer Architecture
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Operating Systems
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Computer Networks
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Databases
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Cloud Computing
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Math (Linear Algebra)
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Cryptography
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Security
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Compilers
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Parallel Computing
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### UX Design
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Computer Graphics
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Artificial Intelligence
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Machine Learning
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Natural Language Processing
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Big Data
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Data Mining
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Internet of Things
Project Title | Description | Author(s) | Repository Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :-- :-- | :-- | :--: | :--

261
README.md
View File

@ -18,7 +18,7 @@
- [Summary](#summary) - [Summary](#summary)
- [Curriculum](#curriculum) - [Curriculum](#curriculum)
- [Prerequisites](#prerequisites) - [Prerequisites](#prerequisites)
- [Intro CS](#intro-cs) - [Introduction to Computer Science](#introduction-to-computer-science)
- [Core CS](#core-cs) - [Core CS](#core-cs)
- [Advanced CS](#advanced-cs) - [Advanced CS](#advanced-cs)
- [Final project](#final-project) - [Final project](#final-project)
@ -77,10 +77,10 @@ just remember that you can't purchase success!
# Curriculum # Curriculum
**Curriculum version**: `7.1.0` (see [CHANGELOG](CHANGELOG.md)) **Curriculum version**: `7.1.1` (see [CHANGELOG](CHANGELOG.md))
- [Prerequisites](#prerequisites) - [Prerequisites](#prerequisites)
- [Intro CS](#intro-cs) - [Introduction to Computer Science](#introduction-to-computer-science)
- [Core CS](#core-cs) - [Core CS](#core-cs)
- [Core programming](#core-programming) - [Core programming](#core-programming)
- [Core math](#core-math) - [Core math](#core-math)
@ -106,21 +106,21 @@ Some high school graduates will have already taken AP Calculus, but this is usua
and is knowledgeable enough now to decide which electives to take. and is knowledgeable enough now to decide which electives to take.
- Note that [Advanced systems](#advanced-systems) assumes the student has taken a basic physics course (e.g. AP Physics in high school). - Note that [Advanced systems](#advanced-systems) assumes the student has taken a basic physics course (e.g. AP Physics in high school).
## Intro CS ## Introduction to Computer Science
These courses will introduce you to the world of computer science. These courses will introduce you to the world of computer science.
Both are required, but feel free to skip straight to the second course when CS50 (the first course) moves away from C. Both are required, but feel free to skip straight to the second course when CS50 (the first course) moves away from C.
**Topics covered**: **Topics covered**:
imperative programming; `imperative programming`
procedural programming; `procedural programming`
C; `C`
manual memory management; `manual memory management`
basic data structures and algorithms; `basic data structures and algorithms`
Python; `Python`
SQL; `SQL`
basic HTML, CSS, JavaScript; `basic HTML, CSS, JavaScript`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -132,20 +132,20 @@ Courses | Duration | Effort | Prerequisites
All coursework under Core CS is **required**, unless otherwise indicated. All coursework under Core CS is **required**, unless otherwise indicated.
### Core programming ### Core programming
**Topics covered**: **Topics covered**:
functional programming; `functional programming`
design for testing; `design for testing`
program requirements; `program requirements`
common design patterns; `common design patterns`
unit testing; `unit testing`
object-oriented design; `object-oriented design`
Java; `Java`
static typing; `static typing`
dynamic typing; `dynamic typing`
ML-family languages (via Standard ML); `ML-family languages (via Standard ML)`
Lisp-family languages (via Racket); `Lisp-family languages (via Racket)`
Ruby; `Ruby`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -164,21 +164,21 @@ Courses | Duration | Effort | Prerequisites
### Core math ### Core math
**Topics covered**: **Topics covered**:
linear transformations; `linear transformations`
matrices; `matrices`
vectors; `vectors`
mathematical proofs; mathematical proofs;
number theory; `number theory`
differential calculus; `differential calculus`
integral calculus; `integral calculus`
sequences and series; `sequences and series`
discrete mathematics; `discrete mathematics`
basic statistics; `basic statistics`
O-notation; `O-notation`
graph theory; `graph theory`
vector calculus; `vector calculus`
discrete probability; `discrete probability`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -196,19 +196,19 @@ for how to progress through the course.
### Core systems ### Core systems
**Topics covered**: **Topics covered**:
boolean algebra; `boolean algebra`
gate logic; `gate logic`
memory; `memory`
machine language; `machine language`
computer architecture; `computer architecture`
assembly; `assembly`
machine language; `machine language`
virtual machines; `virtual machines`
high-level languages; `high-level languages`
compilers; `compilers`
operating systems; `operating systems`
network protocols; `network protocols`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -222,17 +222,17 @@ Courses | Duration | Effort | Prerequisites
### Core theory ### Core theory
**Topics covered**: **Topics covered**:
divide and conquer; `divide and conquer`
sorting and searching; `sorting and searching`
randomized algorithms; `randomized algorithms`
graph search; `graph search`
shortest paths; `shortest paths`
data structures; `data structures`
greedy algorithms; `greedy algorithms`
minimum spanning trees; `minimum spanning trees`
dynamic programming; `dynamic programming`
NP-completeness; `NP-completeness`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -244,22 +244,22 @@ Courses | Duration | Effort | Prerequisites
### Core applications ### Core applications
**Topics covered**: **Topics covered**:
Agile methodology; `Agile methodology`
REST; `REST`
software specifications; `software specifications`
refactoring; `refactoring`
relational databases; `relational databases`
transaction processing; `transaction processing`
data modeling; `data modeling`
neural networks; `neural networks`
supervised learning; `supervised learning`
unsupervised learning; `unsupervised learning`
OpenGL; `OpenGL`
raytracing; `raytracing`
block ciphers; `block ciphers`
authentication; `authentication`
public key encryption; `public key encryption`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -283,15 +283,15 @@ If not, or if a student chooses not to take the Capstone, then a separate Final
### Advanced programming ### Advanced programming
**Topics covered**: **Topics covered**:
debugging theory and practice; `debugging theory and practice`
goal-oriented programming; `goal-oriented programming`
GPU programming; `GPU programming`
CUDA; `CUDA`
parallel computing; `parallel computing`
object-oriented analysis and design; `object-oriented analysis and design`
UML; `UML`
large-scale software architecture and design; `large-scale software architecture and design`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -304,11 +304,11 @@ Courses | Duration | Effort | Prerequisites
### Advanced math ### Advanced math
**Topics covered**: **Topics covered**:
real analysis; `real analysis`
multivariable integrals; `multivariable integrals`
multivariable differentials; `multivariable differentials`
probability theory; `probability theory`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -319,20 +319,20 @@ Courses | Duration | Effort | Prerequisites
### Advanced systems ### Advanced systems
**Topics covered**: **Topics covered**:
digital signaling; `digital signaling`
combinational logic; `combinational logic`
CMOS technologies; `CMOS technologies`
sequential logic; `sequential logic`
finite state machines; `finite state machines`
processor instruction sets; `processor instruction sets`
caches; `caches`
pipelining; `pipelining`
virtualization; `virtualization`
parallel processing; `parallel processing`
virtual memory; `virtual memory`
synchronization primitives; `synchronization primitives`
system call interface; `system call interface`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -351,21 +351,21 @@ if you are struggling, you can find a physics MOOC or utilize the materials from
### Advanced theory ### Advanced theory
**Topics covered**: **Topics covered**:
formal languages; `formal languages`
Turing machines; `Turing machines`
computability; `computability`
event-driven concurrency; `event-driven concurrency`
automata; `automata`
distributed shared memory; `distributed shared memory`
consensus algorithms; `consensus algorithms`
state machine replication; `state machine replication`
computational geometry theory; `computational geometry theory`
propositional logic; `propositional logic`
relational logic; `relational logic`
Herbrand logic; `Herbrand logic`
concept lattices; `concept lattices`
game trees; `game trees`
and more. `and more`
Courses | Duration | Effort | Prerequisites Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--: :-- | :--: | :--: | :--:
@ -447,7 +447,7 @@ The important thing is to **internalize** the core concepts and to be able to us
## Pro CS ## Pro CS
After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor's degree in Computer Science, or quite close to one. After completing the requirements of the curriculum above, you will have completed the equivalent of a full bachelor's degree in Computer Science, or quite close to one.
You can stop here, but if you really want to make yourself valuable, the next step to completing your studies is to develop skills and knowledge in a specific domain. You can stop in the Advanced CS section, but the next step to completing your studies is to develop skills and knowledge in a specific domain.
Many of these courses are graduate-level. Many of these courses are graduate-level.
Choose one or more of the following **specializations**: Choose one or more of the following **specializations**:
@ -466,9 +466,9 @@ These aren't the only specializations you can choose. Check the following websit
- Look for a job as a developer! - Look for a job as a developer!
- Check out the [readings](extras/readings.md) for classic books you can read that will sharpen your skills and expand your knowledge. - Check out the [readings](extras/readings.md) for classic books you can read that will sharpen your skills and expand your knowledge.
- Join a local developer meetup (e.g. via [Meetups.com](https://www.meetups.com/)). - Join a local developer meetup (e.g. via [meetup.com](https://www.meetup.com/)).
- Pay attention to emerging technologies in the world of software development, such as: - Pay attention to emerging technologies in the world of software development, such as:
- [Elixir](http://elixir-lang.org/), a new functional programming language for the web based on the battle-tested BEAM VM! - [Elixir](http://elixir-lang.org/), a new functional programming language for the web based on the battle-tested Erlang Virtual Machine!
- [Rust](https://www.rust-lang.org/), a systems language which uses borrowing and lifetimes to achieve memory safety without a garbage collector! - [Rust](https://www.rust-lang.org/), a systems language which uses borrowing and lifetimes to achieve memory safety without a garbage collector!
![keep learning](http://i.imgur.com/REQK0VU.jpg) ![keep learning](http://i.imgur.com/REQK0VU.jpg)
@ -496,14 +496,13 @@ We also have **labels** to help you have more control through the process.
The meaning of each of these labels is: The meaning of each of these labels is:
- `Main Curriculum`: cards with that label represent courses that are listed in our curriculum. - `Main Curriculum`: cards with that label represent courses that are listed in our curriculum.
- `Extra Courses`: cards with that label represent courses that was added by the student. - `Extra Resources`: cards with that label represent courses that was added by the student.
- `Doing`: cards with that label represent courses the student is current doing. - `Doing`: cards with that label represent courses the student is current doing.
- `Done`: cards with that label represent courses finished by the student. - `Done`: cards with that label represent courses finished by the student.
Those cards should also have the link for at least one project/article built with the knowledge acquired in such course. Those cards should also have the link for at least one project/article built with the knowledge acquired in such course.
- `Section`: cards with that label represent the section that we have in our curriculum. - `Section`: cards with that label represent the section that we have in our curriculum.
Those cards with the `Section` label are only to help the organization of the Done column. Those cards with the `Section` label are only to help the organization of the Done column.
You should put the *Course's cards* below its respective *Section's card*. You should put the *Course's cards* below its respective *Section's card*.
- `Extra Sections`: cards with that label represent sections that was added by the student.
The intention of this board is to provide our students a way to track their progress, and also the ability to show their progress through a public page for friends, family, employers, etc. The intention of this board is to provide our students a way to track their progress, and also the ability to show their progress through a public page for friends, family, employers, etc.
You can change the status of your board to be *public* or *private*. You can change the status of your board to be *public* or *private*.
@ -511,7 +510,7 @@ You can change the status of your board to be *public* or *private*.
## Team ## Team
* **Curriculum Founder**: [Eric Douglas](https://github.com/ericdouglas) * **Curriculum Founder**: [Eric Douglas](https://github.com/ericdouglas)
* **Curriculum Maintainer**: [Eric Douglas](https://github.com/ericdouglas) * **Curriculum Maintainer**: [Eric Douglas](https://github.com/ericdouglas) and [hanjiexi](https://github.com/hanjiexi)
* **Contributors**: [contributors](https://github.com/open-source-society/computer-science/graphs/contributors) * **Contributors**: [contributors](https://github.com/open-source-society/computer-science/graphs/contributors)
# References # References
@ -524,4 +523,4 @@ You can change the status of your board to be *public* or *private*.
- [Carnegie Mellon University: Computer Science Major Requirements](https://www.csd.cs.cmu.edu/academics/undergraduate/requirements) - [Carnegie Mellon University: Computer Science Major Requirements](https://www.csd.cs.cmu.edu/academics/undergraduate/requirements)
- [MIT Open Courseware](http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science) - [MIT Open Courseware](http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science)
- [Teach Yourself Computer Science](https://teachyourselfcs.com/) - [Teach Yourself Computer Science](https://teachyourselfcs.com/)
- [Obtaining a Thorough CS Background Online](http://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/) - [Obtaining a Thorough CS Background Online](http://spin.atomicobject.com/2015/05/15/obtaining-thorough-cs-background-online/)