Classics

Things Every CS Major Should Read

The page is currently in very rough form.

This page provides a list of papers that department faculty think our students would benefit from reading. It will evolve over time.

Anonymous. n.d. The story of Mel, a real programmer.

A funny historical piece. The story of Mel should give you a sense of a different era of programming, help you think differently about the relationships between code and data, and remind you of moral obligations of programmers.

John Backus. 1978. Can programming be liberated from the von Neumann style?: a functional style and its algebra of programs. Commun. ACM 21, 8 (August 1978), 613-641. DOI=10.1145/359576.359579 http://doi.acm.org/10.1145/359576.359579

We've seen an evolution of approaches to program design. Early programs were unstructured. In the 70's and 80's, there was a move toward structured programming. In the 80's, 90's, and 00's, object-oriented programming was the primary mechanism. But in the 10's we're seeing increasing understanding of why a functional approach may be better. Backus, who invented Fortran, realized the power of functional programming decades ago. The first parts of this article provide a nice summary of this power.

Jon Bentley. 1983. Programming pearls: Writing correct programs. Commun. ACM 26, 12 (December 1983), 1040-1045. DOI=10.1145/358476.358484 http://doi.acm.org/10.1145/358476.358484

A very interesting discussion of a famous and often incorrectly implemented algorithm: binary search. Bentley provides an excellent example of the design of a unit test (although he does not call it such), then suggests that there are more formal techniques beyond unit testing likely to provide us with more confidence in our results.

Fred Brooks. The Mythical Man-Month.

A classic book on software engineering. Read it to better understand ways to think about group projects (and managing group projects).

Paul Graham. 2002. The roots of Lisp. http://www.paulgraham.com/rootsoflisp.html

Paul Graham. 2002. What made Lisp different. http://www.paulgraham.com/diff.html

Grinnell starts our curriculum with Scheme, a dialect of Lisp. And we return to Lisp in many classes. These articles by Graham suggest reasons that Lisp remains a powerful programming model.

Ken Thompson. 1984. Reflections on trusting trust. Commun. ACM 27, 8 (August 1984), 761-763. DOI=10.1145/358198.358210 http://doi.acm.org/10.1145/358198.358210

Thompson's Turing Award speech on reading and trusting code.

Stuart Wray. 2010. How pair programming really works. IEEE Computer. http://www.computer.org/cms/Computer.org/ComputingNow/homepage/2010/0110/W_SW_PairProgramming.pdf

There are a variety of good articles on pair programming. This is a nice short one.

CS Table, 26 February 2010: Classics of Software Engineering: No Silver Bullet

This Friday we will consider one of the famous pieces of writing on software engineering, by Frederick P. Brooks, a primary architect of OS/360.

Brooks, Frederick P., Jr. (April 1987). "No Silver Bullet - Essence and Accidents of Software Engineering". IEEE Computer 20 (4): 10-19.

Grinnell College's CS Table is a weekly gathering of folks on campus (students, faculty, staff, alums, etc.) to talk about issues relating to computer science. CS Table meets each Friday at noon in JRC 224A, the Day Public Dining Room (PDR) in the Joe Rosenfeld '25 Center (JRC). All are welcome, although computer science students and faculty are particularly encouraged to attend.

The Spring 2010 theme of CS Table is Software Design.

Contact Professor Rebelsky for further information or for a printed copy of the reading.

Syndicate content