Book recommendations for Software Engineering

A fine selection of books, recommended by our mentors and mentees. Probably the best you can find. And the best is: You can support us by buying books directly from the library.

Design Patterns
Gang of four

Capturing a wealth of experience about the design of object-oriented software, four top-notch designers present a catalog of simple and succinct solutions to commonly occurring design problems. Previously undocumented, these 23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves. The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently. Each pattern describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design. All patterns are compiled from real systems and are based on real-world examples. Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk.

View
Peopleware
Tom DeMarco, Timothy Lister

Few books in computing have had as profound an influence on software management as Peopleware. 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., Kenan Professor of Computer Science, University of North Carolina at Chapel Hill, Author of The Mythical Man-Month and The Design of Design “Peopleware is the one book that everyone who runs a software team needs to read and reread once a year. In the quarter century since the first edition appeared, it has become more important, not less, to think about the social and human issues in software develop¿ment. This is the only way we’re going to make more humane, productive workplaces. Buy it, read it, and keep a stock on hand in the office supply closet.” ―Joel Spolsky, Co-founder, Stack Overflow “When a book about a field as volatile as software design and use extends to a third edition, you can be sure that the authors write of deep principle, of the fundamental causes for what we readers experience, and not of the surface that everyone recognizes. And to bring people, actual human beings, into the mix! How excellent. How rare. The authors have made this third edition, with its additions, entirely terrific.” ―Lee Devin and Rob Austin, Co-authors of The Soul of Design and Artful Making For this third edition, the authors have added six new chapters and updated the text throughout, bringing it in line with today’s development environments and challenges. For example, the book now discusses pathologies of leadership that hadn’t previously been judged to be pathological; an evolving culture of meetings; hybrid teams made up of people from seemingly incompatible generations; and a growing awareness that some of our most common tools are more like anchors than propellers. Anyone who needs to manage a software project or software organization will find invaluable advice throughout the book.

View
eXtreme Programming Explained
Kent Beck

Nearly five years after the first edition of this book exploded on to the market,noted software engineering guru and the father of Extreme Programming (XP)Kent Beck provides a fresh look at this controversial topic. XP remains themost popular agile methodology in software development, and many believe itis ideal for small to mid-size development organizations. However, XP is notwithout its detractors. The goal of the book remains to help programmers andteams decide if XP is the right path to pursue. The book offers advice, but doesnot provide a prescriptive, "how to" style format. This Fifth AnniversaryEdition enhances the full knowledge of XP and gives both the advocate andskeptic of XP full detail to move forward with an informed opinion.

View
Domain Driven Design
Eric Evans

Domain-Driven Design fills that need. This is not a book about specific technologies. It offers readers 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 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 development. Readers learn how to use a domain model to make a complex development effort more focused and dynamic. A core of best practices and standard patterns provides a common language for the development team. A shift in emphasis–refactoring not just the code but the model underlying the code–in combination with the frequent iterations of Agile development leads to deeper insight into domains and enhanced communication between domain expert and programmer. Domain-Driven Design then builds on this foundation, and addresses modeling and design for complex systems and larger organizations.Specific topics covered include: 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.

View
Designing Data-Intensive Applications
Martin Kleppmann

Data is at the center of many challenges in system design today. Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, we have an overwhelming variety of tools, including relational databases, NoSQL datastores, stream or batch processors, and message brokers. What are the right choices for your application? How do you make sense of all these buzzwords? In this practical and comprehensive guide, author Martin Kleppmann helps you navigate this diverse landscape by examining the pros and cons of various technologies for processing and storing data. Software keeps changing, but the fundamental principles remain the same. With this book, software engineers and architects will learn how to apply those ideas in practice, and how to make full use of data in modern applications. Peer under the hood of the systems you already use, and learn how to use and operate them more effectively Make informed decisions by identifying the strengths and weaknesses of different tools Navigate the trade-offs around consistency, scalability, fault tolerance, and complexity Understand the distributed systems research upon which modern databases are built Peek behind the scenes of major online services, and learn from their architectures

View
Accelerate
Gene Kim, Forsgren, Jez Humble

Accelerate your organization to win in the marketplace. How can we apply technology to drive business value? For years, we've been told that the performance of software delivery teams doesn't matter―that it can't provide a competitive advantage to our companies. Through four years of groundbreaking research to include data collected from the State of DevOps reports conducted with Puppet, Dr. Nicole Forsgren, Jez Humble, and Gene Kim set out to find a way to measure software delivery performance―and what drives it―using rigorous statistical methods. This book presents both the findings and the science behind that research, making the information accessible for readers to apply in their own organizations. Readers will discover how to measure the performance of their teams, and what capabilities they should invest in to drive higher performance. This book is ideal for management at every level.

View
The Mythical Man-Month
Essays

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, both for readers already familiar with his work and for readers discovering it for the first time. The added chapters contain (1) a crisp condensation of all the propositions asserted in the original book, including Brooks' central argument in The Mythical Man-Month: that large programming projects suffer management problems different from small ones due to the division of labor; that the conceptual integrity of the product is therefore critical; and that it is difficult but possible to achieve this unity; (2) Brooks' view of these propositions a generation later; (3) a reprint of his classic 1986 paper "No Silver Bullet"; and (4) today's thoughts on the 1986 assertion, "There will be no silver bullet within ten years."

View
A Philosophy of Software Design
John Ousterhout

This book addresses the topic of software design: how to decompose complex software systems into modules (such as classes and methods) that can be implemented relatively independently. The book first introduces the fundamental problem in software design, which is managing complexity. It then discusses philosophical issues about how to approach the software design process, and it presents a collection of design principles to apply during software design. The book also introduces a set of red flags that identify design problems. You can apply the ideas in this book to minimize the complexity of large software systems, so that you can write software more quickly and cheaply.

View
Clean Code
Robert C. Martin

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, who has helped bring agile principles from a practitioner’s point of view to tens of thousands of programmers, 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 software craftsman, and make you a better programmer―but only if you work at it. What kind of work will you be doing? You’ll be reading code―lots of code. And you will be challenged to think about what’s right about that code, and what’s wrong with it. More importantly you will be challenged to reassess your professional values and your commitment to your craft. Clean Code is divided into three parts. The first describes the principles, patterns, and practices of writing clean code. The second part consists of several case studies of increasing complexity. Each case study is an exercise in cleaning up code―of transforming a code base that has some problems into one that is sound and efficient. The third part is the payoff: a single chapter containing a list of heuristics and “smells” gathered while creating the case studies. The result is a knowledge base that describes the way we think when we write, read, and clean code. Readers will come away from this book understanding How to tell the difference between good and bad code How to write good code and how to transform bad code into good code How to create good names, good functions, good objects, and good classes How to format code for maximum readability How to implement complete error handling without obscuring code logic How to unit test and practice test-driven development What “smells” and heuristics can help you identify bad code This book is a must for any developer, software engineer, project manager, team lead, or systems analyst with an interest in producing better code.

View
Continuous Delivery
Jez Humble, David Farley

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 • Automating all facets of building, integrating, testing, and deploying software • Implementing deployment pipelines at team and organizational levels • Improving collaboration between developers, testers, and operations • Developing features incrementally on large and distributed teams • Implementing an effective configuration management strategy • Automating acceptance testing, from analysis to implementation • Testing capacity and other non-functional requirements • Implementing continuous deployment and zero-downtime releases • Managing infrastructure, data, components and dependencies • Navigating risk management, compliance, and auditing 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.

View
Pragmatic Programmer
Andrew Hunt

“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 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: 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.

View
97 things every Engineering Manager should know
Camille Fournier

Tap into the wisdom of experts to learn what every engineering manager should know. With 97 short and extremely useful tips for engineering managers, you'll discover new approaches to old problems, pick up road-tested best practices, and hone your management skills through sound advice. Managing people is hard, and the industry as a whole is bad at it. Many managers lack the experience, training, tools, texts, and frameworks to do it well. From mentoring interns to working in senior management, this book will take you through the stages of management and provide actionable advice on how to approach the obstacles you’ll encounter as a technical manager. A few of the 97 things you should know: "Three Ways to Be the Manager Your Report Needs" by Duretti Hirpa "The First Two Questions to Ask When Your Team Is Struggling" by Cate Huston "Fire Them!" by Mike Fisher "The 5 Whys of Organizational Design" by Kellan Elliott-McCrea "Career Conversations" by Raquel Vélez "Using 6-Page Documents to Close Decisions" by Ian Nowland "Ground Rules in Meetings" by Lara Hogan

View
Learning SQL - Master SQL Fundamentals
Alan Beaulieu

Updated for the latest database management systems -- including MySQL 6.0, Oracle 11g, and Microsoft's SQL Server 2008 -- this introductory guide will get you up and running with SQL quickly. Whether you need to write database applications, perform administrative tasks, or generate reports, Learning SQL, Second Edition, will help you easily master all the SQL fundamentals. Each chapter presents a self-contained lesson on a key SQL concept or technique, with numerous illustrations and annotated examples. Exercises at the end of each chapter let you practice the skills you learn. With this book, you will: Move quickly through SQL basics and learn several advanced features Use SQL data statements to generate, manipulate, and retrieve data Create database objects, such as tables, indexes, and constraints, using SQL schema statements Learn how data sets interact with queries, and understand the importance of subqueries Convert and manipulate data with SQL's built-in functions, and use conditional logic in data statements Knowledge of SQL is a must for interacting with data. With Learning SQL, you'll quickly learn how to put the power and flexibility of this language to work.

View
Information Architecture for the World Wide Web
Louis Rosenfeld, Peter Morville

Today's web sites have moved far beyond "brochureware." They are larger and more complex, have great strategic value to their sponsors, and their users are busier and less forgiving. Designers, information architects, and web site managers are required to juggle vast amounts of information, frequent changes, new technologies, and sometimes even multiple objectives, making some web sites look like a fast-growing but poorly planned city-roads everywhere, but impossible to navigate. Well-planned information architecture has never been as essential as it is now. Information Architecture for the World Wide Web, 2nd Edition, shows you how to blend aesthetics and mechanics for distinctive, cohesive web sites that work. Most books on web development concentrate on either the graphics or the technical issues of a site. This book focuses on the framework that holds the two together. This edition contains more than 75% new material. You'll find updated chapters on organization, labeling, navigation, and searching; and a new chapter on thesauri, controlled vocabularies and metadata will help you understand the interconnectedness of these systems. The authors have expanded the methodology chapters to include a more interdisciplinary collection of tools and techniques. They've also complemented the top-down strategies of the first edition with bottom-up approaches that enable distributed, emergent solutions. A whole new section addresses the opportunities and challenges of practicing information architecture, while another section discusses how that work impacts and is influenced by the broader organizational context. New case studies provide models for creating enterprise intranet portals and online communities. Finally, you'll find pointers to a wealth of essential information architecture resources, many of which did not exist a few years ago. By applying the principles outlined in this completely updated classic, you'll build web sites and intranets that are easier to navigate and appealing to your users, as well as scalable and simple to maintain. Information Architecture for the World Wide Web, 2nd Edition is a treasure trove of ideas and practical advice for anyone involved in building or maintaining a large, complex web site or intranet.

