In this blog post, Funda Karaoglan, Assistant Professor and Course Leader in Computer Science (Dubai), shares teaching practices from the Global College Computer Science programme that support diverse learners through inclusive and visually supported classroom design.
Teaching on the Global College Computer Science programme in Dubai means working with a highly diverse student cohort. Within a single classroom, I regularly teach students with very different educational backgrounds, levels of prior computing experience, and language profiles. Many students are studying in a second or third language and may find it challenging to engage with text-heavy explanations alone. While this diversity enriches classroom discussion, it also requires intentional and inclusive approaches to teaching.
Recent work in computer science education highlights the importance of inclusive, student-centred design in supporting participation and progression in the discipline (Wiredu et al., 2024). As Course Leader and the instructor delivering the course, my priority is to ensure that all students can engage meaningfully with core computing concepts while maintaining academic rigour. Rather than assuming a single starting point, I design teaching and assessment activities that recognise varied backgrounds and provide structured, supportive pathways for learning.
Reimagining introductory computer science: What did I do and why?
Introductory computer science courses play a key role in shaping students’ confidence and sense of belonging. When teaching relies heavily on abstract explanations and dense written material, students who are new to programming or learning in a non-native language may disengage, even when they are capable of succeeding. Inclusive teaching guidance in computing emphasises the importance of anticipating variation in experience, language, and confidence at the point of curriculum design (Computer Science Teachers Association, n.d.).
To address this, I redesigned several aspects of my teaching across the DEP Computer Science course. My aim was to provide clearer scaffolding for novice learners while continuing to challenge students who were ready to extend their learning. These changes focused on in-class practical activities, the use of visual explanations, assessment design, and the integration of personal tutoring with teaching practice.
Visual scaffolding to reduce language load
Because many of my students are learning in a second or third language, I deliberately reduce reliance on text-only explanations and aim to make key concepts visible. In practical classes, students work on structured coding tasks using either university laptops or their own devices. Alongside code, I use simple visual representations to support comprehension and recall.
For example, when introducing selection and iteration, I pair code with flow diagrams that illustrate decision points and repetition. Students are asked to map each line of code to a specific part of the diagram, helping them connect syntax with behaviour. When teaching functions, I consistently return to an input–process–output visual model, allowing students to associate terminology such as parameter, argument, and return value with a stable visual structure.

Figure 1. Mapping Code to Visual Structure by Funda Karaoglan
Because many of my students are learning in a second or third language, I deliberately move beyond text-only explanations and make programming logic visible. One strategy I use regularly is asking students to map code directly to a visual structure, as illustrated in the slide “Mapping Code to Visual Structure.”
Rather than focusing only on syntax, I ask students to identify the structural components of the code and match each to a visual element in a flow diagram. By externalising the logic in a visual form, students can see the flow of execution more clearly, which reduces language load and supports conceptual understanding. Representing concepts in multiple ways is widely recommended in inclusive computing education, particularly for multilingual cohorts (Wiredu et al., 2024).
Layered coding tasks in practical sessions
In practical classes and workshops, I use layered coding tasks so that all students work on the same core problem but can engage at different levels of complexity. I typically begin with a short live coding demonstration in which I model problem-solving strategies and verbalise my decision-making. This is followed by a core task that all students are expected to complete, supported by starter code and guided prompts.
Students who complete the core task can then choose from a set of extension activities, such as refactoring code into functions, improving input validation, or adapting the solution to a new context. This structure allows students to progress at different speeds without fragmenting the cohort and helps maintain a shared learning experience within the class.
Pair programming with explicit and rotating roles
Given the linguistic diversity of the cohort, I use pair programming with clearly defined and rotating roles. One student takes the driver role and writes the code while explaining their actions. The other takes the navigator role, checking logic, reading task requirements aloud, and asking clarification questions. Roles rotate during the session so that both students practise explaining and monitoring.
Research suggests that pair programming is most effective when roles are explicit and regularly rotated, supporting both learning and communication (Ismail & Razak, 2024). In my classes, students frequently report that this structure makes participation more comfortable and helps technical vocabulary become meaningful through use rather than memorisation.
From my experience, students are more likely to seek support when the classroom environment already recognises difference as a normal and expected part of learning.
Broader lessons: How can others benefit?
The practices described here can be adapted across disciplines and contexts. Strategies that colleagues may find transferable include:
- Using visual representations alongside text to reduce language load.
- Designing layered tasks that provide multiple entry points to the same learning outcome.
- Structuring group work with explicit roles to support participation and communication.
- Framing assessment as a developmental process rather than a single judgement.
Final thoughts
Over time, I have noticed changes in classroom engagement. Students who initially appeared hesitant to contribute now participate more actively in structured programming and collaborative problem-solving tasks.
Formal module feedback has reinforced these observations. Students have highlighted that “the teacher is very helpful and helps in explaining topics clearly and provides a lot of study material,” and that sessions include “detailed explaining of topics, provided good resources.”
Through small but deliberate adjustments to visual explanation, in-class activities, assessment, and tutoring, I have been able to create learning environments in which more students develop confidence, competence, and a stronger sense of belonging in the discipline.
References
Computer Science Teachers Association. (n.d.). Inclusive teaching pedagogies. https://csteachers.org/inclusive-teaching-pedagogies/
Ismail, N. Z., & Razak, M. R. (2024). Pair programming for learning programming subject in higher education: A systematic review. International Journal of Education, Psychology and Counseling, 9(55), 770–789. https://doi.org/10.35631/IJEPC.955052
Wiredu, J. K., Abuba, N. S., & Acheampong, R. W. (2024). Enhancing accessibility and engagement in computer science education for diverse learners. Asian Journal of Research in Computer Science, 17(10), 45–61. https://doi.org/10.9734/ajrcos/2024/v17i10509
Image credits:
Header image: Network web programming by Clker Free Vector Images from Pixabay
Figure 1: Mapping Code to Visual Structure by Funda Karaoglan