Pursuing Independent Computer Science Learning

by Joey Kyle Stickels, Hamline University

This blog post is intended to be used as a resource for anyone interested in learning Computer Science independently. There are many resources available, but this post offers a clear starting point to begin a learning journey, with an attempt to offer resources that may appeal to several different learning styles. The following structure provides an outline of information included in this post:
Overview of Computer Science Independent Learning
General Computer Science Resources
Suggested Computer Science Learning Plan
Beginning Programming
Introduction to Computer Science
Discrete Mathematics Resources
Mathematics Resources
Special Topics in Computer Science
Projects for Computer Science Learning

Approach - How might you approach learning Computer Science (CS) independently? What are some good methods for learning CS in general? (Practice!)

Learning Styles - Different learning styles require different approaches. What works for me personally is not necessarily the right answer - there isn't one right answer! This resource will provide a number of different types of learning tools which may fit differing learning styles in different ways. If you don’t quite know how you learn, that’s okay! Just try something out, and if that doesn’t seem to click for you, approach the same topic in a different way.

Learning isn’t rigid, but some information may be sequential - You can use this as a tool to guide you in your learning, and you don’t need to cover every topic or follow the exact sequence to start learning CS. It is important, however, to pay attention to mentions of prerequisites, because some resources will require more understanding of mathematical concepts or CS concepts than others.

Computer science is programming language agnostic - You can use whatever programming language you want to learn most computer science concepts. Throughout your journey, you might find yourself picking up many more languages than you thought were possible! Once you really start to get a handle on how programming works, most languages operate very similarly, with small changes in syntax and behavior between them.

Overview of Computer Science Independent Learning(1).png

Websites with some free courses

  • Coursera (Most courses are free if you are okay with not receiving a certification and doing assignments on your own without feedback.)

  • edX

Websites that can be used to practice programming

Suggested CS Learnign Plan.png

Beginning Programming

Prerequisites: Algebra

Concepts

  • Parts of a program

  • Variables

  • Objects and Types

  • Operators

  • Control

  • Algorithms

  • Data Structures and Functions

Open Textbooks

C

  • Programming in C by Kishori Mundargi, Myriam Grandchamp, Saraswathi Kaja, Sourav Chandra, Oscar Serrano

C++

C#/.NET

Java

Javascript

Python

Other

Open Courses
Introduction to Computer Science and Programming - MIT OpenCourseWare
Introduction to Computer Science and Programming in Python - MIT OpenCourseWare
Effective Programming in C and C++ - MIT OpenCourseWare

Introduction to Computer Science

Concepts

  • Abstraction

  • Data and Information

  • Algorithms

  • Formal Languages

  • Computability

  • Universality

  • Intractability

Textbooks
Java, Java, Java: Object Oriented Problem Solving, 3/E by Ralph Morelli and Ralph Walde
Foundations of Computation by Carol Critchlow and David Eck
Foundations of Computer Science by Al Aho and Jeffery Ullman
Philosophy of Computer Science by William J. Rapaport
Computer Science Principles by Seth D. Bergmann
Programming from the Ground Up by Jonathan Bartlett
Computer Science: An Interdisciplinary Approach by Robert Sedgewick & Kevin Wayne 

Video Content
Harvard’s CS50 Lectures 2020 - YouTube Playlist

Discrete Mathematics

Ties directly into Algorithms and Data Structures

Concepts

  • Proofs

  • Sets

  • Functions

  • Relations

  • Graphs

  • Modular Arithmetic

  • Counting

  • Discrete Probability

Textbooks
Applied Discrete Structures by Al Doerr and Ken Levasseur

Open Courses
Mathematics for Computer Science - MIT OpenCourseWare

Video Content
MIT’s Mathematics for Computer Science, Fall 2010 - YouTube Playlist

Algorithms and Data Structures

Concepts

  • Comparing Algorithms

  • Sorting Algorithms

  • Searching Algorithms

  • Graphs

  • Trees

  • Strings

  • Lists

  • Hash Tables

Textbooks
Algorithms 4e by Robert Sedgewick and Kevin Wayne
Open Data Structures: An Introduction by Pat Morin
Algorithms and Data Structures With Applications to Graphics and Geometry by Jurg Nievergelt and Klaus Hinrichs
Think Data Structures by Allen B. Downey

Courses
Introduction to Algorithms - MIT OpenCourseWare

Mathematics resources.png


These math resources can be used for background knowledge when learning CS concepts and skills.

Open Textbook Resources

Algebra
Pre-Algebra
Elementary Algebra
Intermediate Algebra 
College Algebra
Algebra and Trigonometry
College Algebra with Corequisite Support

Statistics
High School Statistics
Introductory Statistics 
Think Stats: Exploratory Data Analysis in Python by Allen B. Downey

Trigonometry
Trigonometry by Ted Sundstrom and Steven Schlicker

Calculus
Calculus Volume 1

Discrete Mathematics
Discrete Mathematics: An Open Introduction by Oscar Levin

Combinatorics
Combinatorics by Joy Morris

Linear Algebra
Linear Algebra with Applications by W. Keith Nicholson

Mathematics resources(2).png

Complexity Science
Think Complexity by Allen B. Downey
Introduction to the Modeling and Analysis of Complex Systems by Hiroki Sayama

Game Development
Harvard’s CS50's Introduction to Game Development 2018 - YouTube Playlist
Harvard’s CS50 2019 - Games Track - YouTube Playlist
Making Games with Python and Pygame by Albert Sweigart
MIT OpenCourseWare - Creating Video Games

Web Development
The Missing Link: An Introduction to Web Development and Programming by Micheal Mendez

Programming Languages
Programming Languages: Applications and Interpretation by Shriram Krishnamurthi

Synchronization
The Little Book of Semaphores by Allen B. Downey

Software Development
MIT OpenCourseWare - Software Construction
MIT OpenCourseWare - Performance Engineering of Software Systems
MIT OpenCourseWare - Computer System Engineering

Mathematics resources(1).png

Often, especially with CS, it is most effective to learn through practical application once we understand the basic concepts we’re trying to apply. One of the best ways to do this is by starting (and completing) projects. Learning through projects allows you to practice design and planning, goal setting, and breaking up a project into digestible pieces.

Remember to keep things simple, especially to start, because finishing even a small project is still a huge undertaking. 

Be careful of feature creep - Try to keep closely to the original plan of your project and complete it, before adding extra features.

Short Programs
UPC Validator: Intermediate - Create a function that takes in a Universal Product Code (UPC) code and checks if it is valid. You can search online to find how you can verify UPC codes.

Merge Sort - Create a function implementing the merge sort algorithm.

Bubble Sort - Create a function implementing the bubble sort algorithm.

Libraries
Graphs: Intermediate - Create a library that allows you to create and manipulate graphs (or networks). Try implementing Dijkstra’s Algorithm to find the shortest path through a graph using its edges.

Applications
Calculator - Create an application that can do addition, subtraction, multiplication and division. 

Text Editor - Create an application that can open, edit and save text documents.

Address Book: Intermediate - Create an application to keep track of contact information  - names, emails, phone numbers

Product Inventory: Intermediate - Create an application that a business could use to keep track of their product inventory. Brainstorm what features would be useful for 

Web browser: Hard - Create an application that can access the internet, interpret HTML and CSS, and navigate through web pages. 

Games
Pong Clone: Intermediate - Create your own version of the game pong. Break down the elements of the game.


Read about how Joey began to learn about computer science and how his interest grew in his My STEM Path: Computer Science post.