Ich habe noch nie ein Buch über Software-Entwicklung gelesen

There, I said it…

Photo by Kevin Ku from Pexels http://bit.ly/2rA5Y1L

Ich gebe es zu: Der Titel ist womöglich etwas reißerisch und so ganz entspricht er nicht einmal der Wahrheit. Ja, ich habe vor allem im Studium bereits Bücher über Software-Entwicklung, -Architektur und -Projektmanagement in der Hand gehabt. Und diese habe ich abschnittsweise und sowohl zeitlich als auch thematisch durcheinander (an-) gelesen. Allerdings stets in Bezug auf eine konkrete Lernaufgabe und niemals komplett von vorne bis hinten. Dieser Umstand trifft auf die meisten meiner programmierenden Bekannten zu. Einschließlich weiblicher wie männlicher Nerdfreunde, Arbeitskollegen und Ex-Kommilitonen und dann meistens aus ähnlichen Gründen: Die Bücher veralten zu schnell, Codebeispiele funktionieren nicht mehr oder können – ganz banal eigentlich – nicht für ein paar Trial-Error-Experimente kopiert werden, konkrete Hilfestellungen sind viel schneller im Netz zu finden und Bücher kosten Geld1. Jeff Atwood, Initiator von stackoverflow.com, argumentiert dagegen:

«Programmers Don’t Read Books – But You Should!» 2

Sollte ich? In meinem Umfeld würden die meisten Entwickler wohl argumentieren, dass man durch die scheinbar unbegrenzte Zahl von Tutorials, Einführungen, Talks und Repositories auf Github auch so ganz gut durchs Berufsleben kommt. Andererseits habe ich den Eindruck, dass es eine kleine, aber hartnäckige Anzahl an Büchern gibt, die nicht nur immer wieder in den üblichen «Diese 10 Bücher über Software müssen Sie gelesen haben. Nummer 7 wird ihr Leben verändern.»-Listen auftauchen, vor allem aber auch schon seit 20 und mehr Jahren darin auftauchen. Und anscheinend werden diese Bücher ja von Entwicklern aller Generationen gelesen und für gut befunden.

Was ist an diesen Büchern anders? Welche Bücher sind das? Und mit welchem Buch soll ich anfangen?

Was ist an diesen Büchern anders?

«Programmers seem to have stopped reading books. The market for books on programming topics is miniscule compared to the number of working programmers.» ~ Joel Spolsky3

Bevor ich anfange Jeff Atwood’s großartigen Artikel zum Thema aus 2008 ins Deutsche zu übersetzen, empfehle ich, den entsprechenden Artikel (und die referenzierte Leseliste4) einfach selbst zu lesen2. Die entscheidende Erkenntnis aus Jeff’s Artikeln ist, dass das Destillat aus den abertausenden Büchern dieser Welt – eben diese, die bis heute immer wieder empfohlen werden – keine Bücher über Software-Entwicklung, sondern über Menschen sind. Zumindest an erster Stelle. Das ist durchaus einleuchtend, denn während sich Technologie in gigantischen Schritten weiterentwickelt und nur wenige technische Grundlagenbücher die Zeit überdauern, so arbeiten seit vielen Dekaden der professionellen Softwareentwicklung immer Menschen mit Menschen in Büros. Und diese verändern sich eben deutlich langsamer als Technologie.

Welche Bücher sind das?

Ich war bereit, mich durch hunderte Webseiten zu scrapen, Listen zu sammeln, Metascores zu entwickeln und eine möglichst objektive Liste der bedeutendsten Fachbücher zu erzeugen, aber erfreulicherweise bin ich nicht der erste Coder, der sich diese Fragen gestellt hat. Die drei Basislisten mit sehr vielen, immer wieder genannten Büchern sind «Top 100 Best Software Engineering Books, Ever» von Jurgen Appelo5, die Liste «What is the single most influential book every programmer should read?» aus der Stackoverflow-Community6 und Yogev Sitton’s «The Ultimate Reading List for Developers»7 zu der es sogar ein Google-Doc mit Rohdaten8 gibt. Diese vereint ergeben zusammen eine Bücherliste von circa 100 Büchern9, die praktisch alle andere Empfehlungen im Netz abdecken. Meine kleine aus Rohdaten erstellte Shortlist ist daher nur eine Randnotiz wert1011.

Mit welchem Buch soll ich anfangen?

Auch wenn ich versucht habe, eine einigermaßen relevante Liste zu finden, enthält sie natürlich keinerlei Aussage über die Qualität oder Inhalte der Bücher – ich habe sie ja schlicht noch nicht (komplett) gelesen. Es handelt sich um zehn individuell ausgewählte Bücher, die regelmäßig und prominent als Standardwerke für professionelle Software-Entwickler genannt werden. Ich habe mich vorerst auf Bücher aus den Bereichen «Soft Skills» und «Craftsmanship» konzentriert. Daher fehlen außer den «Design Patterns» von der Gang of Four12 ein paar prominente Bücher aus den Ecken «Architektur» und «Agile Development». Schaut euch gerne die konsolidierten Quellen an579, wenn ihr Anregungen für eine eigene Auswahl sucht.

The Pragmatic Programmer

Andrew Hunt,‎ David Thomas (1999, ISBN 978-0201616224)
http://www.amazon.com/gp/product/020161622X

«Straight from the programming trenches, The Pragmatic Programmer cuts through the increasing specialization and technicalities of modern software development to examine the core process–taking a requirement and producing working, maintainable code that delights its users. It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse.»

The Mythical Man-Month

