Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman


Dave Hoover - 2009
    To grow professionally, you also need soft skills and effective learning techniques. Honing those skills is what this book is all about. Authors Dave Hoover and Adewale Oshineye have cataloged dozens of behavior patterns to help you perfect essential aspects of your craft. Compiled from years of research, many interviews, and feedback from O'Reilly's online forum, these patterns address difficult situations that programmers, administrators, and DBAs face every day. And it's not just about financial success. Apprenticeship Patterns also approaches software development as a means to personal fulfillment. Discover how this book can help you make the best of both your life and your career. Solutions to some common obstacles that this book explores in-depth include:Burned out at work? "Nurture Your Passion" by finding a pet project to rediscover the joy of problem solving.Feeling overwhelmed by new information? Re-explore familiar territory by building something you've built before, then use "Retreat into Competence" to move forward again.Stuck in your learning? Seek a team of experienced and talented developers with whom you can "Be the Worst" for a while. "Brilliant stuff! Reading this book was like being in a time machine that pulled me back to those key learning moments in my career as a professional software developer and, instead of having to learn best practices the hard way, I had a guru sitting on my shoulder guiding me every step towards master craftsmanship. I'll certainly be recommending this book to clients. I wish I had this book 14 years ago!" -Russ Miles, CEO, OpenCredo

97 Things Every Programmer Should Know: Collective Wisdom from the Experts


Kevlin Henney - 2010
    With the 97 short and extremely useful tips for programmers in this book, you'll expand your skills by adopting new approaches to old problems, learning appropriate best practices, and honing your craft through sound advice.With contributions from some of the most experienced and respected practitioners in the industry--including Michael Feathers, Pete Goodliffe, Diomidis Spinellis, Cay Horstmann, Verity Stob, and many more--this book contains practical knowledge and principles that you can apply to all kinds of projects.A few of the 97 things you should know:"Code in the Language of the Domain" by Dan North"Write Tests for People" by Gerard Meszaros"Convenience Is Not an -ility" by Gregor Hohpe"Know Your IDE" by Heinz Kabutz"A Message to the Future" by Linda Rising"The Boy Scout Rule" by Robert C. Martin (Uncle Bob)"Beware the Share" by Udi Dahan

Software Estimation: Demystifying the Black Art


Steve McConnell - 2006
    In fact, generating accurate estimates is straightforward—once you understand the art of creating them.In his highly anticipated book, acclaimed author Steve McConnell unravels the mystery to successful software estimation—distilling academic information and real-world experience into a practical guide for working software professionals. Instead of arcane treatises and rigid modeling techniques, this guide highlights a proven set of procedures, understandable formulas, and heuristics that individuals and development teams can apply to their projects to help achieve estimation proficiency.

Coders at Work: Reflections on the Craft of Programming


Peter Seibel - 2009
    As the words "at work" suggest, Peter Seibel focuses on how his interviewees tackle the day–to–day work of programming, while revealing much more, like how they became great programmers, how they recognize programming talent in others, and what kinds of problems they find most interesting. Hundreds of people have suggested names of programmers to interview on the Coders at Work web site: http://www.codersatwork.com. The complete list was 284 names. Having digested everyone’s feedback, we selected 16 folks who’ve been kind enough to agree to be interviewed:- Frances Allen: Pioneer in optimizing compilers, first woman to win the Turing Award (2006) and first female IBM fellow- Joe Armstrong: Inventor of Erlang- Joshua Bloch: Author of the Java collections framework, now at Google- Bernie Cosell: One of the main software guys behind the original ARPANET IMPs and a master debugger- Douglas Crockford: JSON founder, JavaScript architect at Yahoo!- L. Peter Deutsch: Author of Ghostscript, implementer of Smalltalk-80 at Xerox PARC and Lisp 1.5 on PDP-1- Brendan Eich: Inventor of JavaScript, CTO of the Mozilla Corporation - Brad Fitzpatrick: Writer of LiveJournal, OpenID, memcached, and Perlbal - Dan Ingalls: Smalltalk implementor and designer- Simon Peyton Jones: Coinventor of Haskell and lead designer of Glasgow Haskell Compiler- Donald Knuth: Author of The Art of Computer Programming and creator of TeX- Peter Norvig: Director of Research at Google and author of the standard text on AI- Guy Steele: Coinventor of Scheme and part of the Common Lisp Gang of Five, currently working on Fortress- Ken Thompson: Inventor of UNIX- Jamie Zawinski: Author of XEmacs and early Netscape/Mozilla hackerWhat you’ll learn:How the best programmers in the world do their jobWho is this book for?Programmers interested in the point of view of leaders in the field. Programmers looking for approaches that work for some of these outstanding programmers.

