Structure Interpretation of Computer Programs
- enough is said about it here. must-read.<p>The Algorithm Design Manual - Skiena
- a formidable way to learn algorithms and associated concepts. still challenging to read, but war stories offer great prose and I actually laughed several times. if you couple this book with Robert Sedgewick's online Princeton algorithms course you will be quite formidable with algos.<p>Designing Data Intensive Applications - Klepperman
- Mind blowing for me. Finally felt like I could reason about data-driven design by understanding modeling, stores, and distributed, as well as event-driven systems. Absolute must-read especially to fill the gaps if you don't have a CS degree.<p>These 3 have been above all the rest for me, would love to add another one to this list, please share!
The academic CS tomes never really gelled for me. It was .NET programmer Charles Petzold's guides that made things click<p><a href="http://www.charlespetzold.com/books.html" rel="nofollow">http://www.charlespetzold.com/books.html</a><p>I'd also give a shout out to Micheal Abrash's Graphics Programming Black Book that taught me the adage "the best optimizer is between your ears"<p><a href="http://www.jagregory.com/abrash-black-book/" rel="nofollow">http://www.jagregory.com/abrash-black-book/</a><p>Reference I keep close at hand is Ilya Grigorik's High Performance Browser Networking. Web apps with sub second latency can make all the difference<p><a href="https://hpbn.co/" rel="nofollow">https://hpbn.co/</a>
Surprised no ones mentioned these:<p>1. Design Patterns: Elements of Reusable Object-Oriented Software<p>2. Clean Code<p>3. The Pragmatic Programmer<p>They've helped immensely from working with small functions to the organisation of systems and systems of systems.
Automate the boring stuff.<p>I'm reading/have read other books listed by others in this thread so I won't list them, but this book what made me continue programming after I put it down.