The Programmers’ Canon
0. English
Firstly, right from the start, English has been the Lingua Franca
of computing…
— Edsger W. Dijkstra, EWD989
- R. Murphy.
English Grammar in Use.
Cambridge University Press, 2019.
[Amazon]
- 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
- Sir Th. Heath.
A History of Greek Mathematics, Vol. 1-2.
Dover Publications, 1981.
[Amazon]
- 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
- J. Hennessy, D. Patterson.
Computer Architecture: A Quantitative Approach.
Morgan Kaufmann, 2017.
[Amazon]
- 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
- E. W. Dijkstra, C. A. R. Hoare, O.-J. Dahl.
Structured Programming.
Academic Press, 1972.
[Amazon]
- D. Knuth.
Structured Programming with
go to
Statements.
Computing Surveys, 6(4):261–301, 1974.
[PDF]
- E. W. Dijkstra.
A Discipline of Programming.
Pearson, 1976.
[Amazon]
- 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
- D. Knuth.
The Art of Computer Programming.
Addison-Wesley, 2022.
[Amazon]
- R. E. Tarjan.
Data Structures and Network Algorithms.
Society for Industrial and Applied Mathematics, 1987.
[Amazon]
- 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
- G. Polya.
How to Solve It.
Princeton University Press, 2015.
[Amazon]
- B. W. Kernighan, P. J. Plauger.
The Elements of Programming Style.
McGraw Hill, 1978.
[Amazon]
- F. P. Brooks.
The Mythical Man-Month.
Addison-Wesley, 1995.
[Amazon]
- F. P. Brooks.
The Design of Design.
Addison-Wesley, 2010.
[Amazon]
- J. Ousterhout.
A Philosophy of Software Design.
Yaknyam Press, 2021.
[Amazon]