Site Reliability Engineering: How Google Runs Production Systems


Betsy Beyer - 2016
    So, why does conventional wisdom insist that software engineers focus primarily on the design and development of large-scale computing systems?In this collection of essays and articles, key members of Google's Site Reliability Team explain how and why their commitment to the entire lifecycle has enabled the company to successfully build, deploy, monitor, and maintain some of the largest software systems in the world. You'll learn the principles and practices that enable Google engineers to make systems more scalable, reliable, and efficient--lessons directly applicable to your organization.This book is divided into four sections: Introduction--Learn what site reliability engineering is and why it differs from conventional IT industry practicesPrinciples--Examine the patterns, behaviors, and areas of concern that influence the work of a site reliability engineer (SRE)Practices--Understand the theory and practice of an SRE's day-to-day work: building and operating large distributed computing systemsManagement--Explore Google's best practices for training, communication, and meetings that your organization can use

The Passionate Programmer


Chad Fowler - 2009
    In this book, you'll learn how to become an entrepreneur, driving your career in the direction of your choosing. You'll learn how to build your software development career step by step, following the same path that you would follow if you were building, marketing, and selling a product. After all, your skills themselves are a product. The choices you make about which technologies to focus on and which business domains to master have at least as much impact on your success as your technical knowledge itself--don't let those choices be accidental. We'll walk through all aspects of the decision-making process, so you can ensure that you're investing your time and energy in the right areas. You'll develop a structured plan for keeping your mind engaged and your skills fresh. You'll learn how to assess your skills in terms of where they fit on the value chain, driving you away from commodity skills and toward those that are in high demand. Through a mix of high-level, thought-provoking essays and tactical "Act on It" sections, you will come away with concrete plans you can put into action immediately. You'll also get a chance to read the perspectives of several highly successful members of our industry from a variety of career paths. As with any product or service, if nobody knows what you're selling, nobody will buy. We'll walk through the often-neglected world of marketing, and you'll create a plan to market yourself both inside your company and to the industry in general. Above all, you'll see how you can set the direction of your career, leading to a more fulfilling and remarkable professional life.

The Inmates Are Running the Asylum: Why High Tech Products Drive Us Crazy and How to Restore the Sanity


Alan Cooper - 1999
    Cooper details many of these meta functions to explain his central thesis: programmers need to seriously re-evaluate the many user-hostile concepts deeply embedded within the software development process. Rather than provide users with a straightforward set of options, programmers often pile on the bells and whistles and ignore or de-prioritise lingering bugs. For the average user, increased functionality is a great burden, adding to the recurrent chorus that plays: "computers are hard, mysterious, unwieldy things." (An average user, Cooper asserts, who doesn't think that way or who has memorised all the esoteric commands and now lords it over others, has simply been desensitised by too many years of badly designed software.) Cooper's writing style is often overblown, with a pantheon of cutesy terminology (i.e. "dancing bearware") and insider back-patting. (When presenting software to Bill Gates, he reports that Gates replied: "How did you do that?" to which he writes: "I love stumping Bill!") More seriously, he is also unable to see beyond software development's importance--a sin he accuses programmers of throughout the book. Even with that in mind, the central questions Cooper asks are too important to ignore: Are we making users happier? Are we improving the process by which they get work done? Are we making their work hours more effective? Cooper looks to programmers, business managers and what he calls "interaction designers" to question current assumptions and mindsets. Plainly, he asserts that the goal of computer usage should be "not to make anyone feel stupid." Our distance from that goal reinforces the need to rethink entrenched priorities in software planning. -- Jennifer Buckendorff, Amazon.com

The Leprechauns of Software Engineering


Laurent Bossavit - 2012
    You can think of this problem as a variant of the well known "telephone game", where some trivial rumor is repeated from one person to the next until it has become distorted beyond recognition and blown up out of all proportion.Unfortunately, the objects of this telephone game are generally considered cornerstone truths of the discipline, to the point that their acceptance now seems to hinder further progress.In this short ebook, we will take a look at some of those "ground truths": the claimed 10x variation in productivity between developers; the "software crisis"; the cost-of-change curve; the "cone of uncertainty"; and more. We'll hone our scholarship skills by looking up the original source for these ideas and taking a deep dive in the history of their development. We'll assess the real weight of the evidence behind these ideas.And we'll confront the scary prospect of moving the state of the art forward in a discipline that has had the ground kicked from under it.

Agile IT Organization Design: For Digital Transformation and Continuous Delivery


Sriram Narayan - 2015
    Now, pioneering ThoughtWorks software engineering expert Sriram Narayan shows how to do just that. Drawing on 15+ years working with leaders in telecommunications, finance, energy, retail, and beyond, he introduces a comprehensive agile approach to "Business-IT Effectiveness" that is as practical as it is valuable. Narayan demonstrates how to integrate agility throughout sales, marketing, product development, engineering, and operations, helping each function deliver more value individually and through its linkages with the rest of the business. Addressing people, process, and technology, he guides you in improving both the dynamic and static aspects of organization design, addressing team structure, accountability structures, organizational norms and culture, knowledge management, and more. Using real examples, Narayan helps you evaluate and improve organization designs to enhance autonomy, mastery, and purpose. You'll learn how to eliminate the specific organizational silos that cause the most problems... improve communication in organizations that claim to be (but aren't really) non-hierarchical... optimize the way you build teams, design office space, and even choose tools. Simply put, Agile IT Organization Design will help you improve improving the performance of any software organization by propagating agile wherever it makes sense and offers value.

