azavea / cs-fundamentals-group

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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

Module Problem Sets Solutions
Week 1: C Problem Set 1
Problem Set 2
Week 2: Arrays Problem Set 1
Problem Set 2
Week 3: Algorithms Problem Set 1
Problem Set 2
Week 4: Memory Problem Set 1
Week 5: Data Structures Problem Set 1

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

About


Languages

Language:Assembly 60.2%Language:Scilab 22.0%Language:C 10.1%Language:HTML 6.2%Language:Makefile 0.7%Language:Shell 0.4%Language:Rich Text Format 0.3%Language:Hack 0.1%