Skip to main content

Undergraduate Program

Dynamic Languages and Software Development

Course: CSC  253
Term: Fall 2012-2013

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>
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