From aedc1035205c62cf3dd50977936e833f76a2535c Mon Sep 17 00:00:00 2001
From: Caleb Sander <caleb.sander@gmail.com>
Date: Thu, 26 Mar 2020 23:07:20 -0400
Subject: [PATCH] Finish syllabus

---
 README.md | 154 +++++++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 140 insertions(+), 14 deletions(-)

diff --git a/README.md b/README.md
index 025fa97..40d1e80 100644
--- a/README.md
+++ b/README.md
@@ -2,27 +2,153 @@
 
 ## Course description
 
-TODO
+This CS 11 track introduces asynchronous programming, an increasingly widespread paradigm for I/O-heavy applications.
+Learn how highly concurrent servers and responsive webpages can be built without multithreading.
+We will cover techniques including callback functions, promises, and streams, and apply them to file I/O, networking, user interfaces, and more.
+Examples and projects will be in *modern* JavaScript, running both in the browser and as server-side programs in Node.js.
+Projects include building your own Minesweeper, concurrent `make`, and `git`-like version control software.
 
-## Me description
+CS 2-level programming knowledge is a soft prerequisite for this course.
+No JavaScript experience is needed; the necessary language features will be introduced for the projects.
 
-TODO
+## About me
 
-## JavaScript reference
+Hi, I'm Caleb!
 
