canon

The Programmers’ Canon

0. English

Firstly, right from the start, English has been the Lingua Franca of computing…
— Edsger W. Dijkstra, EWD989

  1. R. Murphy. English Grammar in Use. Cambridge University Press, 2019. [Amazon]
  2. W. Strunk, E. B. White. The Elements of Style. Pearson, 2019. [Amazon]

1. Mathematics

Programming is one of the most difficult branches of applied mathematics…
— Edsger W. Dijkstra, EWD498

  1. Sir Th. Heath. A History of Greek Mathematics, Vol. 1-2. Dover Publications, 1981. [Amazon]
  2. G. Chrystal. Algebra: An Elementary Text-Book, Vol. 1–2. American Mathematical Society, 1999. [Amazon]

2. Hardware

People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird.
— Donald E. Knuth, MMIX: A RISC Computer for the Third Millennium

  1. J. Hennessy, D. Patterson. Computer Architecture: A Quantitative Approach. Morgan Kaufmann, 2017. [Amazon]
  2. J. Hennessy, D. Patterson. Computer Organization and Design: The Hardware/Software Interface. Morgan Kaufmann, 2016. [Amazon]

3. Fundamentals

If I have seen further it is by standing on the sholders of Giants.
— Isaac Newton, Letter to Robert Hooke

  1. E. W. Dijkstra, C. A. R. Hoare, O.-J. Dahl. Structured Programming. Academic Press, 1972. [Amazon]
  2. D. Knuth. Structured Programming with go to Statements. Computing Surveys, 6(4):261–301, 1974. [PDF]
  3. E. W. Dijkstra. A Discipline of Programming. Pearson, 1976. [Amazon]
  4. M. Felleisen, R. B. Findler, M. Flatt, S. Krishnamurthi. How to Design Programs. MIT Press, 2018. [Amazon] [Web]

4. Algorithms

As soon as an Analytical Engine exists, it will necessarily guide the future course of the science. Whenever any result is sought by its aid, the question will then arise — by what course of calculation can these results be arrived at by the machine in the shortest time?
— Charles Babbage, Passages from the Life of a Philosopher

  1. D. Knuth. The Art of Computer Programming. Addison-Wesley, 2022. [Amazon]
  2. R. E. Tarjan. Data Structures and Network Algorithms. Society for Industrial and Applied Mathematics, 1987. [Amazon]
  3. R. Bellman. Dynamic Programming. Dover Publications, 2003. [Amazon]

5. Methodology

Without systematic unity, our knowledge can not become science; it will be an aggregate, and not a system.
— Immanuel Kant, Critique of Pure Reason

  1. G. Polya. How to Solve It. Princeton University Press, 2015. [Amazon]
  2. B. W. Kernighan, P. J. Plauger. The Elements of Programming Style. McGraw Hill, 1978. [Amazon]
  3. F. P. Brooks. The Mythical Man-Month. Addison-Wesley, 1995. [Amazon]
  4. F. P. Brooks. The Design of Design. Addison-Wesley, 2010. [Amazon]
  5. J. Ousterhout. A Philosophy of Software Design. Yaknyam Press, 2021. [Amazon]