CS 334: Additional Reading Material

Some of these articles may be assigned as part of homework. They may also be useful to you as a supplement to lectures and other reading. None of the readings listed on this page are required unless they are explicitly assigned in homework or in lecture.

Articles and Reports

  1. Why Undergraduates Should Learn the Principles of Programming Languages (Draft).
  2. J. McCarthy, Recursive functions of symbolic expressions and their computation by machine, Comm. ACM 3, 4 (1960) 184-195.
  3. Paul Wilson, Uniprocessor garbage collection techniques.
  4. Benjamin Zorn, Comparing mark-and sweep and stop-and-copy garbage collection, ACM conference on LISP and functional programming, 1990.
  5. Tony Printezis, Garbage Collection in the Java HotSpot Virtual Machine, . For a more technical discussion: here or here.
  6. Stephen M. Blackburn and Kathryn S. McKinley, Immix: A Mark-Region Garbage Collector with Space Ef´Čüciency, Fast Collection, and Mutator Performance, ACM SIGPLAN Conference on Programming Language Design and Implementation, 2008.
  7. E. D. Berger, B. G. Zorn, and K. S. McKinley, Composing High-Performance Memory Allocators, ACM SIGPLAN Conference on Programming Language Design and Implementation, 2001.
  8. Jeffrey Dean and Sanjay Ghemawat, MapReduce: Simplified Data Processing on Large Clusters, OSDI'04: Sixth Symposium on Operating System Design and Implementation, San Francisco, CA, December, 2004.
  9. Rob Pike, Sean Dorward, Robert Griesemer, Sean Quinlan, Interpreting the Data: Parallel Analysis with Sawzall, Scientific Programming Journal Special Issue on Grids and Worldwide Computing Programming Models and Infrastructure 13:4, pp. 227-298.
  10. The Java HotSpot Virtual Machine, Sun Microsystems.
  11. J. Backus, Can programming be liberated from the von Neuman style?, Comm. ACM 21, 8 (1978) 613-641. (large file)
  12. R. Harper, Introduction to Standard ML, Report ECS-LFCS-86-14, Dept. Computer Science, Univ. Edinburgh, 1989. (Link is to updated web version.)
  13. B. Kernighan, Why Pascal is Not My Favorite Programming Language, Bell Labs CSTR 100, July 1981.
  14. A. Koenig, An anecdote about ML type inference, USENIX Symposium on Very High Level Languages,1994.
  15. Westley Weimer and George C. Necula Finding and Preventing Run-Time Error Handling Mistakes. In Proceedings of the Conference on Object-Oriented Programming Systems, Languages and Applications, 2004.
  16. N. Wirth, Program development by stepwise refinement, Communications of the ACM, 14, 4 (1971) 221--227.
  17. D. Parnas, On the criteria to be used in decomposing systems into modules, Communications of the ACM, 15, 12 (1972) 1053-1058.
  18. Guy Steele, Growing a Language, Invited talk at OOPSLA 1998.
  19. D. Ingalls, Design principles behind Smalltalk, BYTE Special Issue on Smalltalk, August 1981. (Scanned by Dwight Hughes.)
  20. 15 Years Ago in BYTE: The Smalltalk Environment by Larry Tessler, BYTE, August 1996.
  21. Bjarne Stroustrop, excerpt from Design and Evolution of C++, 1994
  22. W.R. Cook, Interfaces and specifications for the Smalltalk-80 collection classes,.Proc ACM Conf. Object-Oriented Programming Systems, Languages, and Applications (OOPSLA '92). ACM SIGPLAN Notices ,Vol. 27, No. 10 (Oct. 1992), Pages 1-15.
  23. Henry James Gosling, Java: An Overview, 1995.
  24. Henry McGilton and James Gosling, The Java Language Environment: A White Paper, 1996.
  25. Michael Hicks and Scott M. Nettles, Dynamic Software Updating, ACM Transactions on Programming Languages and Systems (TOPLAS), 27(6), November 2005.
  26. Java 1.5:
  27. Scala:
  28. Tim Harris and Kier Fraser, Language Support for Lightweight Transactions, Object-Oriented Programming: Systems, Languages, and Applications, 2003.
  29. Security readings:


  1. E. Gamma et al., Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995.
  2. B. Stroustrup, The Design and Evolution of C++, Addison-Wesley, 1994, 461 pages.
  3. K. Arnold and J. Gosling, The Java Programming Language, Addison-Wesley, 1996.