Fundamentals of Software Architecture: An Engineering Approach


Mark Richards - 2020
    Until now. This practical guide provides the first comprehensive overview of software architecture's many aspects. You'll examine architectural characteristics, architectural patterns, component determination, diagramming and presenting architecture, evolutionary architecture, and many other topics.Authors Neal Ford and Mark Richards help you learn through examples in a variety of popular programming languages, such as Java, C#, JavaScript, and others. You'll focus on architecture principles with examples that apply across all technology stacks.

The Computer and the Brain


John von Neumann - 1958
    This work represents the views of a mathematician on the analogies between computing machines and the living human brain.

Python Cookbook


David Beazley - 2002
    Packed with practical recipes written and tested with Python 3.3, this unique cookbook is for experienced Python programmers who want to focus on modern tools and idioms.Inside, you’ll find complete recipes for more than a dozen topics, covering the core Python language as well as tasks common to a wide variety of application domains. Each recipe contains code samples you can use in your projects right away, along with a discussion about how and why the solution works.Topics include:Data Structures and AlgorithmsStrings and TextNumbers, Dates, and TimesIterators and GeneratorsFiles and I/OData Encoding and ProcessingFunctionsClasses and ObjectsMetaprogrammingModules and PackagesNetwork and Web ProgrammingConcurrencyUtility Scripting and System AdministrationTesting, Debugging, and ExceptionsC Extensions

Ray Tracing in One Weekend (Ray Tracing Minibooks Book 1)


Peter Shirley - 2016
    Each mini-chapter adds one feature to the ray tracer, and by the end the reader can produce the image on the book cover. Details of basic ray tracing code architecture and C++ classes are given.

Cryptography Engineering: Design Principles and Practical Applications


Niels Ferguson - 2010
    Cryptography is vital to keeping information safe, in an era when the formula to do so becomes more and more challenging. Written by a team of world-renowned cryptography experts, this essential guide is the definitive introduction to all major areas of cryptography: message security, key negotiation, and key management. You'll learn how to think like a cryptographer. You'll discover techniques for building cryptography into products from the start and you'll examine the many technical changes in the field.After a basic overview of cryptography and what it means today, this indispensable resource covers such topics as block ciphers, block modes, hash functions, encryption modes, message authentication codes, implementation issues, negotiation protocols, and more. Helpful examples and hands-on exercises enhance your understanding of the multi-faceted field of cryptography.An author team of internationally recognized cryptography experts updates you on vital topics in the field of cryptography Shows you how to build cryptography into products from the start Examines updates and changes to cryptography Includes coverage on key servers, message security, authentication codes, new standards, block ciphers, message authentication codes, and more Cryptography Engineering gets you up to speed in the ever-evolving field of cryptography.

Python Programming: An Introduction to Computer Science


John Zelle - 2003
    It takes a fairly traditional approach, emphasizing problem solving, design, and programming as the core skills of computer science. However, these ideas are illustrated using a non-traditional language, namely Python. Although I use Python as the language, teaching Python is not the main point of this book. Rather, Python is used to illustrate fundamental principles of design and programming that apply in any language or computing environment. In some places, I have purposely avoided certain Python features and idioms that are not generally found in other languages. There are already many good books about Python on the market; this book is intended as an introduction to computing. Features include the following: *Extensive use of computer graphics. *Interesting examples. *Readable prose. *Flexible spiral coverage. *Just-in-time object coverage. *Extensive end-of-chapter problems.

What Technology Wants


Kevin Kelly - 2010
    Arguing that the processes creating the technium are akin to those of biological evolution, Kelly devotes the opening sections of his exposition to that analogy, maintaining that the technium exhibits a similar tendency toward self-organizing complexity. Having defined the technium, Kelly addresses its discontents, as expressed by the Unabomber (although Kelly admits to trepidation in taking seriously the antitechnology screeds of a murderer) and then as lived by the allegedly technophobic Amish. From his observations and discussions with some Amish people, Kelly extracts some precepts of their attitudes toward gadgets, suggesting folk in the secular world can benefit from the Amish approach of treating tools as servants of self and society rather than as out-of-control masters. Exploring ramifications of technology on human welfare and achievement, Kelly arrives at an optimistic outlook that will interest many, coming, as it does, from the former editor of Wired magazine."Gilbert Taylor, Booklist

