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
- "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
### Updated
- 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
### Removed
- Section: **Introduction to Computer Science**:
- Section: **Introduction to Computer Science**:
- Introduction to Computer Science and Programming Using Python
- From Nand to Tetris (Part 1)
### Added
- Section: **Introduction to Computer Science**:
- Section: **Introduction to Computer Science**:
- Introduction to Computer Science - CS50
## [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
### Removed
- **Introduction to Computer Science**:
- **Introduction to Computer Science**:
- Introduction to Computer Science
- Introduction to Computational Thinking and Data Science
- **Algorithms**
@ -196,19 +201,19 @@ Due to Coursera's platform changes, we had the following updates:
- Principles of Reactive Programming
- **Math (Calculus)**
- Multivariable Calculus
- **Software Architecture**:
- **Software Architecture**:
- Web Application Architectures
- **Software Engineering**:
- **Software Engineering**:
- Agile Development Using Ruby on Rails - Basics
- Agile Development Using Ruby on Rails - Advanced
- Startup Engineering
- **Computer Architecture**:
- **Computer Architecture**:
- The Hardware/Software Interface
- **Operating Systems**:
- **Operating Systems**:
- Operating System Engineering
- **Computer Networks**:
- **Computer Networks**:
- Introduction to Computer Networking
- **Cryptography**:
- **Cryptography**:
- Applied Cryptography
**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
>Here, we are providing a list curated by the community of exercices and projects to practice and reinforce the skills we try to master.
> Here, we are providing a list curated by the community of exercises 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.
### 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
:-- | :-- | :--: | :--
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
:-- | :-- | :--: | :--
### Program Design
## Math
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Math (Calculus and Discrete Math)
## Systems
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Algorithms
## Theory
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--
### Programming Paradigms
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
## Application
Project Title | Description | Author(s) | Repository
:-- | :-- | :--: | :--

261
README.md
View File

@ -18,7 +18,7 @@
- [Summary](#summary)
- [Curriculum](#curriculum)
- [Prerequisites](#prerequisites)
- [Intro CS](#intro-cs)
- [Introduction to Computer Science](#introduction-to-computer-science)
- [Core CS](#core-cs)
- [Advanced CS](#advanced-cs)
- [Final project](#final-project)
@ -77,10 +77,10 @@ just remember that you can't purchase success!
# Curriculum
**Curriculum version**: `7.1.0` (see [CHANGELOG](CHANGELOG.md))
**Curriculum version**: `7.1.1` (see [CHANGELOG](CHANGELOG.md))
- [Prerequisites](#prerequisites)
- [Intro CS](#intro-cs)
- [Introduction to Computer Science](#introduction-to-computer-science)
- [Core CS](#core-cs)
- [Core programming](#core-programming)
- [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.
- 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.
Both are required, but feel free to skip straight to the second course when CS50 (the first course) moves away from C.
**Topics covered**:
imperative programming;
procedural programming;
C;
manual memory management;
basic data structures and algorithms;
Python;
SQL;
basic HTML, CSS, JavaScript;
and more.
`imperative programming`
`procedural programming`
`C`
`manual memory management`
`basic data structures and algorithms`
`Python`
`SQL`
`basic HTML, CSS, JavaScript`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
@ -132,20 +132,20 @@ Courses | Duration | Effort | Prerequisites
All coursework under Core CS is **required**, unless otherwise indicated.
### Core programming
**Topics covered**:
functional programming;
design for testing;
program requirements;
common design patterns;
unit testing;
object-oriented design;
Java;
static typing;
dynamic typing;
ML-family languages (via Standard ML);
Lisp-family languages (via Racket);
Ruby;
and more.
**Topics covered**:
`functional programming`
`design for testing`
`program requirements`
`common design patterns`
`unit testing`
`object-oriented design`
`Java`
`static typing`
`dynamic typing`
`ML-family languages (via Standard ML)`
`Lisp-family languages (via Racket)`
`Ruby`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
@ -164,21 +164,21 @@ Courses | Duration | Effort | Prerequisites
### Core math
**Topics covered**:
linear transformations;
matrices;
vectors;
`linear transformations`
`matrices`
`vectors`
mathematical proofs;
number theory;
differential calculus;
integral calculus;
sequences and series;
discrete mathematics;
basic statistics;
O-notation;
graph theory;
vector calculus;
discrete probability;
and more.
`number theory`
`differential calculus`
`integral calculus`
`sequences and series`
`discrete mathematics`
`basic statistics`
`O-notation`
`graph theory`
`vector calculus`
`discrete probability`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
@ -196,19 +196,19 @@ for how to progress through the course.
### Core systems
**Topics covered**:
boolean algebra;
gate logic;
memory;
machine language;
computer architecture;
assembly;
machine language;
virtual machines;
high-level languages;
compilers;
operating systems;
network protocols;
and more.
`boolean algebra`
`gate logic`
`memory`
`machine language`
`computer architecture`
`assembly`
`machine language`
`virtual machines`
`high-level languages`
`compilers`
`operating systems`
`network protocols`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
@ -222,17 +222,17 @@ Courses | Duration | Effort | Prerequisites
### Core theory
**Topics covered**:
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.
`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`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
@ -244,22 +244,22 @@ Courses | Duration | Effort | Prerequisites
### Core applications
**Topics covered**:
Agile methodology;
REST;
software specifications;
refactoring;
relational databases;
transaction processing;
data modeling;
neural networks;
supervised learning;
unsupervised learning;
OpenGL;
raytracing;
block ciphers;
authentication;
public key encryption;
and more.
`Agile methodology`
`REST`
`software specifications`
`refactoring`
`relational databases`
`transaction processing`
`data modeling`
`neural networks`
`supervised learning`
`unsupervised learning`
`OpenGL`
`raytracing`
`block ciphers`
`authentication`
`public key encryption`
`and more`
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
**Topics covered**:
debugging theory and practice;
goal-oriented programming;
GPU programming;
CUDA;
parallel computing;
object-oriented analysis and design;
UML;
large-scale software architecture and design;
and more.
`debugging theory and practice`
`goal-oriented programming`
`GPU programming`
`CUDA`
`parallel computing`
`object-oriented analysis and design`
`UML`
`large-scale software architecture and design`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
@ -304,11 +304,11 @@ Courses | Duration | Effort | Prerequisites
### Advanced math
**Topics covered**:
real analysis;
multivariable integrals;
multivariable differentials;
probability theory;
and more.
`real analysis`
`multivariable integrals`
`multivariable differentials`
`probability theory`
`and more`
Courses | Duration | Effort | Prerequisites
:-- | :--: | :--: | :--:
@ -319,20 +319,20 @@ Courses | Duration | Effort | Prerequisites
### Advanced systems
**Topics covered**:
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.
`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`
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
**Topics covered**:
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;
concept lattices;
game trees;
and more.
`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`
`concept lattices`
`game trees`
`and more`
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
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.
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!
- 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:
- [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!
![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:
- `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.
- `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.
- `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.
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.
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
* **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)
# 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)
- [MIT Open Courseware](http://ocw.mit.edu/courses/#electrical-engineering-and-computer-science)
- [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/)