Introduction to Software Engineering

Techniques for designing, building, and maintaining large, scalable, and reusable systems. Specific emphasis is placed on software testing, relational databases, concurrency, and industry-standard software engineering tools such as Git, profilers, and debuggers.

Course Information

cs0320 is taught by Tim Nelson. Lectures are held every Tuesday and Thursday from 1:00 to 2:20 PM at Metcalf Research Building AUD, and are also recorded on Panopto and will be uploaded after each lecture.

Official prerequisites for cs0320 include one of {cs0160, cs0180, cs0190}. Familiarity with Java serves as a soft prerequisite; if you don't feel comfortable with Java or object-oriented programming yet, you may find it helpful to take cs0200 before taking cs0320.

"Software engineering is about more than just programming. Good engineers often spend more time reading and reviewing code than writing it. If you're skeptical, read this short statement by Linus Torvalds, one of the world's most famous programmers.

Linus isn’t on vacation. He's not taking it easy. And yet he spends most of his engineering time on reviewing other peoples' code. Let's stop pretending that "writing a lot of code" is the only metric that matters, and instead ask about what else should be important. Things like:

- How do you know that a program works? What if it's a program you didn't write?
- How do you know that you're writing the right program in the first place?
- How can you design to maximize the possibility of re-use?
- How can you make your code safe from bugs (yours and others')?
- How can you write code that's easy to understand?
- How do people write software collaboratively in a distributed way?
- Which unusual algorithmic ideas, new technologies, and linguistic tools should you know about as an engineer today?

This course is about all of that. You’ll still write a lot of code, but we’ll follow a more realistic standard: you’re not trying to pass a test suite, you’re trying to build software for real."
– cs0320 Manifesto via the Course Missive

"Techniques for designing, building, and maintaining large, scalable, and reusable systems. We will cover advanced programming techniques using Java, TypeScript, and React. Course assignments will familiarize students with software testing, relational databases, concurrency, and industry-standard software engineering tools such as Git, profilers, and debuggers. A major component of the course will be a group software project of your own design."
– Course Description via CAB

Resources

Check out the following useful documents for questions you have about course organization, code style, or tools we use.

Assignments

If you're looking for hours for projects or labs, please see hours →

Projects

All projects are released 2:20 PM ET on the specified out day (except for Project 0) and due at 7:30 PM ET on the specified due date. For your handin to be graded, you must have completed the beginning of semester reading quiz. To check if you have turned one in, please check this form →

Project Sprint Out Due
Onboarding 0 1/27 2/7
1: Data 1 2/8 2/21
1: Data 2 2/22 3/7
2: Frontend 3 3/8 3/21
Term Project Interlude - 3/22 4/4
2: Frontend 4 4/5 4/18
Term Project - 4/19 5/13

Project Gear-Ups

Looking for guidance as you start your project? Want a refresher on what material has been covered and an outline of what you will be developing? Come to our Project Gear-Up sessions!

Soon after each project sprint begins (with the exception of Onboarding), we will be holding gear-up sessions for each of the components involved in that sprint. Gear-up sessions will be held in person and streamed via Zoom; Come prepared with questions!

Date Topic Slides Video
N/A Sprint 0: Onboarding Slides coming soon! N/A

Labs

Labs are released on Thursdays at 12 AM ET. These labs have been designed to be completed in groups of 2 students. During lab hours, you will be able to partner with others and work with TAs if you need help. Labs are to be completed and checked off within your assigned lab section. If you are unable to get your lab checked off during your assigned section, you may get it checked off at the beginning of your next lab section. Lab checkoffs will not be accepted beyond then.

Name Out Due
Lab 0: Setup 1/27 1/30
Lab 1: Project Management 1/27 2/7
Lab 2: APIs 2/10 2/17
Lab 3: Relational Databases 2/17 2/24
Lab 4: Front-end Development 2/24 3/3
Lab 5: Asynchronous TypeScript 3/3 3/10
Lab 6: React 3/10 3/17
Lab 7: Prototyping 3/17 3/24

Lab 7 is the last mandatory lab for the semester. In the weeks following Lab 7, we will be offering optional labs and workshops depending on the interests and needs of term project groups. In previous semesters, we have offered labs on topics such as WebSockets, Docker, and cloud deployment, and we have held workshops on topics such as authentication and advanced front-end techniques; we are open to developing new labs and hosting new workshops based on the interests and needs of term project groups.

Lectures

Lectures are held every Tuesday and Thursday from 1:00 PM to 2:20 PM ET at Metcalf Research Building AUD, and are also recorded on Panopto and will be uploaded after each lecture.

Any readings from Effective Java and Design Patterns can be accessed through Safari Books Online. To do so, follow the steps below:

  1. Navigate here to setup your Brown affiliated account. Select the option 'Not listed', input your Brown email address, and confirm.
  2. Once you've done this, you can access the readings for Effective Java and Design Patterns.

Topic Resources Code Reading for the Week Date
Effective 0320 Notes, Recording N/A Syllabus, Missive, Setting Expectations 1/27

Hours

Tim's Office Hours

Tim's conceptual office hours are held each week via Zoom on Tuesday from 3–4 PM EST.

TA Hours

During TA hours, you'll be able to get help from TAs with course concepts as well as project and lab-specific questions. Note that you may not ask questions about labs in project hours (and vice versa) or have a lab checked off during project hours. During conceptual hours, you may not bring up code-specific questions.

Staff

Professor

Tim Nelson
Tim Nelson
he/they
Sagittarius
Hometown: wherever the strategy pattern is used
Bio: is mysterious

Head TAs

Colton Rusch
Colton Rusch
he/him
Aries
Hometown: Tewksbury, MA
Hey! I'm a Junior studying Music + CS. In my spare time, I wear corduroy and pick locks. This is my third time HTAing 32, and I think this will be the best iteration of the course yet!
Eva Lau
Eva Lau
she/her
Sagittarius
Hometown: Waltham, MA
Hi everyone! I'm a junior studying visa + cs, an avid notion user with a love for movie nights, and I'm super excited to meet you all:)
Hari Dandapani
Hari Dandapani
he/him
Virgo
Hometown: Melbourne, FL
Plant-hating vegan | enjoyer of League of Legends | btw | Class of 2023

