Skip to main content

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: TBD
  • Course Instructors: Vikram Nandi, Karthik Subramanian
  • Lab Time & Location: Dwinelle 187
  • Prerequisites: No prereqs needed :D

There are no required course materials besides a laptop. All software taught and used in this course will be open source.

Short administrative meetings (~15 minutes) may occur during GM sessions.

Course Overview and Learning Goals

61D prepares students to design and build real-world software applications. 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:

  1. Use of Git, GitHub, and the command line
  2. Fundamentals of the JavaScript and TypeScript programming languages
  3. Frontend Development with React, Tailwind CSS, and NextJS
  4. 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 10 lectures. Each lecture will be between 30 min - 1 hour. Lectures will be recorded and posted on the course YouTube channel.

Lectures will combine conceptual foundations with live coding demonstrations and guided walkthroughs. Many lectures will include starter code in a GitHub repository that can be used to follow along with the lecture.

Labs (1 hour 30 minutes per week)

Labs will be held weekly on Tuesdays from 6:30–8:00 PM in Dwinelle 187. 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.

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.

There are 6 total assignments. Students will be allowed to drop 1 assignment. Projects, which are not assignments, must be completed and cannot be dropped.

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/Final Project

For the final project, students will design and implement a complete full-stack web application using the technologies covered in the course.

More info will be released as we get closer to project release.

Grading

In order to pass the course, students must:

  • Complete at least 5 assignments (graded P/NP based on effort)

  • Complete all required projects

  • Have no more than 2 unexcused absences (4 total absences maximum)

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 butts 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 11 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 Tuesdays at 6:30-8:00pm.

Many assignments after the release of project 2 will be extra credit, as students should prioritize making progress on their final project.

Course Calendar

WeekLecture(s)Assignment(s) / Project(s)
00) Developer Fundamentals: Git & Bash
1) JavaScript

Assigned: Assignment 0 – Git
Assigned: Assignment 1 – JavaScript

12) TypeScript

Assigned: Assignment 2 – TypeScript

23) React Basics & Components

Assigned: Assignment 3 – React Todo List

34) React State & Context
45) Forms (React Hook Form & Zod)

Assigned: Assignment 4 – Forms
Assigned: Project 1

56) CSS & Tailwind Basics
6Spring Break (No Lecture / No Lab)
77) Relational Data Modeling & CRUD Operations

Assigned: Assignment 5 – Databases

88) APIs

Assigned: Assignment 6 – APIs
Assigned: Final Project

99) Final Project DevelopmentFinal Project Development Week
1010) Final Project Presentations / Review

Deliverables Timeline

All assignments are due at the start of the listed week.

  • Week 1: Assignment 0 - Git Due
  • Week 2: Assignment 1 - JavaScript Due
  • Week 3: Assignment 2 - TypeScript Due
  • Week 4: Assignment 3 – React Todo List Due
  • Week 5: Assignment 4 – Forms Due
  • Week 5: Project 1 Due
  • Week 8: Assignment 5 – Databases Due
  • Week 9: Assignment 6 – APIs Due
  • Week 10: Final Project Due

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.

Academic Honesty and Collaboration

On assignments, students may collaborate with other students in the course. However, each student must submit their own work. Students may not directly copy another student's work.

Students may use short snippets of code found online or from other external resources. However, they may not copy full solutions to assignments. If students use code from an external source, they are expected to include a link to the original source in their submission.

Use of AI tools such as ChatGPT, GitHub Copilot, or similar systems is allowed. These tools must be treated like any other external resource. AI tools may be used to generate small, isolated functional units of code, but may not be used to generate entire assignment or project solutions. If AI-generated code is used, students must clearly indicate where it was used.

If a student is found to be violating these policies on any assignment or project, course staff reserves the right to deduct points from the submission, including awarding a zero depending on the severity of the violation.