A huge thanks to our editor, Athabasca Witschi. This book wouldnt be what it is without her. Gratitude to Kim Wimpsett for copyediting help, Jamie Lauer for proofreading, and to Bill Pollock, Barbara Yien, Katrina Taylor, and others at No Starch for guiding two newbies through the book writing process.
Thanks to our review crew: Joy Gao, Alejandro Crosa, Jason Carter, Zhengliang (Zane) Zhu, and Rachel Gita Schiff. Your feedback was invaluable. Thanks to Todd Palino for feedback on operations chapters, to Matthew Clower for an honest and exhaustive review of Chapter 6, to Martin Kleppmann and Pete Skomoroch for publisher introductions and guidance, and to Tom Hanley, Johnny Kinder, and Keith Wood for feedback on the management chapters.
We couldnt have written this book without support from our employers and managers. Thanks to Chris Conrad, Bill Clerico, Aaron Kimball, and Duane Valz for letting us take a shot at this project.
Preface
Y ou come into your new job ready to solve hard problems, to write elegant code, and to ply your craft. Exciting! Congratulations! We hope you get to tackle interesting challenges; work with wonderful, intelligent, and passionate colleagues; and build useful things.
But you will soon discover, or perhaps have already discovered, that knowing how to programhow to use computers to solve problemsis only half the battle. Its a critical part of your skillset, yet to be an effective software engineer, you need other skills that are not taught in school. The Missing README will teach you these skills.
We will explain modern practices for building, testing, and running production software, and describe behaviors and approaches that make for stronger teams and better teammates. Well give you practical advice on how to get help, write design documents, work on old code, be on-call, plan your work, and interact with your manager and team.
This book doesnt contain everything youll need to knowan impossible task that would make for an exhausting read. Instead, we focus on the most important information not usually covered in undergraduate computer science curricula. These topics are deep, so we end each chapter with a Level Up section containing recommended reading if you want more information.
The first few chapters explain what to expect when you begin your career at a company. The middle group expands your technical education: writing production-quality code, effective testing, code reviews, continuous integration and deployment, design documents, and architectural best practices. The final three chapters cover softer skills, such as Agile planning, working with your manager, and career advice.
This is an opinionated book influenced by our experiences building teams in rapidly growing, VC-funded, pre-IPO Silicon Valley companies. Your setting might be different, and thats fine. Specifics differ from company to company, but the fundamentals are universal.
The Missing README is the book we wish we had when we started outthe book we plan to give to new engineers we welcome to our teams. By the end, youll know what it takes to be a professional software engineer. Lets get started!
The Journey Ahead
Y our journey as a software engineer spans your entire career. There are many stops along the way: student, engineer, tech lead, maybe even manager. Most new engineers start with a technical foundation but little real-world experience. The chapters ahead will guide you toward the first milestone of your career, which youll reach when you can safely deliver code changes and work seamlessly with your team.
Reaching the first milestone is difficultthe information you need is scattered across the internet or, worse, tucked away in someones head. This book consolidates key information that you need to be successful. But what does a successful software engineer look like, and how do you get there?
Your Destination
Everyone begins as an entry-level engineer. To advance, youll need to be competent in several core areas.
- Technical knowledge You know your computer science fundamentals. You know how to use integrated development environments (IDEs), build systems, debuggers, and test frameworks. You are familiar with continuous integration, metrics and monitoring, configuration, and packaging systems. You proactively create and improve test code. You consider operations when making architectural decisions.
- Execution You create value by solving problems with code, and you understand the connection between your work and the business. Youve built and deployed small and medium-sized features. You write, test, and review code. You share on-call duties and debug operational issues. You are proactive and dependable. You participate in technical talks, reading groups, interviews, and presentations.