Computing context

People, including programmers, do their computing very differently. Apart from tasks that get performed, individual requirements, and preferences, the differences are caused by previous experience, and by familiarity with different computing aspects: history, theories, technologies, software. For a beginner it is a mystery how everything works: a model consisting of "I do X, Y happens" rules gets formed, immediately visible parts of systems get perceived as fundamental. While it is often sufficient to achieve one's goals, even if those are to write software, generally it is rather inefficient and leads to poor results.

Better judgements require a more complete picture (even though it's always somewhat incomplete, and there are controversies even in mathematics and history). Here I'm collecting materials that I find helpful with that.

History

History is useful for putting things into perspective, generally doesn't get outdated, stays relevant throughout one's life. Some bits of it can be learned from CS books and papers, but there are dedicated books, articles, and documentary films as well: History of computing in Wikipedia, Finite of Sense and Infinite of Thought: A History of Computation, Logic and Algebra, BBS: The Documentary. Old books, papers, articles, and mailing list conversations are also helpful for reconstructing the picture.

Theory

Underlying theories tend to stay relevant considerably longer than particular applications of those. CS ones tend to rely on broader areas of mathematics, with even longer lifespans.

Wikipedia has a list of important publications in CS (along with similar lists for mathematics, theoretical CS, etc), which doesn't seem to be comprehensive, but at least may provide some pointers. It also lists some CS books.

Personally, at different periods of time I was excited about algorithms and data structures (plenty of books), AI (though books on statistics weren't that fun, and it seems dull to list them under "AI"), cryptography (Applied Cryptography), compilers and PLT (Dragon Book, SICP, Jones' Forth), formal verification (Software Foundations, TTFP), networking and operating systems (Tanenbaum's books). The mentioned books are educational and entry-level, after which one can proceed to more advanced books and papers.

Standards

Computing-related standards (POSIX, programming language specifications, instruction set architectures, ISO standards, Internet standards and other RFCs, Web standards, etc) have yet shorter lifespans, based on both theory and practice, and are closer to everyday programming.

Many mistakes, poor decisions, and/or reinventions seem to arise out of poor familiarity with existing standards.

Software

Operating systems provide a lot of useful functionality, as do common daemons and libraries. But as with standards and theories, often it gets ignored and reimplemented. Tanenbaum's "Modern Operating Systems" book pops up here again, as well as distribution-specific manuals (e.g., The Debian Administrator's Handbook), and just reading through info manuals and man pages. Though it's mostly useful for getting familiar with core OS functionality, while general software landscape is harder to map. Perhaps Debian Popularity Contest (and/or similar statistics of other operating systems) is worth checking to get familiar with most commonly installed software, though that alone would be far from a comprehensive picture. News websites and link aggregators tend to mention interesting software from time to time, though often it's just fashionable, new, and/or amusing software.

Cultures

Philosophy and ideologies behind software (as well as behind standards, and even behind mathematics) vary, affecting not just what programs do, but how they do it, how they are written, licensed, distributed, maintained (including used communication channels and tools), documented.

Perhaps it is worth mentioning Free Software Movement here, but a relevant picture could best be formed by reading public discussions: mailing list archives of prominent projects (which is a pretty good list of technologies and software worth checking; some of the other large archives are GNU Mail Archives, LKML archive, Debian Mailing Lists), discussions on web forums, technological news websites, issue trackers, chat logs. It won't shed much light on commercial/enterprise software cultures, though less project-focused discussions cover those sometimes.