views:

2784

answers:

21

What would be a recommended book for Software Engineering?

The book should be covering the various stages involved in software development process, covering topics such as:

  • requirement gathering
  • use cases
  • domain model
  • functional specifications
  • architecture design
  • testing
  • deployment

It should be a book that would help someone to understand the various processes, include examples of good documentation of use cases, domain modeling, architecture design etc., explain about how the various steps help in the development of the software.

Not so much on the code writing or the people-management aspect, more on the documentation, design stages, planning prior to actual coding.

Targeted audience should be a technical lead/architect/manager.

+4  A: 

"Code Complete" and "Clouds to Code" are both excellent!

Steve Moyer
+1  A: 

Steve McConnell's Software Project Survival Guide is an oldie but goodie. It hits the main topics in a very approachable way.

Mike Post
A: 

I'd completely reccomend Scott Amblers "The Object Primer" and Ivar's Classic "Object Oriented Software Engineering"

http://www.amazon.com/Object-Oriented-Software-Engineering-Approach/dp/0201544350

DanielHonig
A: 

More Programming Pearls: Confessions of a Coder by Jon Bentley

http://www.amazon.com/More-Programming-Pearls-Confessions-Coder/dp/0201118890/ref=sr_1_1?ie=UTF8&s=books&qid=1222320145&sr=1-1

Maurice
Great book - but not for the issues raised by the question.
Jonathan Leffler
+2  A: 

http://joelonsoftware.com is a good start. Read all of it, think about it and dare to disagree (he's wrong about a lot of things).

Peter Wone
A: 

The excellent Patterns of Enterprise Application Architecture by Martin Fowler.

Andrew
A: 

A book that I liked a lot, and it had the manuscript available online (but not anymore) was: Reliable and Flexible Software Explained, by Henrik Bærbak Christensen

For my viewpoint, far from be renowned is a very good reference indeed.

Alex. S.
+13  A: 

I would recommended all of these (and probably in that reading order):

I maintain a list over at my blog.

Mitch Wheat
+1  A: 

Facts and Fallacies of Software Development (Robert L. Glass)

This guide identifies many of the key problems hampering success in this field. Covers management, all stages of the software lifecycle, quality, research, and more. Author presents ten common fallacies that help support the fifty-five facts.

Carl Seleborg
"Robert L. Glass" actually.
Brian Ensink
Oops! Philip Glass is the composer. Thanks.
Carl Seleborg
+4  A: 

More of historical interest, although still somtimes surprisingly actual: The Mythical Man-Month (Frederick P. Brooks)

The classic book on the human elements of software engineering. Software tools and development environments may have changed in the 21 years since the first edition of this book, but the peculiarly nonlinear economies of scale in collaborative work and the nature of individuals and groups has not changed an epsilon. If you write code or depend upon those who do, get this book as soon as possible.

Carl Seleborg
I would say that everything Fred Brooks wrote in that book is timeless. The software industry seems to relearn the same facts over and over again. Take, for example, "adding manpower to a late software project makes it later". How many managers still find this out the hard way despite the fact that Brooks wrote it decades ago and a lot of people can vouch for it by experience?
talonx
+1  A: 

Despite the misleading title, a great book:

"Applying UML and Patterns. Introduction to OOAD & Iterative Development" by Craig Larman

SquareCog
A: 

How about Making Things Happen ?

Niko Gunadi
+3  A: 

For such a broad overview I'd recommend either of these two classics:

But I do agree with some of the previous recommendations:

  • The Pragmatic Programmer
  • Mythical Man Month - Fred Brooks
  • Code Complete - Steve McConnel

Some good, but OO specific:

  • Object Oriented Software Engineering - Ivar Jacobson
  • Design Patterns - Gamma et al.
