Liam O'Connor
University of New South Wales

About | Articles | Reading | Projects | Résumé

Reading
2nd April 2010

This page lists books and papers that I recommend all my students read if they wish to expand their understanding of computer science, philosophy, or their general worldliness. When I read these, they all changed the way I think, and I hope they will be insightful to you as well.

Books

Philosophy

Discourse on Method

By René Descartes | Read on Google Books

A humbly written and profound writing which lays the foundational reasoning for the scientific method. One of many flawed philosophical attempts to deduce existence from logic.

Gödel, Escher, Bach

By Douglas Hofstadter | Buy from Amazon

A well-written and profound intellectual adventure through art, computer science, mathematics and music; with some colorful Alice-inspired characters, the reader is guided unwittingly to Hofstadter’s fascinating insights into the nature of self-awareness. One of my most treasured books.

This book is incredibly difficult to categorize. It is only after much hand-wringing that I put it here.

I Am A Strange Loop

By Douglas Hofstadter | Buy from Amazon

A continuation of sorts to Gödel, Escher, Bach, this book once again blends a wide array of disciplines to explore the nature of self-awareness.

Computer Science

The Art of Computer Programming

by Donald Knuth, Stanford University Press | Homepage

A detailed analysis of algorithms and data structures which serves as a useful reference as well as an intriguing read. Even provides an algorithm on how to read the book.

A Discipline of Programming

by Edsger W. Dijkstra | Buy from Amazon

Dijkstra’s brilliant mind applied to a variety of algorithms. This book teaches one to understand the value of beautiful code, and, indeed, what beautiful code looks like.

He also talks about a wide range of interesting topics including structured programming and programming languages as formal systems, something all programmers would do well to understand.

Real World Haskell

by Brian O’Sullivan, Don Stewart, John Goerzen | Read online

An excellent tutorial book in idiomatic common Haskell, that also serves as a good reference for the hard parts. Targeted to people with prior programming experience.

Structure and Interpretation of Computer Programs

by Hal Abelson, Jerry Sussman, Julie Sussman | Read online

For a long time this textbook was used in introductory computer science courses at MIT. Using the hyperminimalist language Scheme, it explains core computer science concepts without the cruft or confusion present in many computer science courses.

Algebra of Programming

by Richard Bird, Oege de Moor | Buy from Amazon

An incredibly difficult to obtain but very foundational book that describes data structures as they are used in functional programming languages in terms of a computational algebra, and derives common functional data structures including Peano numbers and Linked Lists.

Programming Languages: Theory and Practice

by Robert Harper | Draft Online

An excellent book describing formal inference reasoning systems, formal semantics of programming languages, and other similar topics.

Types and Programming Languages

by Benjamin C. Pierce | Homepage

A thorough book explaining type systems and type theory applied to lambda calculi and simple typed languages, using formal inference rules.

Coders at Work

by Peter Seibel | Homepage

A series of interviews with famous programmers who worked on a variety of high-profile projects or made significant contribution to computer scientists.

Papers and Articles

Computer Science

Why Functional Programming Matters

by John Hughes | Read Here

An insightful paper about how functional programming leads to greater modularity and composability.

The Free Lunch is Over

by Herb Sutter | Read Here

An article explaining how concurrent and parallel programs will become increasingly relevant.

Computing Education

The Risks and Benefits of Teaching Purely Functional Programming in First Year

by Manuel M. T. Chakravarty and Gabriele Keller | See Here

A paper written by two UNSW lecturers who were involved with first-year teaching in Haskell for many years. Argues strongly for a teaching of broader computing concepts, and that Haskell and similar languages are good tools for that tuition (but not ends in and of themselves).

The Camel Has Two Humps

by Saeed Dehnadi and Richard Bornat | Read Here

About the problems faced by computer science educators about the confronting statistical reality that a student’s success learning programming can be determined before students even take a programming class, regardless of motivation or other factors. Update: A followup to this has been published here.

On the Cruelty of Really Teaching Computer Science

by Edsger W. Dijkstra | Read Here

A short writing by Dijkstra on the failure of the educational system to teach large leaps in intellectual progress as anything more than incremental steps from prior experience.

Programming Culture

How To Be a Hacker

by Eric S. Raymond | Read Here

A short article explaining the hacker culture, the value of freedom, and the mental disciplines required.

The Cathedral and the Bazaar

by Eric S. Raymond | Read Here

A paper explaining the power and virtues of the open source development model used in projects such as the linux kernel.

How To Be a Programmer

by Robert L. Read | Read Here

An article explaining the skills needed not only to write programs, but to work with other programmers in a software development environment.