Code Monkey home page Code Monkey logo

open-source-cs's Introduction

The Open Source Computer Science Degree

This is a curated list of free courses from reputable universities like MIT, Stanford, and Princeton that satisfy the same requirements as an undergraduate Computer Science degree, minus general education.

Computer Science Basics

Courses School Duration Effort Frequency Prerequisites
Intro to Computer Science Harvard 10 weeks 10-20 hours/week self-paced none

Programming

Courses School Duration Effort Frequency Prerequisites
Java Programming: Solving Problems with Software Duke 4 weeks 4-8 hours/week twice a month none
Java Programming: Arrays, Lists, and Structured Data Duke 4 weeks 4-8 hours/week twice a month Java Programming: Solving Problems with Software
Object Oriented Programming in Java Duke 6 weeks 4-6 hours/week every week Java Programming: Arrays, Lists, and Structured Data
Data Structures and Performance Duke 6 weeks 6-10 hours/week every week Object Oriented Programming in Java
Java Programming: Principles of Software Design Duke 4 weeks 4-8 hours/week twice a month Java Programming: Arrays, Lists, and Structured Data
Java Programming: Build a Recommendation System Duke 4 weeks 3-6 hours/week once a month Java Programming: Principles of Software Design
Programming Languages, Part A UW 5 weeks 8-16 hours/week once a month Object Oriented Programming in Java
Programming Languages, Part B UW 3 weeks 8-16 hours/week once a month Programming Languages, Part A
Programming Languages, Part C UW 3 weeks 8-16 hours/week once a month Programming Languages, Part B

Math

Courses School Duration Effort Frequency Prerequisites
Calculus 1A: Differentiation MIT 12 weeks 6-10 hours/week self-paced pre-calculus
Calculus 1B: Integration MIT 15 weeks 6-10 hours/week self-paced Calculus 1A: Differentiation
Calculus 1C: Coordinate Systems & Infinite Series MIT 8 weeks 6-10 hours/week self-paced Calculus 1B: Integration
Linear Algebra - Foundations to Frontiers UT Austin 15 weeks 6-10 hours/week self-paced pre-calculus
Introduction to Probability and Data Duke 5 weeks 5-7 hours/week twice a month none
Intro to Statistics Udacity 8 weeks 5-7 hours/week self-paced none

Systems

Courses School Duration Effort Frequency Prerequisites
Build a Modern Computer from First Principles: From Nand to Tetris Hebrew University of Jerusalem 6 weeks 5 hours/week twice a month basic programming knowledge
Build a Modern Computer from First Principles: From Nand to Tetris II Hebrew University of Jerusalem 6 weeks 10-15 hours/week once a month Build a Modern Computer from First Principles: From Nand to Tetris
Introduction to Operating Systems Georgia Tech 8 weeks 5-8 hours/week self-paced Build a Modern Computer from First Principles: From Nand to Tetris II

Theory

Courses School Duration Effort Frequency Prerequisites
Computer Science: Algorithms, Theory, and Machines Princeton 10 weeks 2-5 hours/week once a month Calculus 1A (all), basic programming
Algorithms, Part I Princeton 6 weeks 6-12 hours/week once a month Computer Science: Algorithms, Theory, and Machines
Algorithms, Part II Princeton 6 weeks 6-12 hours/week once a month Algorithms, Part I

Applications

Courses School Duration Effort Frequency Prerequisites
Software Engineering: Introduction UBCx 6 weeks 8-10 hours/week self-paced Java Programming: Build a Recommendation System
Machine Learning Stanford 11 weeks 5-7 hours/week twice a month Linear Algebra - Foundations to Frontiers
Database Management Essentials CU 7 weeks 4-6 hours/week twice a month basic programming & CS knowledge
Cryptography I Stanford 7 weeks 5 hours/week once a month Linear Algebra - Foundations to Frontiers & Introduction to Probability and Data

Unix

Courses School Duration Effort Frequency Prerequisites
Linux Command Line Basics Udacity 1 week 5 hours/week self-paced none
The Unix Workbench JHU 4 weeks 4 hours/week once a month none

open-source-cs's People

Contributors

0xflotus avatar forrestknight avatar kevomeister avatar zubko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

open-source-cs's Issues

Missing license

When a project is open source, that means anybody can view, use, modify, and distribute your project for any purpose. These permissions are enforced through an open source license. https://opensource.guide/starting-a-project/

As there is currently no license associated with the project, it is not an "Open Science" anything. The term "open source" is being used as clickbait and nothing more. However, this is easy to fix. Open source the project by doing the following:

No matter which stage you decide to open source your project, every project should include the following documentation:
Open source license
README
Contributing guidelines
Code of conduct
https://opensource.guide/starting-a-project/

Here is a list of the licenses that you might choose from: https://help.github.com/articles/licensing-a-repository/
Here is the steps on how to add the license to the repository: https://help.github.com/articles/adding-a-license-to-a-repository/

It's super easy and it will make "Open Source CS" open source.

How do you want to receive suggestions?

