Goal: give you a map of the big ideas in computer science. Selected some, but not all topics, based on what we thought is useful.
Reasoning: since you're hackers already, let's take an ordered approach, since we don't have to teach you the basics of programming. Different from how a university would approach it:
- Week 1 - Systems Architecture
- Week 2 - Operating Systems
- Weeks 3/4 - Data Structures and Algorithms
- Weeks 5 - Important Algorithms
- Week 6 - Theory of Computation
- Week 7 - Theory of Programming Languages
- Week 8 - Implementing Programming Languages
- Week 9 - Concurrency and the failure of Moore's Law
- Weeks 10 - Machine Learning
- hour 1 - Lecture part 1
- hour 2 - Lab: Work on hacking challenge, ask questions of TA/Instructor. Cover additional topics requested by students.
- hour 3 - Lab: Demo project from previous week to TA/Instructor
- hour 4 - Lecture part 2, introduce next week's assignment.
This course has assignments. Since we're all hackers, we'll use this fact to help us learn. These are not hand-holding homeworks like you might have had in college, they are challenges designed to help you really understand what we are discussing in class. They will test your creativity and ingenuity, rather than the ability to conform to a spec. After all, the goal is to learn something useful!
Assignments are given out at the end of class, and you have until the beginning of the next lecture to turn them in. Might be good to take advantage of the weekend in-between!
There are one or more TAs to help you with understanding the assignments. They've solved the problem in their own way, and have a solid backround in CS. They'll help you think through the problem (but not complete the challenge for you).