- Rework by Fried Jason, and Hansson Heinemeier David.
Rework by Jason Fried and David Heinemeier Hansson has been in Amazon's top ten list for a couple months and for good reason, it's captivating, easy to read, engaging, and fun. However, I was disappointed with the lack of references. If the authors had referenced sources that back up their refreshing new take on old opinions (texts like the The Mythical Man-Month, Peopleware, Code Complete, Don't Make Me Think, etc...) then Rework would have a bigger impact on its readers. Unfortunately, without solid external references this book is too easily passed of as highly opinionated and subjective.
- Designing with Web Standards (2nd Edition) by Zeldman Jeffrey.
- Pragmatic Thinking and Learning: Refactor Your Wetware (Pragmatic Programmers) by Hunt Andy.
Andy Hunt's Pragmatic Thinking and Learning is fun and interesting, but the topics within often leaned on the obvious. The central theme throughout Pragmatic Thinking and Learning revolves around harnessing brain modes (linear mode and rich mode), self improvement, and the Dreyfus Model - a model, where our skills are ranked by five stages (Novice, Advanced Beginner, Competent, Proficient, and Expert). Throughout the text Andy works through the stages of the Dreyfus Model within the context of the software realm. He offers advice on how we can progress as developers, and discusses learning techniques that have worked for him. Andy offers many interesting tips, stories, and draws in external research. For example: Did you know, that research suggests that: "if you constantly interrupt your task to check email or respond to an IM text message, your effective IQ drops by ten points" or "the leading predictor of a tendency for road rage was the amount of personalization on a vehicle"?
However, I felt that many of the concepts discussed have become common knowledge (part of popular developer culture) and were somewhat obvious. To borrow from the Dreyfus Model; this book is probably best suited for Novices or Advanced Beginner. It's also fair to mention that I thought Andy's other book The Pragmatic Programmer: From Journeyman to Master suffered this same problem, but also keep in mind that "the obvious ... is never seen until someone expresses it simply" (Kahlil Gibran). In the end, I do recommend this book. It's a fun read, excellent for those who are new to the software industry. It would make a great addition to College / University programs.
- Domain-Driven Design: Tackling Complexity in the Heart of Software by Evans Eric.
Through this book Evan's shares his extensive development and consulting experience as he outlines his approach to Domain Driven Design (DDD) - DDD being the development approach that Evan's has had the most success with. Evan's writing style is easy to read as he maintains a comfortable conversational tone while pragmatically guiding us through the many patterns and concepts that encompass Domain Driven Design. However; be warned the concepts that lie within are occasionally dense, abstract, but ultimately enlightening as Evan's forces us to look at development from a new perspective.
It's fair to mention that this book has been charged as being just another patterns book, and while I sympathize with those reviewers - some concepts do come across as being overly abstract without clear implementations (code) to reference. I found this book to be an insightful window into the mind of an experienced developer, and not just another patterns book. If you do find yourself grasping for more concrete implementations then you'll want to read Jimmy Nilsson's Applying Domain-Driven Design and Patterns: With Examples in C# and .NET book too - Nilsson's book provides many code examples while directly referencing Evan's text.
As a developer or an emerging architect you won't want to overlook this book. From my experience the concepts and patterns surrounding Domain Driven Design frequently crop up in Service Orientation, MVC/MVP Web Applications, Object Orientation, Test Driven Development, Model Driven Development, and other modern best practices. I highly recommend this book, it's a great reference to have alongside Steve McConnell's Code Complete, Robert Glass's Facts and Fallacies of Software Engineering, and the Martin Fowler blessed books too.
- Applying Domain-Driven Design and Patterns: With Examples in C# and .NET by Nilsson Jimmy.
Another excellent, approachable, useful book on the topic of Domain Driven Design. This book also discussed some exciting side topics that are difficult to find within the context of .NET. Topics such as: Aspect Oriented Programming (AOP), Dependency Injection, Inversion of Control (IOC), Mocking, and TDD. I found Nilsson's book crucial for filling in many of the implementation gaps that Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans skims over. I recommend reading this book alongside Evans seminal work on the topic of Domain Driven Design.
- The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography by Singh Simon.
In the Code Book, Simon Singh takes us on a fascinating journey through cryptography from ancient Egypt to to the modern. He touches on many historical figures and their contributions to modern day cryptography. Personalities such as: Charles Babbage (the grandfather of computing), Alan Turing (creator of the Turing Machine, the father of modern computer science), Ronald Rivest, Adi Shamir, and Leon Adleman (the men behind RSA encryption), and Phil Zimmermann.
This book was enlightening as it put the cryptography mechanisms we employ today into a historical context while describing their complex inner workings and presenting the rich history that lies behind all innovation. Like other reviewers, I was also disappointed that the book came to a close so soon. I'm looking forward to reading Singh's other books.
- The Age of Heretics: A History of the Radical Thinkers Who Reinvented Corporate Management (J-B Warren Bennis Series) by Kleiner Art.
The Age of Heretics, by Art Kleiner challenges the very fibers that compose modern management and its favour for bureaucracy. We have much to learn from the history, and this book uncovers some inspirational tales and lessons from past successes and failures in management. Read this book and it will change your perspective forever, this has been the most inspirational book I've read this year.
- It's Not How Good You Are, Its How Good You Want to Be: The World's Best Selling Book by Arden Paul.
Arden's books are small enough to stuff in a pocket and packed full of inspirational and insightful ideas / quotes / and images. These books are truly creative and well worth their cost.
- Whatever You Think, Think the Opposite by Arden Paul.
Every creative should own a couple Ardens. They're fun, inspirational, and interesting. Great for bus rides or breaking a mental block.
- Microserfs by Coupland Douglas.
In Microserfs, Douglas Coupland presents an eerily accurate snapshot of modern software development culture. A culture where quirkiness, nerf gun attacks, release parties, access to unlimited amounts of sugar laden beverages, all nighters, hard work, and spontaneous fun are all the norm.
This is a great book for those seeking an entertaining read, or those who are interested in what the life of a developer entails. As a software developer myself, this book is a great reminder that developing software is really about the people, team work, fun, and not usually the technology.
- The World Is Flat 3.0: A Brief History of the Twenty-first Century by Friedman L. Thomas.
Friedman's prose weaves his vast depth of experiences, his social / environmental concerns, and philosophy together seamlessly. Globalization effects everyone and everything in our present world, you owe it to yourself to read this fantastic book.
- C# in Depth: What you need to master C# 2 and 3 by Skeet Jon.
Jon Skeet has been likened to Chuck Norris within the software realm, and rumour has it that "When Jon Skeet's code fails to compile the compiler apologizes." Whether the compiler apologizes or not is debatable, but I do know that his writing is clear and concise, and there's a strong sense of quality, care, and integrity to this book.
In C# in Depth, Jon Skeet presents a comprehensive commentary through the evolution of the C# language. Jon's depth of knowledge and his knack for thoroughly explaining even the most obscure topics, leaves the reader with an enriched understanding of C# and programming languages in general. Jon leaves no rock unturned as he takes us through some of the historical and political decisions that have formed C#. I highly recommend this book - even if you already are .NET / C# ninja.
- Software Creativity 2.0 by Glass L Robert.
I picked up this book based on Steve McConnell's recommendation in Code Complete. Things were slow through the first chapter, but it only got better the further I read. This is another fantastic book by Robert Glass.
Steve McConnell's original review here on Amazon does an excellent job at summing this book up.
- ASP.Net Ajax in Action by Gallo Alessandro, Barkol David, and Vavilala Rama.
Update: It's been announced that jQuery will ship with ASP.NET AJAX and Visual Studio rendering this review and book out of date.
I highly recommend this book, and am looking forward to Flanagan's newest book The Ruby Programming Language.
- Peopleware: Productive Projects and Teams (Second Edition) by DeMarco Tom, and Lister Timothy.
Peopleware: Productivity Projects and Teams [Tom DeMarco, Timothy Lister] was first published in 1987 - three decades later it is a revered classic. DeMarco and Lister focus on the human factor of software development (managing people). Through their 30 years of project management experience and consulting they share what went right, and more importantly, what went wrong - so we can learn from their mistakes.
This series of essays cover a wide variety of topics ranging from: office environments that encourage work, the importance of the closed door (read: "cubicles are BAD"), the significance of "flow" and creativity, the dangers and hidden cost of turnover, the importance of hiring and keeping the right people, how to retain employees, how to encourage productivity, the importance of a "jelled team", the dangers of teamicide, how not to manage people, and many other equally interesting topics.
Some quotes I found interesting:
"No one can really work much more than forty hours, at least not continually and with the level of intensity required for creative work." (Chapter 3)
"the process of improving productivity risks worsening turnover" (Chapter 3)
"People under time pressure don't work better; they just work faster." (Chapter 3)
"People who had ten years of experience did not outperform those with two years of experience." (Chapter 3)
"people who perform better tend to gravitate towards organizations that provide a better workplace." (Chapter 8)
"the total cost of replacing each person is the equivalent of four-and-a-half to five months of employee cost or about twenty percent of the cost of keeping that employee for two years on the job." (Chapter 16)
This book continues to change the way I view my job, organization, and career. Practitioners and authors like: Steve McConnell, Robert L. Glass, and Joel Spolsky heavily cite the industry-shattering truths originally exposed by Marco and Lister. This book should be on every professional's shelf along side other classics like: The Mythical Man-Month, and Code Complete.
- The Best Software Writing I: Selected and Introduced by Joel Spolsky (v. 1) by Spolsky Joel.
The Best Software Writing I [Joel Spolsky], is a nicely rounded selection of essays, blog posts, and other intriguing software related tidbits weaved together by Joel Spolsky's witty dialog. This book is easy to read, light, humorous, and thought provoking. In an every changing software industry, books like this give us a broader picture of what's happening in the industry. It's a great book to read during your daily commute, pass around the office, leave in the bathroom, or give to a friend when your finished.
I highly recommend this and other books by Spolsky, check out his blog too.
- Software Project Survival Guide (Pro -- Best Practices) by McConnell Steve.
The Software Project Survival Guide by Steve McConnell remains applicable today as when first published in 1995. McConnell has a clear knack for combining research, experience, and theory. His writing style is clear, concise, and easy to understand.
McConnell approaches the topic of project management (design through to delivery) from a high abstract level; he outlines the best practices, provides comprehensive checklists, but leaves the fine details to other authors. McConnell States, "Whereas this book provides a big picture technical framework for a project, [Fergus] O'Connell's book focuses on the many specific activities a project manager must perform." (Part IV)
McConnell's writing style maintains a high sense of integrity and he always encourages personal research and development through his extensive use of external references.
"Software development is inherently an exercise in climbing steep learning curves - an exercise in problem solving - and the learning curves don't disappear" (Chapter 17)
"No individual is a success who hurts the team, and no individual is a failure who helps it." (Chapter 18)
This is an excellent book, a great reference; although a little too heavy to be comparable to the "first aid kit you carry in your backpack" (Chapter 20).
The "Cone of Uncertainty" (chapter 3) and the "Survival Needs" section (chapter 1) were quite interesting. In the "Survival Needs" section McConnell draws many parallels with the basic human needs and the basic needs for a successful project. Similarly intriguing is his Project Team's Bill of Rights (chapter 1).
Be sure to visit the book's website it provides the chapter checklists in digital form and many other useful resources.
There is no one-size-fits-all or simple solution - this book is not an exception. Continue reading other project management books and some of McConnell's more recent texts like Software Estimation Demystifying the Black Art.
- Design: An Illustrated Historical Overview (Crash Course Series) by Hauffe Thomas.
Design (Crash Course Series) [Thomas Hauffe] is a condensed history of design from the 18th through 20th century. Hauffe's writing style is interesting, informative and well thought-out. The book itself is visually stunning (a design feat in itself) with high quality images and an intuitive layout. Through the text, Hauffe explores the external influences - the developments and effects of technological advancements throughout time and the implications on design.
As a software engineer and an admirer of design / architecture, I find this small pocket book an excellent source of inspiration and an intriguing read. The factors influencing design also impact the realm of software design (a subset of design in general).
Technical, economic, aesthetic, and social developments along with political, psychological, cultural, ecological, and global influences will continue to impact software design (and all types of design). Throughout the text we can see that design is an integral part of history, and that innovation has been happening for centuries (designers have been constantly improving existing ideas). We can also observe that design is iterative (cyclic) and often occurs in patterns (similar to design patterns in the software realm).
This is an excellent book, a great source of inspiration. Many parallels can be drawn throughout this text and applied to any specific type of design.
We can learn more from history than we may think. Read!
- The Art of Looking Sideways by Fletcher Alan.
The Art of Looking Sideways [Alan Fletcher] is inspirational, intelligent, invigorating, and stimulating. This book is a collage of witty text, images, metaphors, idioms, paradoxes, and humor.
I believe W. Todd Dominey (a preceding reviewer) said it best:
"The Art of Looking Sideways is an instruction manual of sorts for adults to deconstruct their preconceived belief systems of reality. Readers are encouraged to look, see, explore, turn upside down, rip apart, and to ultimately rebuild that which everyday people believe to be true through a series of word plays, found quotations, paradoxes, and unusual truths. There are no answers. Just questions, and differences of perception."
I use this book as a source of inspiration to regain mental clarity, a right hemisphere brain stimulant if you will.
Five minutes of looking sideways is often the remedy for my worst mind block, leaving me reinvigorated with a fresh perspective. :)
A philosophic question to ponder as you flip through this book: "Which way is up?"
This is an excellent book.
- The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition) by Brooks P. Frederick.
The Mythical Man-Month (M M-M) [Frederick P. Brooks] is often referred to as the most influential Software Engineering books ever. Despite being originally published in 1975 the content remains timeless, equally valuable today.
The central theses of these essays revolve around conceptual integrity - maintaining the product focus in large systems (IBM's OS/360). Brooks touches on many other topics such as the need for a software process, how to manage a team, and the importance of distinguishing between the architecture, design, and development processes. Brooks approaches most subjects from an abstract (managerial) perspective requiring personal interpretation (reading between the lines).
"If a system is to have conceptual integrity, someone must control the concepts." (Chapter 4)
Throughout the book Brooks continually emphasizes the need for remaining analytical (objective), and his famed "No Silver Bullet" essay can be found in Chapter 16.
"Not only are there no silver bullets now in view, the very nature of software makes it unlikely that there will be any-no inventions that will do for software productivity, reliability, and simplicity what electronics, transistors, and large-scale integration did for computer hardware." (Chapter 16)
The Mythical Man-Month is enjoyable, a wealth of information, and easy to read. Some readers may be discouraged, as this book requires personal interpretation, but in doing so the M M-M facilitates inspiration, introspection and debate. Anyone associated with the software industry (introduction level programmer through to management) can appreciate what Brooks has to say.
If you're looking for a comprehensive checklist or an immediately implemental solution then read what other authors like Steve McConnell (Code Complete: A Practical Handbook of Software Construction) and Robert L. Glass (Facts and Fallacies of Software Engineering) have to say.
"The tar pit of software engineering will continue to be sticky for a long time to come." (Chapter 18)
- Facts and Fallacies of Software Engineering by Glass L. Robert.
Robert L. Glass presents a collection of facts and fallacies that are frequently forgotten, and fundamental to building software. Glass best states the purpose for writing this book; while reading the book you may find yourself thinking: "'oh, yeah, I remember that one' and then muse about why you forgot it over the years." (Introduction).
For each fact or fallacy, Glass provides a discussion, the controversies involved, and additional references. The discussions bring together Glass's extensive computing experience (50 years), his research and numerous references (from both academics and practitioners). Glass consistently emphasizes the importance and need for remaining objective.
Glass's writing style is professional, and terse, but the experience and content embodied within this text is invaluable. This is an excellent book, a stimulating read, a source of inspiration.
"Fact 16: Reuse-in-the-large (components) remains a mostly unsolved problem, even though everyone agrees it is important and desirable" (Chapter 1)
"Fallacy 3: Programming can and should be egoless." (Chapter 5)
"Fallacy 8: Given enough eyeballs, all bugs are shallow. (Linus's Law)" (Chapter 5)
This book is for ANYONE interested in building software (practitioners, managers, team leaders, students, faculty, researchers, etc...).
- Code Complete: A Practical Handbook of Software Construction by McConnell Steve.
Code Complete by Steve McConnell is the convergence (the crossroads) of experience, research, and theory. This book is invaluable, the Holy Grail of programming reference books. McConnell's writing style is clear, concise, easy to understand and often humorous.
Programmers on every level (from introduction to master) will benefit from reading this book. Programmers at the introduction level may find some topics advanced, but references to additional resources are close at hand. This book covers a broad range of interconnected topics ranging from: variable names, code-tuning, personal character, managing your manager, gonzo programming and much more. The emphasis is always on successful software design techniques.
McConnell doesn't shy away from presenting hard data and details; he nails the "whys" that so many other texts avoid.
Selected quotes from Code Complete:
"People have already made all the mistakes that you're making now, and unless you're a glutton for punishment, you'll prefer reading their books and avoiding their mistakes to inventing new versions of old problems." (Chapter 35)
"Once a programmer realizes that programming principles transcend the syntax of any specific language, the doors swing open to knowledge that truly makes a difference in quality and productivity." (Preface)
"The value of hands-on experience as compared to book learning is smaller in software development than in many other fields" (Chapter 35)
It's interesting to note that Code Complete is a required read to become a practitioner (intermediate) level employee in McConnell's company (Construx).
Code Complete is often compared with The Pragmatic Programmer: From Journeyman to Master [Hunt, Andrew, and Thomas, David]; the topics covered in the Pragmatic Programmer are a small subset of Code Complete. Code Complete is consistently written at a higher level, and offers more references for continual research and professional development. But don't take my word for it; read both, the Pragmatic Programmer makes a good prerequisite to Code Complete.
Hailing this book as "The Holy Grail of programming references" may seem fanatical, but I have yet to find a book that remotely measures up to Code Complete.
- The Pragmatic Programmer: From Journeyman to Master by Hunt Andrew, and Thomas David.
The Pragmatic Programmer: From Journeyman to Master, should be read by anyone involved with the software industry. The tone of this book is casual and often humorous making it fun, enjoyable and easy to read.
As the title implies, this book is targeted towards the programmer or developer (the construction phase of software engineering). The text outlines principals and practices that are common sense, but that every practitioner SHOULD be aware of. However, in reality most of these principals and practices are overlooked. The book borders on the obvious, but keep in mind that "the obvious ... is never seen until someone expresses it simply." (Kahlil Gibran) The authors express good programming principals, outline the collection of tools every practitioner should have, and offer priceless advice in a simple manner.
I found the authors offering a lot of "Hows" and "Whats" with out answering the "Whys". Code Complete [Steve McConnell] answers most (if not all) of these questions and in doing so, is three times the size. The Pragmatic Programmer is also somewhat short-lived - a new edition should be in the making. For example the collection of tools described within the text is changing (Subversion seems to be replacing CVS, etc...).
It's interesting to note that both authors (Andrew Hunt, David Thomas) are authors of the Agile Manifesto, and have a series of Pragmatic Programming books (Pragmatic AJAX, Agile Web Development with Rails, Programming Ruby, etc...).
Their other texts are equally humorous and easy to read.
The Pragmatic Programmer makes an excellent prerequisite to Code Complete. I can attest the "[Pragmatic Programmer] will help you become a better programmer" (Preface), but reading additional software engineering resources will make you an even better programmer.
- Design Patterns Explained: A New Perspective on Object-Oriented Design (2nd Edition) by Shalloway Alan, and Trott R. James.
Design Patterns Explained, is easy to read, informative, and like the title suggests, offers a truly new unique perspective on design patterns.
I enjoyed how the authors extend the software "construction" metaphor (software architecture, scaffolding, plugging in code, etc...) a couple steps further, drawing parallels with Christopher Alexander's (a well known architect's) essay The Nature of Order: An Essay on the Art of Building and the Nature of the Universe. In this particular essay Alexander attempts to decompose good architectural design into patterns and the authors of this book clearly take Alexander's work into the realm of design patterns.
Similarly fascinating were the parallels drawn from anthropologist Ruth Benedict's work, where the authors suggest that good design is culturally transcending.
Design Patterns Explained is a nice supplement to Design Patterns: Elements of Reusable Object-Oriented Software [Gamma, et. al.] and should be read concurrently. As other reviews have pointed out; this book does tend to be verbose in sections, it digresses at moments, and is targeted at the introductory (journeyman) level.
Regardless, it's an interesting read.