Programming from the Ground Up, by Jonathan Bartlett

With a program, you build your own world with your own rules. You create your world according to your conception of both the problem and the solution.