Dynamic Languages and Software Development

CSC 253/453 Dynamic Languages and Software Development  (new course 2012)

Course repository updates

  • 9/3/12. material for week 2: 4 design patterns, unit testing, block and iterator
  • 8/30/12. complete chapters on design intro, dyn PL, and distributed version control
  • 8/29/12.  pre-lecture material for the first two lectures posted

Course text

Below in two formats is the pre-lecture preparation material for the first two lectures.  Later updates will be made through the class repository.  See the preparation instructions on how to obtain the class repository.

pdf version
html version

Instructor, time and description

Instructor: Chen Ding, Prof., CSB Rm 710, x51373
Lectures: Tuesdays and Thursdays, 3:25pm to 4:40pm, CSB 601

TA: Brian Gernhardt, gernhard <at> cs.rochester.edu
Office Hours: TBA

Modern software is increasingly constructed from existing components, dynamically composed and run in a networked environment.  The course teaches concepts, principles and practices of dynamic programming languages and modern software design. The topics include advanced techniques in procedural, functional, and object-oriented programming; composition of functions, objects and modules; design patterns; software process and agile methods;  tools for collaborative software development; and select topics in mobile and on-line software development.  Course assignments consist of individual and group projects and presentations, including the development of collaborative software (groupware).

CSC 252 and CSC 254 are recommended before taking the course.  The course does not have a single textbook.  Lecture slides and other material will be distributed through the class repository.

Topics and schedule

1. why 2/453, what is design, class repository
    class vs. object, public_methods puzzle
    hg init pull/push (-f) add/commit
2. module
    adaptor, decorator
    hg merge
3. iterator
    Proc, closure
    naming, lambda calculus
    Godel's discovery
4. iterator pattern
    extensible software
5. Ruby interpreter
    language extension
    language design as design
    software process
    iterative refinement
6. meta-class
    test coverage
7. type language
    compiler design as design
8. actor
    Steele's discovery
    midterm exam
9.  client/server
10. observer
     proxy, drb
     team roles, XP
11. IM, Jabber
      distributed shared state
      dynamic systems
 12. DSL
13. streams
      lazy evaluation
      program optimization   
14. memory systems
     garbage collection