Course Assignments & Due Dates
Mondays / Thursdays 12:00–1:50
Fuller Labs, Lower Perreault
Note that Monday September 2nd is a holiday (Labor Day); no class will be held.
Instructor: Charlie Roberts (@cdroberts)
TA: Akim Ndlovu (@andlovu)
SA: Amanda Blanchard (@apblanchard)
SA: Parker Frizzle (@pafrizzle)
- Monday: 8AM - 10AM w/Amanda, 10AM - 12PM w/ Parker, 3PM - 5PM w/ Akim
- Tuesday: 8AM - 10AM w/Amanda, 10AM - 11PM w/Parker, 3PM - 5PM w/ Charlie
- Wednesday: 8AM - 10AM w/Amanda, 3PM - 5PM w/ Akim
- Thursday: 8AM - 10AM w/Amanda, 10AM - 12PM w/ Parker, 3PM - 5PM w/ Akim
- Friday: 1PM - 2:30PM w/ Akim
I will spend time on Discord answering questions asynchronously. Whenever possible, please post questions publicly in Discord so everyone can learn from the answers... and there's a good chance someone else in the class might be able to help with technical questions as well. My in-person office hours are from 3--5 on Tuesday, in Fuller Labs B20... please stop by! Some good reasons to stop by in-person office hours include:
- We can't debug your problems over Discord
- Brainstorming on final project / assignment ideas
- You want to talk about art / music / graphics / programming more generally
- You're interested in learning more about my research
- You want to tell me about your research
- You'd like to sit and work a bit with me/other students nearby in case questions popup (space permitting)
- Anything else, really!
The TAs / SAs are available during their office hours for any course related content.
This course explores computational, aesthetic, and user-centered aspects of designing and developing applications for the web. Topics include: web scripting and markup languages, design of browser-based interfaces, client/server network architectures, web accessibility, creative coding in the browser, web decentralization, and the environmental impact of web design and development.
All students will complete a full-stack (client + server + database integration) application as a final group project in the course; in addition, several smaller assignments (completed individually) will also build towards full stack development.
Students will be expected to use Git in this class and all assignments will be turned in using GitHub. Please begin familiarizing yourselves with Git if you don't have prior experience with it; it will not be taught in the class. The course TAs/SAs can provide help with Git for those who need it; please take advantage of their expertise!
After successful completion of this course, you will be able to:
- Critically evaluate and deconstruct the design and technical characteristics of web applications.
- Identify opportunities for web-based resources and APIs in organizations.
- Create functional and accessible web applications, including front-end and back-end components.
There are no required texts for this course. Required readings will be taken from various online resources. For those who can't wait to start digging into JavaScript:
- Eloquent JavaScript is rapidly becoming one of the most popular JavaScript books on the web.
- You Don't Know JS is where most of our assigned readings on JavaScript will come from.
Assignments are the core of this course. Each assignment will focus on a particular aspect of web development, such as database integration, component libraries, server development, or creative coding. Assignment are due by the start of class on the date listed on the calendar, e.g. if the due date is on a Thursday, the assignment is due by 11:59AM Thursday.
We'll be primarily using JavaScript in both the browser and with node.js to develop web applications in this course. While JavaScript is the main language for front-end web application development (with TypeScript nipping at its heels), there are a variety of choices for back-end languages. Java, Python, Ruby, and many other languages have HTTP support. We'll be using node.js for simplicity and language consistency across client / server development. Deno and Bun are node.js alternatives that are worth exploring.
You can use whatever editor you like in this class. I primarily use vim alongside tmux in the terminal, and it is nice to know this combination if you anticipate doing a lot of remote server programming, as every Linux / macOS server (and increasingly Windows as well) will have these tools installed.
But if you've never used vim (or emacs), I recommend using VSCode, which is free and available for most platforms. In class, I'll VSCode for many demos.
This term we will be using Discord for class discussion, in order to get you help fast and efficiently from classmates and the course staff. Rather than emailing questions to staff, post your questions to Discord to ensure you get a timely response, and to ensure that our responses can be seen by others who may have the same question you do. In general, most communication for the course will happen through Discord.
You will be emailed a link to join the Discord server for this course. It will likely be the last email you receive related to this course; please keep a close eye on the announcements on the server to make sure you don't miss information on assignments.
Your course grade comes from three parts:
- Homework assignments (55%)
- Project (35%)
- Quizzes (10%)
I reserve the right to adjust the above if needed. Quizzes will be based on the assigned readings for each class. They will be short (3--5 questions) and are designed to be as easy as possible assuming you've done the reading, and take no more than five minutes. I welcome accomodation requests for quizzes (!), but also encourage you to try taking the first one before scheduling alternative times to take the quiz, just to get a feel for how simple they are. Your lowest quiz grade for the term will be dropped and not counted towards your grade.
You can turn in one assignment late during the course of the term; please DM both the course instructor and the primary grader (Akim) for a small extension. If it is a personal matter you which to discuss it's fine to only contact the instructor. It is much better to submit partially complete work than nothing at all. Tell us what you have completed and you will get partial credit... even just making an empty pull request for an assignment will get you some points.
Unless otherwise noted, meeting the minimum requirements for an assignment will earn a B (86%).
You may earn up to additional 20 (10+10) points via Technical Achievements and Design/Evaluation Achievements.
Achievements are an opportunity for you to take an active role in your learning and assessment.
Achievement points can both boost your grade up to an A and also make up for points
that you might have lost in regards to the minimum requirements for an assignment.
For example, say your base grade was an 80%, which would mean that you were docked 6% off the minimum assignment requirements. If you then completed 6 points of technical achievements and 4 points of design achievements, you would receive an 90% (A) on the assignment. If you completed all 20 acheivement points, you would still get a 100%, even after missing some points on the primary assignment requirements. The maximum grade for any one assignment is 100%, even if you get a perfect score on the minimum requirements and both achievements.
A technical achievement might be: substantial additions to the assignment requirements, a particularly robust algorithm, non-trivial use of recommended frameworks and libraries.
A design/evaluation achievement might be: complex interactive functionality, animations, styling that is objectively "more usable" than the minimum requirements, and evaluation activities such as completing a task-based user analysis, writing up the results, and using the results to justify (usually small) changes to your application.
The success of your assignment achievements depends on how well you describe them in your README. Well formatted text, images, and concise and clear descriptions are helpful. Every README must include a Technical Achievements and Design/Usability Achievements section, even if none are attempted.
The best strategy is usually to include both types of achievements in your project scope. It's rare for someone to get all 10 points of one type, but common for someone to play to their strengths on one side, and try a few different things on the other side.
Make sure any frameworks and libraries you choose to employ do not interfere with the underlying intellectual challenge of the assignment. If I ask you to write a HTTP server and you use a package that provides a server in one line of code, you'll lose points instead of gaining them. Our aim is to open the black box of these packages in the scope of this course, so that when you encounter them later, you will better understand what they're doing for you.
In this class, students may not look at any previous versions of a course assignment or project, regardless of how it is posted.
Students are likewise forbidden from facilitating other students, current or future, in plagiarism or cheating. Collaboration is, however, encouraged in this class. There are many ways in which you can assist your fellow students without giving them code and answers. Please feel free to answer low-level coding questions and to help your classmates troubleshoot their code. But do not provide significant chunks of code; for example, providing an entire server that you've written is not allowed. We highly encourage everyone to spend time in the course Discord server, both asking and answering questions about any topics from the course.
Many aspects of these course materials were adapted from materials by:
- Lane Harrison
- Gary Pollice