Improve Your Creativity, Effectiveness, and Ultimately, Your Code
In Modern Software Engineering, continuous delivery pioneer David Farley helps software professionals think about their work more effectively, manage it more successfully, and genuinely improve the quality of their applications, their lives, and the lives of their colleagues.
Writing for programmers, managers, and technical leads at all levels of experience, Farley illuminates durable principles at the heart of effective software development. He distills the discipline into two core exercises: learning and exploration and managing complexity. For each, he defines principles that can help you improve everything from your mindset to the quality of your code, and describes approaches proven to promote success.
Farley's ideas and techniques cohere into a unified, scientific, and foundational approach to solving practical software development problems within realistic economic constraints. This general, durable, and pervasive approach to software engineering can help you solve problems you haven't encountered yet, using today's technologies and tomorrow's. It offers you deeper insight into what you do every day, helping you create better software, faster, with more pleasure and personal fulfillment.
Clarify what you're trying to accomplish
Choose your tools based on sensible criteria
Organize work and systems to facilitate continuing incremental progress
Evaluate your progress toward thriving systems, not just more "legacy code"
Gain more value from experimentation and empiricism
Stay in control as systems grow more complex
Achieve rigor without too much rigidity
Learn from history and experience
Distinguish "good" new software development ideas from "bad" ones
Improve Your Creativity, Effectiveness, and Ultimately, Your Code
In Modern Software Engineering, continuous delivery pioneer David Farley helps software professionals think…
It’s easy to start developing programs with Python, which is why the language is so popular. However, Python’s unique strengths, charms, and expressiveness can be hard to grasp, and there are hidden pitfalls that can easily trip you up.
This second edition of Effective Python will help you master a truly “Pythonic” approach to programming, harnessing Python’s full power to write exceptionally robust and well-performing code. Using the concise, scenario-driven style pioneered in Scott Meyers’ best-selling Effective C++, Brett Slatkin brings together 90 Python best practices, tips, and shortcuts, and explains them with realistic code examples so that you can embrace Python with confidence.
Drawing on years of experience building Python infrastructure at Google, Slatkin uncovers little-known quirks and idioms that powerfully impact code behavior and performance. You’ll understand the best way to accomplish key tasks so you can write code that’s easier to understand, maintain, and improve. In addition to even more advice, this new edition substantially revises all items from the first edition to reflect how best practices have evolved.
Key features include
30 new actionable guidelines for all major areas of Python
Detailed explanations and examples of statements, expressions, and built-in types
Best practices for writing functions that clarify intention, promote reuse, and avoid bugs
Better techniques and idioms for using comprehensions and generator functions
Coverage of how to accurately express behaviors with classes and interfaces
Guidance on how to avoid pitfalls with metaclasses and dynamic attributes
More efficient and clear approaches to concurrency and parallelism
Solutions for optimizing and hardening to maximize performance and quality
Techniques and built-in modules that aid in debugging and testing
Tools and best practices for collaborative development
Effective Python will prepare growing programmers to make a big impact using Python.
Updated and Expanded for Python 3
It’s easy to start developing programs with Python, which is why the language is so popular. However, Python’s unique strengths, charms, and…
For twenty years, the lessons from The Pragmatic Programmer have helped a generation of programmers examine the very essence of software development, independent of any particular language, framework, or methodology. This classic title is regularly featured on “Top Ten” lists, and many corporations issue it to their new hires.
This new 20th Anniversary Edition offers a fresh look at the modern development landscape, cutting through the “business as usual” and tired advice from the net to help guide you through the next twenty years and beyond. Featuring new tips, new topics, and revisions throughout, you don’t want to miss this one.
Andy and Dave wrote this influential, classic book to help their clients create better software and rediscover the joy of coding. Almost twenty years later, its advice is still spot on, and the Pragmatic philosophy has spawned hundreds of books, screencasts, and audio books, as well as thousands of careers and success stories.
This new edition examines the core of modern software development—understanding what is wanted 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. Read this book, and you’ll learn how to:
Fight software rot
Learn continuously
Avoid the trap of duplicating knowledge
Write flexible, dynamic, and adaptable code
Harness the power of basic tools
Avoid programming by coincidence
Learn real requirements
Solve the underlying problems of concurrent code
Guard against security vulnerabilities
Build teams of pragmatic programmers
Take responsibility for your work and career
Test ruthlessly and effectively, including Property-based testing
Implement the Pragmatic Starter Kit
Delight your users
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.
For twenty years, the lessons from The Pragmatic Programmer have helped a generation of programmers examine the very essence of software development, independent of any particular…
"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
Fully Revised and Updated—Includes New Refactoring's and Code Examples
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” –M. Fowler (1999)
For more than twenty years, experienced programmers worldwide have relied on Martin Fowler’s Refactoring to improve the design of existing code and to enhance software maintainability, as well as to make existing code easier to understand.
This eagerly awaited new edition has been fully updated to reflect crucial changes in the programming landscape. Refactoring, Second Edition, features an updated catalog of refactoring's and includes JavaScript code examples, as well as new functional examples that demonstrate refactoring without classes.
Like the original, this edition explains what refactoring is; why you should refactor; how to recognize code that needs refactoring; and how to actually do it successfully, no matter what language you use.
- Understand the process and general principles of refactoring
- Quickly apply useful refactorings to make a program easier to comprehend and change
- Recognize “bad smells” in code that signal opportunities to refactor
- Explore the refactorings, each with explanations, motivation, mechanics, and simple examples
- Build solid tests for your refactorings
- Recognize tradeoffs and obstacles to refactoring
Includes free access to the canonical web edition, with even more refactoring resources. (See inside the book for details about how to access the web edition.)
"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…
Use Components to Improve Maintainability, Reduce Complexity, and Accelerate Testing in Large Rails Applications "This book gives Ruby pros a comprehensive guide for increasing the sophistication of their designs, without having to forsake the principles of elegance that keep them in our corner of the software world." -Obie Fernandez, author, The Rails(TM) 5 Way, Fourth Edition As Rails applications grow, even experienced developers find it difficult to navigate code bases, implement new features, and keep tests fast. Components are the solution, and Component-Based Rails Applications shows how to make the most of them. Writing for programmers and software team leads who are comfortable with Ruby and Rails, Stephan Hagemann introduces a practical, start-to-finish methodology for modernizing and restructuring existing Rails applications. One step at a time, Hagemann demonstrates how to revamp Rails applications to exhibit visible, provably independent, and explicitly connected parts-thereby simplifying them and making them far easier for teams to manage, change, and test. Throughout, he introduces design concepts and techniques you can use to improve applications of many kinds, even if they weren't built with Rails or Ruby.
Learn how components clarify intent, improve collaboration, and simplify innovation and maintenance Create a full Rails application within a component, from first steps to migrations and dependency management Test component-based applications, manage assets and dependencies, and deploy your application to production Identify the seams in an existing Rails application, and refactor it to extract components Master a scripted, repeatable approach for refactoring Rails applications of any size Use component-based Rails with two popular structural patterns: hexagonal and DCI architecture Leverage your new component skills with other frameworks and languages Overcome the unique challenges that arise as you componentize Rails applications
If you're ready to simplify and revitalize your complex Rails systems, you're ready for Component-Based Rails Applications .
Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.
Use Components to Improve Maintainability, Reduce Complexity, and Accelerate Testing in Large Rails Applications "This book gives Ruby pros a comprehensive guide for increasing…
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.
As in previous editions, each chapter of Effective Java, Third Edition, consists of several “items,” each presented in the form of a short, stand-alone essay that provides specific advice, insight into Java platform subtleties, and updated code examples. The comprehensive descriptions and explanations for each item illuminate what to do, what not to do, and why.
The third edition covers language and library features added in Java 7, 8, and 9, including the functional programming constructs that were added to its object-oriented roots. Many new items have been added, including a chapter devoted to lambdas and streams.
New coverage includes
* Functional interfaces, lambda expressions, method references, and streams
* Default and static methods in interfaces
* Type inference, including the diamond operator for generic types
* The @SafeVarargs annotation
* The try-with-resources statement
* New library features such as the Optional interface, java.time, and the convenience factory methods for collections
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…
McGreal and Jocham discuss strategy, showing how to connect Vision, Value, and Validation in ROI-focused agile product management. They lay out Scrum best-practices for managing complexity and continuously delivering value, and they define the concrete practices and tools you can use to manage Product Backlogs and release plans, all with the goal of making you a more successful Product Owner.
McGreal and Jocham discuss strategy, showing how to connect Vision, Value, and Validation in ROI-focused agile product management. They lay out Scrum best-practices for managing…
In Advanced Game Design, pioneering game designer and instructor Michael Sellers situates game design practices in a strong theoretical framework of systems thinking, enabling designers to think more deeply and clearly about their work, so they can produce better, more engaging games for any device or platform. Sellers offers a deep unifying framework in which practical game design best practices and proven systems thinking theory reinforce each other, helping game designers understand what they are trying to accomplish and the best ways to achieve it. Drawing on 20+ years of experience designing games, launching game studios, and teaching game design, Sellers explains:
- What games are, and how systems thinking can help you think about them more clearly
- How to systematically promote engagement, interactivity, and fun
- What you can learn from MDA and other game design frameworks
- How to create gameplay and core loops
- How to design the entire player experience, and how to build game mechanics that work together to create that experience
- How to capture your game’s “big idea” and Unique Selling - Proposition
- How to establish high-level and background design and translate it into detailed design
- How to build, playtest, and iterate early prototypes
- How to build your game design career in a field that keeps changing at breakneck speed
In Advanced Game Design, pioneering game designer and instructor Michael Sellers situates game design practices in a strong theoretical framework of systems thinking, enabling…
SAFe(R) The World's Leading Framework for Enterprise Agility "SAFe(R) 4.0 Distilled is the book we've all been waiting for. It breaks down the complexity of the Framework into easily digestible explanations and actionable guidance. A must-have resource for beginners as well as seasoned practitioners." --Lee Cunningham, Sr. Director, Enterprise Agile Strategy at VersionOne, Inc. To succeed in today's adapt-or-die marketplace, businesses must be able to rapidly change the way they create and deliver value to their customers. Hundreds of the world's most successful companies--including Hewlett Packard Enterprise, AstraZeneca, Cisco, and Philips--have turned to the Scaled Agile Framework(R) (SAFe(R)) to achieve agility at scale and maintain a competitive edge. SAFe(R) 4.0 Distilled: Applying the Scaled Agile Framework(R) for Lean Software and Systems Engineering explains how adopting SAFe can quickly improve time to market and increase productivity, quality, and employee engagement. In this book, you will
- Understand the business case for SAFe: its benefits, the problems it solves, and how to apply it
- Get an overview of SAFe across all parts of the business: team, program, value stream, and portfolio
- Learn why SAFe works: the power of SAFe's Lean-Agile mindset, values, and principles
- Discover how systems thinking, Agile development, and Lean product development form the underlying basis for SAFe
- Learn how to become a Lean-Agile leader and effectively drive an enterprise-wide transformation
SAFe(R) The World's Leading Framework for Enterprise Agility "SAFe(R) 4.0 Distilled is the book we've all been waiting for. It breaks down the complexity of the Framework into…
The “Bible” for Rails Development: Fully Updated for Rails 5
“When I read The Rails Way for the first time, I felt like I truly understood Rails for the first time.”
―Steve Klabnik, Rails contributor and mentor
The Rails 5 Way is the comprehensive, authoritative reference guide for professionals delivering production-quality code using modern Ruby on Rails. Obie Fernandez illuminates the entire Rails 5 API, its most powerful idioms, design approaches, and libraries. He presents new and updated content on Action Cable, RSpec 3.4, Turbolinks 5.0, the Attributes API, and many other enhancements, both major and subtle.
Through detailed code examples, you’ll dive deep into Ruby on Rails, discover why it’s designed as it is, and learn to make it do exactly what you want. Proven in thousands of production systems, the knowledge in this book will maximize your productivity and help you build more successful solutions.
Build powerful, scalable, REST-compliant back-end services
Program complex program flows using Action Controller
Represent models, relationships, and operations in Active Record, and apply advanced Active Record techniques
Smoothly evolve database schema via Migrations
Craft front-ends with ActionView and the Asset Pipeline
Optimize performance and scalability with caching and Turbolinks 5.0
Improve your productivity using Haml HTML templating
Secure your systems against attacks like SQL Injection, XSS, and XSRF
Integrate email using Action Mailer
Enable real-time, websockets-based browser behavior with Action Cable
Improve responsiveness with background processing
Build “API-only” back-end projects that speak JSON
Leverage enhancements to Active Job, serialization, and Ajax support
The “Bible” for Rails Development: Fully Updated for Rails 5
“When I read The Rails Way for the first time, I felt like I truly understood Rails for the first time.”
Templates are among the most powerful features of C++, but they remain misunderstood and underutilized, even as the C++ language and development community have advanced. In C++ Templates, Second Edition, three pioneering C++ experts show why, when, and how to use modern templates to build software that’s cleaner, faster, more efficient, and easier to maintain.
Now extensively updated for the C++11, C++14, and C++17 standards, this new edition presents state-of-the-art techniques for a wider spectrum of applications. The authors provide authoritative explanations of all new language features that either improve templates or interact with them, including variadic templates, generic lambdas, class template argument deduction, compile-time if, forwarding references, and user-defined literals. They also deeply delve into fundamental language concepts (like value categories) and fully cover all standard type traits.
The book starts with an insightful tutorial on basic concepts and relevant language features. The remainder of the book serves as a comprehensive reference, focusing first on language details and then on coding techniques, advanced applications, and sophisticated idioms. Throughout, examples clearly illustrate abstract concepts and demonstrate best practices for exploiting all that C++ templates can do.
Templates are among the most powerful features of C++, but they remain misunderstood and underutilized, even as the C++ language and development community have advanced. In C++…
Designing Software Architectures will teach you how to design any software architecture in a systematic, predictable, repeatable, and cost-effective way.
This book introduces a practical methodology for architecture design that any professional software engineer can use, provides structured methods supported by reusable chunks of design knowledge, and includes rich case studies that demonstrate how to use the methods.
Using realistic examples, you’ll master the powerful new version of the proven Attribute-Driven Design (ADD) 3.0 method and will learn how to use it to address key drivers, including quality attributes, such as modifiability, usability, and availability, along with functional requirements and architectural concerns.
Drawing on their extensive experience, Humberto Cervantes and Rick Kazman guide you through crafting practical designs that support the full software life cycle, from requirements to maintenance and evolution. You’ll learn how to successfully integrate design in your organizational context, and how to design systems that will be built with agile methods.
Comprehensive coverage includes
Understanding what architecture design involves, and where it fits in the full software development life cycle
Mastering core design concepts, principles, and processes
Understanding how to perform the steps of the ADD method
Scaling design and analysis up or down, including design for pre-sale processes or lightweight architecture reviews
Recognizing and optimizing critical relationships between analysis and design
Utilizing proven, reusable design primitives and adapting them to specific problems and contexts
Solving design problems in new domains, such as cloud, mobile, or big data
Designing Software Architectures will teach you how to design any software architecture in a systematic, predictable, repeatable, and cost-effective way.
The play-focused, step-by-step guide to creating great game designs
This book offers a play-focused, process-oriented approach for designing games people will love to play. Drawing on a combined 35 years of design and teaching experience, Colleen Macklin and John Sharp link the concepts and elements of play to the practical tasks of game design. Using full-color examples, they reveal how real game designers think and work, and illuminate the amazing expressive potential of great game design.
Focusing on practical details, this book guides you from idea to prototype to playtest and fully realized design. You’ll walk through conceiving and creating a game’s inner workings, including its core actions, themes, and especially its play experience. Step by step, you’ll assemble every component of your “videogame,” creating practically every kind of play: from cooperative to competitive, from chance-based to role-playing, and everything in between.
Macklin and Sharp believe that games are for everyone, and game design is an exciting art form with a nearly unlimited array of styles, forms, and messages. Cutting across traditional platform and genre boundaries, they help you find inspiration wherever it exists.
The play-focused, step-by-step guide to creating great game designs
This book offers a play-focused, process-oriented approach for designing games people will love to play.…
Java Performance Companion shows how to systematically and proactively improve Java performance with today’s advanced multicore hardware and complex operating system environments.
The authors, who are all leading Java performance and Java HotSpot VM experts, help you improve performance by using modern software engineering practices, avoiding common mistakes, and applying tips and tricks gleaned from years of real-world experience.
Picking up where Charlie Hunt and Binu John’s classic Java Performance left off, this book provides unprecedented detail on two powerful Java platform innovations: the Garbage First (G1) garbage collector and the HotSpot VM Serviceability Agent.
Coverage includes
Leveraging G1 to overcome limitations in parallel, serial, and CMS garbage collection
Understanding each stage of G1 GC collections, both young and old
Getting under the hood with G1 and efficiently fine-tuning it for your application
Identifying potential optimizations, interpreting experimental results, and taking action
Exploring the internals of the HotSpot VM
Using HotSpot VM Serviceability Agent to analyze, triage, and resolve diverse HotSpot VM issues
Troubleshooting out of memory errors, Java level deadlocks, and HotSpot VM crashes
Extending the Serviceability Agent, and using the Plugin for VisualVM
Mastering useful HotSpot VM command line options not covered in Java Performance
Java Performance Companion can help you squeeze maximum performance and value from Java with JDK 8 or 9–for any application, in any environment.
Register your product at informit.com/register for convenient access to downloads, updates, and corrections as they become available.
Java Performance Companion shows how to systematically and proactively improve Java performance with today’s advanced multicore hardware and complex operating system environments.…
The Go-To Resource for Large-Scale Organizations to Be Agile
Rather than asking, “How can we do agile at scale in our big complex organization?” a different and deeper question is, “How can we have the same simple structure that Scrum offers for the organization, and be agile at scale rather than do agile?” This profound insight is at the heart of LeSS (Large-Scale Scrum).
In Large-Scale Scrum: More with LeSS, Craig Larman and Bas Vodde have distilled over a decade of experience in large-scale LeSS adoptions towards a simpler organization that delivers more flexibility with less complexity, more value with less waste, and more purpose with less prescription.
Targeted to anyone involved in large-scale development, Large-Scale Scrum: More with LeSS, offers straight-to-the-point guides for how to be agile at scale, with LeSS. It will clearly guide you to
— Adopt LeSS
— Structure a large development organization for customer value
— Clarify the role of management and Scrum Master
— Define what your product is, and why
— Be a great Product Owner
— Work with multiple whole-product focused feature teams in one Sprint that produces a shippable product
— Coordinate and integrate between teams
— Work with multi-site teams
The Go-To Resource for Large-Scale Organizations to Be Agile
Rather than asking, “How can we do agile at scale in our big complex organization?” a different and deeper question…