Refactoring: Improving the Design of Existing Code


Martin Fowler - 1999
    Significant numbers of poorly designed programs have been created by less-experienced developers, resulting in applications that are inefficient and hard to maintain and extend. Increasingly, software system professionals are discovering just how difficult it is to work with these inherited, non-optimal applications. For several years, expert-level object programmers have employed a growing collection of techniques to improve the structural integrity and performance of such existing software programs. Referred to as refactoring, these practices have remained in the domain of experts because no attempt has been made to transcribe the lore into a form that all developers could use... until now. In Refactoring: Improving the Design of Existing Software, renowned object technology mentor Martin Fowler breaks new ground, demystifying these master practices and demonstrating how software practitioners can realize the significant benefits of this new process.

The Water Will Come: Rising Seas, Sinking Cities, and the Remaking of the Civilized World


Jeff Goodell - 2017
    With each crack in the great ice sheets of the Arctic and Antarctica, and each tick upwards of Earth's thermometer, we are moving closer to the brink of broad disaster.By century's end, hundreds of millions of people will be retreating from the world's shores as our coasts become inundated and our landscapes transformed. From island nations to the world's major cities, coastal regions will disappear. Engineering projects to hold back the water are bold and may buy some time. Yet despite international efforts and tireless research, there is no permanent solution--no barriers to erect or walls to build--that will protect us in the end from the drowning of the world as we know it.The Water Will Come is the definitive account of the coming water, why and how this will happen, and what it will all mean. As he travels across twelve countries and reports from the front lines, acclaimed journalist Jeff Goodell employs fact, science, and first-person, on-the-ground journalism to show vivid scenes from what already is becoming a water world.

The Well-Educated Mind: A Guide to the Classical Education You Never Had


Susan Wise Bauer - 2003
    In her previous book, The Well-Trained Mind, the author provided a road map of classical education for parents wishing to home-school their children, and that book is now the premier resource for home-schoolers. In this new book, Bauer takes the same elements and techniques and adapts them to the use of adult readers who want both enjoyment and self-improvement from the time they spend reading.The Well-Educated Mind offers brief, entertaining histories of five literary genres—fiction, autobiography, history, drama, and poetry—accompanied by detailed instructions on how to read each type. The annotated lists at the end of each chapter—ranging from Cervantes to A. S. Byatt, Herodotus to Laurel Thatcher Ulrich—preview recommended reading and encourage readers to make vital connections between ancient traditions and contemporary writing.The Well-Educated Mind reassures those readers who worry that they read too slowly or with below-average comprehension. If you can understand a daily newspaper, there's no reason you can't read and enjoy Shakespeare's Sonnets or Jane Eyre. But no one should attempt to read the "Great Books" without a guide and a plan. Susan Wise Bauer will show you how to allocate time to your reading on a regular basis; how to master a difficult argument; how to make personal and literary judgments about what you read; how to appreciate the resonant links among texts within a genre—what does Anna Karenina owe to Madame Bovary?—and also between genres. Followed carefully, the advice in The Well-Educated Mind will restore and expand the pleasure of the written word.

Fighting Traffic: The Dawn of the Motor Age in the American City


Peter D. Norton - 2008
    By 1930, most streets were primarily a motor thoroughfares where children did not belong and where pedestrians were condemned as "jaywalkers." In Fighting Traffic, Peter Norton argues that to accommodate automobiles, the American city required not only a physical change but also a social one: before the city could be reconstructed for the sake of motorists, its streets had to be socially reconstructed as places where motorists belonged. It was not an evolution, he writes, but a bloody and sometimes violent revolution. Norton describes how street users struggled to define and redefine what streets were for. He examines developments in the crucial transitional years from the 1910s to the 1930s, uncovering a broad anti-automobile campaign that reviled motorists as "road hogs" or "speed demons" and cars as "juggernauts" or "death cars." He considers the perspectives of all users--pedestrians, police (who had to become "traffic cops"), street railways, downtown businesses, traffic engineers (who often saw cars as the problem, not the solution), and automobile promoters. He finds that pedestrians and parents campaigned in moral terms, fighting for "justice." Cities and downtown businesses tried to regulate traffic in the name of "efficiency." Automotive interest groups, meanwhile, legitimized their claim to the streets by invoking "freedom"--a rhetorical stance of particular power in the United States. Fighting Traffic offers a new look at both the origins of the automotive city in America and how social groups shape technological change.Peter D. Norton is Assistant Professor in the Department of Science, Technology, and Society at the University of Virginia.

Joel on Software


Joel Spolsky - 2004
    For years, Joel Spolsky has done exactly this at www.joelonsoftware.com. Now, for the first time, you can own a collection of the most important essays from his site in one book, with exclusive commentary and new insights from joel.

Domain-Driven Design: Tackling Complexity in the Heart of Software


Eric Evans - 2003
    "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.

Four Walls and a Roof: The Complex Nature of a Simple Profession


Reinier de Graaf - 2017
    Four Walls and a Roof challenges this notion, presenting a candid account of what it is really like to work as an architect.Drawing on his own tragicomic experiences in the field, Reinier de Graaf reveals the world of contemporary architecture in vivid snapshots: from suburban New York to the rubble of northern Iraq, from the corridors of wealth in London, Moscow, and Dubai to garbage-strewn wastelands that represent the demolished hopes of postwar social housing. We meet oligarchs determined to translate ambitions into concrete and steel, developers for whom architecture is mere investment, and the layers of politicians, bureaucrats, consultants, and mysterious hangers-on who lie between any architectural idea and the chance of its execution.Four Walls and a Roof tells the story of a profession buffeted by external forces that determine--at least as much as individual inspiration--what architects design. Perhaps the most important myth debunked is success itself. To achieve anything, architects must serve the powers they strive to critique, finding themselves in a perpetual conflict of interest. Together, architects, developers, politicians, and consultants form an improvised world of contest and compromise that none alone can control.

