Code Complete: A Practical Handbook of Software Construction
by Steve McConnell.
A comprehensive overview of software-development techniques that help produce robust and reliable code.
Computer-Related Risks
by Peter G. Neumann.
An excellent discussion of why computer programs often fail. It is filled with anecdotes from Neumann's tenure as the moderator of the Usenet Risks group.
Fatal Defect: Chasing Killer Computer Bugs
by Ivars Peterson.
A comprehensive look at real-life cases when life-critical computer systems failed.
Safeware: System Safety and Computers
by Nancy Leveson.
A thorough introduction to risk analysis and other techniques for building programs that can endanger lives or cause a great deal of damage if they fail.
Wicked Problems, Righteous Solutions
by Peter DeGrace and Leslie Hulet Stahl.
An irreverent look at software development models such as the waterfall and the spiral. The book is seasoned with critical comments on how they work in practice.