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.
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.
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.
- 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
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).
- Review I - College Algebra
- Review II - Trigonometry & Precalculus
- MIT 6.00 - Intro to Computer Science and Programming (6.0001 + 6.0002 combined)
- Berkeley CS61AS - Structure and Interpretation of Computer Programs (Scheme version)
- Berkeley CS61B - Data Structures
- Harvard CS50 lectures 0-7, followed by Nand2Tetris
- Berkeley CS 61C - Great Ideas in Computer Architecture
- Stanford CS106A - Programming Methodology
- Stanford CS106B - Programming Abstractions
- Stanford CS107 - Programming Paradigms
- MIT 18.01 - Single Variable Calculus
- MIT 6.042 - Mathematics for Computer Science
- 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
- MIT 18.02 - Multivariable Calculus
- MIT 18.03 - Differential Equations
- MIT 18.06 - Linear Algebra
- MIT 6.828 - Operating System Engineering
- Berkeley CS168 - Computer Networks and the Internet
- Berkeley CS186 - Introduction to Database Systems
- MIT 6.035 - Computer Language Engineering
- MIT 6.824 - Distributed Computer Systems
- MIT 6.041 - Probabilistic Systems Analysis and Applied Probability
- MIT 18.650 - Statistics for Applications
- Harvard CS109A - Introduction to Data Science I
- Harvard CS109B - Introduction to Data Science II
- Stanford CS229 - Machine Learning
- MIT 6.868 - The Society of Mind
- https://teachyourselfcs.com/
- https://github.com/mvillaloboz/open-source-cs-degree
- https://github.com/ossu/computer-science
- https://hackernoon.com/i-wanted-to-learn-computer-science-so-i-created-my-own-degree-heres-my-curriculum-bad56f28c278
- https://www.scotthyoung.com/blog/myprojects/mit-challenge-2/
- https://www.scotthyoung.com/blog/2018/03/15/how-successful-was-mit-challenge/
- http://calnewport.com/blog/2012/10/26/mastering-linear-algebra-in-10-days-astounding-experiments-in-ultra-learning/
- http://calnewport.com/blog/2012/08/10/you-know-what-you-write-the-textbook-method-for-ultra-learning/
- http://calnewport.com/blog/2012/08/16/experiments-with-the-textbook-method/
- https://www.scotthyoung.com/blog/2016/10/14/focus-or-parallel/
- https://github.com/tuvtran/project-based-learning
- https://github.com/P1xt/p1xt-guides/blob/master/wd-cs.md
- https://github.com/P1xt/p1xt-guides/blob/master/job-ready-python-edition.md
- https://github.com/P1xt/p1xt-guides/blob/master/cs-wd.md
- https://www.hackerrank.com/chingu-challenge-3
- https://www.hackerrank.com/interview/interview-preparation-kit
- https://exercism.io
- https://leetcode.com
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.
- Email: jason@jasonsbarr.com
- Twitter: @jasonsbarr
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.