101 Things I Learned in Engineering School


John Kuprenas - 2013
    Far from a dry, nuts-and-bolts exposition, however, 101 THINGS I LEARNED® IN ENGINEERING SCHOOL probes real-world examples to show how the engineer's way of thinking can-and sometimes cannot-inform our understanding of how things work. Questions from the simple to the profound are illuminated throughout: Why shouldn't soldiers march across a bridge? Why do buildings want to float and cars want to fly? What is the difference between thinking systemically and thinking systematically? How can engineering solutions sympathize with the natural environment? Presented in the familiar, illustrated format of the popular 101 THINGS I LEARNED® series, 101 THINGS I LEARNED® IN ENGINEERING SCHOOL offers an informative resource for students, general readers, and even experienced engineers, who will discover within many provocative new insights into familiar principles.

Wabi-Sabi: For Artists, Designers, Poets & Philosophers


Leonard Koren - 1994
    Describes the principles of wabi-sabi, a Japanese aesthetic associated with Japanese tea ceremonies and based on the belief that true beauty comes from imperfection and incompletion, through text and photographs.

Hackers & Painters: Big Ideas from the Computer Age


Paul Graham - 2004
    Who are these people, what motivates them, and why should you care?Consider these facts: Everything around us is turning into computers. Your typewriter is gone, replaced by a computer. Your phone has turned into a computer. So has your camera. Soon your TV will. Your car was not only designed on computers, but has more processing power in it than a room-sized mainframe did in 1970. Letters, encyclopedias, newspapers, and even your local store are being replaced by the Internet.Hackers & Painters: Big Ideas from the Computer Age, by Paul Graham, explains this world and the motivations of the people who occupy it. In clear, thoughtful prose that draws on illuminating historical examples, Graham takes readers on an unflinching exploration into what he calls “an intellectual Wild West.”The ideas discussed in this book will have a powerful and lasting impact on how we think, how we work, how we develop technology, and how we live. Topics include the importance of beauty in software design, how to make wealth, heresy and free speech, the programming language renaissance, the open-source movement, digital design, internet startups, and more.

Genius Loci: Towards a Phenomenology of Architecture


Christian Norberg-Schulz - 1979
    It also relates to…Meaning in Western Architecture. Common to all of them is the view that architecture represents a means to give man an “existential foothold”…The philosophy of Heidegger has been the catalyst which has made the present book possible and determined its approach. The wish for understanding architecture as a concrete phenomenon…could be satisfied in the present book…thanks to Heidegger’s essays on language and aesthetics.Man dwells when he can orient himself within and identify himself with an environment, or, in short, when he experiences the environment as meaningful. Dwelling therefore implies something more than “shelter”. It implies that the spaces where life occurs are places, in the true sense of the word. A place is a space which has a distinct character. Since ancient times the genius loci, or “spirit of place”, has been recognized as the concrete reality man has to face and come to terms with in his daily life. Architecture means to visualize the genius loci, and the task of the architect is to create meaningful places, whereby he helps man to dwell.

Working Effectively with Legacy Code


Michael C. Feathers - 2004
    This book draws on material Michael created for his renowned Object Mentor seminars, techniques Michael has used in mentoring to help hundreds of developers, technical managers, and testers bring their legacy systems under control. The topics covered include: Understanding the mechanics of software change, adding features, fixing bugs, improving design, optimizing performance Getting legacy code into a test harness Writing tests that protect you against introducing new problems Techniques that can be used with any language or platform, with examples in Java, C++, C, and C# Accurately identifying where code changes need to be made Coping with legacy systems that aren't object-oriented Handling applications that don't seem to have any structureThis book also includes a catalog of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes.

Smart Power: Climate Change, the Smart Grid, and the Future of Electric Utilities


Peter Fox-Penner - 2010
    This and other developments will prompt utilities to undergo the largest changes in their history. Smart Power examines the many facets of this unprecedented transformation. This enlightening book begins with a look back on the deregulatory efforts of the 1990s and their gradual replacement by concerns over climate change, promoting new technologies, and developing stable prices and supplies. In thorough but non-technical terms it explains the revolutionary changes that the Smart Grid is bringing to utility operations. It also examines the options for low-carbon emissions along with the real-world challenges the industry and its regulators must face as the industry retools and finances its new sources and systems. Throughout the book, Peter Fox-Penner provides insights into the policy choices and regulatory reform needed to face these challenges. He not only weighs the costs and benefits of every option, but presents interviews with informed experts, including economists, utility CEOs, and engineers. He gives a brief history of the development of the current utility business model and examines possible new business models that are focused on energy efficiency.Smart Power explains every aspect of the coming energy revolution for utilities in lively prose that will captivate even the most techno-phobic readers.

Free Culture: The Nature and Future of Creativity


Lawrence Lessig - 2004
    Never before have the cultural powers- that-be been able to exert such control over what we can and can't do with the culture around us. Our society defends free markets and free speech; why then does it permit such top-down control? To lose our long tradition of free culture, Lawrence Lessig shows us, is to lose our freedom to create, our freedom to build, and, ultimately, our freedom to imagine.

The Road to Reality: A Complete Guide to the Laws of the Universe


Roger Penrose - 2004
    From the very first attempts by the Greeks to grapple with the complexities of our known world to the latest application of infinity in physics, The Road to Reality carefully explores the movement of the smallest atomic particles and reaches into the vastness of intergalactic space. Here, Penrose examines the mathematical foundations of the physical universe, exposing the underlying beauty of physics and giving us one the most important works in modern science writing.