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
    mix-in,
    adaptor, decorator
    DRY
    test-driven
    scripting
    hg merge
3. iterator
    Proc, closure
    naming, lambda calculus
    Godel's discovery
4. iterator pattern
    extensible software
    Open-close
 
5. Ruby interpreter
    language extension
    language design as design
    software process
    iterative refinement
6. meta-class
    singleton
    Self
    test coverage
7. type language
    Haskell
    compiler design as design
8. actor
    continuation
    Steele's discovery
    midterm exam
9.  client/server
    event-driven
    concurrency 
    synchrony
 
10. observer
     proxy, drb
     team roles, XP
11. IM, Jabber
      distributed shared state
      paxos
      dynamic systems
 12. DSL
      WebWork
      mobile
13. streams
      memoization
      lazy evaluation
      program optimization   
14. memory systems
     garbage collection
     locality
     performance