Syllabus
This page covers specific course policies and procedures. If you are auditing the course or want to get a better idea of the high level course objectives, see the course overview
Course Details
- Course Name: 61D: Applied Software Development
- Office Hours: [Fill In]
- Course Instructor: [Fill In]
- Lab Time & Location: [Fill In]
- Prerequisites: Concurrent enrollment in CS61A, CS88, or equivalent entry level computer science course is required. Prior completion of said course is recommended.
There are no required course materials besides a laptop. All software taught and used in this course will be open source.
Course Overview and Learning Goals
61D covers the main concepts necessary for a student to be ready to work on real world applications & software. A week will usually consist of lectures, a lab, and an assignment or project. The course load is roughly equivalent to a 2-3 unit class and requires a time commitment of about 3-7 hours per week taking into account everything. All lectures, readings, assignments, and projects are designed to teach the skills that you will need to start your Software Engineering journey. These skills include but are not limited to:
- Use of Git, GitHub, and the command line
- Fundamentals of the JavaScript and TypeScript programming languages
- Frontend Development with React, Tailwind CSS, and NextJS
- Backend Development with tRPC, Drizzle ORM, and PostgreSQL
Moreover, the tools and technologies taught in 61D will not be taught in isolation. The course will show how to connect a frontend, to a backend, and then a backend to a database, so that students will understand how each piece of a full stack application fits together.
Course Content and Learning Plan
The course will consist of lectures, readings, assignments, and projects. There will be no exams or writings. Students will be requested to fill out brief feedback forms each week, so that course staff can adjust the course to better meet the needs of the students. These feedback forms will be anonymous, optional, and will not affect student grades in any way.
Student time commitment can broadly be broken down into lectures and reading (learning), and assignments and projects (applying). Lectures and optional further readings will average 1-2 hours per week for every week of the course. Assignments and projects will average 2-4 hours per week, although these times are likely to vary student to student. During the first part of the course, a much larger percentage of time will be spent on assignments, as students will be learning new concepts. During the second part of the course, a much larger percentage of time will be spent on projects, as students will be applying the concepts they have learned.
Lectures (1-2 hours per week)
All course content is covered in a series of [FILL IN] lectures. Each lecture will be between 30 min - 1 hour. Lectures will be recorded and posted on the course YouTube channel.
The lectures will be a mix of covering conceptual concepts, and working through live examples. Many lectures will have a some starter code in a GitHub repository that can be used to follow along with the lecture.
Labs (1hour & 30min per week)
Labs will be held weekly at [FILL IN] on [FILL IN]. During the beginning of lab, students will be asked to fill out an optional survey to give feedback on the course. The rest of lab time will be used to review the material covered in the corresponding lecture for that week by going through application of the content covered in the lecture. Students are encouraged to follow along with the lecture code listed on the corresponding assignment for that week but may choose to either follow along with the provided lecture code or just observe. Students at this time are encouraged to ask questions about anything course-related that they are confused about.
[OPTIONAL] Readings and External Resources (1 hour per week)
No readings will be required, but are they highly recommended. Readings will provide a quick reference for the material covered in lectures, give concrete code snippets that can be used in projects, and dive into extra out of scope concepts not covered in lectures. External blog posts, YouTube videos, and documentation will be linked in the readings to provide extra context and resources for students to explore. All readings will be available on the course website. Not all lectures will have corresponding readings.
Assignments (1-3 hours per week)
All conceptual content from lectures will be practiced and applied in assignments, which will be graded by the course staff by completion or by auto graders. All assignments will consist of writing code. There will be no essays, multiple choice questions, or short answer questions. All assignments will start with a starter code repository, and will require students to submit their code via GitHub classroom.
Some assignments will take the form of individual "problems" in which students will write a small functional unit of code to complete an isolated task. Most assignments however will involve a guided multi-step process to build a simple application (such as a todo list). Assignments will be heavily structured and have a clear specification that walks students through the process of building the application. The goal of the assignments is to give students practice implementing the ideas covered in lectures, not practice coming up with open-ended solutions.
Students will be allowed to drop [FILL IN] assignments. There will be however be some assignments that cannot be dropped and will be required to complete to pass the course which will be listed in the assignments' description.
Many assignments will contain optional sections in which students can complete more challenging problems or add additional functionalities to their application.
Assignment Submission will be through GitHub classroom. Submission instructions will be provided in the assignment description but will usually just consist of pushing your code to the GitHub repository created by GitHub classroom when accepting the GitHub Classroom assignment.
Projects (1-3 hours per week)
The course will have two projects, one smaller frontend project, and one final full stack project. Projects are differentiated from assignments in that they will give students much less guidance on how to complete the project. Projects will still have a clear specification and rubric to follow, but students are expected to design and execute their own unique technical approach to completing the project.
Both projects will require students to build their own version of an existing useful application. Both projects may be completed in a group of two students or alone (not recommended). Both projects must be completed to pass the course and will be graded on a set of required functionalities.
Project 1: Quick Convert
Students will create an image format converter which allows the user to change the file format of images in the browser.
If a student needs to convert a .png to a .jpg, they should be able to upload the .png to the application, and download the .jpg from the application.
The application will complete all of this work in the browser, meaning the project can be completed with only the concepts covered in the first four weeks of the course.
Project 2: [FILL IN]
Grading
In order to pass the course, students must complete at least 6 Assignments (required assignments included) and both Projects.
Assignments will be graded based on completion. This is either through passing all the auto-grader tests on the assignment or by implementing all the required functionality specified.
Projects will be graded also on completion based on if the required functionalities were implemented as listed on the project specification.
While not all assignments will be auto-graded, all assignments will require code to be submitted via GitHub classroom. Submission instructions will be provided in the assignment description. Instructor feedback and rubric breakdowns for manually graded assignments may be provided to students via feedback pull requests. These pull requests will only be visible to the student and the course staff.
Extensions and Late Policy
Deadlines within the course exist to help students stay on track with the course content. Much of the material is cumulative. With that being said, actually completing the work is more important than when the work is completed, and our late policies reflect that.
All Assignments will automatically be eligible for a 1-week extension, no questions asked. After this, further extensions will be granted by course staff on a case by case basis. Keep in mind that we will take into account your individual situations and may even adjust the course accordingly.
Project 1 will have the same extension policy as assignments. There are no extensions for Project 2, as its due date buts up against the end of the course.
Course staff reserves the right to make these policies more lenient for individual students or for the class as a whole in extenuating circumstances, but will not make these policies more strict.
Calendar
The course is broken up into 12 weeks. Each week will have 1-2 lectures which will be released on the Sunday of the corresponding week. Assignments and Projects will be also assigned on Sunday. Assignments will be due 1-2 weeks after they are assigned, depending on the length of the Assignment on the corresponding Sunday at 11:59PM. Projects will be due 3 weeks after they are assigned, also on the corresponding Sunday at 11:59PM. Labs will be held weekly on [FILL IN] at [FILL IN].
Many assignments after the release of project 2 will be extra credit, as students should prioritize making progress on their final project.
Week 1:
| Lectures | Assignments/Projects |
|---|---|
| 0) Developer Fundamentals: Git and Bash 1) JavaScript | Assigned: Assignment 0. Git, Markdown, and Bash |
| Week | Lecture | Assignment(s) |
|---|---|---|
| 0 | 0) Developer Fundamentals: Git and Bash | Assigned: Assignment 0. Git, Markdown, and Bash |
| 1) JavaScript | Assigned: Assignment 1. JavaScript | |
| 1 | 2) TypeScript | Assigned: Assignment 2. TypeScript Due: Assignment 0. Git, Markdown, and Bash |
| 3) React Markup and Components | Due: Assignment 1. JavaScript | |
| 2 | 4) React State and Context | Assigned: Assignment 3. React |
| 5) Tailwind CSS | Due: Assignment 2. TypeScript | |
| 3 | 6) Responsive, Reusable, and Controllable Styling | Assigned: EC Assignment 4. Tailwind |
| 7) Forms and Validation | Assigned: Project 1 & Assigned: Assignment 5. Forms | |
| 4 | 8) Relational Data Modeling | Due: EC Assignment 4. Tailwind |
| 9) Database CRUD operations | Due: Assignment 5. Forms | |
| 5 | 10) Transactions, Migrations, and Advanced Queries | Assigned: Assignment 6. Databases |
| 11) tRPC on the Server | ||
| 6 | 12) Web Authentication, Authorization, and Security | |
| 13) Data Fetching with React Query | Assigned: Assignment 7. tRPC and React Query Due: Assignment 6. Databases | |
| 7 | 14) Client Side Routing with NextJS | Assigned: Project 2 Due: Project 1 Completed Code |
| 15) The Client Server Model | Assigned: EC Assignment 8. NextJs | |
| 8 | 16) HTTP Protocol and API Architecture | |
| 17) Webhooks | Assigned: Assignment 9. APIs and Webhooks Due: Assignment 7. tRPC and React Query | |
| 9 | 18) Cloud Infrastructure, Services, and Deployment (Part 1) | Due: Project 2 Design Reviews |
| 19) Cloud Infrastructure, Services, and Deployment (Part 2) | Due: EC Assignment 8. NextJs | |
| 10 | 20) Docker | Due: Assignment 9. APIs and Webhooks Assigned: Assignment 10. Cloud and Deployment |
| 21) Testing, Staging, and CI/CD | Assigned: EC Assignment 11. CI/CD and Testing | |
| 11 | 22) No Lecture, Final Project Presentations | Due: Project 2 Presentations & Completed Code |
| 23) Course Recap and What's Next? | Due: Assignment 10. Cloud and Deployment & EC Assignment 11. CI/CD and Testing |
Student Support
Office Hours
In person and online office hours will be held weekly. Office hours will primarily be focussed on helping students with projects and assignments, but will also serve as an opportunity for students to ask conceptual questions about material in lectures and readings.
Discussion Forum
A moderated course discord server will serve as the primary means of course communication and announcements. It will also serve as a platform in which students can ask questions about course material, assignments, and projects. The course staff will be active on the discord server and will respond to questions in a timely manner.