Thoughts on improving the course next time
Week 1
Two tools, a perspective, and a habit
- [Due 11:59PM 3/29] The tools: IntelliJ and git
- [Skim by 3/31] The perspective:
User-centered design (UCD).
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 understand the core idea.
- [Skim by 4/3] The habit:
Test-driven development (TDD).
Ditto the comments on User-Centered Design.
- [Read by 4/3] Sections 1-6 and 14-17 21-22 from The Pragmatic Programmer. Bring to class a list of 3-5 ideas you find interesting or insightful or useful, and 1-2 ideas you disagree with or have questions about.
- [Due 11:59 PM 4/3] Unit Tests for TTT3D
Week 1.5
Start learning vim or emacs in a terminal. Every programmer should know how to use one or both
of these venerable editors. They're both old, extremely widely available, and very powerful.
- vi (pronounced VEE-EYE) dates back to the 1976,
and is my editor of choice. Its modern versions are usually 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.
- emacs also originated in 1976, and is
typically associated with the GNU Project.
Though vim is powerful, emacs has greater aspirations, with its "e" standing for "extensible."
You can work with emacs as just a text editor, but you can also use its extensions to make emacs
be your IDE/home-base/terminal/.... I'm not an emacs user (I tried in the early 90s, and it hurt
my left wrist, so I went back to vi), so I'm not expert at the huge variety of things you can do
with it. But again, there are many, many tutorials on the subject, including
the official GNU Emacs guided tour,
this "absolute beginner's guide",
etc.
Week 2
Code quality, regex, and a visitor
Week 3
Using HTTP-based APIs. Getting started on the web application.
Week 4
Intro to usability. Implementing HTTP-based APIs. Getting started on databases.
Week 5
PostgreSQL from Python using psycopg2. Flask. HTML and CSS.
Week 6
Midterm break, HTML, CSS.
- [Read by 5/5] Sections 22 (Dead Programs Tell No Lies), 23 (Assertive Programming), and
24 (When to Use Exceptions) from The Pragmatic Programmer.
- [In class 5/3] Here are three profoundly ugly HTML/CSS example pages:
example1.html,
example2.html, and
example3.html.
Learn the content, but please don't emulate the ugliness.
- [Due 11:59PM Wednesday, 5/10] Have a functioning draft of
the Web App, Phase 4 ready in your repository and running
on thacker, and share your repository with your tablemates in advance of Wednesday's code reviews.
- [Before class, Friday, 5/12] Prep for the code reviews, as described in
the Web App, Phase 4.
- [Due 11:59PM Monday, 5/15] Submit your final Web App, Phase 4, taking into account the
feedback you got in Friday's code reviews.
Weeks 7, 8
Usability. JavaFX. Design patterns.
- [By class time Monday, 5/22] Read these
these excerpts
About Face 3: Essentials of Interaction Design by Alan Cooper, Robert Reimann, and David Cronin. It's about 75 pages total, so
get started early. Be ready to talk about the main themes: user goals, mental models, excise and navigation,
experience level (beginner/intermediate/expert), posture, etc.
- [Due 11:59PM Monday, 5/22] Sprites
Weeks 9, 10
MVC, final project, miscellaneous
- [Due 11:59PM Monday, 5/29] Final project, phase 1: description and architecture.
- [As soon as possible] Read about Design Patterns
in general, and the Observer Pattern
and the Model View Controller (MVC)
pattern in particular. All of these topics are described by innumerable bloggers and youtubists out there
(e.g. this
MVC explanation
is probably clearer than the Wikipedia page). We'll continue to discuss these ideas in the coming week.
- [Optional] If you want to (and have time to) go a little deeper into object-oriented design,
try this tutorial,
which does a pretty clear job of explaining the object-oriented design principles known as
SOLID. Watch out, though--some of the
earlier code in the tutorial (e.g. for the explanation of the "S" in "SOLID") has some serious design problems
that are only fixed when considering the later principles.
- [Due 5:00PM Monday, 6/5] Final project, phase 2: the end!
You may find it useful to explore the code in my simple Pong program in
my github repository.