Classic books that will help data scientists and engineers understand foundational software engineering methods.
As data scientists and engineers become more entrenched in software systems and production, it becomes increasingly important to understand and put into practice basic software engineering methods. Here are five classic software engineering texts that will help you communicate and work with developers on deployment, product flows, scaling machine learning modules, and more.
The Pragmatic Programmer—David Thomas, Andrew Hunt
"What makes [this book] truly stand out among the shelves of technical books is that it understands what it means to be a programmer. Programming is about trying to make the future less painful. It's about making things easier for our teammates. It's about getting things wrong and being able to bounce back. It's about forming good habits. It's about understanding your toolset. Coding is just part of the world of being a programmer, and this book explores that world."
—From the foreword by Saron Yitbarek, Founder & CEO of CodeNewbie
Code Complete—Steve McConnell
The practical lore of good coding is often passed down slowly in the ritualistic tribal dances of software architects, project leads, analysts, and more-experienced programmers. Even more often, it's the product of the individual programmer's trials and errors. This book is an alternative to the slow workings of the traditional intellectual potlatch. It pulls together the helpful tips and effective development strategies previously available mainly by hunting and gathering from other people's experience.
Growing Object-Oriented Software: Guided by Tests—Steve Freeman, Nat Pryce
This book is a practical guide to the best way to write object-oriented software using test-driven development (TDD). It describes the processes to follow, the design principles to strive for, and the tools to use in any object-oriented environment. Through an extended worked example, you'll learn how TDD works at multiple levels, using tests to drive the features and the object-oriented structure of the code, and using Mock Objects to discover and then describe relationships between objects.
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation—Jez Humble, David Farley
This groundbreaking book sets out the principles and technical practices that enable rapid, incremental delivery of high quality, valuable new functionality in software to users. Through automation of the build, deployment, and testing process, and improved collaboration between developers, testers, and operations, delivery teams can get changes released in a matter of hours—sometimes even minutes–no matter what the size of a project or the complexity of its code base. Jez Humble and David Farley present the foundations of a rapid, reliable, low-risk delivery process, introduce an automated process for managing all changes, from check-in to release, and discuss the "ecosystem" needed to support continuous delivery, from infrastructure, data and configuration management to governance.
Design Patterns Explained—Alan Shalloway, James R. Trott
Design patterns and object-oriented programming. You know it is essential to understand them, but they can be very hard to learn. If you are curious about design patterns or want to go deeper into understanding the object-oriented process, but find the current literature a bit too esoteric, this book is for you. With it you will gain a solid understanding of 12 core design patterns and a pattern used in analysis. At the end, you will be better equipped to create flexible and complete software that is easier to maintain.