I’d like to think about this in such concept: there is a “problem space”, defining abstract solution; there is a “machine space”, defining physical steps that a computer can perform. To solve a problem using program, is to develop a solution in problem space, and then map it into machine space. So there are two things I need to master: how to solve problems generally, how to map solutions to machine space.