Dreaming in Code is a novel best described by the author himself:
"Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software ... I spent three years following the work of the Chandler developers as they scaled programming peaks and slogged through software swamps. In Dreaming in Code I tell their stories."
This is not a book meant for the general developer, at least not so much to learn about software development. It is not supposed to be either. I'd recommend it for a developer as an interesting story only. But the main reason I'm mentioning it here is that I think it could have value for an outsider to learn many things about software development. And doing it through an interesting story. It does so partly by telling a story, and with that showing (an example) of a software process (granted quite different from many non-open source projects), and partly by getting into important information and characteristics about our industry.
Here's one of the less informative but quite funny jokes about our profession (I'm copying it since he said himself it could be found a myriad of places)
A Software Engineer, a Hardware Engineer, and a Departmental Manager were on their way to a meeting in Switzerland. They were driving down a steep mountain road when suddenly the brakes on their car failed. The car careened almost out of control down the road, bouncing off the crash barriers, until it miraculously ground to a halt scraping along the mountainside. The car's occupants, shaken but unhurt, now had a problem: They were stuck halfway down a mountain in a car with no brakes. what were they to do?
"I know", said the Departmental Manager. "Let's have a meeting, propose a Vision, formulate a Mission Statement, define some Goals, and by a process of Continuous Improvement find a solution to the Critical Problems, and we can be on our way."
"No, no", said the Hardware Engineer. "That will take far too long, and, besides, that method has never worked before. I've got my Swiss Army knife with me, and in no time at all I can strip down the car's braking system, isolate the fault, fix it, and we can be on our way."
"Well", said the Software Engineer, "before we do anything, I think we should push the car back up the road and see if it happens again."