Machine Learning: A Probabilistic Perspective


Kevin P. Murphy - 2012
    Machine learning provides these, developing methods that can automatically detect patterns in data and then use the uncovered patterns to predict future data. This textbook offers a comprehensive and self-contained introduction to the field of machine learning, based on a unified, probabilistic approach.The coverage combines breadth and depth, offering necessary background material on such topics as probability, optimization, and linear algebra as well as discussion of recent developments in the field, including conditional random fields, L1 regularization, and deep learning. The book is written in an informal, accessible style, complete with pseudo-code for the most important algorithms. All topics are copiously illustrated with color images and worked examples drawn from such application domains as biology, text processing, computer vision, and robotics. Rather than providing a cookbook of different heuristic methods, the book stresses a principled model-based approach, often using the language of graphical models to specify models in a concise and intuitive way. Almost all the models described have been implemented in a MATLAB software package—PMTK (probabilistic modeling toolkit)—that is freely available online. The book is suitable for upper-level undergraduates with an introductory-level college math background and beginning graduate students.

Tools and Weapons: The Promise and the Peril of the Digital Age


Brad Smith - 2019
    This might seem uncontroversial, but it flies in the face of a tech sector long obsessed with rapid growth and sometimes on disruption as an end in itself. Now, though, we have reached an inflection point: Silicon Valley has moved fast and it has broken things. A new understanding has emerged that companies that create technology must accept greater responsibility for the future. And governments will need to regulate technology by moving faster and catching up with the pace of innovation that is impacting our communities and changing the world.In Tools and Weapons, Brad Smith takes us into the cockpit of one of the world's largest and most powerful tech companies as it finds itself in the middle of some of the thorniest emerging issues of our time. These are challenges that come with no preexisting playbook, including privacy, cybercrime and cyberwar, social media, the moral conundrums of AI, big tech's relationship to inequality and the challenges for democracy, far and near. While in no way a self-glorifying "Microsoft memoir," the book opens up the curtain remarkably wide onto some of the company's most crucial recent decision points, as it strives to protect the hopes technology offers against the very real threats it also presents. Every tool can be a weapon in the wrong person's hands, and companies are being challenged in entirely new ways to embrace the totality of their responsibilities. We have moved from a world in which Silicon Valley could take no prisoners to one in which tech companies and governments must work together to address the challenges and adapt to the changes technology has unleashed. There are huge ramifications to be thought through, and Brad Smith provides a marvelous and urgently necessary contribution to that effort.

Programming in Haskell


Graham Hutton - 2006
    This introduction is ideal for beginners: it requires no previous programming experience and all concepts are explained from first principles via carefully chosen examples. Each chapter includes exercises that range from the straightforward to extended projects, plus suggestions for further reading on more advanced topics. The author is a leading Haskell researcher and instructor, well-known for his teaching skills. The presentation is clear and simple, and benefits from having been refined and class-tested over several years. The result is a text that can be used with courses, or for self-learning. Features include freely accessible Powerpoint slides for each chapter, solutions to exercises and examination questions (with solutions) available to instructors, and a downloadable code that's fully compliant with the latest Haskell release.

Programming in Scala


Martin Odersky - 2008
     Coauthored by the designer of the Scala language, this authoritative book will teach you, one step at a time, the Scala language and the ideas behind it. The book is carefully crafted to help you learn. The first few chapters will give you enough of the basics that you can already start using Scala for simple tasks. The entire book is organized so that each new concept builds on concepts that came before - a series of steps that promises to help you master the Scala language and the important ideas about programming that Scala embodies. A comprehensive tutorial and reference for Scala, this book covers the entire language and important libraries.

The Dream Machine: J.C.R. Licklider and the Revolution That Made Computing Personal


