├── .gitignore
├── LICENSE
├── PROJECTS.md
├── CONTRIBUTING.md
├── extras
├── curriculum_guidelines.md
├── courses.md
└── readings.md
├── REQUIREMENTS.md
├── FAQ.md
├── CHANGELOG.md
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | .idea
2 | *.swp
3 | *.swo
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2019 Open Source Society University
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/PROJECTS.md:
--------------------------------------------------------------------------------
1 | # Projects
2 | > Here, we are providing a list curated by the community of exercises and projects to practice and reinforce the skills we try to master.
3 |
4 | Projects created by OSSU's students for each course of our [**Computer Science**](https://github.com/ossu/computer-science) curriculum.
5 |
6 | For more project ideas, check the [Mega Project List](https://github.com/karan/Projects).
7 |
8 | - [Introduction to Computer Science](#introduction-to-computer-science)
9 | - [Programming](#programming)
10 | - [Math](#math)
11 | - [Systems](#systems)
12 | - [Theory](#theory)
13 | - [Applications](#applications)
14 |
15 | ## Introduction to Computer Science
16 | Project Title | Description | Author(s) | Repository
17 | :-- | :-- | :--: | :--
18 | Binary Machine | Convert decimal numbers to binary | [Eric Douglas](https://github.com/ericdouglas) | [binary-machine](https://github.com/ericdouglas/binary-machine)
19 | StalkHub | Stalk Github beautifully | [Aman Roy](https://github.com/aman-roy) | [StalkHub](https://github.com/aman-roy/StalkHub)
20 | Webliza | ELIZA in python with web interface | [Vipin Kumar](https://github.com/VipinindKumar) | [Webliza](https://github.com/VipinindKumar/Webliza)
21 |
22 |
23 | ## Programming
24 | Project Title | Description | Author(s) | Repository
25 | :-- | :-- | :--: | :--
26 |
27 | ## Math
28 | Project Title | Description | Author(s) | Repository
29 | :-- | :-- | :--: | :--
30 |
31 | ## Systems
32 | Project Title | Description | Author(s) | Repository
33 | :-- | :-- | :--: | :--
34 |
35 | ## Theory
36 | Project Title | Description | Author(s) | Repository
37 | :-- | :-- | :--: | :--
38 |
39 | ## Application
40 | Project Title | Description | Author(s) | Repository
41 | :-- | :-- | :--: | :--
42 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | # Contributor guidelines
2 |
3 | This project primarily uses GitHub for collaboration, however not all discussions are appropriate for GitHub.
4 | Please follow these guidelines:
5 | 1. If you need help with the *academic* content of a course or are having general technical difficulties, please do not use GitHub for this.
6 | The best place to ask these types of questions is on the [subreddit](https://www.reddit.com/r/opensourcesociety/).
7 | 2. If you have general problems with the program not specific to any course, such as preferring textbook-style learning over MOOCs,
8 | the subreddit is recommended as there people may be able to give you suggested alternatives.
9 | 3. If you have *specific* and *substantive* criticisms of the curriculum, i.e. problems related to the progression/content of courses it would be appropriate to [open an issue](https://help.github.com/articles/creating-an-issue/) and give us your suggestions.
10 | 4. If you have *non-substantive* updates to make to the curriculum, such as a course's URL having been moved, spelling/syntax errors, etc., please send a [pull request](https://help.github.com/articles/using-pull-requests/) to fix any mistakes that you have found.
11 | 5. If you want to customize the curriculum for yourself, do of course [fork this project](https://help.github.com/articles/fork-a-repo/).
12 | 6. If you want to suggest a new resource, send a pull request adding such resource to the [extras](https://github.com/open-source-society/computer-science/tree/master/extras) section.
13 |
14 | # Learning Git
15 |
16 | To be able to create high-quality pull requests, it is recommended that you learn how to use the Git version control system.
17 | One of the best primers on the subject is a free ebook called [Ry's Git Tutorial](https://www.amazon.com/dp/B00QFIA5OC/).
18 | If you prefer a course-style introduction, try [Introduction to Git and GitHub](https://www.udacity.com/course/how-to-use-git-and-github--ud775).
19 |
--------------------------------------------------------------------------------
/extras/curriculum_guidelines.md:
--------------------------------------------------------------------------------
1 | # Computer Science - Curricular Resources
2 |
3 | ## Accreditation Board for Engineering and Technology
4 |
5 | ABET, incorporated as the Accreditation Board for Engineering and Technology, Inc., is a non-governmental organization that accredits post-secondary education programs in applied and natural science, computing, engineering and engineering technology. As of October 2017, 3,852 programs are accredited, distributed over 776 universities and colleges in 31 countries. ABET is the recognized U.S. accreditor of college and university programs in applied and natural science, computing, engineering and engineering technology.
6 |
7 | [Program Criteria for Computer Science, Information Systems, and Information Technology Programs](http://www.abet.org/accreditation/accreditation-criteria/criteria-for-accrediting-computing-programs-2018-2019/#2)
8 |
9 | ## The Association for Computing Machinery
10 |
11 | The Association for Computing Machinery (ACM) is an international learned society for computing. It was founded in 1947, and is the world's largest scientific and educational computing society. The ACM is a non-profit professional membership group, with more than 100,000 members as of 2011.
12 |
13 | ### with
14 |
15 | ## Institute of Electrical and Electronics Engineers
16 |
17 | The Institute of Electrical and Electronics Engineers (IEEE) is a professional association formed in 1963 from the amalgamation of the American Institute of Electrical Engineers and the Institute of Radio Engineers. As of 2018, it is the world's largest association of technical professionals with more than 423,000 members in over 160 countries around the world. Its objectives are the educational and technical advancement of electrical and electronic engineering, telecommunications, computer engineering and allied disciplines.
18 |
19 | [Curriculum Guidelines for Undergraduate Programs in Computer Science](https://www.acm.org/binaries/content/assets/education/cs2013_web_final.pdf)
20 |
21 | [Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering](https://www.acm.org/binaries/content/assets/education/se2014.pdf)
22 |
23 | [Computer Engineering Curricula](https://www.acm.org/binaries/content/assets/education/ce2016-final-report.pdf)
24 |
--------------------------------------------------------------------------------
/REQUIREMENTS.md:
--------------------------------------------------------------------------------
1 | # OSSU-CS Academic Requirements
2 |
3 | This document contains the subjects (e.g. programming), topics (e.g. imperative programming), and projects the student must master to pass through this curriculum.
4 | The subject requirements are based on topics, rather than specific courses, because sometimes a certain course isn't available at the right time or doesn't fit the student's learning style.
5 |
6 | ## Subjects
7 |
8 | ### Programming
9 |
10 | #### Paradigms
11 | - Imperative programming
12 | - Procedural programming
13 | - Object-oriented programming
14 | - Functional programming
15 | - Logic programming
16 |
17 | #### Languages
18 | - C and/or C-derived languages
19 | - SQL
20 | - XML/HTML
21 | - JavaScript and/or related language
22 | - An ML-family language
23 | - A Lisp-family language
24 | - Python and/or Ruby
25 |
26 | ### Math
27 |
28 | - Logic and proofs
29 | - Discrete structures
30 | - Graph theory
31 | - Discrete probability
32 | - Linear algebra
33 |
34 | ### Systems
35 |
36 | - Memory
37 | - Caching
38 | - Virtualization
39 | - Concurrency
40 | - Compilers
41 | - Assembly
42 | - Networking
43 |
44 | ### Theory
45 |
46 | - Data structures
47 | - Sorting
48 | - Searching
49 | - Divide and conquer
50 | - Algorithms on graphs
51 | - Greedy algorithms
52 | - Trees
53 | - P and NP
54 |
55 | ### Applications
56 |
57 | - Software product management
58 | - REST
59 | - Databases
60 | - Computer graphics
61 | - Cybersecurity
62 | - Machine learning
63 |
64 | ## Projects
65 |
66 | Students are required to complete a project at the end of [Core CS](README.md#core-cs) and at the end of [Advanced CS](README.md#advanced-cs).
67 |
68 | For Core CS, students have two options:
69 | - They can use the Capstone course at the end of [Core applications](#core-applications) as their Core CS Project, in which case they are not required to share their project code.
70 | - They can skip that Capstone project and make their own project, in which case they *are* required to share the project code.
71 |
72 | For the Advanced CS Project (also known as the Final Project), students again have two options:
73 | - They can take one of the Specializations under [Advanced applications](#advanced-applications), all of which include Capstone Projects. Students *must* share their project code unless the course's honor code forbids it.
74 | - They can create their own Final Project, and must share the project code to be evaluated by the community.
75 |
--------------------------------------------------------------------------------
/FAQ.md:
--------------------------------------------------------------------------------
1 | # Frequently Asked Questions
2 |
3 | This page answers some questions that we frequently receive about the curriculum.
4 | If you have questions that aren't answered here, try asking through one of our [community channels](README.md#community).
5 | If it seems important enough or we get asked that question a lot, we will probably add it here.
6 |
7 | Alternatively, you could [contribute](#CONTRIBUTING.md) an answer yourself.
8 |
9 | ## Contents
10 |
11 | - [Are Coursera courses free to access?](#are-coursera-courses-free-to-access)
12 | - [Does every resource in the main curriculum have to be free?](#does-every-resource-in-the-main-curriculum-have-to-be-free)
13 | - [In what order should I take the courses?](#in-what-order-should-i-take-the-courses)
14 | - [Is it necessary to purchase the Verified Upgrade for edX courses?](#is-it-necessary-to-purchase-the-verified-upgrade-for-edx-courses)
15 | - [Why do you recommend skipping the second half of CS50?](#why-do-you-recommend-skipping-the-second-half-of-cs50)
16 | - [Why doesn't the curriculum cover/ignore topic X?](#why-doesnt-the-curriculum-coverignore-topic-x)
17 | - [Why is the curriculum missing some pre-requisites?](#why-is-the-curriculum-missing-some-pre-requisites)
18 |
19 | ## Questions
20 |
21 | ### Are Coursera courses free to access?
22 |
23 | Some courses that require payment to access probably do exist on Coursera, but we don't put those on our curriculum.
24 | All Coursera courses that we put on the curriculum must, at minimum, be **free to audit**.
25 | For some courses, all course features are available for free;
26 | for others (especially those that are part of a specialization), you may only be able to access the lecture videos.
27 | (If you find the policies have changed for any courses on our curriculum, please tell us!)
28 |
29 | Unfortunately, for some courses, Coursera's interface is [very aggressive](https://darkpatterns.org/) about convincing you that you have to pay.
30 |
31 | You may see something like this on the course page:
32 |
33 |
34 |
35 | When attempting to enroll in such a course:
36 | - Click the blue "Enroll" or "Enroll Now" button.
37 | - A pop-up will appear.
38 | - **Do not click** "Start Free Trial", unless you do want to pay.
39 | - Find the text that says "Audit this course" at the bottom.
40 | - Click **Audit**.
41 |
42 | 
43 |
44 | ### Does every resource in the main curriculum have to be free?
45 |
46 | Yes, because we have to draw a line.
47 | As soon as we require paid resources in the main curriculum, we might as well tell people to pay half a million dollars to attend a university.
48 | We are an Internet-based community of learners, not a business, so free is the most sensible price and ensures that the only price you need pay is the price of Internet access.
49 |
50 | At the same time, we recognize that education is a scarce resource and therefore requires payment to instructors to make it sustainable in the long term.
51 | Therefore, we respect the business model of websites like edX, which make their materials free but with some paid add-ons, like official certificates or extra interaction with course instructors.
52 |
53 | So we only require that the *learning materials* of a resource be free to access, not that every possible add-on be free.
54 | It would be ideal if graded assignments were always free but if we had this requirement, we would have to exclude any resource that doesn't have graded assignments at all.
55 | Plus, there are other ways to get feedback on your work, and OSSU is a do-it-yourself education.
56 |
57 | ### In what order should I take the courses?
58 |
59 | You have a few different options:
60 | - You can progress linearly from top to bottom of the page.
61 | - You can progress linearly through each individual section, but studying different sections in parallel.
62 | - You can design your own custom progression using the pre-requisites to guide you.
63 |
64 | We have designed the curriculum to work for any of the above three styles.
65 |
66 | ### Is it necessary to purchase the Verified Upgrade for edX courses?
67 |
68 | If you just want to watch the videos, it is never necessary for any edX course on our curriculum.
69 |
70 | CS50 doesn't use edX's grading system; it grades all assignments for free.
71 |
72 | The [Software Development](https://www.edx.org/micromasters/software-development) courses have mostly free quizzes and assignments, but their Final Projects will only be graded by a human if you pay.
73 |
74 | ### Why do you recommend skipping the second half of CS50?
75 |
76 | The strongest and most useful part of CS50 is the part where they teach C.
77 | We are retaining this in the curriculum for now because it is one of the few chances the student has to play with manual memory management in a (relatively) low-level language.
78 | By learning C, students will also have a much easier time getting through the following course, Nand2Tetris.
79 |
80 | That being said, feel free to finish CS50 if you like it and want to.
81 |
82 | ### Why doesn't the curriculum cover/ignore topic X?
83 |
84 | We have several goals that we have to balance:
85 | - Ensure students learn the timeless principles of computer science in the best possible way, pedagogically speaking.
86 | - Ensure students are given sufficient knowledge of today's systems to be employable in the near future.
87 | - Ensure students are exposed to enough cutting-edge knowledge that they won't be left behind when technology changes, which it always does.
88 | - Keep the curriculum brief enough that it can be completed in a reasonable amount of time.
89 |
90 | Therefore, not everything can be included, but we strive to be eclectic so that students are both employable and well-armed for change.
91 |
92 | ### Why is the curriculum missing some pre-requisites?
93 |
94 | The curriculum assumes two things:
95 | - You are reasonably fluent in English.
96 | - You have gotten through a standard high school curriculum that included physics and pre-calculus.
97 |
98 | Without these assumptions, the curriculum would be out of control with trying to fill in your knowledge gaps.
99 | But those who for whatever reason didn't get all the way through high school math and physics are in luck: you can find the content you need on [Khan Academy](https://www.khanacademy.org/).
100 |
101 | Of course, if you find that the curriculum is missing a pre-requisite for a course that isn't part of a normal high school curriculum, please let us know!
102 |
--------------------------------------------------------------------------------
/extras/courses.md:
--------------------------------------------------------------------------------
1 | # Computer Science - Great Courses
2 |
3 | This is a list of high-quality courses that, for one reason or another, didn't make it into the curriculum.
4 | The most common reasons are that the course isn't available often enough,
5 | or that there was an alternative that fit better into the curriculum.
6 |
7 | ## Programming
8 |
9 | Courses | Duration | Effort
10 | :-- | :--: | :--:
11 | [Introduction to Computational Thinking and Data Science](https://www.edx.org/course/introduction-computational-thinking-data-mitx-6-00-2x-2#!)| 10 weeks | 15 hours/week
12 | [Introduction to Computer Science (Udacity)](https://www.udacity.com/course/intro-to-computer-science--cs101)| 7 weeks | 10-20 hours/week
13 | [An Introduction to Interactive Programming in Python (Part 1)](https://www.coursera.org/learn/interactive-python-1)| 5 weeks | -
14 | [An Introduction to Interactive Programming in Python (Part 2)](https://www.coursera.org/learn/interactive-python-2)| - | -
15 | [Computing In Python, Part I: Fundamentals and Procedural Programming](https://www.edx.org/course/computing-in-python-i-fundamentals-and-procedural-programming-0) | 5 weeks | 10 hours/week
16 | [Computing In Python, Part II: Control Structures](https://www.edx.org/course/computing-in-python-ii-control-structures-0) | 5 weeks | 10 hours/week
17 | [Computing In Python, Part III: Data Structures](https://www.edx.org/course/computing-in-python-iii-data-structures-0) | 5 weeks | 10 hours/week
18 | [Computing In Python, Part IV: Objects & Algorithms](https://www.edx.org/course/computing-in-python-iv-objects-algorithms-0) | 5 weeks | 10 hours/week
19 | [Programming Basics](https://www.edx.org/course/programming-basics-iitbombayx-cs101-1x)| 9 weeks | 8 hours/week
20 | [Object-Oriented Programming](https://www.edx.org/course/object-oriented-programming-iitbombayx-cs101-2x)| 4 weeks | 8 hours/week
21 | [Object-Oriented Programming with Java (Part 1)](http://mooc.fi/courses/2013/programming-part-1/)| 6 weeks | -
22 | [Object-Oriented Programming with Java (Part 2)](http://mooc.fi/courses/2013/programming-part-2/)| 6 weeks | -
23 | [Introduction to Programming with MATLAB](https://www.coursera.org/learn/matlab)| - | -
24 | [Introduction to Functional Programming](https://www.edx.org/course/introduction-functional-programming-delftx-fp101x-0)| 7 weeks | 4-6 hours/week
25 | [The Structure and Interpretation of Computer Programs](http://cs61a.org/) | - | -
26 | [Introduction to Haskell](https://www.seas.upenn.edu/~cis194/fall16/) | 14 weeks | 4 hours/week
27 |
28 | ## Math
29 |
30 | Courses | Duration | Effort
31 | :-- | :--: | :--:
32 | [Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x-0) | 4 weeks | 2 hours/week
33 | [Introduction to Mathematical Thinking](https://www.coursera.org/learn/mathematical-thinking) | 10 weeks | 10 hours/week
34 | [Introduction to Probability and Data](https://www.coursera.org/learn/probability-intro)| - | -
35 | [Linear Algebra (Strang)](https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/index.htm) | - | -
36 |
37 | ## Systems
38 |
39 | Courses | Duration | Effort
40 | :-- | :--: | :--:
41 | [Computer Architecture](https://www.coursera.org/learn/comparch) | - | 5-8 hours/week
42 | [Operating System Engineering](http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-828-operating-system-engineering-fall-2012/) | - | -
43 | [Introduction to Operating Systems](https://www.udacity.com/course/introduction-to-operating-systems--ud923)| 8 weeks | 5-8 hours/week
44 | [Advanced Operating Systems](https://www.udacity.com/course/advanced-operating-systems--ud189)| 5 weeks | 5-8 hours/week
45 | [Computer Networking](https://www.udacity.com/course/computer-networking--ud436) | 12 weeks | 5-8 hours/week
46 |
47 | ## Theory
48 |
49 | Courses | Duration | Effort
50 | :-- | :--: | :--:
51 | [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1) | 6 weeks | 6-12 hours/week
52 | [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2) | 6 weeks | 6-12 hours/week
53 | [Analysis of Algorithms (Sedgewick)](https://www.coursera.org/learn/analysis-of-algorithms) | 6 weeks | 6-8 hours/week
54 | [Analysis of Algorithms (Skiena)](http://www3.cs.stonybrook.edu/~skiena/373/) | 15 weeks | 6-8 hours/week
55 | [Programming Challenges (Skiena)](http://www3.cs.stonybrook.edu/~skiena/392/) | 14 weeks | 6-8 hours/week
56 | [Data Structures and Algorithms (Specialization)](https://www.coursera.org/specializations/data-structures-algorithms) | 25 weeks | 3-10 hours/week
57 | [Algorithmic Thinking (Part 1)](https://www.coursera.org/learn/algorithmic-thinking-1/) | - | -
58 | [Algorithmic Thinking (Part 2)](https://www.coursera.org/learn/algorithmic-thinking-2/) | - | -
59 | [Statistical Mechanics: Algorithms and Computations](https://www.coursera.org/learn/statistical-mechanics/) | - | -
60 | [Approximation Algorithms Part I](https://www.coursera.org/learn/approximation-algorithms-part-1/) | - | -
61 | [Approximation Algorithms Part II](https://www.coursera.org/learn/approximation-algorithms-part-2/) | - | -
62 |
63 | ## Applications
64 |
65 | Courses | Duration | Effort
66 | :-- | :--: | :--:
67 | [Using Databases with Python](https://www.coursera.org/learn/python-databases) | 5 weeks | 2-3 hours/week
68 | [Database Systems](https://scs.hosted.panopto.com/Panopto/Pages/Sessions/List.aspx#folderID=%22ed2ee867-9610-4bad-94af-5d12c2ea47cd%22) | - | 27 hours
69 | [Database Management Essentials](https://www.coursera.org/learn/database-management) | 7 weeks | 4-6 hours/week
70 | [Intro to Artificial Intelligence](https://www.udacity.com/course/intro-to-artificial-intelligence--cs271)| 16 weeks | 6-10 hours/week
71 | [Intro to Machine Learning](https://www.udacity.com/course/intro-to-machine-learning--ud120)| 10 weeks | 6-10 hours/week
72 | [Machine Learning for Data Science and Analytics](https://www.edx.org/course/machine-learning-data-science-analytics-columbiax-ds102x-0)| 5 weeks | 7-10 hours/week
73 | [Processing Big Data with Azure HDInsight](https://www.edx.org/course/processing-big-data-azure-hdinsight-microsoft-dat202-1x-0)| 5 weeks | 3-4 hours/week
74 | [Big Data Science with the BD2K-LINCS Data Coordination and Integration Center](https://www.coursera.org/course/bd2klincs)| 7 weeks | 4-5 hours/week
75 |
76 | ## Tools
77 |
78 | Courses | Duration | Effort
79 | :-- | :--: | :--:
80 | [How to Use Git and GitHub](https://www.udacity.com/course/how-to-use-git-and-github--ud775) | 3 weeks | 2-3 hours/week
81 |
82 |
83 | # Online Learning - Great Courses
84 |
85 | Courses | Duration | Effort
86 | :-- | :--: | :--:
87 | [Learning How to Learn](https://www.coursera.org/learn/learning-how-to-learn) | 4 weeks | 2 hours/week
88 | [Mindshift](https://www.coursera.org/learn/mindshift) | 4 weeks | 2 hours/week
89 |
--------------------------------------------------------------------------------
/extras/readings.md:
--------------------------------------------------------------------------------
1 | # Computer Science - Great Readings
2 |
3 | This document consists of great books or articles on computer science.
4 | Some are here because there is a course covering the same material;
5 | some are just great books that you should read at some point in your career.
6 |
7 | Once you have made it through most of the curriculum, knowing whether a book is worth your time will become easier.
8 | Or, if you are struggling in one of the courses, perhaps reading a book on the subject will help.
9 |
10 | ## Programming
11 |
12 | Name | Author(s)
13 | :-- | :--:
14 | [Introduction to Computation and Programming Using Python 2e](https://www.amazon.com/Introduction-Computation-Programming-Using-Python/dp/0262529629/) | John V. Guttag
15 | [Think Python 2e](http://greenteapress.com/wp/think-python-2e/) | Allen B. Downey
16 | [How to Design Programs](https://www.htdp.org/) | Matthias Felleisen, Robert Bruce Findler, Matthew Flatt, Shriram Krishnamurthi
17 | [Structure and Interpretation of Computer Programs](https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book.html) | Hal Abelson, Jerry Sussman, Julie Sussman
18 | [Concepts, Techniques, and Models of Computer Programming](https://www.amazon.com/gp/product/0262220695) | Peter Van Roy, Seif Haridi
19 | [Design Patterns: Elements of Reusable Object-Oriented Software](https://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612) | Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
20 | [Refactoring](https://www.refactoring.com/) | Martin Fowler
21 | [Clean Code](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882) | Robert Martin
22 | [Code Complete 2e](https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670) | Steve McConnell
23 | [The Pragmatic Programmer](https://www.amazon.com/Pragmatic-Programmer-Journeyman-Master/dp/020161622X) | Andrew Hunt, David Thomas
24 | [Programming Languages: Application and Interpretation](http://cs.brown.edu/~sk/Publications/Books/ProgLangs/) | Shriram Krishnamurthi
25 | [Programming and Programming Languages](https://papl.cs.brown.edu/2018/) | Shriram Krishnamurthi, Benjamin S. Lerner, Joe Gibbs Politz
26 |
27 | ## Math
28 |
29 | Name | Author(s)
30 | :-- | :--:
31 | [Calculus Made Easy](http://www.gutenberg.org/ebooks/33283) | Silvanus P. Thompson
32 | [Ximera](https://ximera.osu.edu/): Interactive Calculus Textbooks | [Ximera team](https://ximera.osu.edu/about/team)
33 | [Discrete Mathematics with Applications (4th Edition)](http://www.amazon.com/Discrete-Mathematics-Applications-Susanna-Epp/dp/0495391328/) | Susanna S. Epp
34 | [Discrete Mathematics: An Open Introduction](http://discrete.openmathbooks.org/dmoi/) | Oscar Levin
35 | [Applied Discrete Structures](http://faculty.uml.edu/klevasseur/ads2/) | Alan Doerr, Ken Levasseur
36 | [Grinstead and Snell’s Introduction to Probability](https://math.dartmouth.edu/~prob/prob/prob.pdf) |Charles M. Grinstead, J. Laurie Snell
37 | [Introduction to Linear Algebra](https://www.amazon.com/Introduction-Linear-Algebra-Gilbert-Strang/dp/0980232775/) | Gilbert Strang
38 |
39 | ## Systems
40 |
41 | Name | Author(s)
42 | :-- | :--:
43 | [Computer Systems: A Programmer's Perspective (3rd Edition)](http://csapp.cs.cmu.edu/) | Randal E. Bryant, David R. O'Hallaron
44 | [Modern Operating Systems (4th Edition)](http://www.amazon.com/Modern-Operating-Systems-Andrew-Tanenbaum/dp/013359162X/) | Andrew S. Tanenbaum, Herbert Bos
45 | [Computer Organization and Design: The Hardware/Software Interface](https://www.amazon.com/gp/product/0124077269) | David Patternson, John Hennessy
46 | [Computer Networks (5th Edition)](http://www.amazon.com/Computer-Networks-5th-Andrew-Tanenbaum/dp/0132126958/) | Andrew S. Tanenbaum, David J. Wetherall
47 | [Computer Networking: A Top-Down Approach (6th Edition)](https://www.amazon.com/Computer-Networking-A-Top-Down-Approach/dp/1292153598/) | James F Kurose, Keith W Ross
48 | [Distributed Systems: Principles and Paradigms](https://www.amazon.com/Distributed-Systems-Principles-Andrew-Tanenbaum/dp/153028175X) | Andrew Tanenbaum
49 | [Distributed Systems Reading Group](http://dsrg.pdos.csail.mit.edu/papers/) | Various
50 | [System Design: Design large-scale systems](https://github.com/donnemartin/system-design-primer) | Various
51 |
52 | ## Theory
53 |
54 | Name | Author(s)
55 | :-- | :--:
56 | [Introduction to Computing: Explorations in Language, Logic, and Machines](http://www.computingbook.org/) | David Evans
57 | [Introduction to the Theory of Computation](https://www.amazon.com/Introduction-Theory-Computation-Michael-Sipser/dp/113318779X) | Michael Sipser
58 | [Introduction to Algorithms (3rd Edition)](http://www.amazon.com/Introduction-Algorithms-3rd-MIT-Press/dp/0262033844/) | Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein
59 | [The Algorithm Design Manual](https://www.amazon.com/gp/product/1848000693) | Steven Skiena
60 | [Category Theory: A Gentle Introduction](http://www.logicmatters.net/resources/pdfs/GentleIntro.pdf) | Peter Smith
61 | [Category Theory for Programmers: The Preface](https://bartoszmilewski.com/2014/10/28/category-theory-for-programmers-the-preface/) | Bartosz Milewski
62 | [An Introduction to Information Retrieval](https://nlp.stanford.edu/IR-book/pdf/irbookonlinereading.pdf) | Christopher D. Manning, Prabhakar Raghavan, Hinrich Schütze
63 |
64 | ## Applications
65 |
66 | Name | Author(s)
67 | :-- | :--:
68 | [Architecture of a Database System](http://db.cs.berkeley.edu/papers/fntdb07-architecture.pdf) | Joseph M. Hellerstein, Michael Stonebraker, James Hamilton
69 | [Readings in Database Systems](http://www.redbook.io/) | Peter Bailis, Joseph M. Hellerstein, Michael Stonebraker, editors
70 | [Database Management Systems](https://www.amazon.com/gp/product/0072465638) | Raghu Ramakrishnan, Johannes Gehrke
71 | [Transaction Processing: Concepts and Techniques](https://www.amazon.com/Transaction-Processing-Concepts-Techniques-Management/dp/1558601902) | Jim Gray, Andreas Reuter
72 | [Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World](https://www.amazon.com/Data-Reality-Perspective-Perceiving-Information/dp/1935504215) | William Kent
73 | [The Architecture of Open Source Applications](http://aosabook.org/en/) | Michael DiBernardo (editor)
74 | [An Introduction to Statistical Learning](https://www-bcf.usc.edu/~gareth/ISL/) | Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani
75 | [Deep Learning](http://www.deeplearningbook.org/) | Ian Goodfellow, Yoshua Bengio and Aaron Courville
76 | [Bayesian Reasoning and Machine Learning](http://web4.cs.ucl.ac.uk/staff/D.Barber/pmwiki/pmwiki.php?n=Brml.HomePage) | David Barber
77 | [Language Implementation Patterns](https://www.amazon.com/gp/product/193435645X) | Terence Parr
78 | [Compilers: Principles, Techniques, and Tools (2nd Edition)](http://www.amazon.com/Compilers-Principles-Techniques-Tools-2nd/dp/0321486811/) | Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman
79 | [Compiler Construction](http://www.ethoberon.ethz.ch/WirthPubl/CBEAll.pdf) | Niklaus Wirth
80 | [The Mythical Man-Month](https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/) | Fred Brooks, Jr.
81 | [Physically Based Rendering: From Theory To Implementation](http://www.pbr-book.org/) | Matt Pharr, Wenzel Jakob, and Greg Humphreys
82 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Change Log
2 |
3 | All notable changes to this project will be documented in this file.
4 | This project adheres *in spirit* to [Semantic Versioning](http://semver.org/):
5 | - "MAJOR" updates correspond to changing the topics studied within a subject
6 | - "MINOR" updates correspond to changing courses without changing the topics
7 | - "PATCH" updates correspond to aesthetic and non-essential additions/removals or changing order of classes for better progression
8 |
9 | ## [8.0.0] 2017-11-01
10 | ### Added
11 | - extras/readings: "The System Design Primer"
12 | - extras/readings: "Category Theory for Programmers: The Preface"
13 | - extras/readings: "Programming Languages: Application and Interpretation"
14 | - extras/readings: "Programming and Programming Languages"
15 | - CONTRIBUTING: "Learning Git" section to the contributor guidelines page
16 | - Core Math: Added "Essence of Linear Algebra" as pre-requisite to "Linear Algebra: Foundations to Frontiers"
17 |
18 | ### Updated
19 | - Moved "Introduction to Mathematical Thinking" to extras/courses
20 | - Moved "Hack the Kernel" (ops-class) from Advanced Systems to Core Systems
21 | - Core Systems: "Operating Systems: Three Easy Pieces" is no longer required, but is recommended as companion text to "Hack the Kernel"
22 | - Core Theory: Replaced Coursera with Lagunita as the host for Stanford Algorithms, since Coursera uses dark patterns to trick users into paying
23 |
24 | ## [7.2.2] 2017-07-02
25 | ### Added
26 | - "Haskell Programming from First Principles" book as a paid alternative to learn Haskell
27 | - "Think Python" to extras/readings
28 | - FAQ entries and links under relevant courses
29 | - "Category Theory: A Gentle Introduction" to extras/readings
30 |
31 | ## [7.2.1] 2017-05-14
32 | ### Updated
33 | - Networking course should take 8 weeks to complete
34 | - Fixed spelling error
35 |
36 | ### Added
37 | - Introduction to Haskell course to [extras/courses](extras/courses.md)
38 |
39 | ## [7.2.0] 2017-04-28
40 | ### Added
41 | - Software Testing course
42 | - Link to Stanford Lagunita's Algorithms: Design and Analysis
43 | - Added link to the section on parametric equations and polar coordinates from MIT's Single Variable Calculus course in order to properly prepare students for Multivariable Calculus
44 |
45 | ## [7.1.2] 2017-04-22
46 | ### Updated
47 | - Add link to Mega Project List in the introduction of the Projects section
48 |
49 | ## [7.1.1] 2017-04-11
50 | ### Updated
51 | - Final touch to release
52 |
53 | ## [7.1.0] 2017-04-10
54 | ### Updated
55 | - Reverted reformat of programming languages course
56 |
57 | ### Added
58 | - Reliable Distributed Algorithms courses
59 | - New Introduction to CS course
60 |
61 | ## [7.0.2] 2017-03-30
62 | ### Updated
63 | - Moved optional online learning courses to extras/courses in a new section
64 | - Moved alternate computer architecture course to extras/courses
65 |
66 | ### Added
67 | - Scala specialization under Advanced applications
68 |
69 | ### Removed
70 | - Removed all but one choice for required readings to make the curriculum simpler
71 |
72 | ## [7.0.1] 2017-03-11
73 | ### Updated
74 | - Fixed link to Bradfield's DIY computer science page
75 |
76 | ### Added
77 | - Note under Calculus One with links to errata and course progression recommendations
78 | - Optional courses under extras:
79 | - Strang's course on linear algebra
80 | - Berkeley's Structure and Interpretation of Computer Programs
81 | - Optional readings under extras:
82 | - Van Roy's advanced programming book
83 | - P&H's computer architecture book
84 | - Skiena's algorithms book
85 | - Strang's linear algebra book
86 | - Database Management Systems book
87 | - Tarr's book on creating your own Domain-specific language
88 | - Readings from various authors on distributed systems
89 |
90 | ## [7.0] 2017-03-09
91 | Complete overhaul of program structure
92 |
93 | ### Updated
94 | - Clarified contributor guidelines and moved them to separated file
95 | - Switched from many subjects to just four subjects with many topics
96 | - Consolidated free-books.md and paid-books.md into readings.md
97 | - Consolidated free-courses.md and paid-courses.md into courses.md
98 | - Replace old "How to Code" with new "How to Code" (Software Development MicroMasters)
99 | - Replace Princeton Algorithms (moved to [alternative courses](#extras/courses.md)) with Stanford Algorithms
100 |
101 | ### Added
102 | - Indicate prerequisites for all courses
103 | - Requirements: subject/topic requirements and project requirements
104 | - Required readings on Haskell, Prolog, Operating Systems
105 | - Courses: Dan Grossman's Programming Languages
106 | - Courses: From Nand to Tetris
107 | - Elective course: Intro to Parallel Programming
108 | - Elective course: LAFF: Programming for Correctness
109 | - Elective course: Introduction to Mathematical Thinking
110 | - Elective courses: Electricity and Magnetism
111 | - Elective courses: MIT's Computation Structures
112 | - Elective course: Multivariable Calculus
113 | - Elective course: ops-class.org
114 | - Elective course: Automata Theory
115 | - Elective course: Introduction to Logic
116 | - Elective course: Computational Geometry
117 | - Elective course: Formal Concept Analysis
118 | - Elective course: Game Theory
119 | - Elective specializations:
120 | - Robotics
121 | - Data Mining
122 | - Big Data
123 | - Internet of Things
124 | - Cloud Computing
125 | - Full Stack Web Development
126 | - Data Science
127 | - Pro specializations:
128 | - Mastering Software Development in R
129 | - Artificial Intelligence Engineer
130 | - Machine Learning Engineer
131 | - Cybersecurity
132 | - Android Developer
133 |
134 | ### Removed
135 | - Removed many dead links and obsolete courses
136 | - Removed per-course project requirement
137 | - Course: Object-Oriented Programming in Java
138 | - Course: Functional Programming in Scala
139 | - Course: Computer Architecture (but left as a footnote)
140 | - Course: Intro to Theoretical Computer Science
141 | - Course: Software Processes and Agile Practices
142 | - Course: Operating Systems & System Programming
143 | - Course: Introduction to Cyber Security
144 | - Course: Parallel Computer Architecture and Programming
145 | - Course: UX Design for Mobile Developers
146 |
147 | ## [6.0] 2016-10-09
148 | ### Updated
149 | - Put Calculus One before and together with Mathematics for Computer Science
150 | - Improve text in "Order of the classes"
151 |
152 | ### Added
153 | - Create public Trello board with the new curriculum version
154 | - Create the section "How to track and show your progress" in "How to use this guide"
155 | - Add PROJECTS.md file
156 | - Copy all sections of curriculum to PROJECTS.md
157 |
158 | ### Removed
159 | - Remove "Next Goals" section
160 | - Remove reference to OSSU web app
161 |
162 | ## [5.1.0] 2016-08-20
163 | Update to latest version of Math for Computer Science:
164 |
165 | ### Updated
166 | - Section: **Math (Discrete Math)**
167 | - Mathematics for Computer Science
168 |
169 | ## [5.0.0] 2016-08-20
170 | Due to removed course, we had the following updates:
171 |
172 | ### Removed
173 | - Section: **Natural Language Processing**
174 | - Natural Language Processing
175 |
176 | ### Added
177 | - Section: **Natural Language Processing**
178 | - Introduction to Natural Language Processing
179 |
180 | ## [4.1.0] 2016-08-05
181 | Due to Coursera's platform changes, we had the following updates:
182 | ### Fixed
183 | - Section: **Big Data**
184 | - Introduction to Big Data
185 |
186 | ## [4.0.0] 2016-07-30
187 | Due to Coursera's platform changes, we had the following updates:
188 |
189 | ### Removed
190 | - Section: **Theory**
191 | - Automata
192 | - Section: **Math (Linear Algebra)**
193 | - Coding the Matrix: Linear Algebra through Computer Science Applications
194 | - Section: **Parallel Computing**
195 | - Heterogeneous Parallel Programming
196 | - Section: **Natural Language Processing**
197 | - Natural Language Processing
198 |
199 | ### Fixed
200 | - Section: **Computer Networks**
201 | - Computer Networks
202 | - Section: **Compilers**
203 | - Compilers
204 |
205 | ### Added
206 | - Section: **Theory**
207 | - Intro to Theoretical Computer Science
208 | - Section: **Math (Linear Algebra)**
209 | - Linear Algebra - Foundations to Frontiers
210 | - Section: **Parallel Computing**
211 | - Parallel Computer Architecture and Programming
212 | - Section: **Natural Language Processing**
213 | - Natural Language Processing
214 |
215 | ## [3.0.0] 2016-05-04
216 | ### Removed
217 | - Section: **Introduction to Computer Science**:
218 | - Introduction to Computer Science and Programming Using Python
219 | - From Nand to Tetris (Part 1)
220 |
221 | ### Added
222 | - Section: **Introduction to Computer Science**:
223 | - Introduction to Computer Science - CS50
224 |
225 | ## [2.0.1] 2016-04-04
226 | ### Fixed
227 | - Now students should enroll through our [web app](https://ossu.firebaseapp.com).
228 |
229 | ## [2.0.0] 2016-03-17
230 | ### Fixed
231 | - Program Design section course's names and links
232 |
233 | ### Removed
234 | - **Introduction to Computer Science**:
235 | - Introduction to Computer Science
236 | - Introduction to Computational Thinking and Data Science
237 | - **Algorithms**
238 | - Analysis of Algorithms
239 | - **Programming Paradigms**
240 | - Principles of Reactive Programming
241 | - **Math (Calculus)**
242 | - Multivariable Calculus
243 | - **Software Architecture**:
244 | - Web Application Architectures
245 | - **Software Engineering**:
246 | - Agile Development Using Ruby on Rails - Basics
247 | - Agile Development Using Ruby on Rails - Advanced
248 | - Startup Engineering
249 | - **Computer Architecture**:
250 | - The Hardware/Software Interface
251 | - **Operating Systems**:
252 | - Operating System Engineering
253 | - **Computer Networks**:
254 | - Introduction to Computer Networking
255 | - **Cryptography**:
256 | - Applied Cryptography
257 |
258 | **ps**: These removed courses are now in the [extras](https://github.com/ossu/computer-science/tree/master/extras) section.
259 |
260 | ## [1.3.12] 2016-03-17
261 | ### Added
262 | - How to collaborate: send new links to the extras section
263 |
264 | ## [1.3.11] 2016-03-06
265 | ### Fixed
266 | - Nand to Tetris: change name and url
267 | - UC Berkeley Agile development: change name and url
268 | - Direct links to specializations
269 |
270 | ## [1.3.10] 2016-03-06
271 | ### Fixed
272 | - Link from Systematic Program Design Part 2 course
273 |
274 | ## [1.3.9] 2015-11-09
275 | ### Fixed
276 | - Link for the correct Natural Language Processing course
277 |
278 | ## [1.3.8] 2015-11-07
279 | ### Added
280 | - Add "Project Suggestions" section with more references
281 |
282 | ## [1.3.7] 2015-11-01
283 | ### Removed
284 | - Removed project.md file, moved to **help** repo
285 |
286 | ## [1.3.6] 2015-10-22
287 | ### Added
288 | - Latest version of CS 162, Operating Systems and System Programming
289 |
290 | ## [1.2.6] 2015-10-19
291 | ### Added
292 | - Badge/Link to the Awesome list
293 |
294 | ## [1.2.5] 2015-10-16
295 | ### Fixed
296 | - Fix name of the section and add a hyperlink to it.
297 |
298 | ## [1.2.4] 2015-10-14
299 | ### Removed
300 | - Removed citation about public commitment
301 |
302 | ## [1.2.3] 2015-10-12
303 | ### Changed
304 | - Updated the prerequisite section for more clarity
305 |
306 | ## [1.2.2] 2015-10-12
307 | ### Fixed
308 | - New link to issue intended for students' enrollment
309 |
310 | ## [1.2.1] 2015-10-11
311 | ### Added
312 | - Article Git - the simple guide to the prerequisite section
313 |
314 | ##[1.1.1] 2015-10-11
315 | ### Fixed
316 | - Fix typos
317 | - As MOOC is a "Massive Open Online Course" MOOC course is redundant
318 | - Elaborated on "real problem"
319 | - Fixed a few small grammatical and wording errors
320 |
321 | ## [1.1.0] 2015-10-08
322 | ### Added
323 | - Motivation & Preparation section (optional resources)
324 | - Article: MIT Challenge
325 | - Course: Learning How to Learn
326 |
327 | ## [1.0.0] 2015-10-08
328 |
329 | Release of the first **complete** version of the Computer Science curriculum
330 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 |
5 | Path to a free self-taught education in Computer Science! 6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |