Engr 692: Special Topics in Engineering Science
(Ruby and Software Development)
Fall 2006
Lecture Notes

  1. Lecture Notes on Data Abstraction (Java content not discussed): [slides]
    Supplementary notes: Queue ADT
    Supplementary ADT Case Study: Ranked Sequence

  2. Nell Dale and Henry Walker. "Abstract Specification Techniques," Chapter 1, In Abstract Data Types: Specifications, Implementations, and Applications, pp. 1-34, D. C. Heath, 1996.

    Solution to Homework #1

  3. Understanding Inheritance (Budd's UOOPJ, Chapter 8): [slides]

  4. Introductory Ruby: [Session 1] [Session 2]

  5. Employee ADT in Ruby:
    [source code] [63-line paginated listing]

  6. Natural number ADT in Ruby:
    [source code] [63-line paginated listing] [older, simpler Java version]

  7. Background on design patterns:
    1. Introduction to Design Patterns
    2. Designing with Patterns, prepared by Yi Liu and Conrad Cunningham.

  8. Inverted index program in Ruby: [source code] [63-line paginated listing]

  9. Simple expression recognizer in Ruby:
    [source code] [63-line paginated listing] [older Haskell version]

  10. "Modules," Chapter 9, in Dave Thomas, with Chad Fowler, and Andy Hunt. Programming Ruby: The Pragmatic Programmer's Guide, Second Edition, The Pragmatic Bookshelf, 2005.

  11. Using Procs and lambdas (examples): [63-line paginated listing]

  12. Martin Fowler. Language Workbenches: The Killer-App for Domain Specific Languages? http://www.martinfowler.com/articles/languageWorkbench.html, June 2005.
    [author's website] [local copy]

  13. Martin Fowler. Generating Code for DSLs, http://www.martinfowler.com/articles/codeGenDsl.html, June 2005.
    [author's website]

  14. Conrad Cunningham. Ruby version of Fowler's DSL framework.

  15. Jim Weirich. "Rake Tutorial," "Rake User Guide," and "Rake by Example," 2005.
    (Basic ideas discussed.) [Ruby Rake web site]

  16. Jim Freeze. Creating DSLs with Ruby, Artima Developer, http://www.artima.com/rubycs/articles/ruby_as_dsl.html, March 2006.
    [Artima website] [local printer-friendly copy]

  17. Jamis Buck. Writing Domain Specific Languages, the { buckblogs :here }, 20 April 2006.
    [blog entry]

  18. Jon Bentley. "Programming Pearls: Little Languages," Communications of the ACM, Vol. 29, No. 8, pp. 711-721, August 1986. [PDF]

  19. Conrad Cunningham. Domain-specific language for simple surveys:
    [Ruby source code] [test DSL input file] [test DSL input file with errors]

  20. (Not discussed explicitly.) Marjan Mernik, Jan Heering, and Anthony M. Sloane. "When and How to Develop Domain-Specific Languages," ACM Computing Surveys, Vol. 37, No. 4, pp. 316-344, Decembver 2005. (Not discussed extensively.)

  21. Mechanisms for Software Reuse (Budd's UOOPJ, Chapter 10): [slides]

  22. Replacement and Refinement: [slides]

  23. Implications of Inheritance (Budd's UOOPJ, Chapter 11): [slides]

  24. A Second Look at Classes: [slides]

  25. "Classes and Objects," Chapter 24, in Dave Thomas, with Chad Fowler, and Andy Hunt. Programming Ruby: The Pragmatic Programmer's Guide, Second Edition, The Pragmatic Bookshelf, 2005.

  26. Jim Weirich. Dependency Injection in Ruby, { | one, step, back | } , October 2004.
    [blog entry]

  27. Martin Fowler. Inversion of Control Containers and the Dependency Injection pattern, http://www.martinfowler.com/articles/injection.html, January 2004.
    [author's website]

  28. Domain Modeling: [slides]

  29. (Not covered.) James Coplien, Daniel Hoffman, and David Weiss, Commonality and Variability in Software Engineering, IEEE Software, November/December 1998. [paper]

  30. Sam Ruby. "Continuations for Curmudgeons," Intertwingly (blog), http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons April 2005.
    [blog article] [Fibonacci program]

  31. (Added later.) Martin Fowler. "Domain Specific Langauges," work in progress for a book, February 2008. http://www.martinfowler.com/dslwip/. [Author's website]

UP to ENGR 692 root document?

Copyright © 2008, H. Conrad Cunningham
Last modified: 14 Sep 2008