View
Agile Testing - A Practical Guide for Testers and Agile Teams
Lisa Crispin, Janet Gregory

Testing is a key component of agile development. The widespread adoption of agile methods has brought the need for effective testing into the limelight, and agile projects have transformed the role of testers. Much of a tester’s function, however, remains largely misunderstood. What is the true role of a tester? Do agile teams actually need members with QA backgrounds? What does it really mean to be an “agile tester?” Two of the industry’s most experienced agile testing practitioners and consultants, Lisa Crispin and Janet Gregory, have teamed up to bring you the definitive answers to these questions and many others. In Agile Testing, Crispin and Gregory define agile testing and illustrate the tester’s role with examples from real agile teams. They teach you how to use the agile testing quadrants to identify what testing is needed, who should do it, and what tools might help. The book chronicles an agile software development iteration from the viewpoint of a tester and explains the seven key success factors of agile testing. Readers will come away from this book understanding How to get testers engaged in agile development Where testers and QA managers fit on an agile team What to look for when hiring an agile tester How to transition from a traditional cycle to agile development How to complete testing activities in short iterations How to use tests to successfully guide development How to overcome barriers to test automation This book is a must for agile testers, agile teams, their managers, and their customers.

View
Kanban - Successful Evolutionary Change for Your Technology Business
David J. Anderson

Kanban is becoming a popular way to visualize and limit work-in-progress in software development and information technology work. Teams around the world are adding kanban around their existing processes to catalyze cultural change and deliver better business agility. This book answers the questions: What is Kanban? Why would I want to use Kanban? How do I go about implementing Kanban? How do I recognize improvement opportunities and what should I do about them? Published 10 years ago it is in the top 5 agile books ever published.

View
Grokking Algorithms - An illustrated guide for programmers and other curious people
Aditya Bhargava

"This book does the impossible: it makes math fun and easy!" - Sander Rossel, COAS Software Systems Grokking Algorithms is a fully illustrated, friendly guide that teaches you how to apply common algorithms to the practical problems you face every day as a programmer. You'll start with sorting and searching and, as you build up your skills in thinking algorithmically, you'll tackle more complex concerns such as data compression and artificial intelligence. Each carefully presented example includes helpful diagrams and fully annotated code samples in Python. Learning about algorithms doesn't have to be boring! Get a sneak peek at the fun, illustrated, and friendly examples you'll find in Grokking Algorithms on Manning Publications' YouTube channel. Continue your journey into the world of algorithms with Algorithms in Motion, a practical, hands-on video course available exclusively at Manning.com (www.manning.com/livevideo/algorithms-?in-motion). Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the Technology An algorithm is nothing more than a step-by-step procedure for solving a problem. The algorithms you'll use most often as a programmer have already been discovered, tested, and proven. If you want to understand them but refuse to slog through dense multipage proofs, this is the book for you. This fully illustrated and engaging guide makes it easy to learn how to use the most important algorithms effectively in your own programs. About the Book Grokking Algorithms is a friendly take on this core computer science topic. In it, you'll learn how to apply common algorithms to the practical programming problems you face every day. You'll start with tasks like sorting and searching. As you build up your skills, you'll tackle more complex problems like data compression and artificial intelligence. Each carefully presented example includes helpful diagrams and fully annotated code samples in Python. By the end of this book, you will have mastered widely applicable algorithms as well as how and when to use them. What's Inside Covers search, sort, and graph algorithms Over 400 pictures with detailed walkthroughs Performance trade-offs between algorithms Python-based code samples About the Reader This easy-to-read, picture-heavy introduction is suitable for self-taught programmers, engineers, or anyone who wants to brush up on algorithms. About the Author Aditya Bhargava is a Software Engineer with a dual background in Computer Science and Fine Arts. He blogs on programming at adit.io. Table of Contents Introduction to algorithms Selection sort Recursion Quicksort Hash tables Breadth-first search Dijkstra's algorithm Greedy algorithms Dynamic programming K-nearest neighbors

View
Python For Dummies
Stef Maruch, Aahz Maruch

Python is one of the most powerful, easy-to-read programming languages around, but it does have its limitations. This general purpose, high-level language that can be extended and embedded is a smart option for many programming problems, but a poor solution to others. Python For Dummies is the quick-and-easy guide to getting the most out of this robust program. This hands-on book will show you everything you need to know about building programs, debugging code, and simplifying development, as well as defining what actions it can perform. You’ll wrap yourself around all of its advanced features and become an expert Python user in no time. This guide gives you the tools you need to: Master basic elements and syntax Document, design, and debug programs Work with strings like a pro Direct a program with control structures Integrate integers, complex numbers, and modules Build lists, stacks, and queues Create an organized dictionary Handle functions, data, and namespace Construct applications with modules and packages Call, create, extend, and override classes Access the Internet to enhance your library Understand the new features of Python 2.5 Packed with critical idioms and great resources to maximize your productivity, Python For Dummies is the ultimate one-stop information guide. In a matter of minutes you’ll be familiar with Python’s building blocks, strings, dictionaries, and sets; and be on your way to writing the program that you’ve dreamed about!

View
Python Machine Learning
Sebastian Raschka

Unlock deeper insights into Machine Leaning with this vital guide to cutting-edge predictive analytics About This BookLeverage Python's most powerful open-source libraries for deep learning, data wrangling, and data visualizationLearn effective strategies and best practices to improve and optimize machine learning systems and algorithmsAsk – and answer – tough questions of your data with robust statistical models, built for a range of datasetsWho This Book Is For If you want to find out how to use Python to start answering critical questions of your data, pick up Python Machine Learning – whether you want to get started from scratch or want to extend your data science knowledge, this is an essential and unmissable resource. What You Will LearnExplore how to use different machine learning models to ask different questions of your dataLearn how to build neural networks using Keras and TheanoFind out how to write clean and elegant Python code that will optimize the strength of your algorithmsDiscover how to embed your machine learning model in a web application for increased accessibilityPredict continuous target outcomes using regression analysisUncover hidden patterns and structures in data with clusteringOrganize data using effective pre-processing techniquesGet to grips with sentiment analysis to delve deeper into textual and social media dataIn Detail Machine learning and predictive analytics are transforming the way businesses and other organizations operate. Being able to understand trends and patterns in complex data is critical to success, becoming one of the key strategies for unlocking growth in a challenging contemporary marketplace. Python can help you deliver key insights into your data – its unique capabilities as a language let you build sophisticated algorithms and statistical models that can reveal new perspectives and answer key questions that are vital for success. Python Machine Learning gives you access to the world of predictive analytics and demonstrates why Python is one of the world's leading data science languages. If you want to ask better questions of data, or need to improve and extend the capabilities of your machine learning systems, this practical data science book is invaluable. Covering a wide range of powerful Python libraries, including scikit-learn, Theano, and Keras, and featuring guidance and tips on everything from sentiment analysis to neural networks, you'll soon be able to answer some of the most important questions facing you and your organization. Style and approach Python Machine Learning connects the fundamental theoretical principles behind machine learning to their practical application in a way that focuses you on asking and answering the right questions. It walks you through the key elements of Python and its powerful machine learning libraries, while demonstrating how to get to grips with a range of statistical models.

View
Designing Machine Learning Systems
Chip Huyen

Machine learning systems are both complex and unique. Complex because they consist of many different components and involve many different stakeholders. Unique because they're data dependent, with data varying wildly from one use case to the next. In this book, you'll learn a holistic approach to designing ML systems that are reliable, scalable, maintainable, and adaptive to changing environments and business requirements. Author Chip Huyen, co-founder of Claypot AI, considers each design decision--such as how to process and create training data, which features to use, how often to retrain models, and what to monitor--in the context of how it can help your system as a whole achieve its objectives. The iterative framework in this book uses actual case studies backed by ample references. This book will help you tackle scenarios such as: Engineering data and choosing the right metrics to solve a business problem Automating the process for continually developing, evaluating, deploying, and updating models Developing a monitoring system to quickly detect and address issues your models might encounter in production Architecting an ML platform that serves across use cases Developing responsible ML systems

View
Hands-On Machine Learning with Scikit-Learn and TensorFlow - Concepts, Tools, and Techniques to Build Intelligent Systems
Aurélien Géron

Graphics in this book are printed in black and white. Through a series of recent breakthroughs, deep learning has boosted the entire field of machine learning. Now, even programmers who know close to nothing about this technology can use simple, efficient tools to implement programs capable of learning from data. This practical book shows you how. By using concrete examples, minimal theory, and two production-ready Python frameworks—scikit-learn and TensorFlow—author Aurélien Géron helps you gain an intuitive understanding of the concepts and tools for building intelligent systems. You’ll learn a range of techniques, starting with simple linear regression and progressing to deep neural networks. With exercises in each chapter to help you apply what you’ve learned, all you need is programming experience to get started. Explore the machine learning landscape, particularly neural nets Use scikit-learn to track an example machine-learning project end-to-end Explore several training models, including support vector machines, decision trees, random forests, and ensemble methods Use the TensorFlow library to build and train neural nets Dive into neural net architectures, including convolutional nets, recurrent nets, and deep reinforcement learning Learn techniques for training and scaling deep neural nets Apply practical code examples without acquiring excessive machine learning theory or algorithm details

View
The DevOps Handbook - How to Create World-Class Agility, Reliability, & Security in Technology Organizations
Gene Kim, Jez Humble, Patrick Debois, John Willis, Nicole Forsgren

This award-winning and bestselling business handbook for digital transformation is now fully updated and expanded with the latest research and new case studies! “[The DevOps Handbook] remains a must-read for any organization seeking to scale up its IT capability and expand DevOps practices across multiple departments or lines of business.” —Mike Perrow, TechBeacon For years, The DevOps Handbook has been the definitive guide for taking the successes laid out in the bestselling The Phoenix Project and applying them in any organization. Now, with this fully updated and expanded edition, it's time to take DevOps out of the IT department and apply it across the full business. Technology is now at the core of every company, no matter the business model or product. The theories and practices laid out in The DevOps Handbook are tools to be used by anyone from across the organization to create joy and succeed in the marketplace. The second edition features 15 new case studies, including stories from Adidas, American Airlines, Fannie Mae, Target, and the US Air Force. In addition, renowned researcher and coauthor of Accelerate, Dr. Nicole Forsgren, provides her insights through new and updated material and research. With over 100 pages of new content throughout the book, this expanded edition is a must read for anyone who works with technology. “[The DevOps Handbook is] a practical roadmap to improving IT in any organization. It's also the most valuable book on software development I've read in the past 10 years.” —Adam Hawkins, software developer and host of the podcast SmallBatches

