Software engineering at Google lessons learned from programming over time
Today, software engineers need to know not only how to program effectively but also how to develop proper engineering practices to make their codebase sustainable and healthy. This book emphasizes this difference between programming and software engineering. How can software engineers manage a livin...
Otros Autores: | , , |
---|---|
Formato: | Libro electrónico |
Idioma: | Inglés |
Publicado: |
Beijing :
O'Reilly
March 2020
|
Edición: | First edition |
Materias: | |
Ver en Biblioteca Universitat Ramon Llull: | https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009631059406719 |
Tabla de Contenidos:
- Intro
- Foreword
- Preface
- Programming Over Time
- Google's Perspective
- What This Book Isn't
- Parting Remarks
- Conventions Used in This Book
- O'Reilly Online Learning
- How to Contact Us
- Acknowledgments
- I. Thesis
- 1. What Is Software Engineering?
- Time and Change
- Hyrum's Law
- Example: Hash Ordering
- Why Not Just Aim for "Nothing Changes"?
- Scale and Efficiency
- Policies That Don't Scale
- Policies That Scale Well
- Example: Compiler Upgrade
- Shifting Left
- Trade-offs and Costs
- Example: Markers
- Inputs to Decision Making
- Example: Distributed Builds
- Example: Deciding Between Time and Scale
- Revisiting Decisions, Making Mistakes
- Software Engineering Versus Programming
- Conclusion
- TL
- DRs
- II. Culture
- 2. How to Work Well on Teams
- Help Me Hide My Code
- The Genius Myth
- Hiding Considered Harmful
- Early Detection
- The Bus Factor
- Pace of Progress
- In Short, Don't Hide
- It's All About the Team
- The Three Pillars of Social Interaction
- Why Do These Pillars Matter?
- Humility, Respect, and Trust in Practice
- Lose the ego
- Learn to give and take criticism
- Fail fast and iterate
- Blameless Post-Mortem Culture
- Learn patience
- Be open to influence
- Being Googley
- Conclusion
- TL
- DRs
- 3. Knowledge Sharing
- Challenges to Learning
- Philosophy
- Setting the Stage: Psychological Safety
- Mentorship
- Psychological Safety in Large Groups
- Growing Your Knowledge
- Ask Questions
- Understand Context
- Scaling Your Questions: Ask the Community
- Group Chats
- Mailing Lists
- YAQS: Question-and-Answer Platform
- Scaling Your Knowledge: You Always Have Something to Teach
- Office Hours
- Tech Talks and Classes
- Documentation
- Updating documentation
- Creating documentation
- Promoting documentation
- Code
- Scaling Your Organization's Knowledge
- Cultivating a Knowledge-Sharing Culture
- Respect
- Incentives and recognition
- Establishing Canonical Sources of Information
- Developer guides
- go/ links
- Codelabs
- Static analysis
- Staying in the Loop
- Newsletters
- Communities
- Readability: Standardized Mentorship Through Code Review
- What Is the Readability Process?
- Why Have This Process?
- Conclusion
- TL
- DRs
- 4. Engineering for Equity
- Bias Is the Default
- Understanding the Need for Diversity
- Building Multicultural Capacity
- Making Diversity Actionable
- Reject Singular Approaches
- Challenge Established Processes
- Values Versus Outcomes
- Stay Curious, Push Forward
- Conclusion
- TL
- DRs
- 5. How to Lead a Team
- Managers and Tech Leads (and Both)
- The Engineering Manager
- The Tech Lead
- The Tech Lead Manager
- Moving from an Individual Contributor Role to a Leadership Role
- The Only Thing to Fear Is ... Well, Everything
- Servant Leadership
- The Engineering Manager
- Manager Is a Four-Letter Word
- Antipatterns
- Positive Patterns
- The Unexpected Question
- Other Tips and Tricks
- People Are Like Plants
- Conclusion
- TL;DRs
- 6. Leading at Scale
- 7. Measuring Engineering Productivity
- III. Processes
- 8. Style Guides and Rules
- 9. Code Review
- 10. Documentation
- 11. Testing Overview
- 12. Unit Testing
- 13. Test Doubles
- 14. Larger Testing
- 15. Deprecation
- IV. Tools
- 16. Version Control and Branch Management
- 17. Code Search
- 18. Build Systems and Build Philosophy
- 19. Critique: Google's Code Review Tool
- 20. Static Analysis
- 21. Dependency Management
- 22. Large-Scale Changes
- 23. Continuous Integration
- 24. Continuous Delivery
- 25. Compute as a Service
- V. Conclusion
- Index.