The ability to express ideas in a computationally meaningful way is becoming increasingly important in our technological world. In response to the growing importance of computational literacy skills, new intuitive and accessible programming environments are being designed. This paper presents a framework for classifying the ways that block-based introductory programming environments support novices. We identify four distinct roles that these graphical languages play in the activity of programming: (1) serving as a means for expressing ideas to the computer, (2) providing a record of previously articulated intentions, (3) acting as a source of ideas for construction, and (4) mediating the meaning-making process. Using data from a study of novices programming with a custom designed block-based language, we provide examples of each role along with a discussion of the design implications of these findings. In doing so, we contribute to our understanding of the relationship between the design of programming representations and their ability to support computational literacy. The paper concludes with a discussion of the potential for this framework beyond block-based environments to programming languages more broadly.