View
Kubernetes: Up and Running - Dive into the Future of Infrastructure
Kelsey Hightower, Brendan Burns, Joe Beda

Legend has it that Google deploys over two billion application containers a week. How’s that possible? Google revealed the secret through a project called Kubernetes, an open source cluster orchestrator (based on its internal Borg system) that radically simplifies the task of building, deploying, and maintaining scalable distributed systems in the cloud. This practical guide shows you how Kubernetes and container technology can help you achieve new levels of velocity, agility, reliability, and efficiency. Authors Kelsey Hightower, Brendan Burns, and Joe Beda—who’ve worked on Kubernetes at Google and other organizatons—explain how this system fits into the lifecycle of a distributed application. You will learn how to use tools and APIs to automate scalable distributed systems, whether it is for online services, machine-learning applications, or a cluster of Raspberry Pi computers. Explore the distributed system challenges that Kubernetes addresses Dive into containerized application development, using containers such as Docker Create and run containers on Kubernetes, using the docker image format and container runtime Explore specialized objects essential for running applications in production Reliably roll out new software versions without downtime or errors Get examples of how to develop and deploy real-world applications in Kubernetes

View
97 Things Every Engineering Manager Should Know - Collective Wisdom from the Experts
Camille Fournier

Tap into the wisdom of experts to learn what every engineering manager should know. With 97 short and extremely useful tips for engineering managers, you'll discover new approaches to old problems, pick up road-tested best practices, and hone your management skills through sound advice. Managing people is hard, and the industry as a whole is bad at it. Many managers lack the experience, training, tools, texts, and frameworks to do it well. From mentoring interns to working in senior management, this book will take you through the stages of management and provide actionable advice on how to approach the obstacles you’ll encounter as a technical manager. A few of the 97 things you should know: "Three Ways to Be the Manager Your Report Needs" by Duretti Hirpa "The First Two Questions to Ask When Your Team Is Struggling" by Cate Huston "Fire Them!" by Mike Fisher "The 5 Whys of Organizational Design" by Kellan Elliott-McCrea "Career Conversations" by Raquel Vélez "Using 6-Page Documents to Close Decisions" by Ian Nowland "Ground Rules in Meetings" by Lara Hogan

View
97 Things Every SRE Should Know
Emil Stolarsky, Jaime Woo

Site reliability engineering (SRE) is more relevant than ever. Knowing how to keep systems reliable has become a critical skill. With this practical book, newcomers and old hats alike will explore a broad range of conversations happening in SRE. You'll get actionable advice on several topics, including how to adopt SRE, why SLOs matter, when you need to upgrade your incident response, and how monitoring and observability differ. Editors Jaime Woo and Emil Stolarsky, co-founders of Incident Labs, have collected 97 concise and useful tips from across the industry, including trusted best practices and new approaches to knotty problems. You'll grow and refine your SRE skills through sound advice and thought-provokingquestions that drive the direction of the field. Some of the 97 things you should know: "Test Your Disaster Plan"--Tanya Reilly "Integrating Empathy into SRE Tools"--Daniella Niyonkuru "The Best Advice I Can Give to Teams"--Nicole Forsgren "Where to SRE"--Fatema Boxwala "Facing That First Page"--Andrew Louis "I Have an Error Budget, Now What?"--Alex Hidalgo "Get Your Work Recognized: Write a Brag Document"--Julia Evans and Karla Burnett

View
Architecting Modern Data Platforms - A Guide to Enterprise Hadoop at Scale
Jan Kunigk, Ian Buss, Paul Wilkinson, Lars George

There's a lot of information about big data technologies, but splicing these technologies into an end-to-end enterprise data platform is a daunting task not widely covered. With this practical book, you'll learn how to build big data infrastructure both on-premises and in the cloud and successfully architect a modern data platform. Ideal for enterprise architects, IT managers, application architects, and data engineers, this book shows you how to overcome the many challenges that emerge during Hadoop projects. You'll explore the vast landscape of tools available in the Hadoop and big data realm in a thorough technical primer before diving into: Infrastructure: Look at all component layers in a modern data platform, from the server to the data center, to establish a solid foundation for data in your enterprise Platform: Understand aspects of deployment, operation, security, high availability, and disaster recovery, along with everything you need to know to integrate your platform with the rest of your enterprise IT Taking Hadoop to the cloud: Learn the important architectural aspects of running a big data platform in the cloud while maintaining enterprise security and high availability

View
Data Teams - A Unified Management Model for Successful Data-Focused Teams
Jesse Anderson

Learn how to run successful big data projects, how to resource your teams, and how the teams should work with each other to be cost effective. This book introduces the three teams necessary for successful projects, and what each team does. Most organizations fail with big data projects and the failure is almost always blamed on the technologies used. To be successful, organizations need to focus on both technology and management. Making use of data is a team sport. It takes different kinds of people with different skill sets all working together to get things done. In all but the smallest projects, people should be organized into multiple teams to reduce project failure and underperformance. This book focuses on management. A few years ago, there was little to nothing written or talked about on the management of big data projects or teams. Data Teams shows why management failures are at the root of so many project failures and how to proactively prevent such failures with your project. What You Will Learn Discover the three teams that you will need to be successful with big data Understand what a data scientist is and what a data science team does Understand what a data engineer is and what a data engineering team does Understand what an operations engineer is and what an operations team does Know how the teams and titles differ and why you need all three teams Recognize the role that the business plays in working with data teams and how the rest of the organization contributes to successful data projects Who This Book Is For Management, at all levels, including those who possess some technical ability and are about to embark on a big data project or have already started a big data project. It will be especially helpful for those who have projects which may be stuck and they do not know why, or who attended a conference or read about big data and are beginning their due diligence on what it will take to put a project in place. This book is also pertinent for leads or technical architects who are: on a team tasked by the business to figure out what it will take to start a project, in a project that is stuck, or need to determine whether there are non-technical problems affecting their project.

View
Growing Object-Oriented Software, Guided by Tests
Steve Freeman, Nat Pryce

Test-Driven Development (TDD) is now an established technique for delivering better software faster. TDD is based on a simple idea: Write tests for your code before you write the code itself. However, this "simple" idea takes skill and judgment to do well. Now there's a practical guide to TDD that takes you beyond the basic concepts. Drawing on a decade of experience building real-world systems, two TDD pioneers show how to let tests guide your development and “grow” software that is coherent, reliable, and maintainable. Steve Freeman and Nat Pryce describe the processes they use, the design principles they strive to achieve, and some of the tools that help them get the job done. Through an extended worked example, you’ll learn how TDD works at multiple levels, using tests to drive the features and the object-oriented structure of the code, and using Mock Objects to discover and then describe relationships between objects. Along the way, the book systematically addresses challenges that development teams encounter with TDD—from integrating TDD into your processes to testing your most difficult features. Coverage includes Implementing TDD effectively: getting started, and maintaining your momentum throughout the project Creating cleaner, more expressive, more sustainable code Using tests to stay relentlessly focused on sustaining quality Understanding how TDD, Mock Objects, and Object-Oriented Design come together in the context of a real software development project Using Mock Objects to guide object-oriented designs Succeeding where TDD is difficult: managing complex test data, and testing persistence and concurrency

View
The Coding Dojo Handbook
Emily Bache

Do you work on a team where not everyone is enthusiastic about good design and writing automated tests? How can you promote good practices? This handbook is a collection of concrete ideas for how you can get started with a Coding Dojo, where a group of programmers can focus on improving their practical coding skills. When you step into the Coding Dojo, you leave your daily programming environment, with all the associated complexities and problems, and enter a safe environment where you can try stuff out, make mistakes and learn with others. It's a fun and rewarding activity for any bunch of coders!

View
The Software Craftsman - Professionalism, Pragmatism, Pride
Sandro Mancuso

Be a Better Developer and Deliver Better Code Despite advanced tools and methodologies, software projects continue to fail. Why? Too many organizations still view software development as just another production line. Too many developers feel that way, too—and they behave accordingly. In The Software Craftsman: Professionalism, Pragmatism, Pride, Sandro Mancuso offers a better and more fulfilling path. If you want to develop software with pride and professionalism; love what you do and do it with excellence; and build a career with autonomy, mastery, and purpose, it starts with the recognition that you are a craftsman. Once you embrace this powerful mindset, you can achieve unprecedented levels of technical excellence and customer satisfaction. Mancuso helped found the world’s largest organization of software craftsmen; now, he shares what he’s learned through inspiring examples and pragmatic advice you can use in your company, your projects, and your career. You will learn Why agile processes aren’t enough and why craftsmanship is crucial to making them work How craftsmanship helps you build software right and helps clients in ways that go beyond code How and when to say “No” and how to provide creative alternatives when you do Why bad code happens to good developers and how to stop creating and justifying it How to make working with legacy code less painful and more productive How to be pragmatic—not dogmatic—about your practices and tools How to lead software craftsmen and attract them to your organization What to avoid when advertising positions, interviewing candidates, and hiring developers How developers and their managers can create a true culture of learning How to drive true technical change and overcome deep patterns of skepticism Sandro Mancuso has coded for startups, software houses, product companies, international consultancies, and investment banks. In October 2013, he cofounded Codurance, a consultancy based on Software Craftsmanship principles and values. His involvement with Software Craftsmanship began in 2010, when he founded the London Software Craftsmanship Community (LSCC), now the world’s largest and most active Software Craftsmanship community, with more than two thousand craftsmen. For the past four years, he has inspired and helped developers to organize Software Craftsmanship communities throughout Europe, the United States, and the rest of the world.

View
Cracking the Tech Career - Insider Advice on Landing a Job at Google, Microsoft, Apple, or any Top Tech Company
Gayle Laakmann McDowell

Become the applicant Google can't turn down Cracking the Tech Career is the job seeker's guide to landing a coveted position at one of the top tech firms. A follow-up to The Google Resume, this book provides new information on what these companies want, and how to show them you have what it takes to succeed in the role. Early planners will learn what to study, and established professionals will discover how to make their skillset and experience set them apart from the crowd. Author Gayle Laakmann McDowell worked in engineering at Google, and interviewed over 120 candidates as a member of the hiring committee – in this book, she shares her perspectives on what works and what doesn't, what makes you desirable, and what gets your resume saved or deleted. Apple, Microsoft, and Google are the coveted companies in the current job market. They field hundreds of resumes every day, and have their pick of the cream of the crop when it comes to selecting new hires. If you think the right alma mater is all it takes, you need to update your thinking. Top companies, especially in the tech sector, are looking for more. This book is the complete guide to becoming the candidate they just cannot turn away. Discover the career paths that run through the top tech firms Learn how to craft the prefect resume and prepare for the interview Find ways to make yourself stand out from the hordes of other applicants Understand what the top companies are looking for, and how to demonstrate that you're it These companies need certain skillsets, but they also want a great culture fit. Grades aren't everything, experience matters, and a certain type of applicant tends to succeed. Cracking the Tech Career reveals what the hiring committee wants, and shows you how to get it.

