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