-There is a description of the important parts of the JavaScript language in [`notes/js/js.md`](notes/js/js.md).
-It also has information specific to running JS in the browser and through Node.js.
-You're welcome to read as much of it as you want, but it's quite long.
-I will point out sections of it that may be useful on each assignment.
+I'm a Computer Science/Economics major and I really enjoy low-level software design and abstractions.
+I've TAed for CS 2, 3, 21, and 24 and will be a TA for CS 124 this term.
+I designed this course in a several-term CS 81 project because asynchronous programming is a powerful tool being used more and more in industry, but isn't part of the Caltech CS curriculum.
+
+I'm living in the Boston area this term, so I generally won't be available after ~10 PM PDT.
+
+You can contact me via:
+- Email: csander@caltech.edu
+- DM on Campuswire (see [Resources](#campuswire))
+- Zoom during office hours (TBD): (see [Resources](#zoom-office-hours))
 
 ## Schedule
 
-| Weeks | Topic and notes | Project | Due date |
-| ----- |---------------- | ------- | -------- |
+| Weeks | Topic and notes | Project | Due (at 10 PM PST) |
+| ----- |---------------- | ------- | ------------------ |
 | 1-2 | [Callbacks](notes/callbacks/callbacks.md) | [Minesweeper](specs/minesweeper/minesweeper.md) | 2020-04-17 |
 | 3 | [Promises](notes/promises/promises.md) | [`make`](specs/make/make.md) | 2020-04-24 |
-| 4 | [Streams](notes/streams/streams.md) | [`grep`](specs/grep/grep.md) | 2020-05-01 |
-| 5 | HTTP | Wiki Game | 2020-05-08 |
-| 6 | WebSockets | Chat server | 2020-05-15 |
-| 7 | | Chat client | 2020-05-22 |
+| 4-5 | [Streams](notes/streams/streams.md) | [`grep`](specs/grep/grep.md) | 2020-05-08 |
+| 6 | HTTP | Wiki Game | 2020-05-15 |
+| 7 | WebSockets | Chat server **OR** Chat client | 2020-05-22 |
 | 8-9 | `async`-`await` | MiniVC | 2020-06-05 |
+
+## JavaScript reference
+
+There is a description of the important parts of the JavaScript language in [`notes/js/js.md`](notes/js/js.md).
+It also has information specific to running JS in the browser and through Node.js.
+You're welcome to read as much of it as you want, but it's quite long.
+I will point out sections that may be useful on each project.
+
+## Resources
+
+### Campuswire
+
+We will be using Campuswire as a class forum.
+You can join the class [here](https://campuswire.com/p/G110E6357).
+If you haven't used it before, Campuswire is similar to Piazza, but the interface is much better and you can also use it for chat.
+If you have a question about a project or the course in general, please post there first!
+I will answer questions as soon as I can, but other students are also welcome to respond.
+If you have a question, you are probably not the only one; hopefully answers to Campuswire posts will help other students too.
+
+I only ask that you **do not post code from your project**.
+If you want me to take a look at your code, push it to your GitLab repository and leave a link to the repository.
+
+You can DM me if you have an individual concern (e.g. asking about an extension on a project), but please make a post instead if someone else might have a similar question.
+
+### Zoom office hours
+
+This online-only term is new for me too, so I'm not sure what formats are the most convenient for helping you.
+I think Campuswire will be the easiest for most questions, but I'd like to be available to answer questions or discuss confusing concepts face-to-face as well.
+To that end, I'll be available for Zoom office hours for about 6 hours each week.
+
+I'll send out a survey on Campuswire to figure out what times are most convenient for you.
+Since the projects are due on Fridays, I'm tentatively thinking 7-10 PM PDT on Wednesdays and Thursdays each week.
+
+My personal meeting ID is [586-773-0238](https://caltech.zoom.us/j/5867730238).
+
+## Course policies
+
+### Student wellbeing
+
+Asynchronous programming requires a different way of thinking about programs, so I hope the course challenges you a bit.
+However, please remember that it is P/F and only 3 units.
+I do not want the course to take up too much of your time or cause you stress.
+If there is anything I can do to make the course more manageable for you, please let me know!
+
+### Material
+
+This course is meant to help you learn asynchronous programming at your own pace, so there are no lectures.
+There are readings linked above that provide background for the projects.
+If you have questions about the material or want me to discuss another topic, please Zoom me during my OH or make a Campuswire post.
+
+### Extensions
+
+I realize this unusual term may present obstacles to completing projects on time.
+I also don't really care when projects are submitted, but I want to make sure that they do not pile up towards the end of the term (both for your sake and so I can grade them in a timely manner).
+
+If you have an extenuating circumstance, e.g. a family emergency, please email me; I am happy to grant an extension.
+
+Aside from extensions, I am also giving you **6 total late days** to apply to any of the projects.
+You may use at most 3 late days on a single project.
+If you are taking late days, please email/DM me to let me know before the project is due so that I can hold off on grading your submission.
+
+The late day policy is pretty generous, so I will not grade any projects that are submitted late without an accompanying extension or late days.
+
+### Submitting projects
+
+Projects will be distributed and submitted on [GitLab](https://gitlab.caltech.edu).
+If you don't have an SSH key registered with GitLab, please add one:
+1. If you don't have an SSH key, make a new one by running the command `ssh-keygen -t rsa` in a terminal (on macOS or Linux) or in [Git Bash](https://git-scm.com/download/win) or [Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/install-win10) (on Windows)
+1. Run `cat ~/.ssh/id_rsa.pub` to print out the *public* key
+1. Go to the [GitLab SSH keys page](https://gitlab.caltech.edu/profile/keys), paste the entire key, and click "Add key"
+
+To get your copy of a project, you should fork its repository:
+1. Go to the [cs11-async group](https://gitlab.caltech.edu/cs11-async) on GitLab
+1. Click on the repository for the project you want to work on
+1. If you're not signed in, click "Sign in" in the upper-right corner and log in with your Access Caltech credentials
+1. Fork the repository by clicking on "Fork" in the upper-right of the page.
+  This should take you to your forked copy of the repository.
+1. Click on "Clone" in the upper-right and copy the address under "Clone with SSH", i.e. `git@gitlab.caltech.edu:USERNAME/PROJECT.git`
+1. Run `git clone ADDRESS` (replacing `ADDRESS` with the address you just copied) in a terminal to download the repository
+1. Make your code private: click on "Settings" in the left sidebar, click "Expand" next to "Permissions", change "Project visibility" to "Private", and click "Save changes"
+1. Share your code with me (so I can grade it and provide help): click "Members" under "Settings" in the sidebar, select "csander" as the user to invite, select "Maintainer" as the role, and click "Add to project"
+
+To submit a project, you just need to push your changes to GitLab.
+If you haven't used Git before, these are the basic commands you'll need:
+- `git status`: show which files are tracked by Git (i.e. they were previously committed)
+- `git add .`: if you add new files, you need to run this so they will be included in future commits
+- `git commit -am "COMMIT MESSAGE"`: make a new Git commit containing all the changes
+- `git push`: push the commit to GitLab
+
+It is easy to forget to run `git push` or `git add` when committing.
+I suggest you always check GitLab to ensure your commits were pushed and include all the files you changed.
+
+### Grading
+
+Your grade will be the unweighted average of your grades on all the projects.
+The passing threshold is 65%.
+
+For the projects with tests, your grade will be primarily determined from whether you are passing the tests.
+However, I will deduct points for not writing code in an asynchronous style, e.g. using Node.js's synchronous I/O functions or performing I/O tasks in sequence when they can be done in parallel.
+If you write your code to defeat the test cases but not to work in general (e.g. hard-coding the outputs that the tests expect), I will not give credit for passing those tests.
+
+For the browser-side projects without tests, I will try using your project and check that it implements the functionality outlined in the project spec.
+Your versions of these projects do not have to look exactly like mine!
+The specs are intended to be specific about what they expect, but please ask questions if anything is unclear.
+
+### Feedback
+
+This is the first time this CS 11 track is being taught, and I hope it will stick around!
+I really value your constructive feedback on the course so I can improve it for the future.
+Please let me know:
+- If my notes on any topic are helpful or unhelpful
+- If there are topics I should add or remove from the course
+- If you found a project too much or too little work
+- If you particularly liked or disliked a project
+- Ideas for other projects you think would be fun
+- Any other ideas on how to make the course more interesting, useful, or accessible
-- 
GitLab