Week 0
Things to do right away, on or before the first day of class.
Week 1 (9/14 - 9/20)
What makes software good or bad? Setting up your computer. Version control.
- [QUESTIONS for 9/14-15] (1) What are the attributes of good software? (2) What are the most
important things to do or avoid doing if you want to work effectively with other people on a
programming project?
- [VIDEO] Setting up your development environment
- [TASK: do by 9/16] Set up your development environment.
Try to do as many steps of this setup as possible before your second discussion group meeting. We'll
spend as much of that meeting as necessary talking through any problems you've encountered. There's
nothing like a quick check-in with other programmers to get you over the bumps along the way.
- [VIDEO] Mini-intro to Unix. This video starts with some history of Unix—I recommend that you watch that part. The second half is a demonstration of some basic Unix commands. I got a little rambly in the demo half of the video (blame video fatigue, if you like), but you might find it useful if you're new to the Unix command line.
- [TASK: do by 9/18] Work through the first five sections of this
introductory tutorial on Unix
(sections Typographical Conventions, Introduction to the UNIX Operating System, and Tutorials One, Two, and Three).
Nothing to hand in. This is a great task to do with a classmate, so you can bounce ideas around and
explore together.
- [QUESTIONS for 9/16-18] These discussion group sessions will be devoted to whatever questions you
have about Unix and git.
- [VIDEO] Intro to git and version control (part 1)
- [TASK] How to obtain your GitHub repository for CS257
- [ASSIGNMENT: due 5:00PM 9/18] Hello, World! for Teams: a
short introduction to version control with git
and make
Week 1.5
[TASK] Start learning the vi/vim editor in a terminal. You'll be glad you did.
vi (pronounced VEE-EYE) dates back to 1976,
and has been my editor of choice since 1980.
Its modern versions are often referred to as "vim" (for "vi improved", pronounced VIM).
There are tons of tutorials, including a vim-learning game,
a kind of gamelike tutorial, and lots of
short introductions.
When you're working in a Unix command-line environment, it doesn't take long for you to find yourself
confronted by editing in vi, sometimes by accident, because it's often the default editor used by other
programs. Even just knowing how to recognize that you're in vi, and how to save and quit,
will help you out of some unexpected situations. Of course, once you get the hang of it, vi is
also extremely powerful and extremely convenient.
Week 2 (9/21 - 9/27)
Command-line interface design. Test-driven development.
- [TASK] Fill out this brief
survey about your partnership for the Hello World for Teams assignment.
- [VIDEO] Intro to Unix, part 2. File permissions, redirecting input/output streams, environment variables, start-up files.
- [READ by DG#1 (first discussion group this week)] Exploring CLI Best Practices, by Kevin Deisz.
There are many articles about this topic online. This one is a good place to start because
the author gives you a numbered list of pretty straight-forward general principles to
work with. You can stop reading after principle #12, since the rest is
less generally about the topic at hand. (If you're dying for more writing on this topic,
here's another
pretty good article.)
- [ASSIGNMENT part due 11:59PM 9/22, remainder due 5:00PM 9/25]
Books: command-line arguments and CSV
- [QUESTIONS for DG#1]
(0) What book should I add to the
books
dataset (including author, author's birth & death years, and publication date)?
(1) What common features do you see in the command-line syntax of Unix commands?
(2) Which Unix commands or command options have you found most confusing, and why?
(3) What general principles would you propose for the design of good command-line interfaces?
- [READING: skim by DG#2]
Test-driven development (TDD).
The core idea here is very simple, but as you'll see from the Wikipedia article, it has accumulated
a lot of formalism. Read enough to get a feel for the basics.
- [READING: read by DG#2] Chapters 1 (Clean Code) and 2 (Meaningful Names) from
Clean Code, by Robert C. Martin.
- [QUESTIONS for DG#2] (1) What are the benefits of TDD? (2) In the Clean Code readings,
what are Martin's main points? what are his biases, explicit or implicit? are his arguments persuasive?
what are his strongest and weakest points?
- [TASK: do before your DG#1 on 9/28 or 9/29]
Unit testing with PyUnit. Nothing to hand in.
Week 3 (9/28 - 10/4)
TDD continued. Database design, plus a little SQL and Postgresql.
- [OPTIONAL] Want to use repl.it with your partners? Here's
info on how to upgrade your repl.it account for fall 2020.
- [READ by DG#1] The Commento, from Code Complete, by Steve McConnell
(You'll have to be on the Carleton network to read this link, either in person or via the
Carleton VPN.)
- [READ by DG#1] Chapter 4 (Comments) from Clean Code
- [QUESTIONS for DG#1] How is it going so far? What support can I give you that would help you
learn more effectively? What things that I'm doing are helping? What things that I'm doing are not helping?
What questions do you have about the PyUnit lab?
What kinds of comments (if any) are good to include in your code?
What comments should be left out?
- [VIDEO] Intro to git, part 2. Some background on how git's designers think about
its data flows and data storage. Part 3, coming soon, will focus on branching and merging.
Part 3 will contain more practical guidance than Part 2 does, but to give you that guidance,
I'll assume you've watched Part 2.
- [ASSIGNMENT due by DG#2] Code review for the first books assignment
- [ASSIGNMENT due 5:00PM 10/2] BooksDataSource: unit tests for a class interface
- [READ by DG#2] Chapter 3 (Functions) from Clean Code. Keep these ideas in mind while preparing
for the code review during DG#2.
Week 4 (10/5 - 10/11)
PostgreSQL, SQL, and some database design. Using HTTP-based APIs.
Week 5 (10/12 - 10/18)
Implementing APIs with Flask. Web design.
Week 6 (10/21 - 10/25)
Midterm break. Beginning the web application: picking a dataset and thinking about what your users will want
- [READING: by 10/23] User stories, up through section 6 (Limitations)
- [READING: by 10/23] Use cases, sections 1 (History), 2 (General principle), 7 (Examples), 8 (Advantages) and 9 (Limitations)
- [READING: by 10/26] Database normalization, sections 1 (Objectives). Sections 2 and 3.1-3 might also be helpful to you.
- [READING: by 10/26] The Guiding Principles section (i.e. Chapters 1-5) of Steve Krug's
Don't Make Me Think, Revisited (3rd edition)
- [ASSIGNMENT due 5:00PM SATURDAY 10/24] Web Application: selecting your data
- [READING to help with 10/27 assignment] More examples of database normalization:
this simple database of kids and their pets,
and this multipage introduction to normal forms
(follow the links to First Normal Form, Second Normal Form, and Third Normal Form to get the full story).
Week 7 (10/26 - 11/1)
Database design, web usability, mockups.
Week 8 (11/2 - 11/8)
API design, HTML, CSS, and Javascript
Week 9 (11/9 - 11/15)
Working on the web app. System integration and .
Week 10 & finals week (11/16 - 11/23)
Finish the web app. Security, accessibility, usability.