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