The Clean Coder
A Code of Conduct for Professional Programmers
Robert C. Martin
Upper Saddle River, NJ Boston Indianapolis San Francisco
New York Toronto Montreal London Munich Paris Madrid
Capetown Sydney Tokyo Singapore Mexico City
Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and the publisher was aware of a trademark claim, the designations have been printed with initial capital letters or in all capitals.
The author and publisher have taken care in the preparation of this book, but make no expressed or implied warranty of any kind and assume no responsibility for errors or omissions. No liability is assumed for incidental or consequential damages in connection with or arising out of the use of the information or programs contained herein.
The publisher offers excellent discounts on this book when ordered in quantity for bulk purchases or special sales, which may include electronic versions and/or custom covers and content particular to your business, training goals, marketing focus, and branding interests. For more information, please contact:
U.S. Corporate and Government Sales
(800) 382-3419
For sales outside the United States please contact:
International Sales
Visit us on the Web: www.informit.com/ph
Library of Congress Cataloging-in-Publication Data
Martin, Robert C.
The clean coder : a code of conduct for professional programmers / Robert Martin.
p. cm.
Includes bibliographical references and index.
ISBN 0-13-708107-3 (pbk. : alk. paper)
1. Computer programmingMoral and ethical aspects. 2. Computer
programmersProfessional ethics. I. Title.
QA76.9.M65M367 2011
005.1092dc22 2011005962
Copyright 2011 Pearson Education, Inc.
Illustrations copyright 2011 by Jennifer Kohnke.
All rights reserved. Printed in the United States of America. This publication is protected by copyright, and permission must be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or likewise. To obtain permission to use material from this work, please submit a written request to Pearson Education, Inc., Permissions Department, One Lake Street, Upper Saddle River, New Jersey 07458, or you may fax your request to (201) 236-3290.
ISBN-13: 978-0-13-708107-3
ISBN-10: 0-13-708107-3
Text printed in the United States on recycled paper at RR Donnelley in Crawfordsville, Indiana.
Sixth printing, July 2015
Between 1986 and 2000 I worked closely with Jim Newkirk, a colleague from Teradyne. He and I shared a passion for programming and for clean code. We would spend nights, evenings, and weekends together playing with different programming styles and design techniques. We were continually scheming about business ideas. Eventually we formed Object Mentor, Inc., together. I learned many things from Jim as we plied our schemes together. But one of the most important was his attitude of work ethic; it was something I strove to emulate. Jim is a professional. I am proud to have worked with him, and to call him my friend.
Praise for The Clean Coder
Uncle Bob Martin definitely raises the bar with his latest book. He explains his expectation for a professional programmer on management interactions, time management, pressure, on collaboration, and on the choice of tools to use. Beyond TDD and ATDD, Martin explains what every programmer who considers him- or herself a professional not only needs to know, but also needs to follow in order to make the young profession of software development grow.
Markus Grtner Senior Software Developer it-agile GmbH www.it-agile.de www.shino.de
Some technical books inspire and teach; some delight and amuse. Rarely does a technical book do all four of these things. Robert Martins always have for me and The Clean Coder is no exception. Read, learn, and live the lessons in this book and you can accurately call yourself a software professional.
George Bullock Senior Program Manager Microsoft Corp.
If a computer science degree had required reading for after you graduate, this would be it. In the real world, your bad code doesnt vanish when the semesters over, you dont get an A for marathon coding the night before an assignments due, and, worst of all, you have to deal with people. So, coding gurus are not necessarily professionals. The Clean Coder describes the journey to professionalism... and it does a remarkably entertaining job of it.
Jeff Overbey University of Illinois at Urbana-Champaign
The Clean Coder is much more than a set of rules or guidelines. It contains hard-earned wisdom and knowledge that is normally obtained through many years of trial and error or by working as an apprentice to a master craftsman. If you call yourself a software professional, you need this book.
R. L. Bogetti Lead System Designer Baxter Healthcare www.RLBogetti.com
Foreword
Youve picked up this book, so I assume you are a software professional. Thats good; so am I. And since I have your attention, let me tell you why I picked up this book.
It all starts a short time ago in a place not too far away. Cue the curtain, lights and camera, Charley ....
Several years ago I was working at a medium-sized corporation selling highly regulated products. You know the type; we sat in a cubicle farm in a three-story building, directors and up had private offices, and getting everyone you needed into the same room for a meeting took a week or so.
We were operating in a very competitive market when the government opened up a new product.
Suddenly we had an entirely new set of potential customers; all we had to do was to get them to buy our product. That meant we had to file by a certain deadline with the federal government, pass an assessment audit by another date, and go to market on a third date.
Over and over again our management stressed to us the importance of those dates. A single slip and the government would keep us out of the market for a year, and if customers couldnt sign up on day one, then they would all sign up with someone else and wed be out of business.
It was the sort of environment in which some people complain, and others point out that pressure makes diamonds.
I was a technical project manager, promoted from development. My responsibility was to get the web site up on go-live day, so potential customers could download information and, most importantly, enrollment forms. My partner in the endeavor was the business-facing project manager, whom Ill call Joe. Joes role was to work the other side, dealing with sales, marketing, and the non-technical requirements. He was also the guy fond of the pressure makes diamonds comment.
If youve done much work in corporate America, youve probably seen the finger-pointing, blamestorming, and work aversion that is completely natural. Our company had an interesting solution to that problem with Joe and me.
A little bit like Batman and Robin, it was our job to get things done. I met with the technical team every day in a corner; wed rebuild the schedule every single day, figure out the critical path, then remove every possible obstacle from that critical path. If someone needed software; wed go get it. If they would love to configure the firewall but gosh, its time for my lunch break, we would buy them lunch. If someone wanted to work on our configuration ticket but had other priorities, Joe and I would go talk to the supervisor.