Maruf's Software Engineering Reading List
Leadership
The Hard Thing About Hard Things
The Manager's Path: A Guide for Tech Leaders Navigating Growth and Change
Amazon Leadership Principles
Managing Humans: Biting and Humorous Tales of a Software Engineering Manager
Managing the Unmanageable: Rules, Tools, and Insights for Managing Software People and Teams
Turn the Ship Around!: A True Story of Turning Followers into Leaders
Leadership Is an Art
Stories of reaching to Staff Sofware Engineer
Trillion Dollar Coach
Decisive Moments for Engineering Leaders
High Growth Engineering
The First 90 Days: Proven Strategies for Getting Up to Speed Faster and Smarter, Updated and Expanded
It Doesn't Have to Be Crazy at Work
Humble Inquiry: The Gentle Art of Asking Instead of Telling
How Google Works
The Five Dysfunctions of a Team: A Leadership Fable
Software Architecture
Is Design Dead?
Architecture is dependency management
Micro Service Architecture
Don’t Let Architecture Astronauts Scare You
HTTP API Design Guide
The Twelve-Factor App
AWS TIPS I WISH I'D KNOWN BEFORE I STARTED
Software Design Patterns Index
The key to synchronizing clocks over networks is taming delay variability
Distributed Systems
Dynamo: Amazon’s Highly Available Key-value Store
Bigtable: A Distributed Storage System for Structured Data
Cassandra - A Decentralized Structured Storage System
Programming Models for Distributed Computing
CMU: Distributed Systems
The C10K problem
Files are hard
Introduction to Distributed System Design
The Fallacies of Distributed Computing Reborn: The Cloud Era
Distributed Systems and the End of the API
10 Technical Papers Every Programmer Should Read At Least Twice
Locality-aware request distribution in cluster-based network servers
Consistent Hashing and Random Trees: Distributed Caching Protocols for Relieving Hot Spots on the World Wide Web
Scalability
Notes on Distributed Systems for Young Bloods
There is No Now
SWIM Protocol explained
If You Have Too Much Data, then "Good Enough" Is Good Enough
Fighting Fire With Fire: Using Randomized Gossip To Combat Stochastic Scalability Limits
On Designing and Deploying Internet-Scale Services
Harvest, Yield, and Scalable Tolerant Systems
Scaling Memcache at Facebook
Lessons from Giant-Scale Services
How I Learned To Stop Worrying And Love Using A Lot Of Disk Space To Scale
Six things I wish we had known about scaling
7 Stages of Scaling Web Applications
Software Testing
What Is Software Testing? And Why Is It So Hard?
Fifty Quick Ideas To Improve Your Tests
Thinking, Fast and Slow
Lessons Learned in Software Testing: A Context-Driven Approach
Don't Make Me Think
Testers Rage
Test automation and software craftsmanship
Testing vs Quality Management – Quality Management
Good and Bad Technical Debt (and how TDD helps)
Code Smell
The many reasons your deployment is racy
On Unit Testing
LOAD TESTING: AN UNEXPECTED JOURNEY
TDD is dead. Long live testing
Monorepo
Advantages of monorepos
Advantages and Disadvantages of a Monolithic Repository
Why Google Stores Billions of Lines of Code in a Single Repository
Why you should use a single repository for all your company’s projects
Ethics
MIT: Ethical and Social Aspects of Computing
The ethics of algorithms: Mapping the debate
Counting the Countless
Algorithmic realism: expanding the boundaries of algorithmic thought
Why AI Is Still Waiting For Its Ethics Transplant
Coding is not ‘fun’, it’s technically and ethically complex
https://www.nytimes.com/2019/01/26/business/against-hustle-culture-rise-and-grind-tgim.html
Psychometric Profiling: Persuasion by Personality in Elections
Technology and The Worker
On Design Thinking
Miscellaneous
The Friendship That Made Google Huge
The Anatomy of a Large-Scale Hypertextual Web Search Engine
Being a Noob
How To Think For Yourself
Attention Is All You Need
Distance matters