Joint UTA/STAs

Anika Bahl
Anika Bahl
she/her
Libra
Hometown: Hong Kong & Arlington, VA
Hey! I'm a sophomore studying computer science and art history. In my free time, I'm probably down a rabbit hole on Expedia, listening to indie pop, or perusing this staff page to learn the names of Massachusetts towns.
Galen Winsor
Galen Winsor
he/him
Aries
Hometown: Northampton, Massachusetts
Good evening (⌐■_■)! I'm a senior concentrating in CS and environmental studies. I love writing and playing music with other people, and starting (and usually never finishing) creative projects. I'm so excited to meet you all!

UTAs

Anika Ahluwalia
Anika Ahluwalia
she/her
Cancer
Hometown: Minneapolis, MN
Hi! I'm a junior studying Computer Science. I enjoy playing tennis, playing word games, and trying new foods.
Cody Sims
Cody Sims
he/him/his
Virgo
Hometown: Madisonville, TN
Hey everyone! I am a sophomore from Tennessee studying Computer Science. Outside of CS, I love traveling to new places, trying all the food around Providence, and reading manga. Looking forward to meeting all of you!
Dylan Hu
Dylan Hu
he/him
Cancer
Hometown: Westborough, MA
I enjoy playing competitive first-person shooters in my (limited) free time! I'm captain of the Brown Valorant Team, and we're always looking for new players ;-)
Jennifer Wang
Jennifer Wang
she/her
Scorpio
Hometown: Newton, MA
Hello it's Jenn! I'm a 2️⃣nd year 👩🏻‍🏫studying 💻science and 🌆 studies. I love cafe-hopping ☕️, baking pies 🥧, binging studio ghibli movies 🍿, and beating Galen at chess ♟. I'm also a big marvel fan even though it's highkey propaganda. ✌️
Jenny Yu
Jenny Yu
she/her/hers
Aquarius
Hometown: Shanghai
Hi! I'm a sophomore studying CS. Always on the search for cute and elegant designs, places to watch sunsets, and good food (especially sushi) :>
Kazen Gallman
Kazen Gallman
he/him
Aries
Hometown: North Kingstown, RI
Hello! I'm a sophomore studying CS and Neuro, in my free time i'm probably playing video games, reading manga, or sleeping, but I also like to make really bad websites, https://kazar4.com :D
Kevin Hsu
Kevin Hsu
he/him/his
Scorpio
Hometown: Cupertino, CA
Hi!! I'm a sophomore concentrating in CS and VISA. Outside of writing code, I enjoy longboarding, playing video games, and making attempts at latte art.
Pedro Monteiro Borges
Pedro Monteiro Borges
he/him
Libra
Hometown: Boston, MA
Hey guys, I'm Pedro, and I'm a junior studying CS. In my free time, I enjoy playing basketball, watching YouTube videos, and going out with my friends. I'm looking forward to working with you all!
Riya Dulepet
Riya Dulepet
she/her
Aquarius
Hometown: Los Angeles, CA
Hi! I'm a junior concentrating in CS. I enjoy travelling, eating good food, and binging tv shows!!
Roman Hall
Roman Hall
he/him
Virgo
Hometown: Brooklyn, NY
Hey! I'm Roman, a junior from Brooklyn studying CS and Classics. I'm interested in software engineering/programming and languages in general. Outside of school I like biking, playing and listening to music, and spending time with friends. Excited to meet you guys :)
Siddharth Diwan
Siddharth Diwan
he/him/his
Scorpio
Hometown: Hyderabad, India
Hey everyone! I'm Siddharth, and I'm a sophomore concentrating in CS and Astronomy. That's right. It's not Astrology. Too bad XD. I like listening to synthwave, chiptune and DNB, and I'm forever attached to my Scooty. Really excited to meet y'all :))
Sid Anand
Sid Anand
he/him/his
Aries
Hometown: Seattle, WA
Hi! I'm a sophomore studying CS and Economics. I love experimenting with cooking and eating all sorts of foods, playing board games, and singing.
Suyash Kothari
Suyash Kothari
he/him/his
Sagittarius
Hometown: Bangkok, Thailand & Jaipur, India
Hi! I'm a Junior concentrating in Computer Science and International and Public Affairs. I love to cook, so send me recipes!
Tianren Dong
Tianren Dong
he/him/his
Capricorn
Hometown: Irvine, CA
Class of 2024, peanut butter lover
Vivian Li
Vivian Li
she/her
Pisces
Hometown: Lexington, MA
Hey there! I'm a senior studying psychology and Computer science. I enjoy Kpop, Kdramas, Anime, and certain video games (I have a love-hate relationship with League). I'm also on the Brown fencing team 🤺 and DAEBAK dance club 💃