View
Superintelligence - Paths, Dangers, Strategies
Nick Bostrom

The human brain has some capabilities that the brains of other animals lack. It is to these distinctive capabilities that our species owes its dominant position. Other animals have stronger muscles or sharper claws, but we have cleverer brains. If machine brains one day come to surpass human brains in general intelligence, then this new superintelligence could become very powerful. As the fate of the gorillas now depends more on us humans than on the gorillas themselves, so the fate of our species then would come to depend on the actions of the machine superintelligence. But we have one advantage: we get to make the first move. Will it be possible to construct a seed AI or otherwise to engineer initial conditions so as to make an intelligence explosion survivable? How could one achieve a controlled detonation? To get closer to an answer to this question, we must make our way through a fascinating landscape of topics and considerations. Read the book and learn about oracles, genies, singletons; about boxing methods, tripwires, and mind crime; about humanity's cosmic endowment and differential technological development; indirect normativity, instrumental convergence, whole brain emulation and technology couplings; Malthusian economics and dystopian evolution; artificial intelligence, and biological cognitive enhancement, and collective intelligence.

View
7 Rules for Positive, Productive Change - Micro Shifts, Macro Results
Esther Derby

Change is difficult but essential—Esther Derby offers seven guidelines for change by attraction, an approach that draws people into the process so that instead of resisting change, they embrace it. Even if you don't have change management in your job description, your job involves change. Change is a given as modern organizations respond to market and technology advances, make improvements, and evolve practices to meet new challenges. This is not a simple process on any level. Often, there is no indisputable right answer, and responding requires trial and error, learning and unlearning. Whatever you choose to do, it will interact with existing policies and structures in unpredictable ways. And there is, quite simply, a natural human resistance to being told to change. Rather than creating more rigorous preconceived plans or imposing change by decree, agile software developer turned organizational change expert Esther Derby offers change by attraction, an approach that is adaptive and responsive and engages people in learning, evolving, and owning the new way. She presents a set of seven heuristics—guides to problem-solving—that empower people to achieve outcomes within broad constraints using their personal ingenuity and creativity. When you work by attraction, you give space and support for people to feel the loss that comes with change and help them see what is valuable about the future you propose. Resistance fades because people feel there is nothing to push against—only something they want to move toward. Derby's approach clears the fog to provide a new way forward that honors people and creates safety for change.

View
Building Microservices
Sam Newman

Distributed systems have become more fine-grained in the past 10 years, shifting from code-heavy monolithic applications to smaller, self-contained microservices. But developing these systems brings its own set of headaches. With lots of examples and practical advice, this book takes a holistic view of the topics that system architects and administrators must consider when building, managing, and evolving microservice architectures. Microservice technologies are moving quickly. Author Sam Newman provides you with a firm grounding in the concepts while diving into current solutions for modeling, integrating, testing, deploying, and monitoring your own autonomous services. You’ll follow a fictional company throughout the book to learn how building a microservice architecture affects a single domain. Discover how microservices allow you to align your system design with your organization’s goals Learn options for integrating a service with the rest of your system Take an incremental approach when splitting monolithic codebases Deploy individual microservices through continuous integration Examine the complexities of testing and monitoring distributed services Manage security with user-to-service and service-to-service models Understand the challenges of scaling microservice architectures

View
Leading Quality - How Great Leaders Deliver High Quality Software and Accelerate Growth
Ronald Cummings - John, Owais Peer

What is the true meaning of quality? How can you influence positive attitudes towards quality within the workplace? Leading Quality teaches you how to influence and align your company's definition of quality, so that you can deliver the best possible experience to your clients. You will learn the techniques successful leaders use to make their strategic decisions and you will be given the tools to ensure that your team is in alignment to achieving common goals. Leading Quality is the first book that teaches why quality is important and how to incorporate it within the workspace. Praise for Leading Quality: "A quality mindset remains key to differentiating your product and your company. Leading Quality offers key lessons to develop this mindset." - Michael Lopp, author of Managing Humans and VP of Product Engineering at Slack "Leading Quality communicates just how important a focus on quality is within your company and is one of the few titles that actually teaches how to lead quality in a clear yet captivating manner." - Shesh Patel, Engineering Manager at The New York Times "Three elements define any successful product: quality, quality, and quality. Leading Quality is a comprehensive and practical guide to embedding quality into the DNA of any product organization." - Nick Caldwell, CPO at Looker and former VP of Engineering at Reddit

View
Why High-tech Products Drive Us Crazy and how to Restore the Sanity
Alan Cooper

Alan Cooper calls for a Software Revolution - his best-selling book now in trade paperback with new foreword and afterword.

View
Monolith to Microservices - Evolutionary Patterns to Transform Your Monolith
Sam Newman

How do you detangle a monolithic system and migrate it to a microservice architecture? How do you do it while maintaining business-as-usual? As a companion to Sam Newman’s extremely popular Building Microservices, this new book details a proven method for transitioning an existing monolithic system to a microservice architecture. With many illustrative examples, insightful migration patterns, and a bevy of practical advice to transition your monolith enterprise into a microservice operation, this practical guide covers multiple scenarios and strategies for a successful migration, from initial planning all the way through application and database decomposition. You’ll learn several tried and tested patterns and techniques that you can use as you migrate your existing architecture. Ideal for organizations looking to transition to microservices, rather than rebuild Helps companies determine whether to migrate, when to migrate, and where to begin Addresses communication, integration, and the migration of legacy systems Discusses multiple migration patterns and where they apply Provides database migration examples, along with synchronization strategies Explores application decomposition, including several architectural refactoring patterns Delves into details of database decomposition, including the impact of breaking referential and transactional integrity, new failure modes, and more

View
Functional Programming in Scala
Paul Chiusano, Runar Bjarnason

Summary Functional Programming in Scala is a serious tutorial for programmers looking to learn FP and apply it to the everyday business of coding. The book guides readers from basic techniques to advanced topics in a logical, concise, and clear progression. In it, you'll find concrete examples and exercises that open up the world of functional programming. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the Technology Functional programming (FP) is a style of software development emphasizing functions that don't depend on program state. Functional code is easier to test and reuse, simpler to parallelize, and less prone to bugs than other code. Scala is an emerging JVM language that offers strong support for FP. Its familiar syntax and transparent interoperability with Java make Scala a great place to start learning FP. About the Book Functional Programming in Scala is a serious tutorial for programmers looking to learn FP and apply it to their everyday work. The book guides readers from basic techniques to advanced topics in a logical, concise, and clear progression. In it, you'll find concrete examples and exercises that open up the world of functional programming. This book assumes no prior experience with functional programming. Some prior exposure to Scala or Java is helpful. What's Inside Functional programming concepts The whys and hows of FP How to write multicore programs Exercises and checks for understanding About the Authors Paul Chiusano and Rúnar Bjarnason are recognized experts in functional programming with Scala and are core contributors to the Scalaz library. Table of Contents PART 1 INTRODUCTION TO FUNCTIONAL PROGRAMMING What is functional programming? Getting started with functional programming in Scala Functional data structures Handling errors without exceptions Strictness and laziness Purely functional state PART 2 FUNCTIONAL DESIGN AND COMBINATOR LIBRARIES Purely functional parallelism Property-based testing Parser combinators PART 3 COMMON STRUCTURES IN FUNCTIONAL DESIGN Monoids Monads Applicative and traversable functors PART 4 EFFECTS AND I/O External effects and I/O Local effects and mutable state Stream processing and incremental I/O

View
Lessons Learned in Software Testing - A Context-Driven Approach
Cem Kaner, James Bach, Bret Pettichord

Softwaretests stellen eine kritische Phase in der Softwareentwicklung dar. Jetzt zeigt sich, ob das Programm die entsprechenden Anforderungen erfüllt und sich auch keine Programmierungsfehler eingeschlichen haben. Doch wie bei allen Phasen im Software-Entwicklungsprozess gibt es auch hier eine Reihe möglicher Fallstricke, die die Entdeckung von Programmfehlern vereiteln können. Deshalb brauchen Softwaretester ein Handbuch, das alle Tipps, Tricks und die häufigsten Fehlerquellen genau auflistet und erläutert, damit mögliche Testfehler von vornherein vermieden werden können. Ein solches Handbuch ersetzt gut und gerne jahr(zehnt)elange Erfahrung und erspart dem Tester frustrierende und langwierige Trial-und-Error-Prozeduren. Chem Kaner und James Bach sind zwei der international führenden Experten auf dem Gebiet des Software Testing. Sie schöpfen hier aus ihrer insgesamt 30-jährigen Erfahrung. Die einzelnen Lektionen sind nach Themenbereichen gegliedert, wie z.B. Testdesign, Test Management, Teststrategien und Fehleranalyse. Jede Lektion enthält eine Behauptung und eine Erklärung sowie ein Beispiel des entsprechenden Testproblems. "Lessons Learned in Software Testing" ist ein unverzichtbarer Begleiter für jeden Software Tester.

View
Release It! - Design and Deploy Production-Ready Software
Michael T. Nygard

A single dramatic software failure can cost a company millions of dollars - but can be avoided with simple changes to design and architecture. This new edition of the best-selling industry standard shows you how to create systems that run longer, with fewer failures, and recover better when bad things happen. New coverage includes DevOps, microservices, and cloud-native architecture. Stability antipatterns have grown to include systemic problems in large-scale systems. This is a must-have pragmatic guide to engineering for production systems. If you're a software developer, and you don't want to get alerts every night for the rest of your life, help is here. With a combination of case studies about huge losses - lost revenue, lost reputation, lost time, lost opportunity - and practical, down-to-earth advice that was all gained through painful experience, this book helps you avoid the pitfalls that cost companies millions of dollars in downtime and reputation. Eighty percent of project life-cycle cost is in production, yet few books address this topic. This updated edition deals with the production of today's systems - larger, more complex, and heavily virtualized - and includes information on chaos engineering, the discipline of applying randomness and deliberate stress to reveal systematic problems. Build systems that survive the real world, avoid downtime, implement zero-downtime upgrades and continuous delivery, and make cloud-native applications resilient. Examine ways to architect, design, and build software - particularly distributed systems - that stands up to the typhoon winds of a flash mob, a Slashdotting, or a link on Reddit. Take a hard look at software that failed the test and find ways to make sure your software survives. To skip the pain and get the experience...get this book.