M. Mitchell Waldrop - 2001
    C. R. Licklider, whose visionary dream of a human-computer symbiosis transformed the course of modern science and led to the development of the personal computer. Reprint.

How to Teach Quantum Physics to Your Dog


Chad Orzel - 2009
    Could she use quantum tunnelling to get through the neighbour's fence and chase bunnies? What about quantum teleportation to catch squirrels before they climb out of reach? In this witty and informative book, Orzel and Emmy - the talking dog - discuss the key theories of Quantum Physics and its fascinating history. From quarks and gluons to Heisenberg's uncertainty principle, this is the perfect introduction to the fundamental laws which govern the universe.

How Would You Move Mount Fuji? Microsoft's Cult of the Puzzle--How the World's Smartest Companies Select the Most Creative Thinkers


William Poundstone - 2003
    For the first time, William Poundstone reveals the toughest questions used at Microsoft and other Fortune 500 companies -- and supplies the answers. He traces the rise and controversial fall of employer-mandated IQ tests, the peculiar obsessions of Bill Gates (who plays jigsaw puzzles as a competitive sport), the sadistic mind games of Wall Street (which reportedly led one job seeker to smash a forty-third-story window), and the bizarre excesses of today's hiring managers (who may start off your interview with a box of Legos or a game of virtual Russian roulette). How Would You Move Mount Fuji? is an indispensable book for anyone in business. Managers seeking the most talented employees will learn to incorporate puzzle interviews in their search for the top candidates. Job seekers will discover how to tackle even the most brain-busting questions, and gain the advantage that could win the job of a lifetime. And anyone who has ever dreamed of going up against the best minds in business may discover that these puzzles are simply a lot of fun. Why are beer cans tapered on the end, anyway?

Elements of Programming


Alexander Stepanov - 2009
    And then we wonder why software is notorious for being delivered late and full of bugs, while other engineers routinely deliver finished bridges, automobiles, electrical appliances, etc., on time and with only minor defects. This book sets out to redress this imbalance. Members of my advanced development team at Adobe who took the course based on the same material all benefited greatly from the time invested. It may appear as a highly technical text intended only for computer scientists, but it should be required reading for all practicing software engineers." --Martin Newell, Adobe Fellow"The book contains some of the most beautiful code I have ever seen." --Bjarne Stroustrup, Designer of C++"I am happy to see the content of Alex's course, the development and teaching of which I strongly supported as the CTO of Silicon Graphics, now available to all programmers in this elegant little book." --Forest Baskett, General Partner, New Enterprise Associates"Paul's patience and architectural experience helped to organize Alex's mathematical approach into a tightly-structured edifice--an impressive feat!" --Robert W. Taylor, Founder of Xerox PARC CSL and DEC Systems Research Center Elements of Programming provides a different understanding of programming than is presented elsewhere. Its major premise is that practical programming, like other areas of science and engineering, must be based on a solid mathematical foundation. The book shows that algorithms implemented in a real programming language, such as C++, can operate in the most general mathematical setting. For example, the fast exponentiation algorithm is defined to work with any associative operation. Using abstract algorithms leads to efficient, reliable, secure, and economical software.This is not an easy book. Nor is it a compilation of tips and tricks for incremental improvements in your programming skills. The book's value is more fundamental and, ultimately, more critical for insight into programming. To benefit fully, you will need to work through it from beginning to end, reading the code, proving the lemmas, and doing the exercises. When finished, you will see how the application of the deductive method to your programs assures that your system's software components will work together and behave as they must.The book presents a number of algorithms and requirements for types on which they are defined. The code for these descriptions--also available on the Web--is written in a small subset of C++ meant to be accessible to any experienced programmer. This subset is defined in a special language appendix coauthored by Sean Parent and Bjarne Stroustrup.Whether you are a software developer, or any other professional for whom programming is an important activity, or a committed student, you will come to understand what the book's experienced authors have been teaching and demonstrating for years--that mathematics is good for programming, and that theory is good for practice.