Assignments
The majority of your work will be devoted to a 10-week group project during which you specify, plan, design and build a software system using the Ruby on Rails web framework. You will submit documentation, code, and reports jointly, and you will demo your product at the end of the semester as a team. Before the project begins you will individually set up your own development environment and complete a ~12 hour series of trainings. You will share eight brief reflections (~100 words) on readings with each other; and you’ll compose a short (500-700 words) research report. All assignments are due Mondays at midnight.
Weekly Schedule
Welcome & Introductions
What is software engineering?
Syllabus review, origins of SE, meeting classmates, using the console
Product Management & Communication
Why is software engineering challenging?
Retrospectives, who/what/why, PMing, prototyping, stack overview
Readings
- Sommerville - Chap. 1: Software Products
- Sommerville - Ap. 1: Product & System Engineering Processes
- Brooks - Chap. 2: The Mythical Man-Month
- Brooks - Chap. 5, 7, 10, 11, 12, 13, or 14
Assignments
A1 - Hello Stack (Due: Sept. 9)
Agile Methods & Feature Driven Development
How do modern software engineering teams operate?
Agile, extreme programming, scrum, planning, estimation, features, stories, stack exploration
Readings
- Sommerville - Chap. 2: Agile Software Engineering
- Sommerville - Chap. 3: Features, Scenarios, and Stories
Assignments
T1 - Ruby Training (Due: Sept. 16)
S1 - Group Preferences Survey (Due: Sept. 18)
Architecture & Abstraction
How do we model complex systems?
System architecture, model view controller (MVC), diagramming
Readings
- Sommerville - Chap. 4: Software Architecture
- O'Reilly - Learning UML 2.0 Chap. 3, 4, 6: Activity, Class, and Object Diagrams
- Dalpiaz, Franch, Horkoff - iStar 2.0 Language Guide
Assignments
T2 - Rails Basics Training (Due: Sept. 23)
User-Centered Design
How do we decide what to build?
Design thinking, qualitative methods, paper prototyping, personas, inclusive/universal design
Readings
- Norman - Chap. 1: The Psychopathology of Everyday Things
- Norman - Chap. 6: Design Thinking
Assignments
A2 - Competitor Analysis & Group Contract (Due: Sept. 30)
T3 - Rails MVC Training (Due: Sept. 30)
Patterns & Services
How do we build elegantly for complexity?
Microservices, statelessness, coupling, cohesion, coordination, design patterns, REST, CRUD, DRY, KISS, MVC redux
Readings
- Sommerville - Chap. 6: Microservices Architecture
- Sommerville - Chap. 8: Reliable Programming
- Gamma, Helm, Johnson, Vlissides - Design Patterns Chap. 1: Introduction
Assignments
T0 - Bonus HTML/CSS/JS Training (Due: Oct. 7, Optional)
Autumn Recess
Enjoy your break!
Risk Mitigation
How do we engineer robust systems?
Tech debt, code smells, refactoring, project pre-mortems, scrum redux
Readings
- Norman - Chap. 5: Human Error? No, Bad Design
- Freakonomics - Failure Is Your Friend (Podcast)
Assignments
A3 - Project Plan (Due: Oct. 21)
T00 - Bonus Git/GitHub Training (Due: Oct. 21, Optional)
Tools & Techniques
How do we collaborate on code?
Pair programming, DevOps, version control, continuous integration, TDD/BDD
Readings
- Sommerville - Chap. 10: DevOps & Code Management
- Sommerville - Chap. 9: Testing (Optional)
Assignments
S2 - Midway Self Review (Due: Nov. 1)
Programming Ethics
How do we engineer just systems?
Ethical responsibility, dark patterns
Readings
- Génova, González, Fraga - Ethical Responsibility of the Software Engineer
- Gray, Kou, Battles, Hoggatt, Toombs - The Dark (Patterns) Side of UX Design
- ACM Code of Ethics
Cromwell Day
Time to reflect
Assignments
A4 - Prototype (Due: Nov. 11)
(Re)Assessing Challenges + Deployment
Why does this feel so hard? When do we launch?
Scope creep, deploying to production
Assignments
J1 - Jargon Report (Due: Nov. 18)
Thanksgiving Break
Backup day
Starting Up
How do we do this for real for real?
Founding a tech startup
Final Presentations
Demo day!
Assignments
A5 - Minimum Viable Product (Due: Dec. 9)
S3 - Self-Team-Peer Review (Due: Dec. 13)
Communication
All online communication for this course will take place via
Discord. If you do not already have an account, please create one.
Join our server, then follow the instructions in the
#welcome channel to set your nickname and pronouns.
CSC223-F24 Discord Server Invitation:
https://discord.gg/DWH9nFM6gU
- #announcements: Important notices about class times, deadlines, office hours, etc.
- #general: Introduce yourself and discuss course-related material, off-topic ideas, etc.
- #questions: Ask any non-personal questions you have here. Use threads to respond. And don’t be shy; if you are wondering something, someone else is probably puzzled too!
- #reflections: Share your reactions, thoughts, or confusion about the weekly readings.
- DMs: Message me directly for matters that require individual communication.
I will
try to answer questions within 24hrs during the work week, but please ask your peers and TAs for help first. They will generally assist you more quickly; also remember I’m
not available on weekends! Sometimes I miss DMs, so don’t worry about pinging me again if you’re waiting on a reply. Lastly, please note that I’m terrible at responding to email. I’ll read it, but you’ll either get a reply right away, or between two days and two years later.
Grading
This course follows an
“ungrading” approach. In keeping with how software is evaluated, you will primarily receive qualitative feedback and only be assessed on a
simple scale: unacceptable (D/E); needs improvement (C); meets expectations (B); exceeds expectations (B+/A-); distinguished (A/A+). Additionally, you will
review your own performance and weigh in on your final letter grade. Your overall assessment will be weighted to reflect the workload.
- 50% Major project assignments & trainings
- 20% Reading reflections & research report
- 30% Class participation & presentations
Your success in this class will depend on your
active engagement with both the material and your classmates because software engineering is not a solo endeavor. To do well, you must demonstrate that you are working to master both
coding and communication.
Academic Integrity
As honorable software engineers, when we build on the code of those who came before us, we credit their contributions. Whenever you collaborate with others, whether in designated groups or informally as study partners, you must acknowledge your collaborators. Likewise, I expect you to always cite all sources used when preparing your assignments. This includes books, papers, articles, websites, blog posts, YouTube videos, StackOverflow pages, ChatGPT conversations, etc.
Participation & Absences
Though formal attendance will not be taken, you won’t be able to participate in class if you are not there. We only meet twelve times so your presence in each class matters. You should tell me in advance of a planned absence; and if you have an emergency, please inform me after you are safe. If you must isolate for health reasons, please use Discord to ask your peers to stream class for you via Zoom or Gather. Inform me ahead of time, but try to organize this yourself. Regardless, remember to stay home if you feel unwell.
Comfy Class Policies
Laptops and phones can be distracting, but they are important tools for us. Please avoid using your devices in class for purposes other than coursework. Hydration is essential, so bring beverages, but you must use closed containers to avoid spills. We have two breaks during which you can have a snack, but please refrain from eating during class. Everyone is welcome to use concentration accommodations like fidget toys, knitting, doodling, moving around, or sitting on the floor; just be mindful your focus doesn't disrupt others.
Fostering Respect & Inclusion
During this course we will be working closely together. When communicating with one another, I expect you to practice active listening. When someone is talking, focus on understanding what they are expressing rather than thinking of how you will respond. Additionally, keep in mind that our wide array of individual backgrounds shape our unique perspectives, so please respect one another when we have sincere differences of opinion.
Diversity Statement & Equity Commitment
As a mixed-race, Native, non-binary, neurodivergent person who was the first in their family to earn a doctoral degree, I have a stake in bettering, and first-hand knowledge regarding, the experience of marginalized folks in our society. I know that a welcoming learning environment can have a real impact, and so I am committed to making this classroom a comfortable place for all my students. Please let me know if you ever have thoughts, questions, or concerns about ensuring that we treat one another equitably.