View
The Art of Scalability - Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise
Martin L. Abbott, Michael T. Fisher

The Comprehensive, Proven Approach to IT Scalability–Updated with New Strategies, Technologies, and Case Studies In The Art of Scalability, Second Edition, leading scalability consultants Martin L. Abbott and Michael T. Fisher cover everything you need to know to smoothly scale products and services for any requirement. This extensively revised edition reflects new technologies, strategies, and lessons, as well as new case studies from the authors’ pioneering consulting practice, AKF Partners. Writing for technical and nontechnical decision-makers, Abbott and Fisher cover everything that impacts scalability, including architecture, process, people, organization, and technology. Their insights and recommendations reflect more than thirty years of experience at companies ranging from eBay to Visa, and Salesforce.com to Apple. You’ll find updated strategies for structuring organizations to maximize agility and scalability, as well as new insights into the cloud (IaaS/PaaS) transition, NoSQL, DevOps, business metrics, and more. Using this guide’s tools and advice, you can systematically clear away obstacles to scalability–and achieve unprecedented IT and business performance. Coverage includes • Why scalability problems start with organizations and people, not technology, and what to do about it • Actionable lessons from real successes and failures • Staffing, structuring, and leading the agile, scalable organization • Scaling processes for hyper-growth environments • Architecting scalability: proprietary models for clarifying needs and making choices–including 15 key success principles • Emerging technologies and challenges: data cost, datacenter planning, cloud evolution, and customer-aligned monitoring • Measuring availability, capacity, load, and performance

View
Domain-driven Design - Tackling Complexity in the Heart of Software
Eric Evans, Eric J. Evans

"Eric Evans has written a fantastic book on how you can make the design of your software match your mental model of the problem domain you are addressing. "His book is very compatible with XP. It is not about drawing pictures of a domain; it is about how you think of it, the language you use to talk about it, and how you organize your software to reflect your improving understanding of it. Eric thinks that learning about your problem domain is as likely to happen at the end of your project as at the beginning, and so refactoring is a big part of his technique. "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 "If you don't think you are getting value from your investment in object-oriented programming, this book will tell you what you've forgotten to do. "Eric Evans convincingly argues for the importance of domain modeling as the central focus of development and provides a solid framework and set of techniques for accomplishing it. This is timeless wisdom, and will hold up long after the methodologies du jour have gone out of fashion." --Dave Collins, author of Designing Object-Oriented User Interfaces "Eric weaves real-world experience modeling--and building--business applications into a practical, useful book. Written from the perspective of a trusted practitioner, Eric's descriptions of ubiquitous language, the benefits of sharing models with users, object life-cycle management, logical and physical application structuring, and the process and results of deep refactoring are major contributions to our field." --Luke Hohmann, author of Beyond Software Architecture "This book belongs on the shelf of every thoughtful software developer." --Kent Beck "What Eric has managed to capture is a part of the design process that experienced object designers have always used, but that we have been singularly unsuccessful as a group in conveying to the rest of the industry. We've given away bits and pieces of this knowledge...but we've never organized and systematized the principles of building domain logic. This book is important." --Kyle Brown, author of Enterprise Java(TM) Programming with IBM(R) WebSphere(R) The software development community widely acknowledges that domain modeling is central to software design. Through domain models, software developers are able to express rich functionality and translate it into a software implementation that truly serves the needs of its users. But despite its obvious importance, there are few practical resources that explain how to incorporate effective domain modeling into the software development process. Domain-Driven Design fills that need. This is not a book about specific technologies. It offers readers 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 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 development. Readers learn how to use a domain model to make a complex development effort more focused and dynamic. A core of best practices and standard patterns provides a common language for the development team. A shift in emphasis--refactoring not just the code but the model underlying the code--in combination with the frequent iterations of Agile development leads to deeper insight into domains and enhanced communication between domain expert and programmer. Domain-Driven Design then builds on this foundation, and addresses modeling and design for complex systems and larger organizations.Specific topics covered include: Getting all team members to speak the same language Connecting model and implementation more deeply Sharpening key distinctions in a model Managing the lifecycle of a domain object Writing domain code that is safe to combine in elaborate ways Making complex code obvious and predictable Formulating a domain vision statement Distilling the core of a complex domain Digging out implicit concepts needed in the model Applying analysis patterns Relating design patterns to the model Maintaining model integrity in a large system Dealing with coexisting models on the same project Organizing systems with large-scale structures Recognizing and responding to modeling breakthroughs 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.

View
The Pragmatic Programmer - your journey to mastery, 20th Anniversary Edition
David Thomas, Andrew Hunt

“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 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: 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. Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.

View
The Passionate Programmer - Creating a Remarkable Career in Software Development
Chad Fowler

Success in today's IT environment requires you to view your career as a business endeavor. 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.

View
About Face - The Essentials of Interaction Design
Alan Cooper, Robert Reimann, David Cronin, Christopher Noessel

The essential interaction design guide, fully revised and updated for the mobile age About Face: The Essentials of Interaction Design, Fourth Edition is the latest update to the book that shaped and evolved the landscape of interaction design. This comprehensive guide takes the worldwide shift to smartphones and tablets into account. New information includes discussions on mobile apps, touch interfaces, screen size considerations, and more. The new full-color interior and unique layout better illustrate modern design concepts. The interaction design profession is blooming with the success of design-intensive companies, priming customers to expect "design" as a critical ingredient of marketplace success. Consumers have little tolerance for websites, apps, and devices that don't live up to their expectations, and the responding shift in business philosophy has become widespread. About Face is the book that brought interaction design out of the research labs and into the everyday lexicon, and the updated Fourth Edition continues to lead the way with ideas and methods relevant to today's design practitioners and developers. Updated information includes: Contemporary interface, interaction, and product design methods Design for mobile platforms and consumer electronics State-of-the-art interface recommendations and up-to-date examples Updated Goal-Directed Design methodology Designers and developers looking to remain relevant through the current shift in consumer technology habits will find About Face to be a comprehensive, essential resource.

View
User Story Mapping - Discover the Whole Story, Build the Right Product
Jeff Patton, Peter Economy

User story mapping is a valuable tool for software development, once you understand why and how to use it. This insightful book examines how this often misunderstood technique can help your team stay focused on users and their needs without getting lost in the enthusiasm for individual product features. Author Jeff Patton shows you how changeable story maps enable your team to hold better conversations about the project throughout the development process. Your team will learn to come away with a shared understanding of what you’re attempting to build and why. Get a high-level view of story mapping, with an exercise to learn key concepts quickly Understand how stories really work, and how they come to life in Agile and Lean projects Dive into a story’s lifecycle, starting with opportunities and moving deeper into discovery Prepare your stories, pay attention while they’re built, and learn from those you convert to working software

View
The Agile Samurai - How Agile Masters Deliver Great Software
Jonathan Rasmusson

Printed in full color. Faced with a software project of epic proportions? Tired of over-committing and under-delivering? Enter the dojo of the agile samurai, where agile expert Jonathan Rasmusson shows you how to kick-start, execute, and deliver your agile projects. Combining cutting-edge tools with classic agile practices, The Agile Samurai gives you everything you need to deliver something of value every week and make rolling your software into production a non-event. Get ready to kick some software project butt. By learning the ways of the agile samurai you will discover: how to create plans and schedules your customer and your team can believe in what characteristics make a good agile team and how to form your own how to gather requirements in a fraction of the time using agile user stories what to do when you discover your schedule is wrong, and how to look like a pro correcting it how to execute fiercely by leveraging the power of agile software engineering practices By the end of this book you will know everything you need to set up, execute, and successfully deliver agile projects, and have fun along the way. If you're a project lead, this book gives you the tools to set up and lead your agile project from start to finish. If you are an analyst, programmer, tester, usability designer, or project manager, this book gives you the insight and foundation necessary to become a valuable agile team member. The Agile Samurai slices away the fluff and theory that make other books less-than-agile. It's packed with best practices, war stories, plenty of humor and hands-on tutorial exercises that will get you doing the right things, the right way. This book will make a difference.

View
Software Architecture Foundation - CPSA Foundation® Exam Preparation
Gernot Starke, Alexander Lorz

This book covers everything you need to master the iSAQB© Certified Professional for Software Architecture - Foundation Level (CPSA-F) certification. This internationally renowned education and certification schema defines various learning path for practical software architects. This book concentrates on the foundation level examination. It explains and clarifies all 40+ learning goals of the CPSA-F© curriculum. In addition, you find step-by-step preparation guide for the examination. Please beware: This book is not meant as a replacement for existing software architecture books and courses, but strongly focusses on explaining and clarifying the iSAQB CPSA-F foundation.

View
Sustainable Software Architecture - Analyze and Reduce Technical Debt
Carola Lilienthal

Today's programmers don't develop software systems from scratch. instead, they spend their time fixing, extending, modifying, and enhancing existing software. Legacy systems often turn into an unwieldy mess that becomes increasingly difficult to modify, and with architecture that continually accumulates technical debt. Carola Lilienthal has analyzed more than 300 software systems written in Java, C#, C++, PHP, ABAP, and TypeScript and, together with her teams, has successfully refactored them. This book condenses her experience with monolithic systems, architectural and design patterns, layered architectures, domain-driven design, and microservices. With more than 200 color images from real-world systems, good and sub-optimal sample solutions are presented in a comprehensible and thorough way, while recommendations and suggestions based on practical projects allow the reader to directly apply the author's knowledge to their daily work. "Throughout the book, Dr. Lilienthal has provided sound advice on diagnosing, understanding, disentangling, and ultimately preventing the issues that make software systems brittle and subject to breakage. In addition to the technical examples that you'd expect in a book on software architecture, she takes the time to dive into the behavioral and human aspects that impact sustainability and, in my experience, are inextricably linked to the health of a codebase. She also expertly zooms out, exploring architecture concepts such as domains and layers, and then zooms in to the class level where your typical developer works day-to-day. This holistic approach is crucial for implementing long-lasting change." From the Foreword of Andrea Goulet CEO, Corgibytes, Founder, Legacy Code Rocks

View
RESTful Web APIs - Services for a Changing World
Leonard Richardson, Mike Amundsen, Sam Ruby

The popularity of REST in recent years has led to tremendous growth in almost-RESTful APIs that don’t include many of the architecture’s benefits. With this practical guide, you’ll learn what it takes to design usable REST APIs that evolve over time. By focusing on solutions that cross a variety of domains, this book shows you how to create powerful and secure applications, using the tools designed for the world’s most successful distributed computing system: the World Wide Web. You’ll explore the concepts behind REST, learn different strategies for creating hypermedia-based APIs, and then put everything together with a step-by-step guide to designing a RESTful Web API. Examine API design strategies, including the collection pattern and pure hypermedia Understand how hypermedia ties representations together into a coherent API Discover how XMDP and ALPS profile formats can help you meet the Web API "semantic challenge" Learn close to two-dozen standardized hypermedia data formats Apply best practices for using HTTP in API implementations Create Web APIs with the JSON-LD standard and other the Linked Data approaches Understand the CoAP protocol for using REST in embedded systems

