The traits of a proficient programmer
oreilly.com