Skip to content

jasonsbarr/computer-science-program

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

96 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Open Source Personal Computer Science Learning Program

Contents

Goal

To learn and assimilate the materials one would get in a B.S.-level computer science education using material available to the general public outside of a university setting.

I intend to retain the material for future personal and professional use, not just to cover it all in a short period of time.

I will not be getting a degree for this work, and I probably won't take any of the courses for certificates or credit. The knowledge and skills are the point, not a piece of paper at the end.

I also recognize there are aspects and benefits of an actual B.S. program that are impossible to get through this way of ordering a program, such as collaborating with students on group projects and getting feedback from course staff on my work.

Documenting Progress

I will also document my progress through each course on my website to serve as a future resource for myself and anyone else who may be interested.

This will include the "ultralearning" method of essentially writing the textbook for each course as I take it, which should help me assimilate the material more quickly and thoroughly.

Materials

I will use the following materials to create the curriculum:

  • Open courses, course archives, and recorded lectures from university courses in computer science, engineering, software development, and math
  • Books, preferably legally available online (but I'll also definitely be buying some books).
    • Fortunately, in computer science and web development there are a large number of excellent books on many topics whose authors have generously made them freely available online
  • Technical papers and journal articles (again, preferably freely available online)
  • Tutorials, articles, blog posts, etc.

Methodology

  • Work on at least 2 courses at a time until finished.
    • My focus will be on learning each course thoroughly, not necessarily on finishing the material in a particular time frame, but I will set prospective time frames for each set of courses to help me focus on daily progress and rapid assimilation of knowledge.
    • Working on multiple courses at once will leverage techniques to help with learning and retention, like spaced repetition and interleaving
    • Making the courses sequential with a defined structure will alleviate my anxiety and ADHD/executive functioning issues that make open-ended projects difficult
  • View all lectures for courses that have them available; otherwise use supplemental videos where appropriate
  • Complete all readings, including textbooks (may substitute a similar book for required course textbooks when one is freely available online), lecture notes, handouts, etc.
  • Do all assignments, including projects, problem sets, presentations, and writing assignments
  • Find and complete practice problems for every course unit to solidify the information
  • Find and build related projects for as many course units as possible for the same reason
  • Use supplemental resources when possible to more deeply learn or fill gaps in course materials
  • Administer self tests, reviews, and quizzes at least once weekly for each subject
  • Write reports on the material covered in my own words, as in the "write your own textbook" ultralearning method
  • Where tests are available, take them all
  • Use grading solutions and keys when available to evaluate course performance

Curriculum

Before starting the college-level math courses I will review algebra, geometry, and precalculus. I need a refresher because it's been 20 years since I graduated high school.

Most of the college-level courses I've plotted out are from MIT because they probably have the most extensive collection of online course material of any school. My program contains most of the required courses from the MIT Computer Science and Engineering degree program.

I've added some courses from other schools to make up for the few courses in MIT's curriculum that don't have sufficient online material. I've also added the intro CS sequences from Berkeley and Stanford because they cover topics I want to study more broadly and deeply than what MIT's core curriculum includes. Finally, I've added a few additional courses in core CS areas like operating systems, programming languages, and so on.

This all adds up to more courses than one would normally take to fulfill major requirements for a B.S. in CS degree, but I have room for some extra courses since I'm not doing any general education courses (I got plenty of that in my undergraduate program).

Courses

Math Review

Computer Science Fundamentals

C Programming and Computer Architecture

  • Harvard CS50 lectures 0-7, followed by Nand2Tetris
  • Berkeley CS 61C - Great Ideas in Computer Architecture

Introduction to Programming

Core Math

  • MIT 18.01 - Single Variable Calculus
  • MIT 6.042 - Mathematics for Computer Science

Core Computer Science and Engineering courses

  • MIT 6.004 - Engineering of Digital Systems
  • MIT 6.006 - Introduction to Algorithms
  • MIT 6.031 - Software Construction
  • MIT 6.033 - Computer System Engineering
  • MIT 6.034 - Artificial Intelligence
  • MIT 6.045 - Automata, Computability, and Complexity
  • MIT 6.046 - Design and Analysis of Algorithms

Advanced Math

  • MIT 18.02 - Multivariable Calculus
  • MIT 18.03 - Differential Equations
  • MIT 18.06 - Linear Algebra

Operating Systems

  • MIT 6.828 - Operating System Engineering

Networking

  • Berkeley CS168 - Computer Networks and the Internet

Databases

  • Berkeley CS186 - Introduction to Database Systems

Languages and Compilers

  • MIT 6.035 - Computer Language Engineering

Distributed and Parallel Systems

  • MIT 6.824 - Distributed Computer Systems

Probability and Statistics

  • MIT 6.041 - Probabilistic Systems Analysis and Applied Probability
  • MIT 18.650 - Statistics for Applications

Data Science

  • Harvard CS109A - Introduction to Data Science I
  • Harvard CS109B - Introduction to Data Science II

Machine Learning

  • Stanford CS229 - Machine Learning

Artificial Intelligence

  • MIT 6.868 - The Society of Mind

Resources

Program Design

Ultralearning

Project-Based Learning

Practice Problems

Legal

Disclaimer

Obviously the copyright for the books, course materials, etc. do not belong to me.

I believe I am making use of them in ways that are consistent with the publishers' intentions and that are appropriate under fair use doctrine, but if you are a copyright owner of anything I'm using in this project and you have issues with how I'm using your material please contact me so we can resolve it.

Contact Info

License

I release all materials, including code, text and other documents, and any others that are subject to my copyright ownership under the MIT License:

© 2018 Jason Barr jason@jasonsbarr.com

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

About

Personal Computer Science Learning Program - courses & materials roughly equivalent to those of a BS program in CS

Resources

Stars

Watchers

Forks

Packages

No packages published