View
Foundations of Software Testing - ISTQB Certification
Rex Black, Dorothy Graham, Erik van Veenendaal

Now in its third edition, Foundations of Software Testing: ISTQB Certification is the essential guide to software testing and to the ISTQB Foundation qualification. Completely updated to comprehensively reflect the most recent changes to the ISTQB Foundation Syllabus, the book adopts a practical, hands-on approach, covering the fundamental topics that every system and software tester should know. The authors are themselves developers of the ISTQB syllabus and are highly respected international authorities, teachers and authors within the field of software testing.

View
Foundations of Software Testing ISTQB Certification, 4th edition
Dorothy Graham, Rex Black, Erik van Veenendaal

Now in its fourth edition, Foundations of Software Testing: ISTQB Certification is the essential guide to software testing and to the ISTQB Foundation qualification. Completely updated to comprehensively reflect the most recent changes to the 2018 ISTQB Foundation Syllabus, the book adopts a practical, hands-on approach, covering the fundamental topics that every system and software tester should know. The authors are themselves developers of the ISTQB syllabus and are highly respected international authorities and teachers within the field of software testing. About ISTQB ISTQB is a multinational body overseeing the development of international qualifications in software testing. It offers an internationally recognized qualification that ensures there is an international, common understanding of software and system testing issues.

View
An Elegant Puzzle - Systems of Engineering Management
Will Larson

A human-centric guide to solving complex problems in engineering management, from sizing teams to handling technical debt. There's a saying that people don't leave companies, they leave managers. Management is a key part of any organization, yet the discipline is often self-taught and unstructured. Getting to the good solutions for complex management challenges can make the difference between fulfillment and frustration for teams--and, ultimately, between the success and failure of companies. Will Larson's An Elegant Puzzle focuses on the particular challenges of engineering management--from sizing teams to handling technical debt to performing succession planning--and provides a path to the good solutions. Drawing from his experience at Digg, Uber, and Stripe, Larson has developed a thoughtful approach to engineering management for leaders of all levels at companies of all sizes. An Elegant Puzzle balances structured principles and human-centric thinking to help any leader create more effective and rewarding organizations for engineers to thrive in.

View
Kotlin in Action
Dmitry Jemerov, Svetlana Isakova

Summary Kotlin in Action guides experienced Java developers from the language basics of Kotlin all the way through building applications to run on the JVM and Android devices. Foreword by Andrey Breslav, Lead Designer of Kotlin. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the Technology Developers want to get work done - and the less hassle, the better. Coding with Kotlin means less hassle. The Kotlin programming language offers an expressive syntax, a strong intuitive type system, and great tooling support along with seamless interoperability with existing Java code, libraries, and frameworks. Kotlin can be compiled to Java bytecode, so you can use it everywhere Java is used, including Android. And with an effi cient compiler and a small standard library, Kotlin imposes virtually no runtime overhead. About the Book Kotlin in Action teaches you to use the Kotlin language for production-quality applications. Written for experienced Java developers, this example-rich book goes further than most language books, covering interesting topics like building DSLs with natural language syntax. The authors are core Kotlin developers, so you can trust that even the gnarly details are dead accurate. What's Inside Functional programming on the JVM Writing clean and idiomatic code Combining Kotlin and Java Domain-specific languages About the Reader This book is for experienced Java developers. About the Author Dmitry Jemerov and Svetlana Isakova are core Kotlin developers at JetBrains. Table of Contents PART 1 - INTRODUCING KOTLIN Kotlin: what and why Kotlin basics Defining and calling functions Classes, objects, and interfaces Programming with lambdas The Kotlin type system PART 2 - EMBRACING KOTLIN Operator overloading and other conventions Higher-order functions: lambdas as parameters and return values Generics Annotations and reflection DSL construction

View
JavaScript: The Good Parts - The Good Parts
Douglas Crockford

Most programming languages contain good and bad parts, but JavaScript has more than its share of the bad, having been developed and released in a hurry before it could be refined. This authoritative book scrapes away these bad features to reveal a subset of JavaScript that's more reliable, readable, and maintainable than the language as a whole—a subset you can use to create truly extensible and efficient code. Considered the JavaScript expert by many people in the development community, author Douglas Crockford identifies the abundance of good ideas that make JavaScript an outstanding object-oriented programming language-ideas such as functions, loose typing, dynamic objects, and an expressive object literal notation. Unfortunately, these good ideas are mixed in with bad and downright awful ideas, like a programming model based on global variables. When Java applets failed, JavaScript became the language of the Web by default, making its popularity almost completely independent of its qualities as a programming language. In JavaScript: The Good Parts, Crockford finally digs through the steaming pile of good intentions and blunders to give you a detailed look at all the genuinely elegant parts of JavaScript, including: Syntax Objects Functions Inheritance Arrays Regular expressions Methods Style Beautiful features The real beauty? As you move ahead with the subset of JavaScript that this book presents, you'll also sidestep the need to unlearn all the bad parts. Of course, if you want to find out more about the bad parts and how to use them badly, simply consult any other JavaScript book. With JavaScript: The Good Parts, you'll discover a beautiful, elegant, lightweight and highly expressive language that lets you create effective code, whether you're managing object libraries or just trying to get Ajax to run fast. If you develop sites or applications for the Web, this book is an absolute must.

View
Metaprogramming Ruby 2 - Program Like the Ruby Pros
Paolo Perrotta

Write powerful Ruby code that is easy to maintain and change. With metaprogramming, you can produce elegant, clean, and beautiful programs. Once the domain of expert Rubyists, metaprogramming is now accessible to programmers of all levels. This thoroughly revised and updated second edition of the bestselling Metaprogramming Ruby explains metaprogramming in a down-to-earth style and arms you with a practical toolbox that will help you write your best Ruby code ever. Dig under the surface and explore Ruby's most advanced feature: a collection of techniques and tricks known as metaprogramming. In this book, you'll learn metaprogramming as an essential component of Ruby and discover the deep, non-obvious details of the language. Once you understand the tenets of Ruby, including the object model, scopes, and singleton classes, you're on your way to applying metaprogramming both in your daily work assignments and in your fun, after-hours projects. Metaprogramming Ruby, Second Edition makes mastering the language enjoyable. The book is packed with: Pragmatic examples of metaprogramming in action, many of which come straight from real-life gems such as Rails. Programming challenges that let you experiment and play with some of the most out-there metaprogramming concepts. Metaprogramming spells--33 practical recipes and idioms that you can study and apply right now, to write code that is sure to impress. This completely revised new edition covers the new features in Ruby 2.0 and 2.1, and contains code from the latest Ruby libraries, including Rails 4. Most examples are new, from the wild, with more recent libraries. And the book reflects current ideas of when and how much metaprogramming you should use. Whether you're a Ruby apprentice on the path to mastering the language or a Ruby wiz in search of new tips, this book is for you. What You Need: Ruby 2.x, Ruby 1.9, or a recent version of JRuby.

View
Database Internals - A Deep Dive into How Distributed Data Systems Work
Alex Petrov

When it comes to choosing, using, and maintaining a database, understanding its internals is essential. But with so many distributed databases and tools available today, it’s often difficult to understand what each one offers and how they differ. With this practical guide, Alex Petrov guides developers through the concepts behind modern database and storage engine internals. Throughout the book, you’ll explore relevant material gleaned from numerous books, papers, blog posts, and the source code of several open source databases. These resources are listed at the end of parts one and two. You’ll discover that the most significant distinctions among many modern databases reside in subsystems that determine how storage is organized and how data is distributed. This book examines: Storage engines: Explore storage classification and taxonomy, and dive into B-Tree-based and immutable Log Structured storage engines, with differences and use-cases for each Storage building blocks: Learn how database files are organized to build efficient storage, using auxiliary data structures such as Page Cache, Buffer Pool and Write-Ahead Log Distributed systems: Learn step-by-step how nodes and processes connect and build complex communication patterns Database clusters: Which consistency models are commonly used by modern databases and how distributed storage systems achieve consistency

View
Functional Programming in Java - How functional techniques improve your Java programs
Pierre-Yves Saumont

Summary Functional Programming in Java teaches Java developers how to incorporate the most powerful benefits of functional programming into new and existing Java code. You'll learn to think functionally about coding tasks in Java and use FP to make your applications easier to understand, optimize, maintain, and scale. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the Technology Here's a bold statement: learn functional programming and you'll be a better Java developer. Fortunately, you don't have to master every aspect of FP to get a big payoff. If you take in a few core principles, you'll see an immediate boost in the scalability, readability, and maintainability of your code. And did we mention that you'll have fewer bugs? Let's get started! About the Book Functional Programming in Java teaches you how to incorporate the powerful benefits of functional programming into new and existing Java code. This book uses easy-to-grasp examples, exercises, and illustrations to teach core FP principles such as referential transparency, immutability, persistence, and laziness. Along the way, you'll discover which of the new functionally inspired features of Java 8 will help you most. What's Inside Writing code that's easier to read and reason about Safer concurrent and parallel programming Handling errors without exceptions Java 8 features like lambdas, method references, and functional interfaces About the Reader Written for Java developers with no previous FP experience. About the Author Pierre-Yves Saumont is a seasoned Java developer with three decades of experience designing and building enterprise software. He is an R&D engineer at Alcatel-Lucent Submarine Networks. Table of Contents What is functional programming? Using functions in Java Making Java more functional Recursion, corecursion, and memoization Data handling with lists Dealing with optional data Handling errors and exceptions Advanced list handling Working with laziness More data handling with trees Solving real problems with advanced trees Handling state mutation in a functional way Functional input/output Sharing mutable state with actors Solving common problems functionally

View
MERN Projects for Beginners - Create Five Social Web Apps Using MongoDB, Express.js, React, and Node
Nabendu Biswas

Learn how to use the MERN stack (MongoDB, Express.js, React, and Node) to build five fully functioning web apps for dating, video sharing, messaging, and social media. While creating these web apps, you’ll learn key development concepts including how to use React hooks, Redux, MongoDB, Express, Heroku, Firebase, Material UI, and Google authentication. By expanding your portfolio with the projects you create, you will be well equipped as front-end developer. You will first create a dating site with a swiping feature and chat functionality. You will then build a video sharing app with videos displaying vertically. Next, you will learn to build an awesome messaging web app. Users will be able to chat in real time, as well as log in to their account using Google authentication. You will also create a photo sharing app and social media web apps with the ability to post images with captions and log in using email and password authentication. Most MERN tutorials out there today cover basic web apps but it is capable of so much more – learn how to use this stack to its full potential and build projects that can be converted into full scaled start-ups with additional features. What You'll Learn Work with React hooks and React router Examine powerful MongoDB services for easy to use and setup Create routes using Node and host on Heroku Study different authentication techniques Deploy all sites using simple Firebase hosting Use the powerful React ecosystem to add functionalities to your apps Who This book Is For Those who have just started their career in web development and have basic knowledge of the core web technologies: HTML, CSS, and JavaScript. Those with basic React development and feel ready to explore its capabilities further.

