Shop the new tech.book(store)
New! Introducing the tech.book(store), a hub for Software Developers and Architects, Networking Administrators, TPMs, and other technology professionals to find highly-rated and highly-relevant career resources. Shop books on programming and big data, or read this week's blog posts by authors and thought-leaders in the tech industry.
> Shop now
Andy Oram is an editor at O'Reilly Media, a highly respected book publisher and technology information provider. An employee of the company since 1992, Andy currently specializes in free software and open source technologies. His work for O'Reilly includes the first books ever published commercially in the United States on Linux, and the 2001 title Peer-to-Peer. His modest programming and system administration skills are mostly self-taught.
Greg Wilson has worked on high-performance scientific computing, data visualization, and computer security, and is currently project lead at Software Carpentry (http://software-carpentry.org). Greg has a Ph.D. in Computer Science from the University of Edinburgh, and has written and edited several technical and children's books, including "Beautiful Code" (O'Reilly, 2007).
Born and raised on Vancouver Island; studied engineering at Queen's University in Ontario, worked for a while, then went to Edinburgh for a Master's, some more work, and a PhD. Traveled while writing my first book on parallel programming; came to Toronto "for a couple of years" in 1994, and have never left. I've worked for big corporations, startups, and myself (prefer the small to the large), been a university professor (enjoyed the teaching more than the red tape), and am now project lead for Software Carpentry, a crash course on software development for scientists and engineers. You can find me online at http://third-bit.com (personal stuff) or http://software-carpentry.org (the course).
I'm going to go on record and say that this is one of the most important books about software development that has been published in the last few years. It's easy for many of us in the industry to complain that software engineering research is years behind practice and that it is hard to construct experiments or perform studies which produce information that is relevant for practitioners, but fact is, there are many things we can learn from published studies.
The editors of this book do a great job of explaining what we can and can not expect from research. They also adopt a very pragmatic mindset, taking the point of view that appropriate practice is highly contextual. Research can provide us with evidence, but not necessarily conclusions.
Beyond the philosophical underpinnings, 'Making Software' outlines research results in a variety of areas. It gives you plenty to think about when considering various approaches on your team. The chapter 'How Effective is Modularization?' is worth the price of the book alone.
I recommend this book for anyone who wants to learn how to think rigorously about practice.
This is an important book and it covers a wide range of topics surrounding software engineering (comparing languages, whether TDD works, open source vs. proprietary, pair programming, metrics, learning to program, women in computer science and much, much more). But I can't give it a 5 star review because I wish it had been distilled down from a large collection of essays to a single book covering the conclusions and the data behind the conclusions.
It would be a 5 star if someone like Steve McConnell had taken the entire contents of the book and written a single coherent text from it. As it is the quality of writing and explanations varies a lot from article to article. For example, in some of the articles the authors decide to show us the code or the SQL statements used to extract data. I found this distracting (who cares how they pulled data from a database?) because I wanted to get to the meat of each piece. I suspect the book could be 1/2 to 2/3 the size it is today with a rewrite.
Despite my reservations this is a very worthwhile book. If you sit down to read it you'll likely find it hard going in places: it's dense and detailed. But that goes somewhat with the territory. This isn't a book about evangelizing the latest development fad, it's about hard data on what does and does not work in software engineering.
Data and information are two different things. Unfortunately it seems that the editor and authors didn't had the time to reduce the size of the book and polish the style. This book contains 600 pages of data, however the amount of information is much smaller than the one contained in "Facts and Fallacies of Software Engineering" (200 pp).
I would have loved an up-to-date critical review of the existing literature of evidence based software engineering. However, the book does not give you that, but just the re-packaging of existing journal papers on software engineering. It is more effective (and sadly more enjoyable) to read the journal papers.
I rate the book with just 1 star because I think that the 5 and 4 stars ratings are completely disproportionate. Should we compare this book with "Code Complete", "The Mythical man-month", or "Programming Pearls"... I don't think so.
Disclaimer: I will never be able to write such a 1 star book :)
Thirty articles and thirty four different authors but you can't really tell that from reading the content as all of the material fits together extremely well.
The articles are divided up into two sections. The first covering general principles reads a lot like a fairly advanced university level textbook and it got really tempting for me to give up on the book a number of times while reading that section which would have been a real pity since the second section covering "Specific Topics in Software Engineering" is far easier to read and a lot more interesting as well.
There is plenty of material in the second section of the book that will help any programmer to improve the way that they write programs. A lot of the alternatives presented are beyond the control of the programmer though and so it is far more important that the managers in charge of programming departments be made aware of the information that this book provides.
While at least some of the information that the book presents should be obvious to any experienced programmer - some of the information may also be completely unexpected. The authors of the articles have done an excellent job though of specifying exactly how they obtained the data upon which their conclusions are based and so it should be reasonably easy to work out just how applicable each should be to any given situation.
I recommend that those without the background to fully understand the material in the first part of the book persevere with it as whatever part of it that you do manage to comprehend will aid in your understanding of what the extremely useful second part of the book actually means.