290A Collaborative Software Design

 

Course Description

The course teaches principles and practices of collaborative software development. The topics include fundamentals of programming, software design, software development process, and advanced tools in modern software construction.  The assignments consist of initially individual and then group projects designing, implementing, and deploying distributed software components interacting through Web-based interfaces.  One third of the class time will be used for students to practice technical presentation in various stages of software design.  Depending on availability, some projects may involve local industry advisors and use of smart phones. 

The instructor encourages participation from non-computer science students.  An aim of studying collaborative design is for collaboration among people of different background and interests.  The topics, although wide-ranging in scope, are composed of basic concepts and accompanied by hand-on practice for them to be grasped by people who merely want to use the technology.  Textbooks and reading material will be accessible through on-line book sites (through university subscription) and provided as handouts.
 

Administratives

Instructor: Chen Ding, Associate Professor of Computer Science
Lectures: Tuesdays and Thursdays, 11:05am-12:20pm, CSB 601
Grading: total 100%

written assignments, 20% of total grade
programming assignments, 80%

40% for individual work and 40% for team work

Topics

  • introduction to complexity
    • rationalism vs empiricism
    • interaction and openess
    • collective behavior
  • fundamentals
    • essence of object oriented design
    • essence of functional design
    • actor model and Steele's discovery
    • software correctness
      • static and dynamic typing
      • unit testing
    • advanced concepts/techniques such as exceptions, lazy evaluation, streams, memoization
  • software design
    • treatments by Brooks, Parnas, Gabriel and others
    • principles of software interaction
    • design patterns
      • iterator
      • observer, adapter, proxy, decorator
      • factory, builder, singleton
      • interpreter, meta-programming
  • software development process
    • sequential, incremental, iterative
    • agile and XP concepts: Scrum, time-box, roles of a team
    • open-source and for-profit models
  • advanced development tools
    • version control, testing coverage, performance profiling
  • Web and network
    • communication system design
    • http, cgi, css, ajax
    • instant messaging protocols