Articles

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.
Syndicate content