Chapter 1 link here I'm currently reading a book called The Pragmatic Programmer by David Thomas and Andrew Hunt. The first chapter is an easy read, all common sense. The second chapter starts introducing code and is a little more technical. Here are three things I learnt from the second chapter: 1. Every design principle is there to make your code easier to change (ETC). If you're not sure what code design principles to follow and when, use ETC as a guide. 2. Eliminate effects between unrelated things. (Increase orthogonality - parts of code that don't rely on each other). Keep code decoupled, avoid global variables, avoid similar functions, be careful of third part toolkits. 3. Get good at estimating. Every time you have a task, estimate how long it will take. Think about each little step in the task before you provide an answer. When you finish the task write down how long it took, and if you can, why your estimate was wrong. You'll learn to spot patterns....