Learning to program is hard, also because it requires students to deal with abstraction. A program is an abstract construct: most pieces of a program are not concrete, literal values, but they are abstract symbols standing for things or actions in the system they model and control.
Thus, when learning to program, novices not only need to learn about the system, but they also need to learn about the programming language. They need to think about the concrete effects in the system their abstract program constructs will cause once the program will execute. This thinking on two levels of abstraction (program and system), and in two dimensions of time (coding and execution) can cause a significant burden.
In this short paper we propose to collapse those two levels. We wonder whether it would be possible to devise a programming environment where the program is the system. To do this we need languages that are the system, instead of languages that are about the system. We propose to use tangible languages as a way towards this idea. We briefly present three such languages which we used in the context of an informal learning setting and report our initial lessons learned.