CSC 290 Collaborative Software Engineering

Course Description

Running on low-cost, powerful computers, immense storage, and ubiquitous networks, a new generation of software has radically changed how information is distributed and accessed and is opening new possibilities in how (fast) knowledge is created and used. This revolution has been compared to the advent of printing, and the pertinent expertise and skill are considered as basic and essential as reading and writing.

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 mainly a series of group projects designing and implementing from scratch web-based software including a wiki-like system that can be programmed to produce various web applications that are in common use today.

Draft Syllabus

  • Programming languages and tools
    • how to define and describe---essence of programming
      • object orientation, lambda calculus, continuation passing, actor model, Curry-Howard isomorphism
      • case studies: scheme, Java, ruby, R
    • how to link and reuse---libraries and packages, type theory, module composition, design patterns, virtual machines
      • case studies: C header files, Java packages, managed run-time, augmenting an interpreted language
    • how to build---tools for version control, source browsing, debugging, and distributing
      • using emacs and command window
      • case study: the anatomy of a million-line open-source application
    • how to collaborate---tools for collaboration
      • chats, wiki, issue tracking, web 2.0
      • design problem: programmable wiki
  • Software engineering
    • history: programmable computers, high-level languages, software crisis, Unix, personal computing, interpreted languages, agile and extreme programming
    • software development process
      • requirement analysis, specification, architecture, implementation, testing, deployment, documentation
      • waterfall model, iterative, incremental, adaptive
    • basis of the discipline
      • modular design, information hiding, separation of concerns
      • selected reading: Brooks, Parnas, Milner, Kennedy, Booch, Gabriel
    • user interface design and documentation
    • case studies of industry software development (IBM/Microsoft/Google)
  • Collective intelligence and scalable information systems
    • collaborative information processing: searching, filtering, ranking, clustering, modeling, predicting
    • composition, communication, complexity
      • locality, connectivity, and other emergent properties
    • decentralized and self-organizing systems
      • strategy games, evolutionary systems
    • sustainable development
      • ethics, privacy, outsourcing, cloud computing, should software be free?

Example Programs

Show IP address shows the IP address of the client computer. The program has 15 lines of code.
Web-based hashtable allows anyone to insert key and value pairs from one computer and retrieve them from any other computer. The usage is as follows
  • to insert:
  • to query:

The program has 159 lines of code. The core is about 40 lines, and the rest is producing timing information such as the date/time of the insertion and the oldest entry in the table.

The table has a maximal size. Oldest entries are removed if the table becomes too large. Don't store anything that you cannot afford to lose!

Source code The source code is currently under svn and can be checked out from /p/compiler/repos/dingweb. The programs are written in Ruby.

Work in progress (restricted access)

Edit | Attach | Watch | Print version | History: r46 | r6 < r5 < r4 < r3 | Backlinks | Raw View | Raw edit | More topic actions...
Topic revision: r4 - 2008-11-26 - ChenDing
  • Edit
  • Attach
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding URCS? Send feedback