Not a book per say, but "Out of The Tar Pit" by Moseley and Marks is definitely a must-read.
Abstract:
```
Complexity is the single major difficulty in the successful development
of large-scale software systems. Following Brooks we distinguish
accidental from essential difficulty, but disagree with his premise that
most complexity remaining in contemporary systems is essential. We
identify common causes of complexity and discuss general approaches
which can be taken to eliminate them where they are accidental in
nature. To make things more concrete we then give an outline for
a potential complexity-minimizing approach based on functional programming
and Codd’s relational model of data.
```
Abstract:
``` Complexity is the single major difficulty in the successful development of large-scale software systems. Following Brooks we distinguish accidental from essential difficulty, but disagree with his premise that most complexity remaining in contemporary systems is essential. We identify common causes of complexity and discuss general approaches which can be taken to eliminate them where they are accidental in nature. To make things more concrete we then give an outline for a potential complexity-minimizing approach based on functional programming and Codd’s relational model of data. ```
Link: http://shaffner.us/cs/papers/tarpit.pdf