Scrum Mastery: From Good To Great Servant-Leadership


Geoff Watts - 2013
    But being a great ScrumMaster, one who truly embodies the principles of servant-leadership and helps move a team to the high performance levels possible with Scrum, is much harder and much more elusive. In his over ten years of coaching numerous Scrum teams, the highly-respected and experienced Scrum coach Geoff Watts has identified patterns that separate a good ScrumMaster from a great one. In this book, he not only illustrates these patterns through stories of his own experiences and those of the many Scrum teams he has encountered but offers practical guidance for you on your own path to greatness.In this book you will learn:The skills and characteristics of great ScrumMastersHow to generate, maintain and increase engagement from the teamHow to increase the effectiveness of the Scrum meetings, such as retrospectives and daily scrums.How to foster a more creative and collaborative teamHow to increase the performance of the teamHow to know when you are a successful ScrumMaster\Scrum Mastery is for practicing ScrumMasters who want to develop themselves into a great servant-leader capable of taking their teams beyond simple process compliance.Comments on the bookMike Cohn, in his foreword for the book, said:"Most books rehash well-trod territory and I don’t finish them any wiser. I am positive I will be referring back to this book for many years" Roman Pichler, author of Agile Product Management with Scrum: Creating Products That Customers Love said:"I am thoroughly impressed with how comprehensive and well-written the book is. It will be indispensable for many people"Jean Tabaka, Agile Fellow, Rally Software:"Geoff brings us a personal and inspired peak into what truly moves us from good to great: great in how we serve; great in how we lead; great in how we create mastery in our teams and organizations; and, great in how we recognize the impediments to our own growth to greatness. Scrum mastery is a skill that can be honed and Geoff gives us rich tools to sharpen our craft."

Crystal Clear: A Human-Powered Methodology for Small Teams


Alistair Cockburn - 2004
    It describes the roles, teams, values, intentions, habits, activities, policies and work products of a small software development team forwhom time-to-market and development costs are critical considerations.Alistair Cockburn is one of the founders of the Agile software developmentmovement. He spells out proven best practices based on his extensiveexperience helping organizations build software quickly and with less cost. Theauthor understands that small teams cannot be burdened by process-heavysoftware methodologies. By advocating that developers stay close together andremain in steady, good-will communication with customers and users, thisbook teaches the reader how to develop software that not only does what it issupposed to do, but also gets completed on time and within budget.

A Practical Approach to Large-Scale Agile Development: How HP Transformed LaserJet FutureSmart Firmware


