Learning to program is becoming a universally desired ability. Discovering better ways to teach programming and improving existing ones is essential to increase its accessibility. At present, most teaching approaches focus on high-level languages and constructs to ease understanding. However, understanding problems seem to persist making the learning process slow and painful. Moreover, mental models developed by students present gaps and misunderstandings that limit their maximum achievable abilities. This paper presents a new approach to teach students bottom-up, starting from machine code and assembler programming. This approach has been tested on first-year university students for two consecutive years. Experimental groups attended a 16 ...