njsf
Hi njsf! If you agree with previous answers, the correct way to indicate that is to vote them up so they appear on top of the list. That's also why it's better to post one book per post, so people can vote individually on the books.
Carl Seleborg
+1 I think you're the only person who's actually recommended one single book that covers the material asked for in the question. In fact a choice of two books, either one of which covers the material! BTW I don't have my copy here, but I believe Code Complete 2 also recommends these exact two books as overviews of Software Engineering - and says every programmer should own such a book.
MarkJ
+1 for Pressman. It's a great book that we used at my university, and I've referred back to often.
Bill the Lizard
+1  A: 
  • Peopleware by Tom DeMarco and Timothy Lister.
    • excellent book about the people side of developing software. It explores principles of organisation, motivation, environment and other stuff which is applicable well beyond programming.
  • Don't Make Me Think by Steve Krug.
    • A short, readable, entertaining book about web interfaces, but it touches on more general interface principles.
AJ
A: 

The NATO Software Engineering conferences in 1968 and 1969 that started the ball rolling.

Jonathan Leffler
A lot has changed since 1969.
Robert Harvey
@Robert Harvey: and again, we are still regurgitating the same knowledge that was gained half a century ago. There is a reason for that: **They are still relevant today**.
voyager
I'm just sayin'. Two gigabytes of memory and two gigahertz is a lot different to work with than two megabytes and two megahertz, and I've done both. Are you still using the waterfall model?
Robert Harvey
+2  A: 

The IEEE computer society has published the Software Engineering Body of Knowledge (SWEBOK) here: http://www.computer.org/portal/web/swebok/html/ch3 Reads like a lot of definitions, but has some very good references. The material will be more academic in nature.

Its now considered more of a "classic" but I still find Grady Booch's "Object Oriented Analysis and Design" an excelent reference - the technology has changed but the overall approaches are sound.

James Conigliaro
+1 for SWEBOK, if only because Steve McConnell was one of the associate editors.
MarkJ
+1  A: 

Software engineering is an art, like sculpting or painting. Artists can't explain how they come up with their paintings, they just do. Software design is the same thing. Arts can't really be taught, some people are just naturally able to design things well, while other people are unable to no matter how much practice/study they put into it.

I know someone has a fairly well known quote relating to this, but their name isn't coming to mind.

dauphic
Innate talent is hugely important, but you can improve yourself by studying and practising.
MarkJ
While I agree with your statement, one can learn from good examples, develop taste, and perhaps develop the ability to create from proper exposure. Beginners don't even know how to see good and bad in design. Learning to see is necessary but, as you said, not sufficient.
seh
A: 

Be Wary: While there are some good sources on software engineering, there are a lot of untested, pie-in-the-sky discussions about how software would be easier if it was like engineering. These discourses all ignore the places where, fundamentally, software is not like engineering.

There's also lots of consultant-ware; Everybody and their brother will train you in their custom software engineering method (Which is usually either Waterfall or XP with the serial numbers filed off.)

There's a lot of sand to sift through in order to find the good stuff.

Sean McMillan
It's true there's lots of consultant-ware. But please tell us how is software fundamentally not like engineering? My father was an aircraft design engineer, and his experiences sound exactly like designing software. I agree software isn't like **manufacturing**.
MarkJ
So, I'm thinking Civil Engineering (Building bridges and such) -- You never build a bridge, then decide to move it to a different location; But in software, you might have to port to Oracle from MySql (or whatever.) They say in software you can pick up the house and build a new floor under it -- that's what I'm thinking of.
Sean McMillan
I'm not saying that there aren't good analogies to be made between software and engineering -- There are. But so many discussions begin by presuming that software = engineering, and don't bother to examine if that assumption fits.
Sean McMillan
A: 

Code Complete by Steve McConnell - excellent chapters on architecture and design.

And if you still want more after that, follow the recommendations about further reading.

The design chapter is a free download - although every programmer should just buy and read the whole book.

MarkJ
A: 

The standard books on software requirements engineering are Software Requirements and More On Software Requirements, both by Karl Wiegers. These two books cover the development of a vision and scope, requirements elicitation, requirements management, requirements documentation (including use cases and functional specifications), and requirements validation, along with a few other smaller topics.

In terms of architecture, a highly cited book (and also used in my program's Software Architectures course, so I have read it) is Software Architecture in Practice. Topics include the architecture business cycle, quality attributes, achieving the necessary quality attributes, designing architectures, documenting architectures, building an architecture from an existing system without a documented architecture, and software product lines. Case studies are used throughout the book to illustrate key points and provide a "real-world" context.

Thomas Owens