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