How we did it:
For any feedback, any questions, any notes or just for chat - feel free to follow us on social networks
Michael C. Feathers
The average book on Agile software development describes a fairyland of greenfield projects, with wall-to-wall tests that run after every few edits, and clean & simple source code.
The average software project, in our industry, was written under some aspect of code-and-fix, and without automated unit tests. And we can't just throw this code away; it represents a significant effort debugging and maintaining. It contains many latent requirements decisions. Just as Agile processes are incremental, Agile adoption must be incremental too. No more throwing away code just because it looked at us funny.
Mike begins his book with a very diplomatic definition of "Legacy". I'l skip ahead to the undiplomatic version: Legacy code is code without unit tests.
Before cleaning that code up, and before adding new features and removing bugs, such code must be de-legacified. It needs unit tests.
To add unit tests, you must change the code. To change the code, you need unit tests to show how safe your change was.
The core of the book is a cookbook of recipes to conduct various careful attacks. Each presents a particular problem, and a relatively safe way to migrate the code towards tests.
Code undergoing this migration will begin to experience the benefits of unit tests, and these benefits will incrementally make new tests easier to write. These efforts will make aspects of a legacy codebase easy to change.
It's an unfortunate commentary on the state of our programming industry how much we need this book.
Steven S. Skiena
Expanding on the highly successful formula of the first edition, this book now serves as the primary textbook of choice for any algorithm design course while maintaining its status as the premier practical reference guide to algorithms.
Charlie Hunt, Binu John
The ONLY complete, up-to-date guide to all aspects of Java performance • •The first one-stop guide to identifying, isolating, and fixing Java performance issues on multicore and multiprocessor processor platforms - from two of Sun's leading Java performance experts. •Includes crucial new insights into microbenchmarking found nowhere else. •Contains up-to-the-minute coverage of Java optimization, including migration of older applications. Given Java's ubiquity and indispensability, Java software performance is of crucial importance to millions of developers worldwide. The emergence of multi-core systems and the evolution of the Java platform give developers many new opportunities to optimize performance. Now, three of Sun's leading Java performance experts have written the first start-to-finish guide to optimizing Java performance in today's multi-core systems. Java Performance gives developers, designers, and architects all the information they need to leverage Java's performance and scalability abilities on any modern multicore or multiprocessor system. This book's end-to-end coverage addresses all these topics: monitoring and profiling; the effective use of garbage collection and other language features; adaptive and platform-specific tuning; techniques for maximizing scalability; and much more. The authors' extensive benchmarking coverage includes an indispensable introduction to effective microbenchmarks - including guidance on avoiding the common microbenchmarking mistakes that mislead developers into writing badlyperforming software. The book also contains a complete section on Java performance enhancement, including opportunities and challenges associated with migrating software from Java 1.4.2 and Java 5 - issues that more and more Java developers are now facing.
Alexander A. Stepanov, Paul McJones
New techniques for building more secure, reliable, high-performance software, from the renowned creator of the C++ STL • • A truly foundational book on the discipline of generic programming: how to write better software by mastering the development of abstract components. • Based on Alexander Stepanov's breakthrough lectures to programmers at Adobe and throughout Silicon Valley. • For serious software developers, architects, and engineers, the perfect complement to Knuth's theory and Stoustrup's practice. Elements of Programming is the next breakthrough book for serious practitioners seeking ways to write better software. In this book, Alexander Stepanov - the legendary architect and creator of the C++ Standard Template Libraries - focuses on the discipline that offers the greatest potential for improving contemporary software: the proper development of abstract components. Drawing on his enormously popular lectures to programmers at Adobe and throughout Silicon Valley, Stepanov illuminates crucial techniques of generic programming, specifically focusing on abstraction as the key to secure, reliable, and high-performance software. Together with co-author and ACM Fellow Paul McJones, Stepanov shows programmers how to use mathematics to compose reliable algorithms from components, and to design effective interfaces between algorithms and data structures. Topics covered in Elements of Programming include: transformations, associative operations, linear orderings, ordered algebraic structures, iterators, coordinates and coordinate structures, copying algorithms, rearrangement, sorting, and much more. This book requires an understanding of mathematics, but is consistently focused on identifying superior solutions to practical programming problems. Stepanov and McJones illuminate their concepts and techniques with C++ code, but the techniques are equally applicable to a wide range of contemporary object-oriented languages.
Mark Hamstra, Holden Karau, Matei Zaharia, Andy Konwinski, Patrick Wendell
This book introduces Apache Spark, the open source cluster computing system that makes data analytics fast to write and fast to run. You'll learn how to express parallel jobs with just a few lines of code, and cover applications from simple batch jobs to stream processing and machine learning.
This book shows how to develop software based on parts that interact primarily through an event mechanism. The book demonstrates the use of events in all sorts of situations to solve recurring development problems without incurring coupling. A novel form of software diagram is introduced, called Signal Wiring Diagram. These diagrams are similar to the circuit diagrams used by hardware designers. A series of case studies concludes the book, bringing all the next concepts introduced together. Source code is provided in both C# and VB.NET
Why learn Scala? You don’t need to be a data scientist or distributed computing expert to appreciate this object-oriented functional programming language. This practical book provides a comprehensive yet approachable introduction to the language, complete with syntax diagrams, examples, and exercises. You’ll start with Scala's core types and syntax before diving into higher-order functions and immutable data structures. Author Jason Swartz demonstrates why Scala’s concise and expressive syntax make it an ideal language for Ruby or Python developers who want to improve their craft, while its type safety and performance ensures that it’s stable and fast enough for any application. Learn about the core data types, literals, values, and variables Discover how to think and write in expressions, the foundation for Scala's syntax Write higher-order functions that accept or return other functions Become familiar with immutable data structures and easily transform them with type-safe and declarative operations Create custom infix operators to simplify existing operations or even to start your own domain-specific language Build classes that compose one or more traits for full reusability, or create new functionality by mixing them in at instantiation
Rachid Guerraoui, Luís Rodrigues
Offers fundamental reliable distributed programming abstractions as well as algorithms to implement these abstractions. This book introduces basic abstractions in simple distributed environments. It comes with a companion set of running examples implemented in Java.
Richard M. Fujimoto
A state-of-the-art guide for the implementation of distributed simulation technology. The rapid expansion of the Internet and commodity parallel computers has made parallel and distributed simulation (PADS) a hot technology indeed. Applications abound not only in the analysis of complex systems such as transportation or the next-generation Internet, but also in computer-generated virtual worlds for military and professional training, interactive computer games, and the entertainment industry. In this book, PADS expert Richard M. Fujimoto provides software developers with cutting-edge techniques for speeding up the execution of simulations across multiple processors and dealing with data distribution over wide area networks ,including the Internet. With an emphasis on parallel and distributed discrete event simulation technologies, Dr. Fujimoto compiles and consolidates research results in the field spanning the last twenty years, discussing the use of parallel and distributed computers in both the modeling and analysis of system behavior and the creation of distributed virtual environments. While other books on PADS concentrate on applications, Parallel and Distributed Simulation Systems clearly shows how to implement the technology. It explains in detail the synchronization algorithms needed to properly realize the simulations, including an in-depth discussion of time warp and advanced optimistic techniques. Finally, the book is richly supplemented with references, tables and illustrations, and examples of contemporary systems such as the Department of Defense's High Level Architecture (HLA), which has become the standard architecture for defense programs in the United States.
The open source Scala language is a Java-based dynamic scripting, functional programming language. Moreover, this highly scalable scripting language lends itself well to building cloud-based/deliverable Software as a Service (SaaS) online applications. Written by Lift Scala web framework founder and lead Dave Pollak, Beginning Scala takes a down-to-earth approach to teaching Scala that leads you through simple examples that can be combined to build complex, scalable systems and applications. This book introduces you to the Scala programming language and then guides you through Scala constructs and libraries that allow small and large teams to assemble small components into high-performance, scalable systems. You will learn why Scala is becoming the language of choice for Web 2.0 companies such as Twitter as well as enterprises such as Seimens and SAP. What you’ll learn Get running with the Scala programming language for functional Java, Java-based, and cloud-based/deliverable applications development, and more. Understand the basic syntax and mechanisms for writing Scala programs. Discover the techniques for and advantages of using immutable data structures. Create functional programming techniques for defining and managing concurrency. Use a complex type system and traits to define object-oriented programs. Work with Scala constructs and libraries that allow teams of any size to assemble small components into high-performance, scalable systems. Build complex systems based on the simple examples learned along the way through this book. Who this book is for Java developers looking to reduce boilerplate, improve team performance, improve interteam dynamics, and build more scalable and robust systems. Also, this book will appeal to Java developers looking to do cloud-based development. Lastly, Ruby, Python, and Groovy programmers looking for a higher performance and a more robust language will benefit. Table of Contents About Scala and How to Install It Scala Syntax, Scripts, and Your First Scala Programs Collections and the Joy of Immutability Fun with Functions, and Never Having to Close That JDBC Connection Pattern Matching Actors and Concurrency Traits and Types and Gnarly Stuff for Architects Parsers—Because BNF Is Not Just for Academics Anymore Scaling Your Team
bull; Demonstrates how Python is the perfect language for text-processing functions. bull; Provides practical pointers and tips that emphasize efficient, flexible, and maintainable approaches to text-processing challenges. bull; Helps programmers develop solutions for dealing with the increasing amounts of data with which we are all inundated.
Advanced Data Structures presents a comprehensive look at the ideas, analysis, and implementation details of data structures as a specialized topic in applied algorithms. Data structures are how data is stored within a computer, and how one can go about searching for data within. This text examines efficient ways to search and update sets of numbers, intervals, or strings by various data structures, such as search trees, structures for sets of intervals or piece-wise constant functions, orthogonal range search structures, heaps, union-find structures, dynamization and persistence of structures, structures for strings, and hash tables. This is the first volume to show data structures as a crucial algorithmic topic, rather than relegating them as trivial material used to illustrate object-oriented programming methodology, filling a void in the ever-increasing computer science market. Numerous code examples in C and more than 500 references make Advanced Data Structures an indispensable text. topic. Numerous code examples in C and more than 500 references make Advanced Data Structures an indispensable text.
Derek Chen-Becker, Marius Danciu, Tyler Weir
Hagit Attiya, Jennifer Welch
The explosive growth of distributed computing systems makes understanding them imperative. To make this notoriously difficult subject accessible, 'Distributed Computing; Fundamentals, Simulations, and Advanced Topics; Second Edition', provides a solid introduction to the mathematical foundations and theory of distributed computing, highlighting common themes and basic techniques. The authors present the fundamental issues underlying the design of distributed systems - communication, coordination, synchronization, and uncertainty - as well as fundamental algorithmic concepts and lower-bound techniques. The book’s unifying approach emphasizes the similarities between different models and explains inherent discrepancies between them.
The emerging reactive model is ideal for high-performance web applications that need to manage the unpredictably-bursty behavior of the web, along with the potential instability of running on networks not fully controlled. By using application components that communicate asynchronously as they react to user and system events, reactive applications are more scalable, responsive, and fault-tolerant than standard monolithic applications. For web developers working in Java or Scala, the Play framework makes it easy to implement reactive applications without taking on the overhead of building everything from scratch. Reactive Web Applications teaches web developers how to benefit from the reactive application architecture and presents hands-on examples using the Play framework. It introduces Play as a framework to handle the plumbing of applications. The book alternates between chapters that introduce reactive ideas like asynchronous programming, managing distributed state, and fault tolerance and examples that show how to build such applications using Play. Readers new to Play will be able to learn from the ground up. Those already using Play will get a deeper look at how to implement reactive web applications effectively. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications.