The term Mechanical Sympathy was coined by racing driver Jackie Stewart and applied to software by Martin Thompson. Jackie Stewart said, “You don’t have to be an engineer to be be a racing driver, but you do have to have Mechanical Sympathy.” He meant that understanding how a car works makes you a better driver. This is just as true for writing code. You do need to understand how the hardware works and take that into consideration when you design software.
(from here)
- Book: The Elements of Computing Systems: Building a Modern Computer from First Principles - how to build modern computer with a boolean logic gate, step by step.
- Book: Systems Performance: Enterprise and the Cloud - not really fundamentals, but covers most of hardware aspects, starting from concepts and ending with performance tunning for every hardware type.
- Book: Computer Architecture: A Quantitative Approach
- Book: Understanding Software Dynamics
- From NAND gates to tetris - a course based on the "elements of computer systems" book
- Cliff Click - A Crash Course in Modern Hardware
- Course: Digital Design & Computer Architecture
- Paper: What every programmer should know about memory (+ what has changed ) - covers everything there is to know for software people. After reading this paper DDR4 spec looks less intimidating.
- Article: Memory Bandwidth. Napkin Math - how to benchmark RAM throughput and how is it in comparison with theoretical limits.
- Reference Book: Intel® 64 and IA-32 ArchitecturesOptimization Reference Manual
- Book: Is Parallel Programming Hard, And, If So,What Can You Do About It?
- Paper: Locating Cache Performance Bottlenecks Using Data Profiling
- Paper: Performance Tuning for Low-Latency Applications
- Paper: Memory Barriers: a Hardware View for Software Hackers
- Article: Modern MicroprocessorsA 90-Minute Guide!
- Paper: Evaluating the Cost of Atomic Operations on Modern Architectures
- Book: Understanding Latency Hiding on GPUs - everything you need to know about GPU
- Chapter 9 in Systems Performance: Enterprise and the Cloud is great
- Fantastic SSD Internals and How to Learn and Use Them
- Blog posts series: Coding for SSDs - meh. but gives you the basics
- Book: Computer Networking: A Top-Down Approach
- Book: High Performance Browser Networking - reads like "computer networking, but down-to-top approach". More focused on the most recent developments, while not diving too deep into fundamentals
- Article: How to Calculate TCP throughput for long distance WAN links
- Twitter thread on TCP optimizations
- Paper: Fundamental Limits of Online Network-Caching
- Book: Systems Performance: Enterprise and the Cloud
- E-Book: Algorithms for Modern Hardware
- Long article: Theoretical performance guide
- Book: Every Computer Performance Book: How to Avoid and Solve Performance Problems on The Computers You Work With
- Book: Performance analysis and tunning on modern CPUS
- Paper: I/O Is Faster Than the CPU – Let’s Partition Resourcesand Eliminate (Most) OS Abstractions
- Article: Performance Anti-Patterns
- Book: The Art of Computer Systems Performance Analysis: Techniques for Experimental Design, Measurement, Simulation, and Modeling
- Book: Guerrilla Capacity Planning: A Tactical Approach to Planning for Highly Scalable Applications and Services
- Book: Analyzing Computer System Performance with Perl::PDQ
- Book: Performance Modeling and Design of Computer Systems: Queueing Theory in Action