Advanced Algorithms and Data Structures
Marcello La Rocca
Can you improve the speed and efficiency of your applications without investing in new hardware? Well, yest, you an: Innovations in algorithms and data structures have led to huge advances in application performance. Pick up this book to discover a collection of advanced algorithms that will make you a more effective developer. "Advanced algorithms and data structures" introduces a collection of algorithms for complex programming challenges in data analysis, machine learning, and graph computing. You'll discover cutting-edge approaches to a variety of tricky scenarios. You'll even learn to design your own data structures for projects that require a custom solution.
show moreData-Oriented Programming
Chris Kiehl
Code that combines behavior and data, as is common in object-oriented designs, can introduce almost unmanageable complexity for state management. The data-orineted programming (DOP) paradigm simplifies state management by holding application data in immutable generic data structures and then performing calculations using non-mutating general-purpose functions. Your applications are free of state-related bugs and your code is easier to understand and maintain. Data-oriented programming teaches you to design software using the groundbreaking data-oriented paradigm. You'll put DOP into action to design data models for business entities and implement a library management system that manages state without data mutation. The numerous diagrams, intuitive mind maps, and a unique conversational approach all help you get your head around these exciting new ideas. Every chapter has a lightbulb moment that will change the way you think about programming.
show moreAPI Design Patterns
JJ Geewax
"A concept-rich book on API design patterns. Deeply engrossing and fun to read." - Satej Sahu, Honeywell API Design Patterns lays out a set of design principles for building internal and public-facing APIs. In API Design Patterns you will learn: Guiding principles for API patterns Fundamentals of resource layout and naming Handling data types for any programming language Standard methods that ensure predictability Field masks for targeted partial updates Authentication and validation methods for secure APIs Collective operations for moving, managing, and deleting data Advanced patterns for special interactions and data transformations API Design Patterns reveals best practices for building stable, user-friendly APIs. These design patterns can be applied to solve common API problems and flexibly altered to fit specific needs. Hands-on examples and relevant cases illustrate patterns for API fundamentals, advanced functionalities, and uncommon scenarios. Foreword by Jon Skeet. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology APIs are contracts that define how applications, services, and components communicate. API design patterns provide a shared set of best practices, specifications and standards that ensure APIs are reliable and simple for other developers. This book collects and explains the most important patterns from both the API design community and the experts at Google. About the book API Design Patterns lays out a set of principles for building internal and public-facing APIs. Google API expert JJ Geewax presents patterns that ensure your APIs are consistent, scalable, and flexible. You’ll improve the design of the most common APIs, plus discover techniques for tricky edge cases. Precise illustrations, relevant examples, and detailed scenarios make every pattern clear and easy to understand. What's inside Guiding principles for API patterns Fundamentals of resource layout and naming Advanced patterns for special interactions and data transformations A detailed case-study on building an API and adding features About the reader For developers building web and internal APIs in any language. About the author JJ Geewax is a software engineer at Google, focusing on Google Cloud Platform, API design, and real-time payment systems. He is also the author of Manning’s Google Cloud Platform in Action. Table of Contents PART 1 INTRODUCTION 1 Introduction to APIs 2 Introduction to API design patterns PART 2 DESIGN PRINCIPLES 3 Naming 4 Resource scope and hierarchy 5 Data types and defaults PART 3 FUNDAMENTALS 6 Resource identification 7 Standard methods 8 Partial updates and retrievals 9 Custom methods 10 Long-running operations 11 Rerunnable jobs PART 4 RESOURCE RELATIONSHIPS 12 Singleton sub-resources 13 Cross references 14 Association resources 15 Add and remove custom methods 16 Polymorphism PART 5 COLLECTIVE OPERATIONS 17 Copy and move 18 Batch operations 19 Criteria-based deletion 20 Anonymous writes 21 Pagination 22 Filtering 23 Importing and exporting PART 6 SAFETY AND SECURITY 24 Versioning and compatibility 25 Soft deletion 26 Request deduplication 27 Request validation 28 Resource revisions 29 Request retrial 30 Request authentication
show more100 SQL Server Mistakes and How to Avoid Them
Peter Carter
All the mistakes you might make with SQL Server—and how to avoid them! 100 SQL Server Mistakes and How to Avoid Them prepares you for the pitfalls database professionals often encounter—from administration to development, availability, and security. You'll learn to sidestep common errors that slow down your T-SQL code and ensure your SQL Server is installed and configured to handle anything your organization throws at it. Inside 100 SQL Server Mistakes and How to Avoid Them you'll learn to avoid: • Development errors when writing T-SQL • Installation and administration mistakes • Optimization missteps • Common pitfalls relating to high availability and disaster recovery (HA/DR) • Security oversights that can endanger your data 100 SQL Server Mistakes and How to Avoid Them doesn't focus on the "happy path"—instead, it covers all the errors and problems you might face as a SQL Server developer or administrator. Each chapter is filled with real-world issues drawn from author Peter A. Carter’s two-decade-long career in SQL Server. Peter's seasoned advice helps dispel myths, debunk misconceptions, and set you on the right road. About the technology Perfecting a SQL Server system can be a complex balancing act. Why is T-SQL running so slowly? Is the right data available? Are we protected against data theft? What about that new server instance I need to administer? Even the most skilled SQL Server experts make mistakes that cost time and performance. This book can help you get it right the first time. About the book 100 SQL Server Mistakes and How to Avoid Them focuses exclusively on the errors that you might—and probably will—make as a SQL Server admin or developer. Real-world examples, code samples, and helpful diagrams make it easy to understand each issue and its solution. You’ll learn how to write performant code, design efficient database schemas, implement error handling, work with complex data types, and much more, all in a friendly, common-sense problem/solution format. What's inside • T-SQL development • Installation, administration, and optimization • High availability and security About the reader Readers need to understand basic SQL Server concepts and SQL queries. Perfect for junior database admins, full-stack developers, and “accidental” DBAs. About the author Peter A. Carter is a SQL Server expert with experience developing, administering, and architecting data-tier applications and SQL Server platforms. Table of Contents 1 Introducing SQL Server 2 Development standards 3 Data types 4 Database design 5 T-SQL development 6 SSIS development 7 Error handling, testing, source control, and deployment 8 SQL Server installation 9 Instance and database management 10 Optimization 11 Indexes 12 Backups 13 Availability 14 Security
show moreBlockchain in Action
Bina Ramamurthy
There’s a lot more to the blockchain than mining Bitcoin. This secure system for registering and verifying ownership and identity is perfect for supply chain logistics, health records, and other sensitive data management tasks. Blockchain in Action unlocks the full potential of this revolutionary technology, showing you how to build your own decentralized apps for secure applications including digital democracy, private auctions, and electronic record management. Summary There’s a lot more to the blockchain than mining Bitcoin. This secure system for registering and verifying ownership and identity is perfect for supply chain logistics, health records, and other sensitive data management tasks. Blockchain in Action unlocks the full potential of this revolutionary technology, showing you how to build your own decentralized apps for secure applications including digital democracy, private auctions, and electronic record management. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology Blockchain is more than just the tech behind Bitcoin—much more! Combining impenetrable security, decentralized transactions, and independently verifiable supply chains, blockchain applications have transformed currency, digital identity, and logistics. Platforms such as Ethereum and Hyperledger make it easy to get started by using familiar programming languages. About the book Blockchain in Action teaches you how to design and build blockchain-based decentralized apps, and is written in a clear, jargon-free style. First, you’ll get an overview of how blockchain works. Next, you’ll code your first smart contract using Ethereum and Solidity, adding a web interface, trust validation, and other features until your app is ready for deployment. The only thing you need to get started is standard hardware and open source software. What's inside Blockchain compared with other distributed systems Development in Solidity Identity, privacy, and security On-chain and off-chain data and operations About the reader For programmers who know JavaScript. About the author Bina Ramamurthy has thirty years of experience teaching distributed systems, data science, peer-to-peer networking, and blockchain. Table of Contents PART 1 - GETTING STARTED WITH BLOCKCHAIN PROGRAMMING 1 Blockchain basics 2 Smart contracts 3 Techniques for trust and integrity 4 From smart contracts to Dapps PART 2 - TECHNIQUES FOR END-TO-END DAPP DEVELOPMENT 5 Security and privacy 6 On-chain and off-chain data 7 Web3 and a channel Dapp 8 Going public with Infura PART 3 - A ROADMAP AND THE ROAD AHEAD 9 Tokenization of assets 10 Testing smart contracts 11 A roadmap to Dapp development 12 Blockchain: The Road ahead
show moreGrokking Simplicity
Eric Normand
"The most insightful and intuitive guide to clean and simple software. I recommend this to all software developers." - Rob Pacheco, Vision Government Solutions Grokking Simplicity is a friendly, practical guide that will change the way you approach software design and development. Distributed across servers, difficult to test, and resistant to modification—modern software is complex. Grokking Simplicity is a friendly, practical guide that will change the way you approach software design and development. It introduces a unique approach to functional programming that explains why certain features of software are prone to complexity, and teaches you the functional techniques you can use to simplify these systems so that they’re easier to test and debug. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the technology Developers rightly fear the unintended complexity that infects most code. This book shows you how to write software that keeps complexity close to its inherent minimum. As you write software you should distinguish between code that alters your system’s state, and code that does not. Once you learn to make that distinction, you can refactor much of your state-altering “actions” into stateless “calculations.” Your software will be simpler. About the book The book also teaches you to solve the complex timing bugs that inevitably creep into asynchronous and multithreaded code. In advanced sections of the book you learn how composable abstractions help avoid repeating code and open up new levels of expressivity. What's inside Patterns for simpler code Powerful time modeling approaches to simplify asynchronous code How higher-order functions can make code reusable and composable About the reader For intermediate and advanced developers building complex software. Exercises, illustrations, self-assessments, and hands-on examples lock in each new idea. About the author Eric Normand is an expert software developer who has been an influential teacher of functional programming since 2007. Table of Contents 1 Welcome to Grokking Simplicity 2 Functional thinking in action PART 1 - ACTIONS, CALCULATIONS, AND DATA 3 Distinguishing actions, calculations, and data 4 Extracting calculations from actions 5 Improving the design of actions 6 Staying immutable in a mutable language 7 Staying immutable with untrusted code 8 Stratified design, part 1 9 Stratified design, part 2 PART 2 - FIRST-CLASS ABSTRACTIONS 10 First-class functions, part 1 11 First-class functions, part 2 12 Functional iteration 13 Chaining functional tools 14 Functional tools for nested data 15 Isolating timelines 16 Sharing resources between timelines 17 Coordinating timelines 18 Reactive and onion architectures 19 The functional journey ahead
show moreApache Kafka in Action
Anatoly Zelenin, Alexander Kropp
Apache Kafka, start to finish. Apache Kafka in Action: From basics to production guides you through the concepts and skills you’ll need to deploy and administer Kafka for data pipelines, event-driven applications, and other systems that process data streams from multiple sources. Authors Anatoly Zelenin and Alexander Kropp have spent years using Kafka in real-world production environments. In this guide, they reveal their hard-won expert insights to help you avoid common Kafka pitfalls and challenges. Inside Apache Kafka in Action you’ll discover: • Apache Kafka from the ground up • Achieving reliability and performance • Troubleshooting Kafka systems • Operations, governance, and monitoring • Kafka use cases, patterns, and anti-patterns Clear, concise, and practical, Apache Kafka in Action is written for IT operators, software engineers, and IT architects working with Kafka every day. Chapter by chapter, it guides you through the skills you need to deliver and maintain reliable and fault-tolerant data-driven applications. Foreword by Adam Bellemare. Purchase of the print book includes a free eBook in PDF and ePub formats from Manning Publications. About the technology Apache Kafka is the gold standard streaming data platform for real-time analytics, event sourcing, and stream processing. Acting as a central hub for distributed data, it enables seamless flow between producers and consumers via a publish-subscribe model. Kafka easily handles millions of events per second, and its rock-solid design ensures high fault tolerance and smooth scalability. About the book Apache Kafka in Action is a practical guide for IT professionals who are integrating Kafka into data-intensive applications and infrastructures. The book covers everything from Kafka fundamentals to advanced operations, with interesting visuals and real-world examples. Readers will learn to set up Kafka clusters, produce and consume messages, handle real-time streaming, and integrate Kafka into enterprise systems. This easy-to-follow book emphasizes building reliable Kafka applications and taking advantage of its distributed architecture for scalability and resilience. What's inside • Master Kafka’s distributed streaming capabilities • Implement real-time data solutions • Integrate Kafka into enterprise environments • Build and manage Kafka applications • Achieve fault tolerance and scalability About the reader For IT operators, software architects and developers. No experience with Kafka required. About the author Anatoly Zelenin is a Kafka expert known for workshops across Europe, especially in banking and manufacturing. Alexander Kropp specializes in Kafka and Kubernetes, contributing to cloud platform design and monitoring. Table of Contents Part 1 1 Introduction to Apache Kafka 2 First steps with Kafka Part 2 3 Exploring Kafka topics and messages 4 Kafka as a distributed log 5 Reliability 6 Performance Part 3 7 Cluster management 8 Producing and persisting messages 9 Consuming messages 10 Cleaning up messages Part 4 11 Integrating external systems with Kafka Connect 12 Stream processing 13 Governance 14 Kafka reference architecture 15 Kafka monitoring and alerting16 Disaster management 17 Comparison with other technologies 18 Kafka’s role in modern enterprise architectures Appendixes A Setting up a Kafka test environment B Monitoring setup
show moreGrokking Algorithms, Second Edition
Aditya Y Bhargava
A friendly, fully-illustrated introduction to the most important computer programming algorithms. Suitable for self-taught programmers, engineers, job seekers, or anyone who wants to brush up on algorithms.
show more100 C++ Mistakes and How to Avoid Them
Rich Yonts
Learn how to handle errors, inefficiencies, and outdated paradigms by exploring the most common mistakes you’ll find in production C++ code. 100 C++ Mistakes and How To Avoid Them reveals the problems you’ll inevitably encounter as you write new C++ code and diagnose legacy applications, along with practical techniques you need to resolve them. Inside 100 C++ Mistakes and How To Avoid Them you’ll learn how to: • Design solid classes • Minimize resource allocation/deallocation issues • Use new C++ features • Identify the differences between compile and runtime issues • Recognize C-style idioms that miss C++ functionality • Use exceptions well 100 C++ Mistakes and How To Avoid Them gives you practical insights and techniques to improve your C++ coding kung fu. Author Rich Yonts has been using C++ since its invention in the 1980s. This book distills that experience into practical, reusable advice on how C++ programmers at any skill level can improve their code. Unlike many C++ books that concentrate on language theory and toy exercises, this book is loaded with real examples from production codebases. Purchase of the print book includes a free eBook in PDF and ePub formats from Manning Publications. About the technology Over ten billion lines of C++ code are running in production applications, and 98-developers find and fix mistakes in them every day. Even mission-critical applications have bugs, performance inefficiencies, and readability problems. This book will help you identify them in the code you’re maintaining and avoid them in the code you’re writing. About the book 100 C++ Mistakes and How To Avoid Them presents practical techniques to improve C++ code, from legacy applications to modern codebases that use C++ 11 and beyond. Author Rich Yonts provides a concrete example to illustrate each issue, along with a step-by-step walkthrough for improving readability, effectiveness, and performance. Along the way, you’ll even learn how and where to replace outdated patterns and idioms with modern C++. What's inside • Design solid classes • Resource allocation/deallocation issues • Compile and runtime problems • Replace C-style idioms with proper C++ About the reader Covers C++ 98 through 23, with an emphasis on diagnosing and improving legacy code. About the author Rich Yonts is a Senior Software Engineer at Teradata and a long-time software engineer using C++, Java, and Python. He has held a number of technical and leadership roles during his many years at IBM and Sony. Table of Contents 1 C++: With great power comes great responsibility Part 1 2 Better modern C++: Classes and types 3 Better modern C++: General programming 4 Better modern C++: Additional topics Part 2 5 C idioms 6 Better premodern C++ Part 3 7 Establishing the class invariant 8 Maintaining the class invariant 9 Class operations 10 Exceptions and resources 11 Functions and coding 12 General coding
show moreArchitecture Modernization
Nick Tune
The decisions you make about your software are inherently connected to the decisions you make about your business. Why not turn the mundane task of modernizing legacy systems into a transformative process for your entire company? This book shows you how! It reveals a socio-technical approach to align your software and products with organizational dynamics and ways of working. Architecture modernization: socio-technical alignment of software, strategy, and structure presents a clear path of upgrading your entire organization when you re-imagine your software. In it, you'll learn to combine practices like Domain-Driven Design, Event Storming, and Wardley Mapping to discover user needs, design optimal architecture, and avoid falling back into old habits. Provocative examples from Danske, Salesforce, the UK Government, and others show the real-world result of each approach, identifying techniques you can apply effectively in your own business.
show moreGrokking Concurrency
Kiril Bobrov
This easy-to-read, hands-on guide demystifies concurrency concepts like threading, asynchronous programming, and parallel processing in any language. Perplexed by concurrency? Don’t be. This engaging, fully-illustrated beginner’s guide gets you writing the kind of high-performance code your apps deserve. Inside, you’ll find thorough explanations of concurrency’s core concepts—all explained with interesting illustrations, insightful examples, and detailed techniques you can apply to your own projects. In Grokking Concurrency you will: Get up to speed with the core concepts of concurrency, asynchrony, and parallel programming Learn the strengths and weaknesses of different hardware architectures Improve the sequential performance characteristics of your software Solve common problems for concurrent programming Compose patterns into a series of practices for writing scalable systems Write and implement concurrency systems that scale to any size Discover effective concurrency practices that will help you leverage multiple cores, excel with high loads, handle terabytes of data, and continue working after hardware and software failures. The core concepts in this guide will remain eternally relevant, whether you’re building web apps, IoT systems, or handling big data. About the technology Concurrency is an approach to running computer programs efficiently by separating them into tasks that can execute independently. This basic idea makes it possible to accelerate game graphics, train large AI models, rapidly scale web applications, streamline big data processing, and much more. Concurrency can get complicated, so this book gets you started gently with interesting examples, entertaining illustrations, and easy-to-follow Python code. About the book Grokking Concurrency is a perfectly paced introduction to the fundamentals of concurrent, parallel, and asynchronous programming. In it, you’ll learn the practices you’ll need to program multicore processors, GPUs, and other high-performance systems. Author Kirill Bobrov skips the math, jargon, and academic language and concentrates on clear, plain-English explanations. What's inside Writing and running concurrent programs Patterns for performance, scalability, and resilience Choosing the right hardware Asynchronous communication About the reader Examples in Python. No prior experience with concurrency or high-performance computing required. About the author Kirill Bobrov is a software engineer with a passion for data engineering. Table of Contents Part 1 The Octopus Orchestra: Introduction to a Symphony of Concurrency 1 Introducing concurrency 2 Serial and parallel execution 3 How computers work 4 Building blocks of concurrency 5 Interprocess communication Part 2 the Many Tentacles of Concurrency: Multitasking, Decomposition, and Synchronization 6 Multitasking 7 Decomposition 8 Solving concurrency problems: Race conditions and synchronization 9 Solving concurrency problems: Deadlocks and starvation Part 3 Asynchronous Octopuses: a Pizza-making Tale of Concurrency 10 Nonblocking I/O 11 Event-based concurrency 12 Asynchronous communication 13 Writing concurrent applications
show moreModern Fortran
Milan Curcic
Modern Fortran teaches you to develop fast, efficient parallel applications using twenty-first-century Fortran. In this guide, you’ll dive into Fortran by creating fun apps, including a tsunami simulator and a stock price analyzer. Filled with real-world use cases, insightful illustrations, and hands-on exercises, Modern Fortran helps you see this classic language in a whole new light. Summary Using Fortran, early and accurate forecasts for hurricanes and other major storms have saved thousands of lives. Better designs for ships, planes, and automobiles have made travel safer, more efficient, and less expensive than ever before. Using Fortran, low-level machine learning and deep learning libraries provide incredibly easy, fast, and insightful analysis of massive data. Fortran is an amazingly powerful and flexible programming language that forms the foundation of high performance computing for research, science, and industry. And it's come a long, long way since starting life on IBM mainframes in 1956. Modern Fortran is natively parallel, so it's uniquely suited for efficiently handling problems like complex simulations, long-range predictions, and ultra-precise designs. If you're working on tasks where speed, accuracy, and efficiency matter, it's time to discover—or re-discover—Fortran.. About the technology For over 60 years Fortran has been powering mission-critical scientific applications, and it isn't slowing down yet! Rock-solid reliability and new support for parallel programming make Fortran an essential language for next-generation high-performance computing. Simply put, the future is in parallel, and Fortran is already there. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the book Modern Fortran teaches you to develop fast, efficient parallel applications using twenty-first-century Fortran. In this guide, you'll dive into Fortran by creating fun apps, including a tsunami simulator and a stock price analyzer. Filled with real-world use cases, insightful illustrations, and hands-on exercises, Modern Fortran helps you see this classic language in a whole new light. What's inside Fortran's place in the modern world Working with variables, arrays, and functions Module development Parallelism with coarrays, teams, and events Interoperating Fortran with C About the reader For developers and computational scientists. No experience with Fortran required. About the author Milan Curcic is a meteorologist, oceanographer, and author of several general-purpose Fortran libraries and applications. Table of Contents PART 1 - GETTING STARTED WITH MODERN FORTRAN 1 Introducing Fortran 2 Getting started: Minimal working app PART 2 - CORE ELEMENTS OF FORTRAN 3 Writing reusable code with functions and subroutines 4 Organizing your Fortran code using modules 5 Analyzing time series data with arrays 6 Reading, writing, and formatting your data PART 3 - ADVANCED FORTRAN USE 7 Going parallel with Fortan coarrays 8 Working with abstract data using derived types 9 Generic procedures and operators for any data type 10 User-defined operators for derived types PART 4 - THE FINAL STRETCH 11 Interoperability with C: Exposing your app to the web 12 Advanced parallelism with teams, events, and collectives
show moreC# in Depth, Fourth Edition
Jon Skeet
Modern C, Third Edition
Jens Gustedt
Discover the full power of modern C programming, with an inside look at the new C23 standard. For programs that need to be small, fast, and reliable, C is the gold standard. Whether you’re writing embedded code, low-level system routines, or high-performance applications, C is up to the challenge. This unique book by Jens Gustedt, a member of the ISO C standards committee, gets you up to speed with C23. In Modern C, Third Edition you’ll: • Learn C basics, core features, and advanced concepts • Leverage major C23 improvements for security, reliability, and performance • Write portable code that runs anywhere • Build multi-threaded applications with atomics and synchronization • Create robust and resilient software with error handling • Use type-generic programming for reusable code In Modern C, Third Edition you’ll learn to harness C’s full potential using the latest tools and techniques. After a quick review of the fundamentals suited for coders who haven’t used C in a while, this book guides you to mastery of C23, the latest ISO standard. About the Technology From code running on the smallest embedded devices to the low-level libraries behind popular programming languages like Python and Ruby, the software world depends on C. And even after 50 years, it’s still getting better! The new C23 standard adds improvements for security, reliability, and performance. In this thoroughly-revised new edition, author Jens Gustedt gives you an authoritative inside view. About the Book Modern C, Third Edition is a fast-paced introduction to the C language, with special attention on its most modern features. It starts with a quick review of structure, grammar, and execution and then progresses quickly to control structures, data types, operators, and other core language features. Fully revised for C23, this expanded Third Edition covers compound expressions and lambdas, new insights into approaching program failure, and how to transition smoothly to C23. What’s Inside • All major C23 features • Portable code that runs anywhere • Multi-threaded applications with atomics and synchronization • Use type-generic programming for reusable code About the Readers For readers with intermediate skills in any programming language. About the Author Jens Gustedt is a senior scientist at the French National Institute for Computer Science and Control (INRIA), deputy director of the ICube lab in Strasbourg, France, and an active member of the ISO C standards committee. Table of Contents Level 0 Encounter 1 Getting started 2 The principal structure of a program Level 1 Acquaintance 3 Everything is about control 4 Expressing computations 5 Basic values and data 6 Derived data types 7 Functions 8 C library functions Level 2 Cognition 9 Style 10 Organization and documentation 11 Pointers 12 The C memory model 13 Storage 14 More involved processing and I/O 15 Program failure Level 3 Experience 16 Performance 17 Function-like macros 18 Type-generic programming 19 Variations in control flow 20 Threads 21 Atomic access and memory consistency A Transitional code B C compilers C C libraries Takeaways Get a free eBook (PDF or ePub) from Manning as well as access to the online liveBook format (and its AI assistant that will answer your questions in any language) when you purchase the print book.
show more
Acing the System Design Interview
Zhiyong Tan
The system design interview is one of the hardest challenges you’ll face in the software engineering hiring process. This practical book gives you the insights, the skills, and the hands-on practice you need to ace the toughest system design interview questions and land the job and salary you want. In Acing the System Design Interview you will master a structured and organized approach to present system design ideas like: Scaling applications to support heavy traffic Distributed transactions techniques to ensure data consistency Services for functional partitioning such as API gateway and service mesh Common API paradigms including REST, RPC, and GraphQL Caching strategies, including their tradeoffs Logging, monitoring, and alerting concepts that are critical in any system design Communication skills that demonstrate your engineering maturity Don’t be daunted by the complex, open-ended nature of system design interviews! In this in-depth guide, author Zhiyong Tan shares what he’s learned on both sides of the interview table. You’ll dive deep into the common technical topics that arise during interviews and learn how to apply them to mentally perfect different kinds of systems. Foreword by Anthony Asta, Michael D. Elder. About the technology The system design interview is daunting even for seasoned software engineers. Fortunately, with a little careful prep work you can turn those open-ended questions and whiteboard sessions into your competitive advantage! In this powerful book, Zhiyong Tan reveals practical interview techniques and insights about system design that have earned developers job offers from Amazon, Apple, ByteDance, PayPal, and Uber. About the book Acing the System Design Interview is a masterclass in how to confidently nail your next interview. Following these easy-to-remember techniques, you’ll learn to quickly assess a question, identify an advantageous approach, and then communicate your ideas clearly to an interviewer. As you work through this book, you’ll gain not only the skills to successfully interview, but also to do the actual work of great system design. What's inside Insights on scaling, transactions, logging, and more Practice questions for core system design concepts How to demonstrate your engineering maturity Great questions to ask your interviewer About the reader For software engineers, software architects, and engineering managers looking to advance their careers. About the author Zhiyong Tan is a manager at PayPal. He has worked at Uber, Teradata, and at small startups. Over the years, he has been in many system design interviews, on both sides of the table. The technical editor on this book was Mohit Kumar. Table of Contents PART 1 1 A walkthrough of system design concepts 2 A typical system design interview flow 3 Non-functional requirements 4 Scaling databases 5 Distributed transactions 6 Common services for functional partitioning PART 2 7 Design Craigslist 8 Design a rate-limiting service 9 Design a notification/alerting service 10 Design a database batch auditing service 11 Autocomplete/typeahead 12 Design Flickr 13 Design a Content Distribution Network (CDN) 14 Design a text messaging app 15 Design Airbnb 16 Design a news feed 17 Design a dashboard of top 10 products on Amazon by sales volume Appendix A Monoliths vs. microservices Appendix B OAuth 2.0 authorization and OpenID Connect authentication Appendix C C4 Model Appendix D Two-phase commit (2PC)
show moreC++ Concurrency in Action, Second Edition
Anthony Williams
"This book should be on every C++ programmer’s desk. It’s clear, concise, and valuable." - Rob Green, Bowling Green State University This bestseller has been updated and revised to cover all the latest changes to C++ 14 and 17! C++ Concurrency in Action, Second Edition teaches you everything you need to write robust and elegant multithreaded applications in C++17. Purchase of the print book includes a free eBook in PDF, Kindle, and ePub formats from Manning Publications. About the Technology You choose C++ when your applications need to run fast. Well-designed concurrency makes them go even faster. C++ 17 delivers strong support for the multithreaded, multiprocessor programming required for fast graphic processing, machine learning, and other performance-sensitive tasks. This exceptional book unpacks the features, patterns, and best practices of production-grade C++ concurrency. About the Book C++ Concurrency in Action, Second Edition is the definitive guide to writing elegant multithreaded applications in C++. Updated for C++ 17, it carefully addresses every aspect of concurrent development, from starting new threads to designing fully functional multithreaded algorithms and data structures. Concurrency master Anthony Williams presents examples and practical tasks in every chapter, including insights that will delight even the most experienced developer. What's inside Full coverage of new C++ 17 features Starting and managing threads Synchronizing concurrent operations Designing concurrent code Debugging multithreaded applications About the Reader Written for intermediate C and C++ developers. No prior experience with concurrency required. About the Author Anthony Williams has been an active member of the BSI C++ Panel since 2001 and is the developer of the just::thread Pro extensions to the C++ 11 thread library. Table of Contents Hello, world of concurrency in C++! Managing threads Sharing data between threads Synchronizing concurrent operations The C++ memory model and operations on atomic types Designing lock-based concurrent data structures Designing lock-free concurrent data structures Designing concurrent code Advanced thread management Parallel algorithms Testing and debugging multithreaded applications
show more100 Java Mistakes and How to Avoid Them
Tagir Valeev
Dodge the common mistakes that even senior developers make, take full advantage of static analysis tools, and deliver robust and error-free Java code. Whenever you make a mistake writing Java, it’s almost guaranteed that someone else has made it before! In 100 Java Mistakes and How To Avoid Them you’ll learn about the common and the not-so-common antipatterns, errors, and tricky bits that trip up almost every Java developer. Inside 100 Java Mistakes and How To Avoid Them you will learn how to: Write better Java programs Recognize common mistakes during programming Create fewer bugs and save time for debugging and testing Get help from static analyzers during programming Configure static analysis tools to reduce the number of false reports Extend static analysis tools with custom plugins Each Java mistake in this handy guide comes with an illustrative code sample, an explanation of why the mistake occurs, and an actionable “ways to avoid this” section to help you dodge the error. Plus, you’ll benefit from useful static analysis sidebars that let you know when mistakes will—and won’t—be spotted by static analysis tools. Foreword by Cay Horstmann. About the technology Minor bugs in development can become major problems in production. It’s much better to spot and fix your mistakes before they get that far! This one-of-a-kind book shines a light on the most common Java slip-ups and shows you exactly how to avoid making them in the first place. About the book 100 Java Mistakes and How To Avoid Them highlights 100 Java coding errors—from beginner missteps to mistakes even Java experts don’t know they’re making. Each case includes clear examples to show you what to look for and concrete troubleshooting advice. You’ll learn to use static analysis tools like IntelliJ IDEA and SonarLint to ensure you’re consistently delivering exceptional Java, discover how unit tests and defensive coding can keep your code clean, and even learn to write your own bug-busting plugins. What's inside Recognize bugs and antipatterns during programming Highly-effective debugging and testing Get help from static analyzers About the reader For Java developers of all skill levels. About the author Tagir Valeev is a technical lead in JetBrains and a Java Champion. He designed and developed many code inspections for IntelliJ IDEA built-in static analyzer. The technical editor on this book was Jean-François Morin. Table of Contents 1 Managing code quality 2 Expressions 3 Program structure 4 Numbers 5 Common exceptions 6 Strings 7 Comparing objects 8 Collections and maps 9 Library methods 10 Unit testing A Static analysis annotations B Extending static analysis tools
show moreBDD in Action, Second Edition
John Ferguson Smart, Jan Molak
Deliver software that does what it’s supposed to do! Behavior-Driven Development guides your software projects to success with collaboration, communication techniques, and concrete requirements you can turn into automated tests. In BDD in Action, Second Edition you’ll learn how to: Implement and improve BDD practices Prioritize features from business goals Facilitate an example mapping session Write automated acceptance tests Scale up your automated acceptance tests Deliver accurate reporting and documentation Around half of all software projects fail to deliver on requirements. Behavior-Driven Development (BDD) helps make sure that yours isn’t one of them. Behavior-Driven Development in Action, Second Edition teaches you how to ensure that everyone involved in a software project—from developers to non-technical stakeholders—are in agreement on goals and objectives. It lays out the communication skills, collaborative practices, and useful automation tools that will let you seamlessly succeed with BDD. Now in its second edition, this revised bestseller has been extensively updated with new techniques for incorporating BDD into large-scale and enterprise development practices such as Agile and DevOps. Foreword by Daniel Terhorst-North. About the Technology Behavior-Driven Development is a collaborative software design technique that organizes examples of an application’s desired behavior into a concrete, testable specification. Because the BDD process gathers input from all areas of an organization, it maximizes the likelihood your software will satisfy both end users and business stakeholders. The established collaboration practices and automation strategies in this book will help you maximize the benefits of BDD for your dev team and your business clients. About the Book In BDD in Action, Second Edition, you’ll learn to seamlessly integrate BDD into your existing development process. This thoroughly revised new edition now shows how to integrate BDD with DevOps and large-scale Agile systems. Practical examples introduce cross-functional team communication skills, leading a successful requirements analysis, and how to set up automated acceptance criteria. What’s Inside How BDD positively affects teamwork, dynamics, and collaboration with stakeholders Help teams discover and analyze requirements, uncover assumptions, and reduce risks Make acceptance, integration, and unit testing more effective Automate reporting and living documentation to improve transparency About the Reader For all development teams. No experience with BDD required. Examples in Java, JavaScript, and TypeScript can be easily expressed in your chosen language. About the Author John Ferguson Smart is the creator of the Serenity BDD framework and founder of the Serenity Dojo training school. Jan Molak is the author of the Serenity/JS testing framework, Jenkins Build Monitor, and other CD and testing tools.
show moreGrokking Functional Programming
Michal Plachta
There’s no need to fear going functional! This friendly, lively, and engaging guide is perfect for any perplexed programmer. It lays out the principles of functional programming in a simple and concise way that will help you grok what FP is really all about. In Grokking Functional Programming you will learn: Designing with functions and types instead of objects Programming with pure functions and immutable values Writing concurrent programs using the functional style Testing functional programs Multiple learning approaches to help you grok each new concept If you’ve ever found yourself rolling your eyes at functional programming, this is the book for you. Open up Grokking Functional Programming and you’ll find functional ideas mapped onto what you already know as an object-oriented programmer. The book focuses on practical aspects from page one. Hands-on examples apply functional principles to everyday programming tasks like concurrency, error handling, and improving readability. Plus, puzzles and exercises let you think and practice what you're learning. You’ll soon reach an amazing “aha” moment and start seeing code in a completely new way. About the technology Finally, there’s an easy way to learn functional programming! This unique book starts with the familiar ideas of OOP and introduces FP step-by-step using relevant examples, engaging exercises, and lots of illustrations. You’ll be amazed at how quickly you’ll start seeing software tasks from this valuable new perspective. About the book Grokking Functional Programming introduces functional programming to imperative developers. You’ll start with small, comfortable coding tasks that expose basic concepts like writing pure functions and working with immutable data. Along the way, you’ll learn how to write code that eliminates common bugs caused by complex distributed state. You’ll also explore the FP approach to IO, concurrency, and data streaming. By the time you finish, you’ll be writing clean functional code that’s easy to understand, test, and maintain. What's inside Designing with functions and types instead of objects Programming with pure functions and immutable values Writing concurrent programs using the functional style Testing functional programs About the reader For developers who know an object-oriented language. Examples in Java and Scala. About the author Michal Plachta is an experienced software developer who regularly speaks and writes about creating maintainable applications. Table of Contents Part 1 The functional toolkit 1 Learning functional programming 2 Pure functions 3 Immutable values 4 Functions as values Part 2 Functional programs 5 Sequential programs 6 Error handling 7 Requirements as types 8 IO as values 9 Streams as values 10 Concurrent programs Part 3 Applied functional programming 11 Designing functional programs 12 Testing functional programs
show moreC# Concurrency
Nir Dobovizki
Supercharge your applications with the ultimate guide to asynchronous and multithreaded programming in C#! C# Concurrency teaches you how to write effective multithreaded and asynchronous software in C#. Practical techniques, real-world examples, and useful code samples cut through the confusion around async/await and help you write rapid, reliable, and bug-free code. In C# Concurrency: Asynchronous and Multithreaded Programming you’ll learn how to: • Take full advantage of async/await • Write bug-free multithreaded code every time • Create multithreaded code that delivers real performance improvements • Grok C# and .NET multithreading and asynchronous primitives • Know when to use concurrency techniques—and when not to use them! In C# Concurrency Nir Dobovizki, a seasoned C# veteran with over 30 years of high-performance programming experience, shares his deep knowledge and expert techniques. Say goodbye to frustrating pitfalls and impossible-to-find bugs that slow down your applications. Nir's careful approach will teach you how to navigate these challenges with ease, allowing you to achieve lightning-fast performance like never before! About the technology Asynchronous and multithreaded programs can perform multiple tasks simultaneously without losing speed or reliability. But getting concurrency right can challenge even experienced developers. This practical book teaches you to deliver concurrent C# apps that are lighting fast and free of the deadlocks and other synchronization issues that undermine performance and take forever to find. About the book C# Concurrency equips programmers with a comprehensive understanding of multithreading and asynchronous programming, focusing on the practical use of the C# async-await feature to simplify asynchronous tasks. It teaches how to avoid common pitfalls, addresses classic multithreading issues like deadlocks and race conditions, and advanced topics such as controlling thread of execution and using thread-safe collections. What's inside • .NET multithreading and asynchronous primitives • When to use concurrency techniques—and when not to! • Confidently use async/await About the reader For experienced C# programmers. No knowledge of asynchro- nous programming required. About the author Nir Dobovizki is a senior software architect and consultant who has worked on concurrent and asynchronous systems since the late 90s. Table of Contents 1 Asynchronous programming and multithreading 2 The compiler rewrites your code 3 The async and await keywords 4 Multithreading basics 5 async/await and multithreading 6 When to use async/await 7 Classic multithreading pitfalls and how to avoid them Part 2 8 Processing a sequence of items in the background 9 Canceling background tasks 10 Await your own events 11 Controlling on which thread your asynchronous code runs 12 Exceptions and async/await 13 Thread-safe collections 14 Generating collections asynchronously/await foreach and IAsyncEnumerable
show moreLooks Good to Me
Engin Bozdag, Stefano Bennati
“Looks Good to Me” teaches the considerate, common sense approach to code reviews pioneered by author Adrienne Braganza. You’ll learn how to create a cohesive team environment, align review goals and expectations clearly, and be prepared for any changes or obstacles you may face. Along the way, you’ll master practices that adapt to how your team does things, with multiple options and solutions, relatable scenarios, and personal tidbits. You’ll soon be running highly effective reviews that make your code—and your team—stronger.
show moreAlgorithms and Data Structures for Massive Datasets
Dzejla Mdjedovic, Emin Tahirović, Ines Dedovic
Massive modern datasets make traditional data structures and algorithms grind to a halt. This fun and practical guide introduces cutting-edge techniques that can reliably handle even the largest distributed datasets. In Algorithms and Data Structures for Massive Datasets you will learn: Probabilistic sketching data structures for practical problems Choosing the right database engine for your application Evaluating and designing efficient on-disk data structures and algorithms Understanding the algorithmic trade-offs involved in massive-scale systems Deriving basic statistics from streaming data Correctly sampling streaming data Computing percentiles with limited space resources Algorithms and Data Structures for Massive Datasets reveals a toolbox of new methods that are perfect for handling modern big data applications. You’ll explore the novel data structures and algorithms that underpin Google, Facebook, and other enterprise applications that work with truly massive amounts of data. These effective techniques can be applied to any discipline, from finance to text analysis. Graphics, illustrations, and hands-on industry examples make complex ideas practical to implement in your projects—and there’s no mathematical proofs to puzzle over. Work through this one-of-a-kind guide, and you’ll find the sweet spot of saving space without sacrificing your data’s accuracy. About the technology Standard algorithms and data structures may become slow—or fail altogether—when applied to large distributed datasets. Choosing algorithms designed for big data saves time, increases accuracy, and reduces processing cost. This unique book distills cutting-edge research papers into practical techniques for sketching, streaming, and organizing massive datasets on-disk and in the cloud. About the book Algorithms and Data Structures for Massive Datasets introduces processing and analytics techniques for large distributed data. Packed with industry stories and entertaining illustrations, this friendly guide makes even complex concepts easy to understand. You’ll explore real-world examples as you learn to map powerful algorithms like Bloom filters, Count-min sketch, HyperLogLog, and LSM-trees to your own use cases. What's inside Probabilistic sketching data structures Choosing the right database engine Designing efficient on-disk data structures and algorithms Algorithmic tradeoffs in massive-scale systems Computing percentiles with limited space resources About the reader Examples in Python, R, and pseudocode. About the author Dzejla Medjedovic earned her PhD in the Applied Algorithms Lab at Stony Brook University, New York. Emin Tahirovic earned his PhD in biostatistics from University of Pennsylvania. Illustrator Ines Dedovic earned her PhD at the Institute for Imaging and Computer Vision at RWTH Aachen University, Germany. Table of Contents 1 Introduction PART 1 HASH-BASED SKETCHES 2 Review of hash tables and modern hashing 3 Approximate membership: Bloom and quotient filters 4 Frequency estimation and count-min sketch 5 Cardinality estimation and HyperLogLog PART 2 REAL-TIME ANALYTICS 6 Streaming data: Bringing everything together 7 Sampling from data streams 8 Approximate quantiles on data streams PART 3 DATA STRUCTURES FOR DATABASES AND EXTERNAL MEMORY ALGORITHMS 9 Introducing the external memory model 10 Data structures for databases: B-trees, Bε-trees, and LSM-trees 11 External memory sorting
show moreDocker in Action, Second Edition
Jeff Nickoloff, Stephen Kuenzli
Summary Docker in Action, Second Edition teaches you the skills and knowledge you need to create, deploy, and manage applications hosted in Docker containers. This bestseller has been fully updated with new examples, best practices, and a number of entirely new chapters. About the technology The idea behind Docker is simple—package just your application and its dependencies into a lightweight, isolated virtual environment called a container. Applications running inside containers are easy to install, manage, and remove. This simple idea is used in everything from creating safe, portable development environments to streamlining deployment and scaling for microservices. In short, Docker is everywhere. About the book Docker in Action, Second Edition teaches you to create, deploy, and manage applications hosted in Docker containers running on Linux. Fully updated, with four new chapters and revised best practices and examples, this second edition begins with a clear explanation of the Docker model. Then, you go hands-on with packaging applications, testing, installing, running programs securely, and deploying them across a cluster of hosts. With examples showing how Docker benefits the whole dev lifecycle, you’ll discover techniques for everything from dev-and-test machines to full-scale cloud deployments. What's inside Running software in containers Packaging software for deployment Securing and distributing containerized applications About the reader Written for developers with experience working with Linux. About the author Jeff Nickoloff and Stephen Kuenzli have designed, built, deployed, and operated highly available, scalable software systems for nearly 20 years.
show moreThink Distributed Systems
Dominik Tornow
Reason confidently about distributed systems. Distributed systems are complex—but they’re also everywhere in modern software. A fuzzy understanding of how distributed systems work is no longer an option. Think Distributed Systems helps you develop clear and dependable mental models of distributed systems, so you can reason about complex problems with confidence. You’ll be able to reason confidently about your systems, and ensure they’re functional, scalable, and always reliable. In Think Distributed Systems you’ll find a beautifully illustrated collection of mental models for: • Correctness, scalability, and reliability • Failure detection, and mitigation • Message processing • Partitioning and replication • Consensus You’ll love how the insightful analogies, practical examples, helpful illustrations, and accurate definitions in Think Distributed Systems illuminate even the most difficult topics. The book breaks down this wide-ranging topic into clear categories like transactions, message processing, and distributed consensus. In every chapter, you’ll find a new “aha!” moment. About the technology Almost all modern software is distributed. To create production-quality applications, you need to think differently about failure, performance, network services, latency, resource usage, and much more. This clearly-written book equips you with the skills and the mindset you need to design, develop, and deploy scalable and reliable distributed systems. About the book In Think Distributed Systems you’ll find a beautifully illustrated collection of mental models for: • Correctness, scalability, and reliability • Failure tolerance, detection, and mitigation • Message processing • Partitioning, replication, consensus, and more! This practical book delivers both the big picture view and ground-level details you need to understand the distributed systems you’ll encounter on the job. Author Dominik Tornow breaks down distributed system design into useful categories like component and network failures, transactions, durable executions, and distributed consensus. You’ll love how the elegant analogies, examples, illustrations, and definitions clarify even the most difficult concepts. About the author Dominik Tornow has studied and practiced software systems engineering over 20 years. He is the founder and CEO of Resonate HQ, Inc. Table of Contents 1 Thinking in distributed systems: Models, mindsets, and mechanics 2 System models, order, and time 3 Failure tolerance 4 Message delivery and processing 5 Transactions 6 Distributed transactions 7 Partitioning 8 Replication 9 Consistency 10 Distributed consensus 11 Durable executions 12 Cloud and services
show more