A first year student at a nearby university wrote to me asking for
advice on becoming a hacker
(according ESR's
definition, he clarified).
He sent me a laundry-list of 18 programming languages he aimed to learn
by the time he graduated, and asked for other recommendations.
I've learned a lot from reading books,
so I compiled two reading lists for him.
The first list has must-read books that aspiring programmers should put
under their belts;
the second one contains nice-to-have books one can read as time permits.
Most of the books (or, unfortunately, their earlier editions) are on my
bookshelf.
Any programmer should complement these lists with books dealing
with application domains (for instance, operating systems, databases, graphics),
and specific programming languages.
Obligatory Reading
- Harold Abelson,
Gerald Jay Sussman, and Jullie Sussman.
Structure and Interpretation of Computer Programs.
MIT Press, Cambridge, second edition, 1996.
- Alfred V. Aho, Monica S.
Lam, Ravi Sethi, and Jeffrey D. Ullman.
Compilers, Principles, Techniques, and Tools.
Addison-Wesley, Reading, MA, second edition, 2006.
- Ken Arnold and James
Gosling.
The
Java Programming Language.
Addison-Wesley, Boston, MA, third edition, 2000.
- Jon Louis Bentley.
Programming Pearls.
Addison-Wesley, Reading, MA, second edition, 1999.
- F. P. Brooks.
The
Mythical Man Month.
Addison-Wesley, Reading, MA, 20th anniversary edition edition, 1995.
- Tom DeMarco and
Timothy R. Lister.
Peopleware: Productive Projects and Teams.
Dorset House Publishing, second edition, 1999.
- Martin Fowler and
Kendall Scott.
UML
Distilled: Applying the Standard Object Modeling Language.
Addison-Wesley, Boston, MA, second edition, 2000.
- Martin Fowler.
Refactoring: Improving the Design of Existing Code.
Addison-Wesley, Boston, MA, 2000.
With contributions by Kent Beck, John Brant, William Opdyke, and Don Roberts.
- Erich Gamma, Richard
Helm, Ralph Johnson, and John Vlissides.
Design
Patterns: Elements of Reusable Object-Oriented Software.
Addison-Wesley, Reading, MA, 1995.
- David Harel.
Algorithmics: the Spirit of Computing.
Addison-Wesley, third edition, 2004.
- John L. Hennessy
and David A. Patterson.
Computer Architecture: A Quantitative Approach.
Morgan Kaufmann, San Francisco, fourth edition, 2006.
- Andrew Hunt and David
Thomas.
The
Pragmatic Programmer: From Journeyman to Master.
Addison-Wesley, Boston, MA, 2000.
- Aviel William Strunk Jr.
and E. B. White.
The
Elements of Style.
Macmillan Publishing Co., New York, 1979.
- Brian W. Kernighan
and Rob Pike.
The
UNIX Programming Environment.
Prentice Hall, Englewood Cliffs, NJ, 1984.
- Brian W. Kernighan
and Rob Pike.
The
Practice of Programming.
Addison-Wesley, Reading, MA, 1999.
- Brian W. Kernighan
and P. J. Plauger.
The
Elements of Programming Style.
McGraw-Hill, New York, second edition, 1978.
- Brian W. Kernighan
and Dennis M. Ritchie.
The C
Programming Language.
Prentice Hall, Englewood Cliffs, NJ, second edition, 1988.
- Leslie Lamport.
LATEX: A Document Preparation System.
Adisson-Wesley, Reading, MA, second edition, 1994.
- Steve C McConnell.
Code
Complete: A Practical Handbook of Software Construction.
Microsoft Press, Redmond, WA, second edition, 2004.
- Eric Steven Raymond.
The
Art of Unix Programming.
Addison-Wesley, 2003.
- W. Richard Stevens.
Advanced Programming in the UNIX Environment.
Addison-Wesley, 1992.
- Bjarne Stroustrup.
The
C++ Programming Language.
Addison-Wesley, Reading, MA, third edition, 1997.
- Gerald M. Weinberg.
The
Psychology of Computer Programming.
Dorset House Publishing, New York, silver anniversary edition, 1998.
Recommended Reading
If your time and budget allows it, you can't go wrong splurging on the following
books.
- Andrei Alexandrescu.
Modern
C++ Design: Generic Programming and Design Patterns Applied.
Addison-Wesley, Boston, MA, 2001.
- Scott W. Ambler.
The
Elements of UML 2.0 Style.
Cambridge University Press, Cambridge, 2005.
- Ross Anderson.
Security Engineering: A Guide to Building Dependable Distributed Systems.
Wiley, New York, 2001.
- Joshua T. Bloch.
Effective Java.
Addison-Wesley, Boston, MA, 2001.
- David
Candevoorde and Nicolai M. Josuttis.
C++
Templates: The Complete Guide.
Addison-Wesley, Boston, MA, 2003.
- Pete Goodlife.
Code
Craft: The Practice of Writing Excellent Code.
No Starch Press, San Francisco, 2007.
- Daniel M. Hoffman and
David M. Weiss, editors.
Software Fundamentals: Collected Papers by David L. Parnas.
Addison-Wesley, Boston, MA, 2001.
- Brian W. Kernighan
and P. J. Plauger.
Software Tools.
Addison-Wesley, Reading, MA, 1976.
- Donald E. Knuth.
The
Art of Computer Programming, volume 1: Fundamental Algorithms.
Addison-Wesley, Reading, MA, third edition, 1997.
- Donald E. Knuth.
The
Art of Computer Programming, volume 2: Seminumerical Algorithms.
Addison-Wesley, Reading, MA, third edition, 1997.
- Donald E. Knuth.
The
Art of Computer Programming, volume 3: Sorting and Searching.
Addison-Wesley, Reading, MA, second edition, 1998.
- John Lions.
Lions'
Commentary on Unix 6th Edition with Source Code.
Annabooks, Poway, CA, 1996.
- Robert C. Martin.
Agile
Software Development: Principles, Patterns, and Practices.
Prentice Hall, Upper Saddle River, NJ, 2003.
- Marshall Kirk
McKusick and George V. Neville-Neil.
The
Design and Implementation of the FreeBSD Operating System.
Addison-Wesley, Reading, MA, 2004.
- Scott Meyers.
Effective C++.
Addison-Wesley, Reading, MA, second edition, 1998.
- Scott Meyers.
Effective STL.
Addison-Wesley, Reading, MA, 2001.
- Trevor Misfeldt,
Gregory Bumgardner, and Andrew Gray.
The
Elements of C++ Style.
Cambridge University Press, Cambridge, 2004.
- William H. Press, Saul A.
Teukolsky, William T. Vetterling, and Brian P. Flannery.
Numerical Recipes in C++.
Cambridge University Press, Cambridge, second edition, 2002.
- W. Richard Stevens, Bill
Fenner, and Andrew M. Rudoff.
UNIX Network Programming, volume 1.
Pearson Education, 2003.
- Herb Sutter and
Andrei Alexandrescu.
C++
Coding Standards: 101 Rules, Guidelines, and Best Practices.
Addison Wesley, 2004.
- Herb Sutter.
Exceptional C++ Style: 40 New Engineering Puzzles, Programming Problems, and
Solutions.
Addison Wesley, 2004.
- Allan Vermeulen,
Scott W. Ambler, Gregory Bumgardner, Eldon Metz, Trevor Misfeldt, Jim Shur,
and Patrick Thompson.
The
Elements of Java Style.
Cambridge University Press, Cambridge, 2000.
- Henry S. Warren Jr.
Hacker's Delight.
Addison-Wesley, Boston, MA, 2003.
Comments
Toot!
Share