2 improved wording edited Jul 28 '17 at 16:52 user737 You say that: students find it challenging to "hold multiple layers of abstractionabstraction" in their head. My advice would be to tell them: don't try to hold several levels in mind at once. A friend of mineSomeone I know says that writing was invented to let us forget things. Similarly, layers were invented to let us focus on one aspect of a problem and deal with others at anothera time. Edsger Dijkstra in 1974 explains that we must do this because we have limitations: A scientific discipline separates a fraction of human knowledge from the rest: we have to do so, because, compared with what could be known, we have very, very small heads. Dijkstra's explanation of Separation of Concerns in a 1976 paper says: In order to master complexity, one has to deal with one important issue (or concern) at a time. If this very smart person is sayingsaid that so long ago, it certainly applies now. Layers simplify the design and coding of programs, and they make it much easier to work withunderstand and maintain code. An example from life would be that you can drive a car, pay while paying attention to traffic, the gauges, the radio, plan your route, and possibly even talk with someone all at the same time, because they are different faculties. You can only attend to one thing at a time, but by having some be 'automatic' and only urgent things rising to awareness, you can do this. Programming is the same way. You say that: students find it challenging to "hold multiple layers of abstraction in their head. My advice would be to tell them: don't try to hold several levels in mind at once. A friend of mine says that writing was invented to let us forget things. Similarly, layers were invented to let us focus on one aspect of a problem and deal with others at another time. Edsger Dijkstra in 1974 explains that we must do this because we have limitations: A scientific discipline separates a fraction of human knowledge from the rest: we have to do so, because, compared with what could be known, we have very, very small heads. Dijkstra's explanation of Separation of Concerns in a 1976 paper says: In order to master complexity, one has to deal with one important issue (or concern) at a time. If this very smart person is saying that so long ago, it certainly applies now. Layers simplify the design and coding of programs, and they make it easier to work with code. An example from life would be that you can drive a car, pay attention to traffic, the gauges, the radio, plan your route, and possibly even talk with someone all at the same time, because they are different faculties. You can only attend to one thing at a time, but by having some be 'automatic' and only urgent things rising to awareness, you can do this. Programming is the same way. You say that: students find it challenging to "hold multiple layers of abstraction" in their head. My advice would be to tell them: don't try to hold several levels in mind at once. Someone I know says that writing was invented to let us forget things. Similarly, layers were invented to let us focus on one aspect of a problem at a time. Edsger Dijkstra in 1974 explains that we must do this because we have limitations: A scientific discipline separates a fraction of human knowledge from the rest: we have to do so, because, compared with what could be known, we have very, very small heads. Dijkstra's explanation of Separation of Concerns in a 1976 paper says: In order to master complexity, one has to deal with one important issue (or concern) at a time. If this very smart person said that so long ago, it certainly applies now. Layers simplify the design and coding of programs, and they make it much easier to understand and maintain code. An example from life would be that you can drive a car while paying attention to traffic, the gauges, the radio, plan your route, and possibly even talk with someone all at the same time, because they are different faculties. You can only attend to one thing at a time, but by having some be 'automatic' and only urgent things rising to awareness, you can do this. Programming is the same way. 1 answered Jul 28 '17 at 16:47 user737 You say that: students find it challenging to "hold multiple layers of abstraction in their head. My advice would be to tell them: don't try to hold several levels in mind at once. A friend of mine says that writing was invented to let us forget things. Similarly, layers were invented to let us focus on one aspect of a problem and deal with others at another time. Edsger Dijkstra in 1974 explains that we must do this because we have limitations: A scientific discipline separates a fraction of human knowledge from the rest: we have to do so, because, compared with what could be known, we have very, very small heads. Dijkstra's explanation of Separation of Concerns in a 1976 paper says: In order to master complexity, one has to deal with one important issue (or concern) at a time. If this very smart person is saying that so long ago, it certainly applies now. Layers simplify the design and coding of programs, and they make it easier to work with code. An example from life would be that you can drive a car, pay attention to traffic, the gauges, the radio, plan your route, and possibly even talk with someone all at the same time, because they are different faculties. You can only attend to one thing at a time, but by having some be 'automatic' and only urgent things rising to awareness, you can do this. Programming is the same way.