CS 351: Design of Large Programs
Instructor:
Brooke Chenoweth
Department of Computer Science
Email: bchenoweth@cs.unm.edu (Include course number in a meaningful subject line, please)
Office: FEC 2060
Office Hours: Friday 2:00pm-4:00pm via Zoom, Tuesday 1:30pm-3:00pm in person, or by appointment
Lectures
Lectures are 9:30 am - 10:45 am TR in Dane Smith Hall 136
Labs
Lab 001 (CRN 43913)
- Time: 11:00 am - 11:50 pm TR
- Location: Centennial Engineering Center B146A
Lab 002 (CRN 43914)
- Time: 12:30 pm - 1:20 pm TR
- Location: Centennial Engineering Center B146A
Assistant
- Nicholas Livingstone nlivingsto@unm.edu
- Office hours: Wednesday 12:30-1:45PM and Thursday 1:30PM-2:30PM in FEC 2155
Course Description
This project-oriented course is intended to help students acquire the
design and programming skills needed to perform well in professional
settings where they are expected to translate customer needs into
functioning code. The emphasis is on understanding the complexities
and subtleties of object-oriented design and on leveraging off
object-oriented programming to deliver large complex programs that are
elegant, modular, easy to use, and easy to modify while delivering the
expected level of performance. Design and programming concepts are
first introduced and illustrated in lectures and later used in the
laboratory on a series of projects exhibiting increasing levels of
complexity and sophistication. Sequential, concurrent, and
distributed design and programming concepts are introduced in this
order with the associated projects matching the increase in
complexity. Depending on the project, students will be expected to
work alone or in small groups. Peer reviews will be an integral part
of the laboratory experience.
- Updated 2024-01-22 with office hours
Handy References and Links
Course Guidelines
Java
Version Control
Lectures and Assignments
Week 1
- Monday, January 15: Martin Luther King Day
- University Holiday: No classes today, I'm probably offline
- Tuesday, January 16: Welcome and Introduction
- Go over Coding Standards
- You can work on a personal computer for your projects, but we will be testing on the CS machinces so you still need to be able to log into your CS account. Make sure you know your password in time for lab.
- Make sure you are set up with the tech for this course on whichever computer(s) you are using. (Java, IntelliJ, and git are already on the CS machines)
- Azul Zulu OpenJDK
- Make sure you download the JDK FX package that includes JavaFX
- We will be using JDK 21 in this course.
- IntelliJ IDEA
- The free version will suffice for this course.
- You can get the full version for free if you register with an edu email address.
- In lab (or sometime today/tomorrow, at least): Begin to learn the Git version control system
- You may also find this tutorial helpful, along with the other documentation on the git site.
- Make sure you can log in to the LoboGit GitLab server (uses UNM account credentials, not CS) and contact UNM IT support if there is a problem.
- Thursday, January 18: Submission Guidelines
- Project 1: Tiles
- Due
Friday, January 26 Tuesday, January 30 (deadline extended since I missed a lecture)
- NY Times Tiles Game
- Object Design: For this first project, you will all use the same object design.
Week 2
- Tuesday, January 23: No lecture today (out with a sick kid)
- I won't be in lab. Nicholas will be available in the second lab as usual.
- No in person office hours today. I'll post an announcement on Canvas if I'm able to offer some remote office hours instead.
- I'll update the tiles deadline if necessary once I'm back, so please don't stress about that, but do get the link submitted so we can check your repository structure today.
- Thursday, January 25: JavaFX
Week 3
- Tuesday, January 30: Describe creating jar files
- Thursday, February 01: Object Oriented Design Principles
- Architectural Design Patterns
- If you had troubles with project 1 (mostly related to git and/or the jar files), I'm okay if you have few stray commits this week as you're able to get help in lab.
- Make sure you at least set up the project 2 repository now so you'll have the correct structure and permissions from the beginning.
- Start thinking about your Project 2 design so you can submit a document for peer review by next Monday. (If you submit earlier, I'll try to give feedback as the submissions come in so we can avoid the rush to discuss in lab.)
- Project 2: Dominos
Week 4
Week 5
- Tuesday, February 13: Design Patterns
- Strategy Pattern
- Observer Pattern
- At this point, you should have a working console game and be starting on your GUI version to finish by the end of the week. If you haven't built the console game jar file yet, I recommend you do that now and add it to your repository so that you have a chance to work out any issues withteh process well before the deadline.
- Thursday, February 15: Describe scrabble project
- Project 3: Scrabble
- Due
Friday, March 8 Tuesday, March 19
- Scrabble rules (PDF)
- Large word lists for testing will likely come from this site
- Start thinking about your object design as well as the data structures and algorithms you'll use. Participate in the discussion forum and we'll talk more about it in class next week.
Week 6
- Tuesday, February 20: Brooke is home with a sick kid today.
- I'll try to hold my office hours over Zoom during the regular in person time, but will post an announcement on Canvas if that doesn't work out.
- Thursday, February 22: Discuss scrabble data and algorithm
- Make sure you have set up the project 3 repository now so you'll have the correct structure and permissions from the beginning.
- We'll have a repo check this week, and probably some sort of additional milestone checks along to the way to make sure you are on the right track.
Week 7
- Tuesday, February 27: Continue factories
- Thursday, February 29: Brooke is teaching remotely today (link is on Canvas)
Week 8
Spring Break
Week 9
Week 10
- Tuesday, March 26: Continue Java Synchronization
- Thursday, March 28: Continue Safety and liveness
Week 11
- Tuesday, April 02: more Concurrency Control
- Thursday, April 04: Brooke is teaching remotely today (link is on Canvas)
Week 12
* Tuesday, April 09: Nicolas talks about threading
* Brooke is out today, so her office hours are canceled
* Thursday, April 11: Brooke is teaching remotely again today (link is on Canvas)
* While finishing Project 4, please take a few minutes to fill out your group member preferences for project 5 so I can put the groups together early next week.
* After you're done with project 4, please fill out the peer/self evaluation on Canvas and reflect on what went right/wrong.
Week 13
- Tuesday, April 16: Describe general idea for project 5
- Thursday, April 18: Project 5 groups are assigned
Week 14
- Tuesday, April 23: More detail on project 5
- Thursday, April 25: Some project 5 discussion
- Project 5: Networked Game
- Due Friday, May 3 (with usual tidying up over the weekend and demos during finals week)
Week 15
- Tuesday, April 30
- Thursday, May 02
Finals Week
- No exam this week, but you will be demoing your final projects, so don't skip town prematurely.
- It's finals week, so I won't be having my usual office hours, but will be checking my email and Vanvas messages.