Git Product home page Git Product logo

curriculum-bachelors-cs's Introduction

Curated Computer Science Curriculum

How to Teach Yourself Computer Science: A Self Taught B.S. level CS Curriculum

##Introduction There are tons of free online resources that will help you "Learn Programming Language X," but it's difficult to find courses that will give you a deeper understanding of computer science (CS) like what's taught in a bachelor's level CS program. There is a lot more to CS than what you get from learning languages or going to a webdev bootcamp, so this is an attempt to create self taught curriculum based on the most important courses you'd learn in a typical BS in CS program.

Below you'll find a compilation of resources for teaching yourself the fundamentals of computer science. The categories are based largely off of the undergraduate pre-requisites for a Master's in Computer Science, with a few extra items based on what seems to be important to the professional CS community. The content was found all over the place, but the wonderful folks at /r/learnprogramming and /r/cscareerquestions have been especially helpful.

The curriculum is weighted towards interactive courses, followed by static courses with materials and sample exercises, followed by full texts. I've tried to avoid lists of YouTube videos and the like because it's harder to retain information from lectures. These are mostly free resources; however, I've included some books that are too useful not to mention.

Math:

Calculus, Statistics, Probability. Computer Science is a branch of mathematics after all.

  • Khan Academy - Tons of resources here, but the math courses in particular are convenient and accessible. Select the math you want to know (Probability and Statistics, and Calculus) and Khan Academy will test you and determine what you need to learn to get there.

Programming Fundamentals:

The basic concepts of computer science: object-oriented programming, control structures, abstraction etc.

Optional:

Miscellaneous Skills:

You don't have to master these skills, but a little knowledge will go a long way. ###GitHub: Git is a version control system for managing software development. Learn how to use git and maintain an active portfolio of your own projects and contributions to other projects on GitHub. Collaborating on open-source software is a great way to learn the invaluable skills of working with other people and writing readable code.

###Touch Typing: Programming requires a lot of typing. A small investment in typing skills will save tons of time down the road.

  • Keybr.com - This program offers the best combination of simplicity and effectiveness; it charts your progress and adjusts its difficulty accordingly.

###Programming Languages: You should be learning the fundamentals of programming through the other courses here, but sometimes you may need to pick up the syntax of a particular language.

###Stack Exchange An incredibly useful network of Q&A sites for getting help, it's like Yahoo Answers for people who know what they are talking about. The site is engineered to be as helpful as possible, but it may take a little getting used to. Stack Overflow is dedicated to programming questions.

Discrete Structures:

"Mathematical structures that are fundamentally discrete rather than continuous." Includes logic, set theory, number theory, induction and recursion, etc.

Data Structures:

"Ways of organizing data in a computer so that it can be used efficiently."


Learn the stuff above before starting these topics!

Algorithms:

One of the most important aspects of CS education. Algorithm design methods and arrays, stacks, queues, binary trees, etc.

Optional:

Databases:

Relational systems, data manipulation, query language (SQL), relational algebra, etc.

Non-Relational Databases (Optional): Get familiar with modern databases and NoSQL. Getting Started with MongoDB and M101P: MongoDB for Developers, Redis: Simple Twitter Clone Tutorial, optional: Seven Databases in Seven Weeks by J. Wilson (~$16 used).

Web Development:

Making websites.

  • The Odin Project's: Web Development 101 - A full web development course in and of itself. There may be some repetition here, but it's self-paced so you can breeze through what you already know. Uses Ruby primarily.

Alternatively, FreeCodeCamp looks like a really interesting project in which you end up spending about 20 weeks building your portfolio by writing code for nonprofits. It's a huge course though (1600 hours), so it might be better to do it alone if you are more interested in web development.

Networks:

Packet-switching and circuit switching, TCP/IP protocal layers, reliable data transfer, congestion control, flow control, packet routing, etc.

Computer Architecture:

Machine instructions, assembly language, system organization, etc.

Go Deeper (Optional):

#Operating Systems:

Operating system management of processes, I/O, memory, and file systems. May be some overlap with Computer Architecture.

Optional:

#Internships/Real World Experience:

Complete your education by using it.

  • GitHub - As stated above, one of the based ways to get real world programming experience is to collaborate on open-source projects on GitHub. Working on GitHub has the added benefit of building you a public code portfolio.

  • LaunchCode - A network for self taught programmers that matches applicants with full-time paid apprenticeships. They recognize completion of Harvard's CS50 as a qualification for placement.

  • 180 websites in 180 days - This is a brilliantly simple idea. Just build a different website featuring some new concept every day.

  • Dice and Stack Overflow Careers - Tech job boards.

  • FreeCodeCamp - Mentioned above, but it's worth highlighting here. This is a complete web development course (1600 hours - that's 40 full-time weeks) that culminates in 800 hours of writing code for nonprofits.

Don't forget local opportunities. There are meetups and hackathons and community groups everywhere. Connecting with real humans will open doors and help you avoid burnout.


#Advanced Topics The following subjects are important, but I did not include them above to avoid making this curriculum too overwhelming. Establish a solid foundation with the courses above before moving on to these: ###Compilers Understanding how compilers work will help you write better code and master new languages more quickly.

  • Stanford: Compilers - "Learn how a program written in a high-level language designed for humans is systematically translated into a program written in low-level assembly more suited to machines."

###Cryptography: Techniques for secure communication in the presence of adversaries, an increasingly important topic.

###Debugging: Fix your broken programs.

###Artificial Intelligence: The study and design of intelligent agents.

curriculum-bachelors-cs's People

Watchers

 avatar

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.