In this pedagogical research, we study how the presentation of programming language topics affect the experience of the students at several skill levels. In high school aged students, we study the importance of visual metaphors for large group instruction. Circle and arrow diagrams visualize the function types, composition, and partial application in functional dataflow programs. With metaphors like this one, physically enumerating the language helps instruct large groups of students away from the computer (e.g. on a whiteboard) and answer questions about program behavior before translating into code. In introductory programming language classes, we study how a “discuss this” inquiry task models vocabulary and thought process around the week’s topic in order to encourage small group participation later when students are prompted with “do this” tasks. Positive effects of participation help TA instructor experiences immediately and can be compared against student reported self-efficacy for long-term student benefits. In upper-level undergraduate and graduate students, we study how to encourage and assess independent domain-specific language projects in a seminar style course while maintaining a group learning environment. We designed a novel, semester-long grading scheme to enable students to self-regulate learning (e.g. come to comparable results at different times in their projects) while specifying expectations explicitly as learning objectives (breadth) and levels of understanding (depth). Since the unique experiences students have while implementing their DSLs are a valuable pedagogical resource, we designed the course to prioritize in-class time for peer instruction and critique of related reading and each other’s work and bundled lecture material as video with homework assignments in a flipped classroom, blended learning style. In summary, this pedagogical research explores tailoring the teaching interventions used to student skill level, student agency in the task, and to the size of the instructed audience to better present the programming language topic.