Over the years, I compesated for lack of university-grade education by
being a good customer of the local libraries:
- Compilers, reading several textbooks such as CompilersPrinciplesTechniquesAndTools,
and many others.
- Algorithms — many, including classics such as DonaldKnuth's bible TheArtOfComputerProgramming,
CambridgeUniversityPress's NumericalRecipes and NicholasWirth's ancient, but still
brilliant, "Algorithms + Data Structures = Programs".
- Operating Systems — Too many to mention here, most of which quite
theoretical and boring. Of course, my favorite will always be AdvancedProgrammingInTheUnixEnvironment.
- Networking — Several books, including TcpIpIllustrated, several RFCs and
technical papers.
- Programming Languages — All the obvious textbooks such as BjarneStroustrup's
SeePlusPlusProgrammingLanguage, and many others like the old SeeProgrammingLanguage,
ThinkingInJava, and dozens of C++ books.
- Programming Techniques — Countless. Such as SeePlusPlusTemplateMetaprogramming
and the controversial ModernSeePlusPlusDesign by AndreiAlexandrescu.
My absolute favourite is BrianKernighan's and RobPike's ThePracticeOfProgramming.
- Software Architecture and Design — All the "must-read" classics such as
GangOfFour's DesignPatterns, UmlDistilled and UmlDesignPatterns.
- Project Management — My favourite certainly is TheMythicalManMonth, but I've
read a few others such as ExecutionPlainAndSimple.
- Technical Writing — TheElementsOfStyle and DonaldKnuth's TheTexBook are my
favourites on the topics of stylish writing and typesetting.
- Numerical Methods — I'm sorry to have quite a thin mathematical background.
Nevertheless, I enjoyed reading DonaldKnuth's ConcreteMathematics and
CambridgeUniversityPress' NumericalRecipes.
- Database — Relational algebra, principles of schema normalization, SQL.