The learning of programming using simulation involves unique educational environments and human factors. However, research in this field has been mainly centred on the efficacy of the simulation tool whereas there is a lack of comparative studies between the associated teaching and learning procedures. To address the gap, this study facilitates an evidence-driven discussion on learning and teaching, as well as their relationship, in simulation-based programming education. Investigation areas include virtual and physical environments of simulation sessions, relevant learning enablers and impediments, and roles of students and faculty members in the process. The study followed qualitative methodology using focus groups and semi-structured interviews. Thirty-seven students and four lecturers on a computing course at a British university shared experiences and perceptions on simulation-based programming sessions. The data were analysed thematically and through cross-evaluation. The findings have provided fresh insights on several enabling and challenging aspects of simulation-based programming education. On the one hand, visualisation, consistency of learning procedures, and student engagement emerged as empowering factors. On the other, the negative implications of collaborative tasks, students' attention diversion while shifting between virtual and physical environments of learning, and lecturers' over-emphasis on technology in teaching preparation, appeared as challenges. The paper contributes to understanding the advantages and challenges of using simulation in programming education. It suggests essential teaching principles and their application procedures, which add value to the overall computing education at tertiary level. The learning is transferrable among other engineering programmes and academic disciplines that use simulation for educational purposes.