Software Conflict : Essays on the Art and Science of Software Engineering , Robert L. Glass (sadly out of print right now)
A book that examines what it would take to put the science in Computer Science and Engineering in Software Engineering. Although it is out of print, you should be able to find a copy in your local university library - do so and read it.
Exploiting Chaos, Dave Olsen (also out of print right now)
A book that examines the realities of the software development process, exploring how the various ideas from the field of Chaos theory can be used to advantage in designing a software development process.
We have all experienced the chaotic nature of software development. This book provides a mechanism for understanding what is really going on. And YES we would like a repeatable process, but the reality is that for some hard problems we need a large element of discovery before we can move into the Software Engineering mode of development.
Surviving
Object Oriented Projects, Alistair Cockburn
A MUST READ for all people working with Objects or thinking about adopting Object
Technology. It gets down to the practical, pragmatic issues that object projects
face, and provides sound, experience based strategies for addressing these issues.
For anyone in the process of adopting Object Technology, this book gives the
real information about OO Methodologies, it is not the notation that is important,
what is important is how you organize to deliver the system.
This book is a great successor to the book "Object Solutions" by Grady Booch, and it will make a great companion book to the "UML Distilled" book by Martin Fowler. It replaces "Object Solutions" because it is targeted at medium sized, time-to-market critical projects, drawing practical hints and tips from a wide range of object projects. It fits well with "UML Distilled" since both authors favor using just enough process to be effective, and always remember to counteract the OO hype with a solid reality check.
UML
Distilled, Martin Fowler with Kendall Scott
This book is the first accessible book that covers the UML notation. Part of
the beauty of this book is that it nominates a lightweight development process
that shows how the UML can be used on projects.
Patterns
of Software, Richard Gabriel
This book is an inquiry into the software development process that questions
our assumptions about how we develop software. It contains a very useful inquiry
into the meaning of Alexander's patterns with respect to software. What does
quality without a name really mean when applied to software?
How habitable is our software, can we, as developers, really live in and extend our code, or is it an inflexible prefabricated modular design that will win design awards for the architect, and curses from the people who have to live in it?
The most thought provoking part if the book provides a possible answer to the question "is there a silver bullet?", as Gabriel hints that sometimes it is a people problem, not a technical problem. An immensely fun read (but that probably says more about me than the book).
Journey
of the Software Professional, Luke Hohmann
A fascinating book about the sociology of Software Development. It provides
a framework (Structure, Process, Outcome) for understanding the software development
process and specific advice to both Managers and Developers. For anyone who
is struggling with issues related to improving their development process, reading
this book will give you several new ways to approach your problems.
Designing
Object-Oriented Software, Wirfs-Brock, Prentice Hall 1990
The original source for responsibility driven design. For some reason I had
always overlooked this book, but thanks to Alistair Cockburn, I have now corrected
that mistake. Classes Responsibilities and Collaborations are some of the key
ideas from this book, which although the title of the book says Design, the
concepts are equally applicable to analysis activities as well.
Rapid
Development, Steve McConnell, Microsoft Press 1996
Rapid Development shows the tradeoffs that face developers when they attempt
to speed up software development. This, coupled with the earlier "Code
Complete", are MUST READ books for developers. Contains sensible guidelines
for improving on time delivery. The only downer on this book is that it is nearly
as thick and heavy as his earlier "Code Complete", which for me is
the definitive book on the low level coding issues facing developers.
Pete McBreen, pete@mcbreen.ab.ca