Frederick P. Brooks Jr. (Anniv. Ed., 1995, ISBN 978-0201835953)
http://www.amazon.com/gp/product/0201835959

«Few books on software project management have been as influential and timeless as The Mythical Man-Month. With a blend of software engineering facts and thought-provoking opinions, Fred Brooks offers insight for anyone managing complex projects. These essays draw from his experience as project manager for the IBM System/360 computer family and then for OS/360, its massive software system. Now, 20 years after the initial publication of his book, Brooks has revisited his original ideas and added new thoughts and advice.»

Peopleware: Productive Projects and Teams

Tom DeMarco,‎ Timothy Lister (2. Ausgabe, 1999, ISBN 978-0932633439)
http://www.amazon.com/gp/product/0932633439

«The unique insight of this longtime best seller is that the major issues of software development are human, not technical. They’re not easy issues; but solve them, and you’ll maximize your chances of success. “Peopleware has long been one of my two favorite books on software engineering. Its underlying strength is its base of immense real experience, much of it quantified. Many, many varied projects have been reflected on and distilled; but what we are given is not just lifeless distillate, but vivid examples from which we share the authors’ inductions. Their premise is right: most software project problems are sociological, not technological. The insights on team jelling and work environment have changed my thinking and teaching. The third edition adds strength to strength.” ~ Frederick P. Brooks, Jr.»

Clean Code: A Handbook of Agile Software Craftsmanship

Robert C. Martin (2008, ISBN 978-0132350884)
http://www.amazon.com/gp/product/0132350882

«Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn’t have to be that way. Noted software expert Robert C. Martin presents a revolutionary paradigm with Clean Code: A Handbook of Agile Software Craftsmanship . Martin has teamed up with his colleagues from Object Mentor to distill their best agile practice of cleaning code “on the fly” into a book that will instill within you the values of a software craftsman and make you a better programmer—but only if you work at it.»

Code Complete 2: A Practical Handbook of Software Construction

Steve McConnell (2. Ausgabe, 2004, ISBN 978-0735619678)
http://www.amazon.com/gp/product/0735619670

«Widely considered one of the best practical guides to programming, Steve McConnell’s original ‘Code Complete’ has been helping developers write better software for more than a decade. Now this classic book has been fully updated and revised with leading-edge practices—and hundreds of new code samples—illustrating the art and science of software construction. Capturing the body of knowledge available from research, academia, and everyday commercial practice, McConnell synthesizes the most effective techniques and must-know principles into clear, pragmatic guidance. No matter what your experience level, development environment, or project size, this book will inform and stimulate your thinking—and help you build the highest quality code.»

Refactoring: Improving the Design of Existing Code

Martin Fowler, Kent Beck, et. al. (1999, ISBN 978-0201485677)
https://www.amazon.com/gp/product/0201485672

«As the application of object technology–particularly the Java programming language–has become commonplace, a new problem has emerged to confront the software development community. Significant numbers of poorly designed programs have been created by less-experienced developers, resulting in applications that are inefficient and hard to maintain and extend. Increasingly, software system professionals are discovering just how difficult it is to work with these inherited, non-optimal applications. For several years, expert-level object programmers have employed a growing collection of techniques to improve the structural integrity and performance of such existing software programs. Referred to as refactoring, these practices have remained in the domain of experts because no attempt has been made to transcribe the lore into a form that all developers could use. . .until now.»

Working Effectively with Legacy Code

Michael Feathers (2004, ISBN 978-0131177055)
http://www.amazon.com/gp/product/0131177052

«In this book, Michael Feathers offers start-to-finish strategies for working more effectively with large, untested legacy code bases. This book draws on material Michael created for his own 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.
This book also includes a catalog of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes.»

Rapid Development

Steve McConnell (2003, ISBN 978-0072850604)
http://www.amazon.com/gp/product/0072850604

«Corporate and commercial software-development teams all want solutions for one important problem—how to get their high-pressure development schedules under control. In RAPID DEVELOPMENT, author Steve McConnell addresses that concern head-on with overall strategies, specific best practices, and valuable tips that help shrink and control development schedules and keep projects moving.»

Design Patterns: Elements of Reusable Object-Oriented Software

Erich Gamma,‎ Richard Helm, et. al. (1994, ISBN 978-0201633610)
http://www.amazon.com/gp/product/0201633612

«Design Patterns is a modern classic in the literature of object-oriented development, offering timeless and elegant solutions to common problems in software design. It describes patterns for managing object creation, composing objects into larger structures, and coordinating control flow between objects. The book provides numerous examples where using composition rather than inheritance can improve the reusability and flexibility of code. Note, though, that it’s not a tutorial but a catalog that you can use to find an object-oriented design pattern that’s appropriate for the needs of your particular application–a selection for virtuoso programmers who appreciate (or require) consistent, well-engineered object-oriented designs.»

Joshua Bloch: Effective Java (3rd Edition)

Joshua Bloch (3. Ausgabe, 2017, ASIN B078H61SCH)
http://www.amazon.com/gp/product/B078H61SCH

«The Definitive Guide to Java Platform Best Practices—Updated for Java 7, 8, and 9. Java has changed dramatically since the previous edition of Effective Java was published shortly after the release of Java 6. This Jolt award-winning classic has now been thoroughly updated to take full advantage of the latest language and library features. The support in modern Java for multiple paradigms increases the need for specific best-practices advice, and this book delivers.»


Welche Bücher hättet ihr ausgewählt? Wie würdet ihr als Entwicklerin oder Entwickler eine derartige Liste zusammenstellen? Lest ihr selbst Bücher zum Thema?

Lasst es mich gerne auf Twitter wissen!

Referenzen