The Pragmatic Programmer is one of those rare tech books you'll read, re-read, and read again over the years. Whether you're new to the field or an experienced practitioner, you'll come away with fresh insights each and every time.
Dave Thomas and Andy Hunt wrote the first edition of this influential book in 1999 to help their clients create better software and rediscover the joy of coding. These lessons have helped a generation of programmers examine the very essence of software development, independent of any particular language, framework, or methodology, and the Pragmatic philosophy has spawned hundreds of books, screencasts, and audio books, as well as thousands of careers and success stories.
Now, twenty years later, this new edition re-examines what it means to be a modern programmer. Topics range 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 to:
Written as a series of self-contained sections and filled with classic and fresh anecdotes, thoughtful examples, and interesting analogies, The Pragmatic Programmer illustrates the best approaches 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.
One of the most significant books in my life.
--Obie Fernandez, Author, The Rails Way
Twenty years ago, the first edition of The Pragmatic Programmer completely changed the trajectory of my career. This new edition could do the same for yours.
--Mike Cohn, Author of Succeeding with Agile, Agile Estimating and Planning, and User Stories Applied
. . . filled with practical advice, both technical and professional, that will serve you and your projects well for years to come.
--Andrea Goulet, CEO, Corgibytes, Founder, LegacyCode.Rocks
. . . lightning does strike twice, and this book is proof.
--VM (Vicky) Brasseur, Director of Open Source Strategy, Juniper Networks
Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.
Martin Fowler's guide to reworking bad code into well-structured code
Refactoring improves the design of existing code and enhances software maintainability, as well as making existing code easier to understand. Original Agile Manifesto signer and software development thought leader, Martin Fowler, provides a catalog of refactorings that explains why you should refactor; how to recognize code that needs refactoring; and how to actually do it successfully, no matter what language you use.
Examples are written in JavaScript, but you shouldn't find it difficult to adapt the refactorings to whatever language you are currently using as they look mostly the same in different languages.
Whenever you read [Refactoring], it's time to read it again. And if you haven't read it yet, please do before writing another line of code. -David Heinemeier Hansson, Creator of Ruby on Rails, Founder & CTO at Basecamp
Any fool can write code that a computer can understand. Good programmers write code that humans can understand. -M. Fowler (1999)
This colouring book offers an enjoyable, highly effective way for students to learn physiology. Topics are covered in self-contained two-page spreads, allowing students to easily focus on the material being presented. A unique combination of introductory material, names and illustrations to be coloured, and substantive captions deliver a comprehensive, yet easy-to-understand, treatment of physiology. The Physiology Coloring Book is the companion to the extremely successful Anatomy Coloring Book.
The Journey of Programming and Its Pioneers: From the Birth of Code to the Rise of AI
In We, Programmers, software legend Robert C. Martin--Uncle Bob--dives deep into the world of programming, exploring the lives of the groundbreaking pioneers who built the foundation of modern computing. From Charles Babbage and Ada Lovelace to Alan Turing, Grace Hopper, and Dennis Ritchie, Martin shines a light on the figures whose brilliance and perseverance changed the world.
This memoir-infused narrative provides a rich human history filled with technical insights for developers, examining the coding breakthroughs that shaped computing at the bit and byte level. By connecting these technical achievements with the human stories behind them, Martin gives readers a rare glimpse into the struggles and triumphs of the people who made modern technology possible. Depression, failure, and ridicule--these pioneers faced it all, and their stories intertwine with the evolution of computing itself as the field evolved from its humble beginnings to the cloud-based AIs of today. With the rise of AI, Martin also explores how this technology is transforming the future of programming and the ethical challenges that come with it.
Notable topics include
For programmers, coders, and anyone fascinated by the intersection of people and machines, this guide to the history, humanity, and technology behind the code that powers our world today is a fascinating and essential read.
Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.
An Introduction to Programming by the Inventor of C++
Programming: Principles and Practice Using C++, Third Edition, will help anyone who is willing to work hard learn the fundamental principles of programming and develop the practical skills needed for programming in the real world. Previous editions have been used successfully by many thousands of students. This revised and updated edition
Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.
Incorporate effective domain modeling into the software development process
Software design thought leader and founder of Domain Language, Eric Evans, provides a systematic approach to domain-driven design, presenting an extensive set of design best practices, experience-based techniques, and fundamental principles that facilitate the development of software projects facing complex domains. Intertwining system design and development practice, this book incorporates numerous examples based on actual projects to illustrate the application of domain-driven design to real-world software modeling and development.
Throughout the book, discussions are illustrated not with over-simplified, problems, but with realistic examples adapted from actual projects. With this book in hand, object-oriented developers, system analysts, and designers will have the guidance they need to organize and focus their work, create rich and useful domain models, and leverage those models into quality, long-lasting software implementations.
The book is a fun read. Eric has lots of interesting stories, and he has a way with words. I see this book as essential reading for software developers--it is a future classic.
--Ralph Johnson, author of Design Patterns
Now Includes the Long-Anticipated Volume 4B!
Countless readers have spoken about the profound personal influence of Knuth's work. Scientists have marveled at the beauty and elegance of his analysis, while ordinary programmers have successfully applied his cookbook solutions to their day-to-day problems. All have admired Knuth for the breadth, clarity, accuracy, and good humor found in his books.
Primarily written as a reference, some people have nevertheless found it possible and interesting to read each volume from beginning to end. A programmer in China even compared the experience to reading a poem. Whatever your background, if you need to do any serious computer programming, you will find your own good reason to make each volume in this series a readily accessible part of your scholarly or professional library.
These five books comprise what easily could be the most important set of information on any serious programmer's bookshelf.
This set now includes Volume 4B, the sequel to Volume 4A, which extends Knuth's exploration of combinatorial algorithms. These algorithms are of keen interest to software designers because . . . a single good idea can save years or even centuries of computer time.
Donald Knuth may very well be a great master of the analysis of algorithms, but more than that, he is an incredible and tireless storyteller who always strikes the perfect balance between theory, practice, and fun. [The Art of Computer Programming, Volume 4B, Combinatorial Algorithms, Part 2, ] dives deep into the fascinating exploration of search spaces (which is quite like looking for a needle in a haystack or, even harder, to prove the absence of a needle in a haystack), where actions performed while moving forward must be meticulously undone when backtracking. It introduces us to the beauty of dancing links for removing and restoring the cells of a matrix in a dance which is both simple to implement and very efficient. And it studies the iconic and versatile satisfiability problem and carefully analyses various ingredients of SAT solvers. --Christine Solnon, Department of Computer Science, INSA Lyon
This box set includes the following volumes:
The Art of Computer Programming: Volume 1: Fundamental Algorithms, 3rd Edition
The Art of Computer Programming, Volume 2: Seminumerical Algorithms, 3rd Edition
The Art of Computer Programming: Volume 3: Sorting and Searching, 2nd Edition
The Art of Computer Programming, Volume 4A: Combinatorial Algorithms, Part 1
The Art of Computer Programming, Volume 4B: Combinatorial Algorithms, Part 2
Winner of the 2011 Jolt Excellence Award!
Getting software released to users is often a painful, risky, and time-consuming process.This groundbreaking new book sets out the principles and technical practices that enable rapid, incremental delivery of high quality, valuable new functionality 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 begin by presenting the foundations of a rapid, reliable, low-risk delivery process. Next, they introduce the deployment pipeline, an automated process for managing all changes, from check-in to release. Finally, they discuss the ecosystem needed to support continuous delivery, from infrastructure, data and configuration management to governance.
The authors introduce state-of-the-art techniques, including automated infrastructure management and data migration, and the use of virtualization. For each, they review key issues, identify best practices, and demonstrate how to mitigate risks. Coverage includes
Whether you're a developer, systems administrator, tester, or manager, this book will help your organization move from idea to release faster than ever--so you can deliver value to your business rapidly and reliably.
Bestselling Programming Tutorial and Reference Completely Rewritten for the New C++11 Standard
Fully updated and recast for the newly released C++11 standard, this authoritative and comprehensive introduction to C++ will help you to learn the language fast, and to use it in modern, highly effective ways. Highlighting today's best practices, the authors show how to use both the core language and its standard library to write efficient, readable, and powerful code.
C++ Primer, Fifth Edition, introduces the C++ standard library from the outset, drawing on its common functions and facilities to help you write useful programs without first having to master every language detail. The book's many examples have been revised to use the new language features and demonstrate how to make the best use of them. This book is a proven tutorial for those new to C++, an authoritative discussion of core C++ concepts and techniques, and a valuable resource for experienced programmers, especially those eager to see C++11 enhancements illuminated.
Start Fast and Achieve More
Access the source code for the extended examples from informit.com/title/0321714113
C++ Primer, Fifth Edition, features an enhanced, layflat binding, which allows the book to stay open more easily when placed on a flat surface. This special binding method--notable by a small space inside the spine--also increases durability.
I was fortunate indeed to have worked with a fantastic team on the design and implementation of the concurrency features added to the Java platform in Java 5.0 and Java 6. Now this same team provides the best explanation yet of these new features, and of concurrency in general. Concurrency is no longer a subject for advanced users only. Every Java developer should read this book.
--Martin Buchholz
JDK Concurrency Czar, Sun Microsystems
For the past 30 years, computer performance has been driven by Moore's Law; from now on, it will be driven by Amdahl's Law. Writing code that effectively exploits multiple processors can be very challenging. Java Concurrency in Practice provides you with the concepts and techniques needed to write safe and scalable Java programs for today's--and tomorrow's--systems.
--Doron Rajwan
Research Scientist, Intel Corp
This is the book you need if you're writing--or designing, or debugging, or maintaining, or contemplating--multithreaded Java programs. If you've ever had to synchronize a method and you weren't sure why, you owe it to yourself and your users to read this book, cover to cover.
--Ted Neward
Author of Effective Enterprise Java
Brian addresses the fundamental issues and complexities of concurrency with uncommon clarity. This book is a must-read for anyone who uses threads and cares about performance.
--Kirk Pepperdine
CTO, JavaPerformanceTuning.com
This book covers a very deep and subtle topic in a very clear and concise way, making it the perfect Java Concurrency reference manual. Each page is filled with the problems (and solutions!) that programmers struggle with every day. Effectively exploiting concurrency is becoming more and more important now that Moore's Law is delivering more cores but not faster cores, and this book will show you how to do it.
--Dr. Cliff Click
Senior Software Engineer, Azul Systems
I have a strong interest in concurrency, and have probably written more thread deadlocks and made more synchronization mistakes than most programmers. Brian's book is the most readable on the topic of threading and concurrency in Java, and deals with this difficult subject with a wonderful hands-on approach. This is a book I am recommending to all my readers of The Java Specialists' Newsletter, because it is interesting, useful, and relevant to the problems facing Java developers today.
--Dr. Heinz Kabutz
The Java Specialists' Newsletter
I've focused a career on simplifying simple problems, but this book ambitiously and effectively works to simplify a complex but critical subject: concurrency. Java Concurrency in Practice is revolutionary in its approach, smooth and easy in style, and timely in its delivery--it's destined to be a very important book.
--Bruce Tate
Author of Beyond Java
Java Concurrency in Practice is an invaluable compilation of threading know-how for Java developers. I found reading this book intellectually exciting, in part because it is an excellent introduction to Java's concurrency API, but mostly because it captures in a thorough and accessible way expert knowledge on threading not easily found elsewhere.
--Bill Venners
Author of Inside the Java Virtual Machine
Threads are a fundamental part of the Java platform. As multicore processors become the norm, using concurrency effectively becomes essential for building high-performance applications. Java SE 5 and 6 are a huge step forward for the development of concurrent applications, with improvements to the Java Virtual Machine to support high-performance, highly scalable concurrent classes and a rich set of new concurrency building blocks. In Java Concurrency in Practice, the creators of these new facilities explain not only how they work and how to use them, but also the motivation and design patterns behind them.
However, developing, testing, and debugging multithreaded programs can still be very difficult; it is all too easy to create concurrent programs that appear to work, but fail when it matters most: in production, under heavy load. Java Concurrency in Practice arms readers with both the theoretical underpinnings and concrete techniques for building reliable, scalable, maintainable concurrent applications. Rather than simply offering an inventory of concurrency APIs and mechanisms, it provides design rules, patterns, and mental models that make it easier to build concurrent programs that are both correct and performant.
This book covers:
The authoritative resource to writing clear and idiomatic Go to solve real-world problems
Google's Go team member Alan A. A. Donovan and Brian Kernighan, co-author of The C Programming Language, provide hundreds of interesting and practical examples of well-written Go code to help programmers learn this flexible, and fast, language. It is designed to get you started programming with Go right away and then to progress on to more advanced topics.
Each chapter has exercises to test your understanding and explore extensions and alternatives. Source code is freely available for download and may be conveniently fetched, built, and installed using the go get command.
The Art of Computer Programming is a multivolume work on the analysis of algorithms and has long been recognized as the definitive description of classical computer science. The five volumes published to date--Volumes 1, 2, 3, 4A, and 4B--already comprise a unique and invaluable resource in programming theory and practice. Countless readers have spoken about the profound personal influence of Knuth's writings. Scientists have marveled at the beauty and elegance of his analysis, while practicing programmers have successfully applied his cookbook solutions to their day-to-day problems. All have admired Knuth for the breadth, clarity, accuracy, and good humor found in his books.
To continue the set, and to update parts of the existing volumes, Knuth has created a series of small books called fascicles, which are published at regular intervals. Each fascicle encompasses a section or more of wholly new or revised material. Ultimately, the content of these fascicles will be rolled up into the comprehensive, final versions of each volume, and the enormous undertaking that began in 1962 will be complete.
Volume 4, Fascicle 7, which is brimming with lively examples, forms the first third of what will eventually become hardcover Volume 4C. It introduces and explores an important general framework for modeling and solving combinatorial problems, called the Constraint Satisfaction Problem (CSP). The concluding sections of Volume 4B contain expositions of two analogous frameworks, namely XCC (exact covering with colors) and SAT (Boolean satisfiability); the XCC solvers and SAT solvers are now joined by CSP solvers, completing a powerful trio of techniques. Each member of the trio has its own strengths, while separately helping to understand the other two.
This fascicle illuminates how the CSP framework is tied to dozens of other parts of computer science: Scene analysis (computer vision); efficient algorithms that embed one graph in another; fascinating instances of graceful graphs; new ways to look ahead when backtracking; new heuristics to guide a search that backtracks through a massive space of possibilities; situations when backtracking isn't necessary.
New sparse-set data structures are introduced, leading to a technique called dancing cells--which often is even better than dancing links! Recreational topics appear throughout, including some new takes on the classic problem of a knight's tour, as well as modern puzzles such as fillomino.
Nearly 500 exercises are provided, arranged carefully for self-instruction, together with detailed answers (in fact, sometimes also with answers to the answers). All the while, the author pays significant attention to the history of the subject and its human dimensions.
The Practical, Step-by-Step Guide to Using LLMs at Scale in Projects and Products
Large Language Models (LLMs) like Llama 3, Claude 3, and the GPT family are demonstrating breathtaking capabilities, but their size and complexity have deterred many practitioners from applying them. In Quick Start Guide to Large Language Models, Second Edition, pioneering data scientist and AI entrepreneur Sinan Ozdemir clears away those obstacles and provides a guide to working with, integrating, and deploying LLMs to solve practical problems.
Ozdemir brings together all you need to get started, even if you have no direct experience with LLMs: step-by-step instructions, best practices, real-world case studies, and hands-on exercises. Along the way, he shares insights into LLMs' inner workings to help you optimize model choice, data formats, prompting, fine-tuning, performance, and much more. The resources on the companion website include sample datasets and up-to-date code for working with open- and closed-source LLMs such as those from OpenAI (GPT-4 and GPT-3.5), Google (BERT, T5, and Gemini), X (Grok), Anthropic (the Claude family), Cohere (the Command family), and Meta (BART and the LLaMA family).
A refreshing and inspiring resource. Jam-packed with practical guidance and clear explanations that leave you smarter about this incredible new field.
--Pete Huang, author of The Neuron
Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.