Gary Gruver - 2012
    However, large-scale agile development is difficult, and publicly available case studies have been scarce. Now, three agile pioneers at Hewlett-Packard present a candid, start-to-finish insider's look at how they've succeeded with agile in one of the company's most mission-critical software environments: firmware for HP LaserJet printers.This book tells the story of an extraordinary experiment and journey. Could agile principles be applied to re-architect an enormous legacy code base? Could agile enable both timely delivery and ongoing innovation? Could it really be applied to 400+ developers distributed across four states, three continents, and four business units? Could it go beyond delivering incremental gains, to meet the stretch goal of 10x developer productivity improvements?It could, and it did--but getting there was not easy.Writing for both managers and technologists, the authors candidly discuss both their successes and failures, presenting actionable lessons for other development organizations, as well as approaches that have proven themselves repeatedly in HP's challenging environment. They not only illuminate the potential benefits of agile in large-scale development, they also systematically show how these benefits can actually be achieved.Coverage includes: - Tightly linking agile methods and enterprise architecture with business objectives- Focusing agile practices on your worst development pain points to get the most bang for your buck- Abandoning classic agile methods that don't work at the largest scale- Employing agile methods to establish a new architecture- Using metrics as a "conversation starter" around agile process improvements- Leveraging continuous integration and quality systems to reduce costs, accelerate schedules, and automate the delivery pipeline- Taming the planning beast with "light-touch" agile planning and lightweight long-range forecasting- Implementing effective project management and ensuring accountability in large agile projects- Managing tradeoffs associated with key decisions about organizational structure- Overcoming U.S./India cultural differences that can complicate offshore development- Selecting tools to support quantum leaps in productivity in your organization- Using change management disciplines to support greater enterprise agility

Working Effectively with Legacy Code


Michael C. Feathers - 2004
    This book draws on material Michael created for his renowned Object Mentor seminars, techniques Michael has used in mentoring to help hundreds of developers, technical managers, and testers bring their legacy systems under control. The topics covered include: Understanding the mechanics of software change, adding features, fixing bugs, improving design, optimizing performance Getting legacy code into a test harness Writing tests that protect you against introducing new problems Techniques that can be used with any language or platform, with examples in Java, C++, C, and C# Accurately identifying where code changes need to be made Coping with legacy systems that aren't object-oriented Handling applications that don't seem to have any structureThis book also includes a catalog of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes.

The Pragmatic Programmer: From Journeyman to Master


Andy Hunt - 1999
    It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse. Read this book, and you'll learn how toFight software rot; Avoid the trap of duplicating knowledge; Write flexible, dynamic, and adaptable code; Avoid programming by coincidence; Bullet-proof your code with contracts, assertions, and exceptions; Capture real requirements; Test ruthlessly and effectively; Delight your users; Build teams of pragmatic programmers; and Make your developments more precise with automation. Written as a series of self-contained sections and filled with entertaining anecdotes, thoughtful examples, and interesting analogies, The Pragmatic Programmer illustrates the best practices and major pitfalls of many different aspects of software development. Whether you're a new coder, an experienced programmer, or a manager responsible for software projects, use these lessons daily, and you'll quickly see improvements in personal productivity, accuracy, and job satisfaction. You'll learn skills and develop habits and attitudes that form the foundation for long-term success in your career. You'll become a Pragmatic Programmer.

Ship It!


Jared Richardson - 2005
    You'll get quick, easy-to-follow advice on modern practices: which to use, and when they should be applied. This book avoids current fashion trends and marketing hype; instead, readers find page after page of solid advice, all tried and tested in the real world.Aimed at beginning to intermediate programmers, Ship It! will show you:Which tools help, and which don't How to keep a project moving Approaches to scheduling that work How to build developers as well as product What's normal on a project, and what's not How to manage managers, end-users and sponsors Danger signs and how to fix them Few of the ideas presented here are controversial or extreme; most experienced programmers will agree that this stuff works. Yet 50 to 70 percent of all project teams in the U.S. aren't able to use even these simple, well-accepted practices effectively. This book will help you get started.Ship It! begins by introducing the common technical infrastructure that every project needs to get the job done. Readers can choose from a variety of recommended technologies according to their skills and budgets. The next sections outline the necessary steps to get software out the door reliably, using well-accepted, easy-to-adopt, best-of-breed practices that really work.Finally, and most importantly, Ship It! presents common problems that teams face, then offers real-world advice on how to solve them.