View
Design Patterns For Dummies
Steve Holzner

There's a pattern here, and here's how to use it! Find out how the 23 leading design patterns can save you time and trouble Ever feel as if you've solved this programming problem before? You — or someone — probably did, and that's why there's a design pattern to help this time around. This book shows you how (and when) to use the famous patterns developed by the "Gang of Four," plus some new ones, all designed to make your programming life easier. Discover how to: Simplify the programming process with design patterns Make the most of the Decorator, Factory, and Adapter patterns Identify which pattern applies Reduce the amount of code needed for a task Create your own patterns

View
Software Architecture for Web Developers - An introductory guide for developers striving to take the first steps toward software architecture or just looking to grow as professionals
Mihaela Roxana Ghidersa

Discover an accessible pathway to advancing your career and becoming a web architect by building a solid technical ground in software architecture Key Features Follow your desired career path that leads to a lucrative job as a web architect Develop a solid technical background in software architecture using real-world practices and patterns Learn proven techniques and design considerations from an industry expert Book Description Large-scale web applications require you to write code efficiently following business and architectural considerations. They require web developers to understand the impact of their work on the system and how they can evolve the product. With this handbook, every developer will find something to take away. This book will help web developers looking to change projects or work on a new project in understanding the context of the application, along with how some design decisions or patterns fit better in their application's architecture. It acts as a guide, taking you through different levels of professional growth with a focus on best practices, coding guidelines, business considerations, and soft skills that will help you gain the knowledge to craft a career in web development. Finally, you'll work with examples and ways of applying the discussed concepts in practical situations. By the end of this book, you'll have gained valuable insights into what it means to be a web architect, as well as the impact architecture has on a web application. What you will learn Understand the context of software architecture, from shaping the product to delivery and beyond Become well versed in what a web architect's role means Explore go-to key concepts for every time you try your hand at app development Analyze the importance of relationships with stakeholders Get acquainted with the benefits of well-designed architecture Dig into and solve myths web developers have come across or created along the way Who this book is for This book is for web developers who want to become web architects. Beginner-level web developers will be able to develop a strong technical background, and experienced web developers will learn techniques to become better professionals by understanding the web architect's role and the impact of efficient architecture on their projects.

View
Functional JavaScript - Introducing Functional Programming with Underscore.js
Michael Fogus

How can you overcome JavaScript language oddities and unsafe features? With this book, you’ll learn how to create code that’s beautiful, safe, and simple to understand and test by using JavaScript’s functional programming support. Author Michael Fogus shows you how to apply functional-style concepts with Underscore.js, a JavaScript library that facilitates functional programming techniques. Sample code is available on GitHub at https://github.com/funjs/book-source. Fogus helps you think in a functional way to help you minimize complexity in the programs you build. If you’re a JavaScript programmer hoping to learn functional programming techniques, or a functional programmer looking to learn JavaScript, this book is the ideal introduction. Use applicative programming techniques with first-class functions Understand how and why you might leverage variable scoping and closures Delve into higher-order functions—and learn how they take other functions as arguments for maximum advantage Explore ways to compose new functions from existing functions Get around JavaScript’s limitations for using recursive functions Reduce, hide, or eliminate the footprint of state change in your programs Practice flow-based programming with chains and functional pipelines Discover how to code without using classes

View
Practical Object-Oriented Design - An Agile Primer Using Ruby
Sandi Metz

The Complete Guide to Writing Maintainable, Manageable, Pleasing, and Powerful Object-Oriented Applications Object-oriented programming languages exist to help you create beautiful, straightforward applications that are easy to change and simple to extend. Unfortunately, the world is awash with object-oriented (OO) applications that are difficult to understand and expensive to change. Practical Object-Oriented Design, Second Edition, immerses you in an OO mindset and teaches you powerful, real-world, object-oriented design techniques with simple and practical examples. Sandi Metz demonstrates how to build new applications that can “survive success” and repair existing applications that have become impossible to change. Each technique is illustrated with extended examples in the easy-to-understand Ruby programming language, all downloadable from the companion website, poodr.com. Fully updated for Ruby 2.5, this guide shows how to Decide what belongs in a single class Avoid entangling objects that should be kept separate Define flexible interfaces among objects Reduce programming overhead costs with duck typing Successfully apply inheritance Build objects via composition Whatever your previous object-oriented experience, this concise guide will help you achieve the superior outcomes you’re looking for. Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.

View
Modern Software Engineering - Doing What Works to Build Better Software Faster
David Farley

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 Register your book for convenient access to downloads, updates, and/or corrections as they become available. See inside book for details.

View
Architecting for Scale - How to Maintain High Availability and Manage Risk in the Cloud
Lee Atchison

Every day, companies struggle to scale critical applications. As traffic volume and data demands increase, these applications become more complicated and brittle, exposing risks and compromising availability. With the popularity of software as a service, scaling has never been more important. Updated with an expanded focus on modern architecture paradigms such as microservices and cloud computing, this practical guide provides techniques for building systems that can handle huge quantities of traffic, data, and demand—without affecting the quality your customers expect. Architects, managers, and directors in engineering and operations organizations will learn how to build applications at scale that run more smoothly and reliably to meet the needs of customers. Learn how scaling affects the availability of your services, why that matters, and how to improve it Dive into a modern service-based application architecture that ensures high availability and reduces the effects of service failures Explore the Single Team Owned Service Architecture paradigm (STOSA)—a model for scaling your development organization in tandem with your application Understand, measure, and mitigate risk in your systems Use the cloud to build highly scalable applications

View
Designing Distributed Systems - Patterns and Paradigms for Scalable, Reliable Services
Brendan Burns

Without established design patterns to guide them, developers have had to build distributed systems from scratch, and most of these systems are very unique indeed. Today, the increasing use of containers has paved the way for core distributed system patterns and reusable containerized components. This practical guide presents a collection of repeatable, generic patterns to help make the development of reliable distributed systems far more approachable and efficient. Author Brendan Burns--Director of Engineering at Microsoft Azure--demonstrates how you can adapt existing software design patterns for designing and building reliable distributed applications. Systems engineers and application developers will learn how these long-established patterns provide a common language and framework for dramatically increasing the quality of your system. Understand how patterns and reusable components enable the rapid development of reliable distributed systems Use the side-car, adapter, and ambassador patterns to split your application into a group of containers on a single machine Explore loosely coupled multi-node distributed patterns for replication, scaling, and communication between the components Learn distributed system patterns for large-scale batch data processing covering work-queues, event-based processing, and coordinated workflows

View
Technology Made Simple for the Technical Recruiter, Second Edition - A Technical Skills Primer
Obi Ogbanufe

If you’re a technical recruiter who wants to keep your skills up to date in the competitive field of technical resource placement, you need a detailed guidebook to outpace competitors. This technical skills primer focuses on technology fundamentals—from basic programming terms to big data vocabulary, network lingo, operating system jargon, and other crucial skill sets. Topics covered include: •sample questions to ask candidates, •types of networks and operating systems, •software development strategies, •cloud systems administration and DevOps, •data science and database job roles, and •information security job roles. Armed with indispensable information, the alphabet soup of technology acronyms will no longer be intimidating, and you will be able to analyze client and candidate requirements with confidence. Written in clear and concise prose, Technology Made Simple for the Technical Recruiter is an invaluable resource for any technical recruiter.

View
Enterprise Integration Patterns - Designing, Building, and Deploying Messaging Solutions
Gregor Hohpe, Bobby Woolf

Enterprise Integration Patterns provides an invaluable catalog of sixty-five patterns, with real-world solutions that demonstrate the formidable of messaging and help you to design effective messaging solutions for your enterprise. The authors also include examples covering a variety of different integration technologies, such as JMS, MSMQ, TIBCO ActiveEnterprise, Microsoft BizTalk, SOAP, and XSL. A case study describing a bond trading system illustrates the patterns in practice, and the book offers a look at emerging standards, as well as insights into what the future of enterprise integration might hold. This book provides a consistent vocabulary and visual notation framework to describe large-scale integration solutions across many technologies. It also explores in detail the advantages and limitations of asynchronous messaging architectures. The authors present practical advice on designing code that connects an application to a messaging system, and provide extensive information to help you determine when to send a message, how to route it to the proper destination, and how to monitor the health of a messaging system. If you want to know how to manage, monitor, and maintain a messaging system once it is in use, get this book.

View
Domain Modeling Made Functional - Tackle Software Complexity with Domain-Driven Design and F#
Scott Wlaschin

You want increased customer satisfaction, faster development cycles, and less wasted work. Domain-driven design (DDD) combined with functional programming is the innovative combo that will get you there. In this pragmatic, down-to-earth guide, you'll see how applying the core principles of functional programming can result in software designs that model real-world requirements both elegantly and concisely - often more so than an object-oriented approach. Practical examples in the open-source F# functional language, and examples from familiar business domains, show you how to apply these techniques to build software that is business-focused, flexible, and high quality. Domain-driven design is a well-established approach to designing software that ensures that domain experts and developers work together effectively to create high-quality software. This book is the first to combine DDD with techniques from statically typed functional programming. This book is perfect for newcomers to DDD or functional programming - all the techniques you need will be introduced and explained. Model a complex domain accurately using the F# type system, creating compilable code that is also readable documentation---ensuring that the code and design never get out of sync. Encode business rules in the design so that you have "compile-time unit tests," and eliminate many potential bugs by making illegal states unrepresentable. Assemble a series of small, testable functions into a complete use case, and compose these individual scenarios into a large-scale design. Discover why the combination of functional programming and DDD leads naturally to service-oriented and hexagonal architectures. Finally, create a functional domain model that works with traditional databases, NoSQL, and event stores, and safely expose your domain via a website or API. Solve real problems by focusing on real-world requirements for your software. What You Need: The code in this book is designed to be run interactively on Windows, Mac and Linux.You will need a recent version of F# (4.0 or greater), and the appropriate .NET runtime for your platform.Full installation instructions for all platforms at fsharp.org.

View
Architecting CSS - The Programmer’s Guide to Effective Style Sheets
Martine Dowden, Michael Dowden

