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:
Tuesday 2pm-4pm via Zoom,
Friday 1pm-3pm 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 T
- Location: Centennial Engineering Center B146A
Lab 002 (CRN 43914)
- Time: 11:00 am - 11:50 pm R
- Location: Centennial Engineering Center B146A
Teaching Assistant
- Nicholas Livingstone nlivingsto@unm.edu
- Office hours: Wednesday 3:15-4:45pm and Thursday 12:30pm-2pm 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.
Handy References and Links
Course Guidelines
Java
Software
- Azul Zulu OpenJDK Make sure you download the JDK FX package to include JavaFX
- IntelliJ IDEA
- The free Community version will suffice for this course. Scroll down to find the correct link!
- You can get the Ultimate version for free if you register with an edu email address, but you don't need the extra features in this course.
Documentation
Version Control
Lectures and Assignments
Week 1
- Tuesday, January 21: Welcome and Introduction
- 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.
- This week: Begin to learn the Git version control system
- You may also find this tutorial helpful, along with the other documentation on the git site.
- Set up a Github account
- Follow the instructions on the Intro to Git lab assignment
- Get help in lab if you have any questions
- Thursday, January 23: Submission Guidelines
- Project 1: Tiles
- Due Friday, January 31
- NY Times Tiles Game
- Object Design: For this first project, you will all use the same object design. Do not change the design diagram (you can copy the slide or redraw it), but do flesh out the description in the file you include in your docs directory.
Week 2
- Tuesday, January 28: JavaFX
- Thursday, January 30: Describe creating jar files
- Demonstrate cloning a project and setting up IntelliJ
- You can take a few extra days on Tiles as long as you start it before the original deadline. Make sure to ask for help if you are having any trouble.
Week 3
- Tuesday, February 4: Describe project 2
- Programming Abstractions
- 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 and/or office hours.
- Start thinking about your Project 2 design so you can submit a document for peer review by Friday. (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.)
- Thursday, February 6: Abstract Data Types
- Project 2: Dominos (Updated requirements 2024-01-11)
- Due Friday, February 14
- Initial design on Canvas due February 7, peer review due February 11
You will not be able to do the peer review assignment unless you submit a design before the deadline!
Week 4
Week 5
- Tuesday, February 18: Continue Complex Data Structures (didn't really get to this)
- Describe Scrabble project
- Thursday, February 20: Finish Complex Data Structures
- Project 3: Scrabble
Week 6
Week 7
- Tuesday, March 4: Brooke is out taking care of a sick kid, but Nick will be there today
- Thursday, March 6: Brooke is teaching on Zoom today (link on Canvas)
Week 8
Spring Break
- No lectures, labs, or office hours during spring break
Week 9
Week 10
- Tuesday, April 1: Describe project 4
- Thursday, April 3: Brooke is out with a sick kid. Nick will cover lecture.
Week 11
Week 12
Week 13
- Tuesday, April 22: Describe Auctions project
- Thursday, April 24: Auction Project Design Ideas
- Project 5 groups are assigned on Canvas
- Nick will be covering lab today and will be extending his office hours to include the time between lab and his usual office hours.
- Friday, April 25: My office hours are shortened today from 2pm-3pm
- Project 5: Distributed Auctions
Week 14
- Tuesday, April 29: More auctions discussion
- Thursday, May 1: Auction project, sockets, streams
Week 15
- Tuesday, May 6: misc discussion, builders, streams, sealed classes, etc.
- Thursday, May 8
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 Canvas messages.