These books are my top "theory" picks for software professionals:
Domain Driven Design My notes are here.
Pragmatic Unit Testing
The Pragmatic Programmer
Agile and Iterative Development
This is a great book, it's 20 years old, but still relevant. Notes and Quotes:
- Projects fail not for technical reasons, but for sociological reasons.
- Our successes stem from good human interactions, not from incremental technical improvements.
- Making errors should be encouraged - everyone should have a few mistakes during the project when we tried something and it didn't work. When the answer to "How many mistakes did you make?" is "none"; that's a bad sign people aren't trying enough new things.
- We need people who make the team "jell" - they are worth more than coders.
- We spend too much time trying to get things done, and not enough time asking if the thing is worth doing.
- People really like to make very high quality stuff, but the market wants high quantity.
- Parkinson's law, "work expands to fill the alloted time", doesn't apply well to software developers.
- Beware of claims to increase software productivity by 100% because most time is not spent programming.
- When testing productivity of programmers, some were 10 times more productive than others. This is not quite what it sounds like since not all a person's time is taken with programming.
- During "programming games", language did not affect the outcome (except assembly language) and experience didn't matter (if they had more than six months experience).
- Quiet places for work are extremely important to allow programmers to get in the "flow" of their work. (This agrees with Joel Spolsky, but not the Agile wing of development).
- Corporations have entropy. Differences, and creativity, in departments are slowly ground out of them to create a flat, bleak landscape of sameness.
- Big Methodologies don't work; better to use training, tools, and peer reviews.
- Fujitsu encourages all projects to do some aspect in a nonstandard way.
- Letting teams strive for less than perfect quality is the "death knell" for the team. Teams really want to do high quality work.
- "Sociology matters more than technology or even money."
- Overtime is destructive and counter-productive.
- People hate change. We are agents of change.
- Try to keep people on one project at a time, not spread over several at one time. They are less efficient and more frustrated.
- Don't waste your peoples time in meetings and overstaffing projects early.
- Create a fun, creative, productive team environment - somehow.