CSC 290A: Collaborative Software Engineering, Spring 2009

Course Description

This experimental course teaches principles and practices of collaborative software development. The topics include fundamentals of programming (more for organizing information than for managing computers), software engineering, scalable information systems, and current practice and tools for teamwork and virtual collaboration. The assignments are a series of individual and group programming projects designing software interacting through the Web.

Instructor, Office Hours, and Grading

Instructor: Chen Ding, Prof.

Teaching assistant: Konstantinos (Kostas) Menychtas

Lectures: Tuesdays 9:40-10:55am in CSB 601 and Thursdays 11.05am-12.20pm in CSB 632.

Office hours: Ding, Fridays, 10am to 11am or by appointment, CSB Rm 710, x51373. Kostas, Fridays 4pm to 6pm, or by appointment, CSB Rm 626

Grading: total 100%

  • Written assignments account for 20% of your total grade
  • Programming assignments account for 80% of your total grade
    • 40% for individual projects
    • 40% for team projects

Class Schedule and Reading Material

Lecture Topic Reading

Jan. 15

Introduction to complexity
(slides, ur access only)

programming, design, collaboration

Voices of computing by Denning (acm library)
History of programming languages keynote by Steele and Gabriel in 2007 (85 min movie from acm library, modest image/sound quality and limited playback control)
"Can't be built", by Gabriel (ieee library)

Jan. 20, 22

Everything is an object

object-oriented programming

Synthesizing OO and functional design by Krishnamurthi, Felleisen, and Friedman, 1998 (.ps at the author's site at Brown)
Ruby programming (free on-line book by Thomas and Hunt, another by Cooper from books24x7 through ur subscription)

Jan. 27, 29

Everything is a function

Lambda calculus, functional design

Church numerals (wiki page)
How to Design Programs by Felleisen, Findler, Flatt and Shriram Krishnamurthi (free on-line access, reference book for Scheme/general programming, use PLT Scheme)

Feb. 3, 5

The essence of programming languages

Scheme, actor model, Smalltalk

Evolution of lisp by Steele and Gabriel (acm lib, read 2.8, 2.10, 3.5 at least)

The early history of Smalltalk by Kay (acm lib)

Feb. 10

Brooks on software design

functional design in OO languages iterator design as an example

No Silver Bullet: Essence and Accidents of Software Engineering (on-line html)
The mythical man-month (acm lib, slides)
block, proc, and lambda in Ruby web post by Bendersky

Feb. 12

Lazy evaluation, streams, memoization

Revision control(slides by Kelsey)

*storing, retrieving, logging, splitting, merging

Structure and interpretation of computer programs on-line book site, Sec. 3.5
Lazy list (by Frank)
Local wiki page on svn (VersionStuff)
In class demos by Kelsey

Feb. 17

Software design (cont'd)

Lazy data structure and memoization (cont'd)

Why interaction is more powerful than algorithms (acm lib)

Feb 19

HTTP, CGI programming

Instant messaging systems

CGI book (Colburn, safari on-line)
IRCP (part II, chap. 10, network protocols handbook, safari on-line)
Jabber and XMPP(part II of programming Jabber by Adams, safari on-line)

Feb 23

Web 2.0 (slides)
XHTML, CSS, Java Script, Ajax

Instant messaging systems (cont'd)

Web 2.0 programming (van der Vlist et al. books24x7)

Feb 25

Object vs. class

Web 2.0 (cont'd)
XSLT (slides)

Self language (talk and paper by Smith and Unger, acm library)

Mar 3

Design patterns

Design patterns in Ruby by Olsen (safari on-line via ur subscription)
Design patterns by Lasater (books24x7 via ur subscription)
UML (Chapter 14 of Kak, books24x7, Chapter 5 of Garland and Anthony, books24x7)

Mar 5

Mid-term exam
(CSB 6th floor lab)



Programming tools

libraries, source browsing, version control, module systems, virtual machines

Open source development with CVS, 2nd Ed., Fogel & Bar (books24x7 via ur subscription, Chapters 2, 6, 9)
diet libc by von Leitner (an entertaining presentation, see also Chapter 13 of von Hagen's GCC book at book24x7)
Java virtual machine (Chapter 1 of Spell, books24x7, Chapter 14 of Meyers, books24x7)
Version control with subversion (free on-line version)
other material to be posted


Software engineering
development process, teamwork
Epigrams on programming by Perlis (acm library)
Software paradigms by Kaisler (books24x7 via ur subscription)
Components, COTS(Lau editor, books24x7, read Chapter 1)
Schuh's book on Agile development(books24x7 via ur subscription, read Chapter 3)
other material tbd


Web programming
Beginning XML 4th Ed. by Hunter et al. (books24x7 via ur subscription, Chapters 13, 22)

Apr. 2, 7, 9

Scalable systems I

theory of locality
The locality principle by Denning (acm lib)
Whole-program locality by Ding et al. (acm lib)

Apr. 14, 16

Scalable systems II

genetic "systems"

Selfish gene by Dawkins in 1976 (read Chapter 4, the gene machine, and Chapter 5, aggression and stability)

Apr. 21, 23

Scalable systems III

game theory

material and reading tbd

Written and Programming Assignments NEW

Class Collaboration and Help

Use the power of the wiki to collaborate and help each other - Edit or Add content to the following pages as you wish:

  • Question and Answers: Post questions and answers on anything concerning the class.
  • Tools: Information about tools we are going to be using.
  • External Resources: Links to useful resources not falling in the previous categories.
  • TWiki-related: Formatting hints and conventions we follow for the class TWiki pages
Edit | Attach | Watch | Print version | History: r46 | r37 < r36 < r35 < r34 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r35 - 2009-03-03 - ChenDing
  • Edit
  • Attach
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2019 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding URCS? Send feedback