Preface 1. Programmer to Engineer An Engineer by Any Other Name Fundamentals Matter The Many Paths to Becoming a Software Engineer What You Were Taught Versus What You Need to Know Embrace the Lazy Programmer Ethos The Value of a Fresh Set of Eyes Don't Solution Too Quickly Apply the Golden Rule to Software Wrapping Up Putting It into Practice Additional Resources 2. Reading Code The Challenge of Working with Existing Code Cognitive Biases Approaching Unfamiliar Code Software Archeology Effective Code-Reading Strategies Leveraging IDE Features Reading Tests for Insight Practice Makes Perfect Wrapping Up Putting It into Practice Additional Resources 3. Writing Code Don't Reinvent the Wheel What Is Good Code? Less Is More The Zeroth Law of Computer Science Beware Boilerplate Code Favor Composition over Inheritance Favor Short Methods Write Code to Be Read The Problem with Code Comments Tests as Documentation Avoid Clever Code Code Reviews Avoid the Checkbox Code Review It Is Hard to Be Criticized Fostering Trust Learning New Languages Wrapping Up Putting It into Practice Additional Resources 4. Modeling What Is Software Modeling and Why Do We Do It? Which Diagrams Do You Need? Context Diagrams Component Diagrams
Class Diagrams Sequence Diagrams Deployment Diagrams Data Models Additional Diagrams Modeling Best Practices Keep It Simple Know Your Audience Be Careful with Your Color Choices Establish Standards and Templates Tools Wrapping Up Putting It into Practice Additional Resources 5. Automated Testing Benefits of Automated Testing Acts as Documentation Improves Maintainability Boosts Your Confidence Leads to Consistency and Repeatability Types of Automated Testing Unit Tests Integration Tests End-to-End Tests What Mix of Tests Should You Be Writing? What You Should Not Test Code Coverage Writing Tests Getting Started Assertions Writing Unit Tests Mocking Writing Integration Tests Writing End-to-End Tests Wrapping Up Putting It into Practice Additional Resources 6. Exploring and Modifying Unfamiliar Systems Understanding Unfamiliar Codebases Start with the Big Picture Understand the Execution Flow Build Mental Models Incrementally A Sample Process Making Changes Safely Refactoring Safely The Scout Rule Small, Reversible Changes Wrapping Up Putting It into Practice Additional Resources
7. User Interface Design Designing for Everyone What Is Usability? What Is Accessibility? What Are Localization and Internationalization? Know Your User Secondary Users You Are Not Your User Impact of Culture Maximizing Usability Principles of Design Contrast Repetition Alignment Proximity Applying the Principles of Design Make the Right Thing the Obvious Thing The Importance of Good Error Messages Destructive Actions Wrapping Up Putting It into Practice Additional Resources 8. Working with Data Understanding Data Types and Formats Structured Versus Unstructured Data Common Data Formats Specialized Data Considerations Storing Your Data Effectively Database Types and Their Use Cases Data Persistence and Management Database Connections and Transactions Consistency Models and Caching Strategies Planning for Data Growth Querying and Managing Data Performance Efficient Query Writing Tools and Best Practices Data Migration and Transformation Understanding Data Movement Fundamentals Handling Schema Changes Wrapping Up Putting It into Practice Additional Resources 9. Software Architecture What Is Architecture? Trade-Offs Architecture Versus Design Quality Attributes Identifying Quality Attributes Gaining Stakeholder Alignment Architectural Styles
The Agile Architect Fitness Functions Architectural Diagrams Architectural Decision Records Wrapping Up Putting It into Practice Additional Resources 10. To Production The Complexities of Production Environments Users Are Unpredictable "But It Works on My Machine" Building Production-Ready Code Performance Optimization Environment-Specific Configurations Error Handling and Logging Security Essentials Deployment Pipeline Deployment Environments Version Control Strategies Deployment Automation Deployment Strategies Continuous Integration and Continuous Deployment Production System Monitoring and Maintenance Monitoring System Maintenance Wrapping Up Putting It into Practice Additional Resources 11. Powering Up Your Productivity Optimizing Your Development Environment Know Your Development Tools Build Your Own Lightsaber Leverage the Power of the Command Line Harness the Power of Keyboard Shortcuts Strategic Automation The Perpetual Pursuit of Productive Habits Collaborative Learning Personal Knowledge Management Wrapping It Up Putting It into Practice Additional Resources 12. Learning to Learn Cramming Doesn't Work Skills Acquisition The Learning Habit Learning Through AI Fear of Missing Out Where Should You Invest Your Time? Practice Innovation Architectural Briefings
Practice Grace Wrapping Up Putting It into Practice Additional Resources 13. Mastering Soft Skills in the Tech World Collaborative Communication Communication Channels Enterprise Operator Know Your Audience Practicing Influence Understanding and Articulating Value Strategic Approaches to Influence Stakeholder Management Time Management Maker's Schedule Staying on Task Wrapping Up Putting It into Practice Additional Resources 14. Career Management Plan Your Career Path Find What You're Passionate About Exploring Your Career Options Walking Backward from Your Goals Deliberate Skill Acquisition Aligning Career Choices with Life Phases Walking Your Career Path Celebrate and Record Your Wins Overcome Imposter Syndrome Build Your Professional Community Cultivating Your Professional Relationships Acing Your Next Interview Create Work-Life Balance Wrapping Up Putting It into Practice Additional Resources 15. The AI-Powered Software Engineer What Is AI Really? Demystifying AI Terminology Understanding AI's Capabilities and Limitations AI as Your Pair Programmer Standalone Chatbot Assistants Inline IDE Assistants Agentic AI IDE Environments Prompt Engineering Fundamentals What Is Prompt Engineering? Essential Prompt Engineering Techniques Advanced Prompt Engineering Techniques How AI Might Shape Software Engineering Will AI Take My Job?
Vibe Code Reviews AI as Your Force Multiplier: From Writing Code to Problem-Solving Wrapping Up Putting It into Practice Additional Resources Index