Leverage various CSS features in combination with popular architectures in order to bring your style sheets back under your control. While CSS is the primary technology used for building beautiful web user interfaces, the style sheet files themselves are often quite ugly; left chaotic and unstructured through lack of a consistent architectural approach. By addressing the structure of your style sheets in the same way that you do with code, see how it is possible to create style rules that are clean and easy to read. Dig deep into CSS fundamentals and learn how to use the available selectors to build powerful rules. You will learn how to use cascading, inheritance, pseudo-classes, pre-processors, and components to produce cleaner, DRY-er style sheets, and how to let these features work for you instead of leading you down the road of rule duplication and design inconsistencies. Embrace the clean, semantic HTML to make your code easier to read, while supporting accessibility and assistive technologies. Separate the concerns of layout and style to simplify dynamic theming and white labeling, making you a marketing hero. Once you've finished this book you will have an advanced knowledge of CSS structures and architectural patterns that will take the pain out of style sheets for you (and your coworkers), and help you implement designs faster and easier than ever before. What You'll Learn Understand the core CSS fundamentals of Inheritance, Cascading, and SpecificityWork with architecture and design patterns for better organization and maintenance Maximize code reuse with CSS precompilersReview the strengths and weaknesses of popular architecture patterns Who This Book Is For Primarily for front-end web developers and UI designers and anyone who works with CSS, particularly if they find it cumbersome and inelegant. It’s also suitable for software architects and tech leads who are responsible for the maintainability of their code base.

View
Python for Data Analysis - Data Wrangling with Pandas, NumPy, and IPython
Wes McKinney

Get complete instructions for manipulating, processing, cleaning, and crunching datasets in Python. Updated for Python 3.6, the second edition of this hands-on guide is packed with practical case studies that show you how to solve a broad set of data analysis problems effectively. You’ll learn the latest versions of pandas, NumPy, IPython, and Jupyter in the process. Written by Wes McKinney, the creator of the Python pandas project, this book is a practical, modern introduction to data science tools in Python. It’s ideal for analysts new to Python and for Python programmers new to data science and scientific computing. Data files and related material are available on GitHub. Use the IPython shell and Jupyter notebook for exploratory computing Learn basic and advanced features in NumPy (Numerical Python) Get started with data analysis tools in the pandas library Use flexible tools to load, clean, transform, merge, and reshape data Create informative visualizations with matplotlib Apply the pandas groupby facility to slice, dice, and summarize datasets Analyze and manipulate regular and irregular time series data Learn how to solve real-world data analysis problems with thorough, detailed examples

View
The Missing README - A Guide for the New Software Engineer
Chris Riccomini, Dmitriy Ryaboy

Key concepts and best practices for new software engineers — stuff critical to your workplace success that you weren’t taught in school. For new software engineers, knowing how to program is only half the battle. You’ll quickly find that many of the skills and processes key to your success are not taught in any school or bootcamp. The Missing README fills in that gap—a distillation of workplace lessons, best practices, and engineering fundamentals that the authors have taught rookie developers at top companies for more than a decade. Early chapters explain what to expect when you begin your career at a company. The book’s middle section expands your technical education, teaching you how to work with existing codebases, address and prevent technical debt, write production-grade software, manage dependencies, test effectively, do code reviews, safely deploy software, design evolvable architectures, and handle incidents when you’re on-call. Additional chapters cover planning and interpersonal skills such as Agile planning, working effectively with your manager, and growing to senior levels and beyond. You’ll learn: How to use the legacy code change algorithm, and leave code cleaner than you found it How to write operable code with logging, metrics, configuration, and defensive programming How to write deterministic tests, submit code reviews, and give feedback on other people’s code The technical design process, including experiments, problem definition, documentation, and collaboration What to do when you are on-call, and how to navigate production incidents Architectural techniques that make code change easier Agile development practices like sprint planning, stand-ups, and retrospectives This is the book your tech lead wishes every new engineer would read before they start. By the end, you’ll know what it takes to transition into the workplace–from CS classes or bootcamps to professional software engineering.

View
Technology Strategy Patterns - Architecture as Strategy
Eben Hewitt

Technologists who want their ideas heard, understood, and funded are often told to speak the language of business—without really knowing what that is. This book’s toolkit provides architects, product managers, technology managers, and executives with a shared language—in the form of repeatable, practical patterns and templates—to produce great technology strategies. Author Eben Hewitt developed 39 patterns over the course of a decade in his work as CTO, CIO, and chief architect for several global tech companies. With these proven tools, you can define, create, elaborate, refine, and communicate your architecture goals, plans, and approach in a way that executives can readily understand, approve, and execute. This book covers: Architecture and strategy: Adopt a strategic architectural mindset to make a meaningful material impact Creating your strategy: Define the components of your technology strategy using proven patterns Communicating the strategy: Convey your technology strategy in a compelling way to a variety of audiences Bringing it all together: Employ patterns individually or in clusters for specific problems; use the complete framework for a comprehensive strategy

View
Hello, Startup - A Programmer's Guide to Building Products, Technologies, and Teams
Yevgeniy Brikman

This book is the "Hello, World" tutorial for building products, technologies, and teams in a startup environment. It's based on the experiences of the author, Yevgeniy (Jim) Brikman, as well as interviews with programmers from some of the most successful startups of the last decade, including Google, Facebook, LinkedIn, Twitter, GitHub, Stripe, Instagram, AdMob, Pinterest, and many others. Hello, Startup is a practical, how-to guide that consists of three parts: Products, Technologies, and Teams. Although at its core, this is a book for programmers, by programmers, only Part II (Technologies) is significantly technical, while the rest should be accessible to technical and non-technical audiences alike. If you’re at all interested in startups—whether you’re a programmer at the beginning of your career, a seasoned developer bored with large company politics, or a manager looking to motivate your engineers—this book is for you.

View
Patterns of Enterprise Application Architecture - Pattern Enterpr Applica Arch
Martin Fowler

The practice of enterprise application development has benefited from the emergence of many new enabling technologies. Multi-tiered object-oriented platforms, such as Java and .NET, have become commonplace. These new tools and technologies are capable of building powerful applications, but they are not easily implemented. Common failures in enterprise applications often occur because their developers do not understand the architectural lessons that experienced object developers have learned. Patterns of Enterprise Application Architecture is written in direct response to the stiff challenges that face enterprise application developers. The author, noted object-oriented designer Martin Fowler, noticed that despite changes in technology--from Smalltalk to CORBA to Java to .NET--the same basic design ideas can be adapted and applied to solve common problems. With the help of an expert group of contributors, Martin distills over forty recurring solutions into patterns. The result is an indispensable handbook of solutions that are applicable to any enterprise application platform. This book is actually two books in one. The first section is a short tutorial on developing enterprise applications, which you can read from start to finish to understand the scope of the book's lessons. The next section, the bulk of the book, is a detailed reference to the patterns themselves. Each pattern provides usage and implementation information, as well as detailed code examples in Java or C#. The entire book is also richly illustrated with UML diagrams to further explain the concepts. Armed with this book, you will have the knowledge necessary to make important architectural decisions about building an enterprise application and the proven patterns for use when building them. The topics covered include · Dividing an enterprise application into layers · The major approaches to organizing business logic · An in-depth treatment of mapping between objects and relational databases · Using Model-View-Controller to organize a Web presentation · Handling concurrency for data that spans multiple transactions · Designing distributed object interfaces

View
Code Complete, 2nd Edition
Steve Mcconnell

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.

View
Effective Kotlin: Best Practices
Marcin Moskala

This book is a guide for Kotlin developers on how to become an excellent Kotlin developer. Kotlin is a powerful and pragmatic language, but it's not enough to know about its features. You also need to know when they should be used and in what way. This book presents and explains in-depth the best practices for Kotlin development. Each item is presented as a clear rule of thumb, supported by detailed explanations and practical examples. It's a comprehensive guide of best practices for Kotlin code quality: safety, readability, code design and efficiency. What you will learn You will learn how to make better Kotlin development in terms of safety, readability, maintainability and performance. The book also covers some advanced topics like inline functions and classes, DSLs or platform types. Who this book is for This book was written for Kotlin developers who want to learn and understand how to write high-quality code. It assumes some experience with Kotlin or at least with Swift, Java or Scala. It is directed towards all kinds of Kotlin developers and isn't specific to mobile or backend development. The purpose of this book The purpose of Effective Kotlin is to teach and promote the best practices for Kotlin developers, as well as the way Kotlin features can and should be used to improve code.Reader Testimonials Rafal Kuźmiński: Well done! I've read a few items and I have to admit that I learned some interesting stuff. Great book: ) Hanno Günther: Really love this book!

View
Effective Kotlin - Best practices
Marcin Moskała

Kotlin is a powerful and pragmatic language, but it's not enough to know about its features. We also need to know when they should be used and in what way. This book is a guide for Kotlin developers on how to become excellent Kotlin developers. It presents and explains in-depth the best practices for Kotlin development. Each item is presented as a clear rule of thumb, supported by detailed explanations and practical examples.

View
Flutter Complete Reference - Create Beautiful, Fast and Native Apps for Any Device
Alberto Miola

Flutter is Google's UI toolkit for creating beautiful and native applications for mobile, desktop and web from a single Dart codebase. In this book we cover in detail the Dart programming language (version 2.10, with null safety support) and the Flutter framework (version 1.20). While reading the chapters, you'll find a lot of good practices, tips and performance advices to build high quality products. The book is divided in 3 parts. PART 1: It's about the Dart programming language (classes, exceptions, inheritance, null safety, streams, SOLID principles...). PART 2. It's about the Flutter framework (localization, routing, state management with Bloc and Provider, testing, performances with DevTools, animations...). PART 3. It's a long collection of examples (using Firestore, monetizing apps, using gestures, networking, publishing packages at pub.dev, race recognition with ML kits, playing audio and video...). The official website of the book contains the complete source code of the examples and a "Quiz Game" to test your Dart and Flutter skills!

View
UML Distilled
Martin Fowler

More than 300,000 developers have benefited from past editions of UML Distilled . This third edition is the best resource for quick, no-nonsense insights into understanding and using UML 2.0 and prior versions of the UML. Some readers will want to quickly get up to speed with the UML 2.0 and learn the essentials of the UML. Others will use this book as a handy, quick reference to the most common parts of the UML. The author delivers on both of these promises in a short, concise, and focused presentation. This book describes all the major UML diagram types, what they're used for, and the basic notation involved in creating and deciphering them. These diagrams include class, sequence, object, package, deployment, use case, state machine, activity, communication, composite structure, component, interaction overview, and timing diagrams. The examples are clear and the explanations cut to the fundamental design logic. Includes a quick reference to the most useful parts of the UML notation and a useful summary of diagram types that were added to the UML 2.0. If you are like most developers, you don't have time to keep up with all the new innovations in software engineering. This new edition of Fowler's classic work gets you acquainted with some of the best thinking about efficient object-oriented software design using the UML--in a convenient format that will be essential to anyone who designs software professionally.

View