Learn Computer Science Fundamentals Study Group
Overview
The CS Fundamentals Study Group was started to develop a stronger understanding of foundational computer science concepts and their applications through reading, online coursework, and practice problems. We're defining “fundamentals” as the following nine subjects: programming, computer architecture, algorithms and data structures, math for cs, operating systems, computer networking, databases, languages and compilers, and distributed systems—similarly to the teachyourselfcs.com curriculum. Since this is a considerable amount of content to cover, we are breaking our learning into phases. Phase 1 topics are: introduction to computer science concepts, computer architecture, and distributed systems. We will work on practice problem/projects once a week from the tycs curriculum's recommended resources for each subject.
UPDATE: We're pivoting learning content for the week up to the end of January to focus on computer science topics that we feel will create the greatest impact in our daily work for the least amount of time and depth: 3 intro chapters from each section of the recommended Operating Systems resource which will cover Operating Systems topics broadly; Section readings for each protocol within the Networking resource.
Resources (Phase 1)
Subject: Introduction to computer science concepts
Resource: Harvard's CS50 Coursera Course
Subject: Computer architecture
Resource: The Elements of Computing Systems (aka “Nand2Tetris”) two-part Coursera course
Subject: Distributed systems
Resource: Designing Data-Intensive Applications by Martin Kleppmann
Subject: Operating Systems
Resource: Operating Systems: Three Easy Pieces
Subject: Networking
Resource: Computer Networking: A Top-Down Approach
Weekly Structure
We’re all a little strapped for time and nowadays it’s especially difficult to foresee our availability for future commitments, so we’re not defining a set learning pace/weekly expectation. At each study group meeting we will move through problem sets together as defined in the Plan section below. If we don't finish, we'll pick up where we left off last time. If you have the time and effort beforehand to watch that week's video lecture or read the chapter, it’s certainly to your/the group’s benefit, but there should be enough momentum in meetings alone that they prove valuable regardless.
TL;DR
We're going to learn computer science! Once a week we'll meet and work on problem sets together according to the Plan table below. If you have the time, prepare for the week by reading/watching the resources in the Module column of the Plan table.
Plan
Subject: Operating Systems
Resource: Operating Systems: Three Easy Pieces
Progress | Date | Topic Chapter | Chapter Discussion Notes |
---|---|---|---|
12/1 | Virtualization: Process Intro | Notes | |
12/9 | Concurrency: Threads Intro | Notes | |
👉 | 12/16 | Persistence: Distributed Systems Intro | Notes |
Subject: Networking
Resource: Computer Networking: A Top-Down Approach
Progress | Date | Topic Chapter | Chapter Discussion Notes |
---|---|---|---|
1/6 | Getting Started, HTTP, & DNS | ||
1/13 | TCP, IP, & UDP | ||
1/20 | NAT, DHCP, & ICMP | ||
1/27 | Ethernet & ARP, Wifi, & SSL |
Complete
Subject: Introduction to computer science concepts
Resource: Harvard's CS50 Coursera Course
Subject: Computer Architecture
Resource: Build a Modern Computer from First Principles: From Nand to Tetris Part I (Project-Centered Course)
Module | Problem Sets | Solutions |
---|---|---|
Week 1: Boolean Functions and Gate Logic | Project 1 Gates | |
Week 2: Boolean Arithmetic and the ALU | Project 2 Gates |