CSC 253/453 Collaborative Software Design (Syllabus, Fall 2023)

Chen Ding, Professor of Computer Science
MWs 3:25pm to 4:40 Hylan 202

Modern software is complex and more than a single person can fully comprehend. This course teaches collaborative programming which is multi-person construction of software where each person’s contribution is non-trivial and clearly defined and documented.  The material to study includes design principles, safe and modular programming in modern programming languages, software teams and development processes, design patterns, and productivity tools.  The assignments include collaborative programming and software design and development in teams.  The primary programming language taught and used in the assignments is Rust. Students in CSC 453 have additional reading and requirements.

Principles

  • Essential Difficulties: Complexity, Conformity, Changeability
  • Module Criteria
  • The Modular Structure of Complex Software
  • Design and Development of Program Families
  • Designing for Software Extension and Contraction

Rust

  • Programming without Loops and Branches: Iterators, Closures
  • Error Handling: Option, Result
  • Code Reuse: Generic Type, Trait, Trait Bound
  • Memory Safety: Ownership, Borrow, Lifetime, Smart Pointer

Software Design

  • Distributed Version Control
  • Behavioral Design Patterns: Command, New Type, RAII Guards, Strategy
  • Creational Design Pattern: Builder
  • Trait Object and State Pattern
  • Meta Programming
  • Logging and Serialization

Software Engineering

  • Team
  • Unified Software Development Process
  • Testing
  • Code Review

Human Values

  • Apportionment
  • Algorithmic Fairness
  • Fallibility and Truth Seeking

Past Students’ Comments

“Separation of concern is perhaps my favorite topic in software development right now; I love making software as modular and reusable as possible. Taking CSC 253 also helped me to understand the MVC architecture in mobile app development class almost immediately.”  (Fall 2022)

“A huge part of the course is graded on a complete group project. You’re assigned a random group, and you better pray to get group members who show up to class and do their parts.”  (Feb. 2023)

“The lessons on iterators truly opened my eyes to a whole new world of thinking about programming, and thinking about modules helped me understand the concept of information hiding and team collaboration, and especially communication and just how important it is. I will be bringing my learnings from your class to Seattle this summer for sure!”  (Fall 2022)

“The most meaningful part is doing the final project – DVCS in group with other 4 outstanding classmates. In this project, I learned how Git works, how to apply the design principles into practice, and how to collaborate well with others in programming. The reward didn’t show up immediately when and after the class, but afterward when I looked for an SDE job and prepared for the interviews, I was reminded of what I learned in the CSC453 course and found out how useful it is to my career.”  (Fall 2021)

On Rust

“Speaking of languages, it’s time to halt starting any new projects in C/C++ and use Rust for those scenarios where a non-GC language is required. For the sake of security and reliability. the industry should declare those languages as deprecated.”  – Mark Russinovich, CTO of Microsoft Azure, author of novels Rogue Code, Zero Day and Trojan Horse, Windows Internals, Sysinternals tools, author of novels Rogue Code, Zero Day and Trojan Horse, Windows Internals, Sysinternals tools, 9/19/2022