One book marked a critical transition in my career: ``Structured Analysis and Systems Specification'' by Tom De Marco (Prentice-Hall, 1979, ISBN 0-13-854380-1). Before this book, I often had problems delivering an acceptable solution on time and under budget; since reading and applying it, my track record has been much better.
I had been programming for 15 years when I first read it, and at that point I had only a hazy idea of what systems analysis was and how it differed from design and implementation. Once I read and adopted De Marco's methodology, I suddenly realized that most of the serious problems I'd encountered in implementation had roots in a systems analysis phase that was faulty or even absent.
I've been using structured analysis in real-world applications for many years, and it is a powerful tool for unearthing the hidden dimensions of nasty problems early in the project. The method has even helped me with the thorny problems of dealing with customers who are not ``programmer types'' and those who might not have a completely clear idea what they want.
Structured analysis is not a panacea. There is no substitute for careful work by experienced, well-trained professionals. However, I do find that the method really helps to insure that a strong light gets shined into every dark corner of the problem space. It is especially good at insuring that the customer understands how the solution is going to work before any code is cut.
De Marco's book is still an excellent exposition of the method, especially in the personal and political dimensions. There is another recommended book that presents essentially the same method, except that it takes into account a number of improvements and extensions that have been added in the decade or so since the original work: ``Modern Structured Analysis,'' by Edward Yourdon (Yourdon Press, 1989, ISBN 0-13-598624-9).