While I think this is great idea and the courses so far look great, it would be interesting how you would want to accept contributions.

e.g.: I feel like the 'Applications' area could use some more topics like security, computer graphics, embedded systems.

Usually after the basics, students like to dive into topics they're interested in, so that might help.

Great work!

Accessibility

While this is an extremely useful resource (in my 7 years experience in learning to code, this is the best free resource I have encountered), you can only really peruse it through GitHub markdown in a slightly jarring, unresponsive table format. Putting this on a responsive, single page website with resources opening in a new tab might make it even better and accessible on any device. I have a React boilerplate, I can invest the time to do this. Thoughts?

Semester/Term Format Idea

It'd be cool to see a semester/term schedule format showing a certain number of courses taken per term.
This example adheres to the pre-reqs presented on the original repo and includes an estimated time completion for the whole degree

Term Schedule Idea

Time Estimations: 78 weeks (~ 1.5 years).
  • This assumes that the user abides by each term and waits until the term is completed to assume the "cool off period" and does not continue onwards to the next semester.
  • This assumes max cool off period of 3 weeks is assumed by user in between terms.



Term 1

(12 weeks)

Course Duration Schedule
1 Intro to Computer Science 10 Weeks M/W
2 Mathematical Thinking in Computer Science 6 Weeks M/W
3 Calculus 1A: Differentiation 12 Weeks T/TH
4 Java Programming: Solving Problems with Software 4 Weeks M/W/F
[if done with # 4 -> # 5]
5 Java Programming: Arrays, Lists, and Structured Data 4 Weeks M/W/F




Cool off period: up to 3 weeks


Term 2

(15 weeks)

Course Duration Schedule
1 Computer Science: Algorithms, Theory, and Machines 10 Weeks M/W
2 Linux Command Line Basics 1 Week M/W
3 UNIX Work Bench 4 Weeks M/W
[if done with # 2 and # 3 -> # 4]
4 Build a Modern Computer from First Principles: From Tetris to NAND 6 Weeks M/W
5 Calculus 1B: Integration 15 Weeks T/TH
6 Object Oriented Programming in Java 6 Weeks T/TH
[if done with # 6 -> # 7]
7 Data Structures and Performance 6 Weeks T/TH




Cool off period: up to 3 weeks


Term 3

(13 weeks)

Course Duration Schedule
1 Java Programming: Principles of Software Design 4 Weeks M/W/F
2 Java Programming: Building a Recommendation System 4 Weeks M/W/F
3 Calculus 1C: Coordinate Systems & Infinite Series 8 Weeks T/TH
[if done with # 3 -> # 4]
4 Introduction to Probability and Data 5 Weeks T/TH
5 Algorithms, Part 1 6 Weeks T/TH
[if done with # 5 -> # 6]
6 Algorithms, Part 2 6 Weeks T/TH
7 Build a Modern Computer from First Principles: From Tetris to NAND II 6 Weeks M/W
[if done with # 7 -> # 8]
8 Database Management Essentials 7 Weeks M/W




Cool off period: up to 3 weeks


Term 4

(15 weeks)

Course Duration Schedule
1 Linear Algebra - Foundations to Frontiers 15 Weeks T/TH
2 Intro to Statistics 8 Weeks T/TH
3 Programming Languages, Part A 5 Weeks M/W/F
[if done with # 3 -> # 4]
4 Programming Languages, Part B 3 Weeks M/W/F
[if done with # 4 -> # 5]
5 Programming Languages, Part C 3 Weeks M/W/F
7 Introduction to Operating Systems 8 Weeks T/TH
[if done with # 7 -> # 8]
8 Software Engineering: Introduction 6 Weeks M/W




Cool off period: up to 3 weeks


Term 5

(11 weeks)

Course Duration Schedule
1 Machine Learning 11 Weeks M/W
2 Cryptography 1 8 Weeks T/TH



Graduation! 💯 💯

Why not Harvard's CS50?

I recently finished HarvardX's Introduction to Computer Science (CS50), and after doing a handful of MOOCs it really is the best course I've done, it has a huge and helpful community and the materials are amazing, not to mention the online lectures.

Some people might think using C in an introductory course is just an awful idea (and I did), but in retrospect, it gave me a low-level understanding before python that's incredibly useful, and they sure make it way easier than normal C courses.

I can totally suggest it as a replacement for Intro to CS by UVA.

edX paywall

Since the beginning of 2019 edX is no longer giving free access to most of their courses, but "audit" access will now expire after a certain amount of time (sometimes as little as 2 days), unless you upgrade to the "verified track", which is of course paid.

How does this affect your "open source" course list? If edX is no longer "open source", this list is significantly shrinked unfortunately. 😞

Clarity

Just for clarification, is there any specific order one should follow while doing the courses?

Add * for suggested classes / branching sections

I watched your video, and I get that it's for classes that you need to take for the degree, but maybe you could add classes (like the networking and cybersecurity) but have an * for the section or class to show that it's optional. This would also benefit in those that need to take the pre-cal or algebra like someone else mentioned.

Also I saw that it was a Java based curriculum , maybe have branching sections added for different paths, such as python or c, etc. By having a description under the Section header that links to the path you would rather take.

I really like the idea of the open source degree, but I feel it lacks a bit of diversity in options for the people who want to branch off a bit. I'm not sure if I am looking at it from a different viewpoint or not

Consider Adding learncs.online

Thanks for curating this great resource!

I teach CS1 at the University of Illinois—which is top-ranked for CS in the US. We've recently published all of our CS1 material online here: https://www.learncs.online/. This is a free entirely browser-based course in either Java or Kotlin with some novel features compared with other sites—interactive live coding walkthroughs, code quality and correctness feedback, debugging exercises, a large community of instructors, and so on. There's an overview of our innovations here: https://www.learncs.online/best

Take a look and let me know what you think! I'd be excited if you chose to add this to your list.

Linked In recommendation

Once, all courses are passed, would it be possible for you to give us a recommendation in Linked In for successfully graduating or something like that?

Object Oriented Programming in Java and Data Structures and Performance Classes are Outdated

Both of these courses use applets which haven't been supported since java version 8 and apparently the code they provide is still buggy when you use version 8. It looks like the the next "Java Programming" course teaches much the same things as the Object Oriented Programming course but without the GUI. Maybe this course should be replaced with another Java course that implements GUI design.

"UW" is too general

Washington and Wisconsin both have top tier public universities that abbreviate as "UW". The README should be updated to specify that it is referring to the University of Washington in Seattle. Both UWs are also highly ranked for Computer Science which furthers confusion.

Also, the other UW has plenty of great coursework that's free. Here's an into to systems: http://pages.cs.wisc.edu/~adilgsm/cs252/Fall2017/index.html

UBC Software Engineering Replacement

Hey Forrest,

As I mentioned in my PR (#43) UBC's Software Engineering is no longer offered on EDX. However, Berkeley offers a two part course on Software as a Service and Agile Development. I'd be happy to place those classes in UBC's place if you would like. Here's a link to the first course if you'd like to look into it further: https://courses.edx.org/courses/course-v1:BerkeleyX+CS169.1X+2T2018/course/

Really awesome that you're doing this, let me know if there's anything I can do to help!

Adding recommended books?

Given the resemblance of the curriculum to college classes, there are textbooks that would go very well with each category of the curriculum. This would allow people the option to go more in depth into the topics. The foundation of computer science doesn't change much over time so the knowledge in the books will remain viable in the future. Another advantage is that it's generally easier to judge the quality of these books, many people already read and reviewed these books on sites like Amazon.

It will also give people alternatives to these classes. While these classes are great, the platforms that host them (edX, Coursera, etc.) might place more restrictions on free users in the future. This was evident when edX limited audit time and put exercises/problem sets for some classes behind a pay wall.

Add Introduction to Discrete Mathematics?

In the Math portion of the Open-source computer degree, I would add Introduction to Discrete Mathematics from the University of San Diego. Since discrete math does not require any prereq. and it is very crucial for any computer scientist!

Here's the link from coursera: Discrete Math

Would like to talk and interact with other takers

Hello people, I am seriously considering taking this path. But I want to discuss with like minded folks about it. Can you make a group or something so I can interact with you guys about how to go with it? Thanks

Make it easier for newbies to get started

I don't know which to start with and if I should go one by one or take multiple ones together. And in case taking multiple courses together then I am not sure which to take together either. Maybe if there is a program that orders the courses like a semester to make it clearer and easier for newbies to get started.

Use Python instead of Java?

More Universities are using python because of the learning curve for students. We could possibly add alternatives to the programming courses.

More resources for New Learners

Assuming that a lot of people who look at this aren't doing a lot of programming and CS work yet, it's unlikely that they know how to use git and/or navigate github. For example, someone not familiar with github wouldn't necessary know to check the issues tab if they need some help. Maybe there could be some PDF or something they can read that can help them get started with those things?

The same could theoretically be said for texteditors/IDEs. The courses tend to explain how to set one up for the course, but there's a lot of conflict between courses on which ones to use. Again, I think it might be helpful for people to get more information on that.

Having links to different programming communities (like discord servers) would also be helpful for a lot of people in my opinion. If you disagree, please leave a reply and let's see if we can come to an agreement!

Feature Suggestion: Add complete length of time to complete

You should add up all the weeks to completion from all the courses... useful to students who may want to know how long it takes to complete.

I counted a total of 198 weeks = 3.8 years

Example:

  • 198 weeks to Software Engineer
  • 4 year Computer Science Course
  • 1386 days to Computer Engineer

Request for a C++ Edition

Almost all colleges in India and some other countries focus on C/C++ as the primary programming language. I myself am a student of one of such Institute which focuses on C++ and C as the primary language of choice for beginners. Can anyone contribute or prepare similar list for C++. This will be really helpful for a huge number of students. Thank you all in advance.

Only 7-day free trial on coursera.

When I try to enroll on course I only get the option to do a 7-day free trial and then pay 75 bucks a month. I thought it was supposed to be free?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.