Leveraging GitHub Co-pilot to Enhance Programming Education

Overview

Introductory programming courses are the foundation for students to gain fundamental coding abilities and analytical thinking skills required for various fields. However, programming poses unique challenges for beginners, like struggling with syntax, grasping complex concepts and developing logical reasoning. As computer science education continues to evolve, AI-powered tools like GitHub Copilot are emerging that can augment programming instruction for novices.

This blog post explores how GitHub Copilot could be effectively integrated into introductory programming courses to enhance student outcomes. Relevant education literature is drawn upon to support the recommendations.

An Introduction to GitHub Copilot

GitHub Copilot is a relatively new AI pair programmer that suggests complete lines of code, functions, and entire code blocks based on comments and the code context. It is powered by Codex, a large deep-learning model trained on billions of lines of public code from GitHub repositories. Copilot employs natural language processing, neural code synthesis, and semantic code search to generate helpful code recommendations tailored to the programmer’s intent. Copilot is a Visual Studio Code extension that integrates into the coding workflow. At its core, it transforms a natural language problem statement into executable code. It aims to boost programmer productivity by reducing boilerplate code and suggesting subsequent lines. Here’s a quick demo:

Advantages of Using Copilot for Introductory Programming Education

Copilot has several characteristics that make it well-suited for enhancing student outcomes in introductory programming courses.

Firstly, it assists with syntax. Beginners often struggle with syntax rules and tedious boilerplate code, such as import statements, which slow learning. Copilot speeds development by handling repetitive code, allowing students to concentrate on higher-level problem-solving.

Secondly, Copilot provides varied examples. Giving several possible output suggestions for a piece of code from a comment enables students to select the best code required, much like a built-in multiple-choice question. Exposure to diverse examples aids conceptual understanding according to constructivist learning theories. The numerous code suggestions from Copilot illustrate varied programming approaches, which require students to analyze each one to fit their needs, thereby promoting language learning.

Many CS curriculums fall short due to little attention given to debugging and problem-solving. As of this writing, the beta version of Copilot chat has features that fix broken code (/fix command) and explains a block of code (/explain command). This is incredibly useful for finding bugs and suggesting changes, keeping student motivation high by mitigating frustrations from debugging errors. The explanation feature helps students work comfortably with legacy code, i.e., code that is undocumented and generally difficult to read and understand. Acting much like a virtual teaching assistant increases the learning rate.

Plagiarism Concerns

Lau & Guo (2023) present findings from interviews with 20 instructors across 9 countries in early 2023, right after ChatGPT’s public release. This captures a unique snapshot before best practices have converged. In the short-term, many instructors are concerned about cheating and have reacted by banning AI tools, weighing exams more heavily, or exposing students to AI capabilities/limitations. Most agree that in the longer term, CS educators must learn to embrace these tools opinions diverge on whether to resist or embrace AI tools by integrating tools into courses to prepare students for using AI in future jobs. New assignments could have students collaborate with AI.

In my testing, I have found that manual intervention is still needed to produce functional code (as you can see from the video above). Nguyen & Nadi (2022) found that out of 33 programming problems from LeetCode, a popular competitive programming practice site, Copilot produced a correct answer 57% in Java, compared to only 27% of the time in JavaScript. This means proper tool use requires students to learn and apply the language’s nuances. We should note that this tool is made for the programmer to lessen their workload. Tools like Intelli-sense and extensions for specific languages already exist that do similar things. It is important to remind students that the goal is to learn the language; this tool will help them get there. It is still essential to learn things like modularization, design, and other programming abstractions as a CS student. Copilot is a great tool to give students a close enough answer and for them to figure out the rest of the code. This requires an understanding beyond what can be taught in the classroom.

Strategies for Productive Use of Copilot in Introductory Programming Courses

I believe Github Copilot should not be used in assessments in first-year courses due to its ease of use for basic programming problems. However, in later courses, once students become more familiar with language syntax and proper software design techniques, it can be used to solve more elaborate problems. I think Copilot will allow students in upper-division courses to express what they’ve learned rather than getting bogged down by syntax.

Still, to leverage Copilot effectively, instructors should provide guidance on integrating it into the learning objectives. Here are some best practices. First, let Copilot provide hints, not complete solutions. Encourage students to trace through Copilot code proposals line-by-line manually to build understanding rather than passively accepting suggestions. Second, students must refine and improve upon Copilot’s recommendations and learn to identify any incorrect suggestions. This practice enhances critical thinking and reinforces good practices. In teaching, we must balance Copilot usage with understanding documentation. Lastly, it’s vital to underscore that Copilot is an assistive aid, not a replacement for foundational coding skills.

Conclusion

GitHub Copilot has significant potential to be a transformative tool in introductory programming education. It offers a variety of functions that can significantly benefit beginners. Used strategically and under close supervision, Copilot can become an asset in a novice programmer’s toolkit. It can provide help and immediate feedback to increase comprehension and build confidence, much like a virtual tutor. However, it’s essential to recognize the delicate balance between assistance and over-reliance on AI tools. The challenges faced in integrating GitHub Copilot into programming education are reminiscent of those faced by mathematics educators when determining at what grade level a student should be allowed to use a calculator. Just as a calculator can aid in complex calculations but should not substitute for understanding basic mathematical principles, Copilot can be a valuable tool for code suggestions and error corrections but should not replace a solid understanding of programming concepts.

References

Nguyen, N., & Nadi, S. (2022). An empirical evaluation of GitHub copilot’s code suggestions. Proceedings of the 19th International Conference on Mining Software Repositories. https://doi.org/10.1145/3524842.3528470

Lau, S., & Guo, P. (2023). 16. https://doi.org/10.1145/3568813.3600138

Culturally Responsive Computing Approaches

Introduction

Culturally responsive computing (CRC) is an approach to designing technology education programs and tools that responds to the cultural contexts of learners and represents an intersection between computer science, education, and sociocultural understanding. It has roots in the extensive and well-studied area of culturally responsive teaching (CRT), which argues that empowering diverse students requires building on the cultural assets they bring to the classroom. CRC translates fundamental principles of CRT to computer science education and ensures that the cultural experiences of learners, particularly those from underrepresented groups, are valued and used to enhance their learning experience. In this blog post, I will uncover some examples of research that has established the critical role CRC plays in promoting inclusion, diversity, and equity in the computer science classroom.

History of CRC

Foundational concepts for CRC were established between the early and mid-1990s. Henderson (1996) argued that instructional design models for teaching technology must consider diverse learners’ cultural orientations. Henderson proposed the Multiple Cultural Model for instructional design, which sheds light on the various dimensions that influence how diverse cultural groups interact with multimedia learning environments. For instance, some cultures might lean towards cooperative learning, while others favour competition.

In 1999, McLoughlin outlined features necessary for culturally appropriate online learning for Indigenous Australian students, emphasizing participatory tasks and problem-based dialogue. Subsequently, Lee (2003) presented a framework designed to ensure that computing tools and environments respond effectively to the prior knowledge, perspectives, and motivations of minority learners. This framework was shown through software that facilitated literacy development among African American students, thereby demonstrating the effectiveness of this approach.

Limitations of the CRC Framework

Drawing on their programs, Scott, Sheridan, and Clark (2014) implemented their unique CRC programs, critiquing the limitations of traditional asset-based approaches and advocating for direct cultural responsiveness. Their arguments highlighted the following points:

  1. All youth possess the capability for digital innovation, thereby challenging deficit perspectives.
  2. Learning environments should promote transformational uses of technology.
  3. Paying attention to intersectional identities can foster innovation in computing.
  4. Students should utilize technology to reflect on their complex identities.
  5. Success should be defined by creating for community benefit rather than merely acquiring skills.

They provided examples such as critiquing biased media representations and encouraging students to create media that affirmed their identities. The implications of their arguments include the need to revise methods and measures, conduct intersectional research, and promote collaboration between computer experts and communities. CRC can potentially address digital equity through innovation, especially when implementations consider students’ multifaceted identities.

Culturally Responsive Computing Tools

Reflecting on these limitations, Morales-Chicas et al. (2019) conducted a comprehensive study on the tools and strategies employed in K-12 computing education for CRC. They identified the following emergent themes:

The first was sociopolitical consciousness-raising, which pertains to lessons that address real-world issues and promote activism. For example, COMPUGIRLS is a CRC program for adolescent girls of colour from underserved communities. Drawing on principles of culturally responsive teaching, including asset building, connectedness, and reflection, the program equips girls with the technological skills needed to research and address community issues. Participants reported increased confidence, the development of identities as technology innovators, and a feeling of empowerment from creating projects that address social justice issues.

Another theme is incorporating heritage culture through artifacts, like designs and symbols. Examples include programs encouraging student-created media to challenge stereotypes and software that builds on cultural practices, such as hair braiding patterns (Eglash & Bennett, 2009). This builds community connections, which involve community members sharing cultural knowledge and motivating students to engage actively.

Vernacular culture employs local cultural practices that are relevant to students. An example is the American Distributed Multiple Learning Styles Systems (AADMLSS), a programming tool designed to engage African American students using math and characters representing their vernacular culture. Studies have shown a surge in youth engagement due to the high cultural relevance of this approach.

Lastly, the theme of lived experiences connects to students’ identities and real-world contexts. For instance, Scott & White (2013) argued that CRC should consider students’ lived experiences and encourage self-representation, evidenced by a youth exercise in COMPUGIRLS on identifying gender biases in avatar creation. Also, by introducing personalized elements into a course, students can analyze this aspect of the computing experience critically, further enabling the customization of computing projects.

Conclusions

Studies have scrutinized the implications of the developments in CRC. For assessment, this necessitates a move beyond narrow measures such as grades or test scores to capture complex identity outcomes (Scott & White, 2013). From a methodological perspective, it requires attention to intersectionality, considering how factors such as race, gender, and class shape technology experiences (Scott, Sheridan & Clark, 2014), more research is required to understand its effects on diverse populations and domains. In practice, CRC should adopt a multi-disciplinary stance, adopting collaboration between communities, social scientists, and computer scientists (Eglash et al., 2013).

Therefore, we call on computer science educators, tech companies, and community organizations to take the following actions:

  • Allow greater curriculum flexibility for CS instructors to adapt courses to their students’ cultures and identities, to discover the intersects for each student.
  • Develop alternative metrics focused on identity development, community impact, and equitable outcomes to complement skills-based measures.
  • Increase engagement of families and communities as partners in developing computing programs.
  • To exchange knowledge, Foster collaboration (through incentives) between tech companies, social scientists, and CS educators.

References

McLoughlin, C. (1999). Culturally responsive technology use: developing an on‐line community of learners. British Journal of Educational Technology30(3), 231–243. https://doi.org/10.1111/1467-8535.00112

Lee, C. D. (2003). Toward A Framework for Culturally Responsive Design in Multimedia Computer Environments: Cultural Modeling as a Case. Mind, Culture, and Activity10(1), 42–61. https://doi.org/10.1207/s15327884mca1001_05

Henderson, L. (1996). Instructional design of interactive multimedia: A cultural critique. Educational Technology Research and Development44(4), 85–104. https://doi.org/10.1007/bf02299823

Morales-Chicas, J., Castillo, M., Bernal, I., Ramos, P., & Guzman, B. (2019). Computing with Relevance and Purpose: A Review of Culturally Relevant Education in Computing. International Journal of Multicultural Education21(1), 125. https://doi.org/10.18251/ijme.v21i1.1745

Eglash, R., & Bennett, A. (2009). Teaching with Hidden Capital: Agency in Children’s Computational Explorations of Cornrow Hairstyles. Children, Youth and Environments19(1), 58–73. https://doi.org/10.1353/cye.2009.0024

Scott, K. A., & White, M. A. (2013). COMPUGIRLS’ Standpoint. Urban Education48(5), 657–681. https://doi.org/10.1177/0042085913491219

Scott, K. A., Sheridan, K. M., & Clark, K. (2014). Culturally responsive computing: a theory revisited. Learning, Media and Technology40(4), 412–436. https://doi.org/10.1080/17439884.2014.924966

Incorporating Competitive Programming into a Beginner Programming Course

Introduction

Driven by the increasing automation and digitalization of virtually every workflow, programming has become an indispensable part of our lives. As a result, introducing programming at the earliest stage of education has become a hot topic of discussion among educators and academics alike.

A particular area of interest is the concept of competitive programming (CP). Long viewed as a niche domain, a small group of enthusiasts often pursue CP to challenge their coding capabilities; many faculty have challenged the area as an unnecessary part of computer science. However, recent research underscores the potential of competitive programming as a useful pedagogical tool, especially in the context of introductory programming courses. This blog post will discuss the results of various studies that have been conducted on incorporating CP into a beginner’s programming course. I’ll review existing studies on integrating CP into intro-level programming courses, examining its effects on learning outcomes, student engagement, and skill acquisition. In addition, I will also propose some areas of CP that require further research.

Understanding Competitive Programming

Competitive programming is a mind sport, like chess and bridge, that involves participants competing to solve algorithmic problems as quickly and efficiently as possible. The ACM ICPC (Association for Computing Machinery – International Collegiate Programming Contest) is one of the world’s oldest, largest, and most prestigious programming contests, which started in the 1970s. Today, it has grown to involve tens of thousands of participants, attracting the world’s top Computer Science universities.

Several elements define each problem in the contest. First, there’s a problem statement describing the issue the team needs to solve. Next are the input and output specifications, which explain the type of data the team’s program should accept and produce. Thirdly, sample inputs and outputs are given to help the team understand the problem. Finally, constraints are provided to outline the maximum size or other limitations of the inputs and the required efficiency of the solution.

The contest is scored based on the number of problems solved and the time penalty. The number of problems solved is the most critical factor; the more problems a team solves, the higher their rank will be. Teams are primarily ranked by the number of problems they have solved. To break ties among teams who have solved the same number of problems, the ICPC uses a time penalty calculated from the beginning of the contest to the time of the first correct submission, with an additional penalty added for each incorrect submission. The team with the shortest total time is ranked highest.

The Impact of Competitive Programming on Beginners

Studies such as those conducted by Moreno et al. (2018) and Bandeira et al. (2019) employed this scoring system and contest setup to engage first-year students in programming classes. Both studies found that students introduced to competitive programming in their first year demonstrated a superior understanding of programming principles compared to those who did not. These students exhibited faster problem-solving abilities, improved code efficiency, and an increased capacity to work under pressure. Additionally, these students reported higher retention of material and reduced difficulty in grasping programming concepts.

However, not all studies concluded that CP led to improved performance. Coore and Fokum (2019), facing a lack of teaching assistants and quality feedback in first-year programming courses, employed a system of weekly competitive programming competitions to reinforce the week’s material. Their study found that while using competitive programming in assessments did increase student engagement and interest, it did not enhance the overall performance of the first-year students.

The Challenges

While CP introduces students to the rigours and excitement of coding under constraints, it’s important to recognize that CP cannot address every aspect of introductory programming. Also, certain facets of CP, such as its pace and competitive element, may only suit some learners.

Astrachan (2004) has pointed out that competitive programming only allows students to delve into key areas such as Object-Oriented Programming (OOP) design principles and enhancing code quality. CP emphasizes speed and efficiency, often overlooking the importance of well-structured, maintainable code, a crucial aspect in real-world development.

While competitive programming can inject a sense of competition into the classroom, it’s important to remember that it’s not a one-size-fits-all solution. The competitive aspect of CP may be intimidating for some students, leading to heightened anxiety and stress. This could, in turn, hinder learning and deter participation. Moreover, the pace of competitive programming, which requires swift comprehension of problem statements and speedy code implementation, may only cater to some learning styles. Some students may require more time to thoroughly grasp concepts and develop robust solutions, which could make the fast-paced environment of CP feel overwhelming.

Given these characteristics of CP, it’s clear that it should not be used as the sole determinant in course assessments. Relying too heavily on CP for grading could inadvertently favour students who possess abilities unrelated to computer science, such as high reading speed and fast typing. These intangibles can be advantageous in a competitive programming environment but have little relevance to a student’s understanding of computer science principles or their potential as a programmer.

Future of Competitive Programming in Classrooms

Although much research has been done involving introducing competitive programming into the classroom, little work explores the impact of cultural relevance in problem-setting, the role of artificial intelligence (AI) in integrating CP, and how CP interacts with various cultural and social intersections in the academic sphere.

The classroom is often characterized by a variety of cultural and social intersections. Incorporating CP in such a setting prompts us to consider how it might affect the likeability, acceptability, and academic performance across these intersections. Is CP equally appealing and accessible to students of different cultures, genders, or social backgrounds? How might the competitive nature of CP impact the dynamics of these intersections? Delving into these questions would allow us to devise strategies to ensure a more equitable and inclusive learning environment.

A unique feature of competitive programming is its creative liberty in problem-setting. This opens the possibility of integrating culturally relevant problems. Introducing programming problems referencing students’ home countries or cultures could make the learning experience more relatable and be a powerful tool to increase engagement among international students. However, the impact of such an approach is yet to be fully understood. How might culturally sensitive problems influence students’ interest and engagement? Could they enhance learning outcomes, or could they unintentionally alienate students who do not share the same cultural background?

Artificial Intelligence offers exciting possibilities in CP. For instance, large language models such as ChatGPT can assist in problem setting, which is typically a significant demand on an instructor’s time. AI-based tools could also serve as programming partners for first-year students, providing personalized assistance such as debugging help or hints for specific problems during a contest. This could supplement the responses from auto-grading judges, which is currently limited to categorized feedback that can sometimes be vague. This approach increases access to individualized learning support and mitigates common challenges associated with competitive programming, such as anxiety and intimidation. However, areas that require further exploration include the effectiveness of such tools and the best strategies for integrating them into the learning experience.

References

Moreno, J., & Pineda, A. F. (2018). Competitive programming and gamification as strategy to engage students in computer science courses. Revista ESPACIOS39(35).

Bandeira, I. N., Machado, T. V., Dullens, V. F., & Canedo, E. D. (2019, October 1). Competitive programming: A teaching methodology analysis applied to first-year programming classes. IEEE Xplore. https://doi.org/10.1109/FIE43999.2019.9028518

Astrachan, O. (2004). Non-competitive programming contest problems as the basis for just-in-time teaching. https://doi.org/10.1109/fie.2004.1408553

Coore, D., & Fokum, D. (2019). Facilitating Course Assessment with a Competitive Programming Platform. Proceedings of the 50th ACM Technical Symposium on Computer Science Education. https://doi.org/10.1145/3287324.3287511

Computer Science Curriculum Integration for K-9 Teachers

Introduction

With a rapidly advancing world and integrating more technology into life, it has increasingly become evident to parents, teachers, and students alike that technological literacy is essential to primary education. Parents are pushing for increased computer science instruction in elementary schools as they realize how vital this knowledge will be in preparing their children for success beyond grade school.  According to code.org (Computer Science Education Stats, n.d.), 90% of parents want their children to study computer science, but only 53% of high schools offer it in their curriculum. Research has also shown that students who take computer science courses in high school are 17% more likely to pursue higher education, with even higher percentages observed among traditionally marginalized populations such as females and Black and Latino students (Brown & Brown, n.d.).

While computer science courses provide fundamental skills like coding and web design, their significance extends far beyond that. Understanding technology equips students with data analysis capabilities and problem-solving skills applicable across various fields, extending beyond digital work environments. Consequently, many believe it is crucial to prioritize teaching computer science concepts. This post outlines my efforts to understand the computer science curriculum’s current needs and promote computer science education among elementary school teachers in British Columbia.

Assessing Current Needs

According to Dr. Shannon Thissen, Regional Administrator for Educational Technology and Computer Science Teaching and Learning in Capital Region ESD 113 in Washington, integrating computer science concepts into the curriculum poses significant challenges. Dr. Thissen mentions that many untrained teachers express concerns and seek guidance. The primary obstacle is teachers’ fear of the unknown, and overcoming this fear is crucial. Several programs, including those offered by code.org, provide free resources for teachers. However, the participation of schools in these programs in British Columbia remains limited. Dr. Thissen also highlights that teachers may hesitate to incorporate such programs into their curriculum if they are not mandated.

In a previous post, I discussed the inconsistency of computer science programs in grade schools across British Columbia, particularly emphasizing the needs of interior and rural areas. While I faced difficulties connecting with schools that desired my services, I recently connected with a Programming 11/12 teacher in Kamloops. I had the opportunity to speak to her class, providing valuable insights into the needs of both teachers and students. Students showed great interest in game development and 3D animation. Despite being a beginner-level class, students had diverse backgrounds in the subject, with some having significant experience with Unity while others struggled with the early stages of block programming. However, their shared enthusiasm for the subject validated studies showing that a majority of students enjoy computer science (Computer Science Education Stats, n.d.). This highlights the need for increased promotion of computer science in the earlier grades to nurture this enjoyment.

Currently, I am collaborating with John Knox Christian School, which is revamping its computer science and technology curriculum. Working with the Director of Curriculum and Computer Science, we are developing a series of workshops to assist K-9 teachers in integrating computer science into their classrooms. This collaboration is an excellent opportunity as John Knox controls its curriculum from K-12, enabling longer-term assessment of student success through the workshops with the same group of students.

Project Design

The central portion of the project is divided into four phases: Assessing Needs, Planning and Foundations, Integration, and Reflection.

Assessing Needs:

To ensure alignment with the school’s desired outcomes and address the specific needs of K-9 teachers, a survey will be created and distributed to all K-9 teachers. The survey aims to gather information on teachers’ objectives, knowledge levels, and areas of interest in computer science. The survey includes choices for dedicated topics such as programming, computational thinking, artificial intelligence, game development, and computer hardware. The project will tailor its objectives and content to meet the needs and interests of the teachers. The survey will be sent out during the first week of summer break.

Planning and Foundations:

This phase involves conducting a workshop covering computer science fundamentals, including vocabulary, problem-solving, and demystifying computer science. The workshop will also focus on integrating hands-on activities for teachers to experience and practice computer science concepts firsthand. Teachers will be guided in designing activities that promote problem-solving, collaboration, and critical thinking skills. Additionally, resources such as coding platforms, educational apps, and lesson plans will be provided to support teachers in implementing computer science activities beyond the workshop. By the end of the workshop, teachers should have a plan to incorporate computer science concepts into an existing lesson. This workshop is scheduled for the first professional development day in September 2023.

Integration:

Teachers will execute their plans to integrate computer science concepts into the classroom during the integration stage. One strategy for this stage is to have coaches co-teach a computer science lesson alongside the classroom teacher. Initially, the director and I will act as coaches, but the plan is to train coaches for future iterations. Co-teaching allows the teacher to observe and learn from the coach’s expertise and experience, helping teachers gain confidence and deepen their understanding. The coach can help guide students through hands-on activities and will provide positive reinforcement, celebrate teachers’ achievements, and acknowledge their efforts in integrating computer science concepts. In addition to co-teaching, coaches will observe regularly and provide teachers with constructive feedback. Classroom observations, either in person or through video recordings, will be conducted to assess the implementation of computer science lessons and the effectiveness of teaching strategies. Coaches will then provide feedback, highlighting strengths and offering suggestions for improvement. This feedback loop will enable teachers to reflect on their practice, refine their instructional techniques, and make continuous progress in integrating computer science effectively.

Reflection:

Integration is ongoing, and teachers require continued support beyond the initial stages. Follow-up meetings, workshops, or online forums will be organized to facilitate knowledge sharing, questions, and further guidance. These support mechanisms will help sustain the momentum and provide teachers with ongoing professional development and collaboration opportunities. Coaches will curate and share relevant resources, including lesson plans, coding activities, and best practices, to further support teachers’ integration efforts. This stage is scheduled for the third professional development day in November 2023.

Analyzing the Design

Using Adria Steinberg’s (1998) six A’s of evaluating project design, my proposed project aligns with these principles, ensuring the successful integration of CS into K-9 classrooms.

Academic Rigor: The project emphasizes challenging and intellectually stimulating CS content. It provides opportunities for students to engage in practical problem-solving, critical thinking, and analytical reasoning. The project also encourages teachers to adopt a different mindset when teaching CS.

Authenticity: The project provides real-world contexts and experiences that connect CS concepts to students’ lives and interests. It includes relating CS to authentic scenarios, which enhances student motivation and engagement in other subjects. By establishing these connections, the project makes CS more relevant and meaningful to students.

Applied Learning: The project emphasizes the hands-on application of CS knowledge and skills. It encourages teachers to apply CS-related skills to different activities in the classroom. This approach allows students to experiment, problem-solve, and apply CS principles in real-world contexts.

Active Exploration: The project encourages students to explore CS concepts through inquiry-based and self-reflective learning. It creates an environment that nurtures teachers’ and students’ curiosity, exploration, and independent thinking; this fosters a sense of ownership in their CS learning journeys.

Adult Relationships: The project recognizes the importance of fostering supportive and meaningful connections between students and adult mentors or educators. By incorporating coaches or mentors into the framework, the project provides students (and teachers) opportunities to interact with CS professionals, experts, or mentors. These interactions offer guidance, share real-world experiences, and serve as role models for students.

Assessment: The project includes an assessment plan to evaluate student learning and program effectiveness. It incorporates post-integration surveys and other assessment strategies to measure the impact of CS integration on student learning outcomes. Gathering feedback from stakeholders informs program improvements and ensures ongoing effectiveness.

Next Steps:

To effectively integrate computer science into K-9 classrooms, conducting one or two workshop iterations is needed. This allows for refinement and improvement of the workshop content and delivery based on feedback and insights from the initial sessions. During each iteration, it is important to collect feedback from participating teachers. Assessing the teachers’ comfort levels with integrating computer science concepts and their perceived efficacy in implementing the learned strategies in their classrooms will help gauge the workshop’s effectiveness. Additionally, student learning outcomes can be evaluated through pre- and post-workshop assessments to measure students’ knowledge growth, skills development, and attitude toward computer science. Comparing these assessments will provide evidence of the workshop’s impact on student learning.

Once the initial iterations of the workshop have been conducted and evaluated, the next step is to engage rural area schools with a more concrete plan. Building on the lessons learned and feedback from the initial workshops, it is essential to develop a targeted approach specifically tailored to the needs and challenges of rural schools. Further changes to the workshop may include solutions to overcome unique barriers such as limited resources, infrastructure challenges, or teacher training opportunities. Designing the workshop to accommodate these conditions will increase its relevance and effectiveness in rural settings.

If the workshop successfully enhances teacher comfort levels and promotes student learning, developing a Professional Development Program (PDP) at the university is an excellent opportunity. A PDP would offer a more structured and comprehensive training program for teachers seeking to integrate computer science into their K-9 classrooms. The Education Department can collaborate with the School of Computing Science and instructional design experts to design a robust PDP curriculum. This curriculum should address the specific needs of teachers, providing them with theoretical knowledge, practical skills, and ongoing support to integrate computer science concepts into their classrooms effectively.

References

Computer Science Education Stats. (n.d.). Code.org. https://code.org/promote/stats

Brown, E., & Brown, R. (n.d.). The Effect of Advanced Placement Computer Science Course Taking on College Enrollment. http://www.westcoastanalytics.com/uploads/6/9/6/7/69675515/longitudinal_study_-_combined_report_final_3_10_20__jgq_.pdf

CS Journeys Resources: Mentorship and community. (n.d.). Code.org. Retrieved June 3, 2023, from https://code.org/beyond/mentors-and-community

Steinberg, A. (1998). Real learning, real work : school-to-work as high school reform. Routledge.

K–12 Computer Science Framework. (n.d.). K12cs.org. https://k12cs.org/

Using Discord in the Classroom

Introduction

The education sector has undergone a tremendous shift during forced remote education during the pandemic. Teachers have learned to adopt technology as an essential role in evolving students’ learning. Communication channels and messaging apps have emerged to meet the needs of educators and their students, and one such platform is Discord. Initially developed as a social platform for gamers, Discord has become an essential tool for teachers looking for a more engaging and efficient communication method with their students. In this post, we will discuss the many features of Discord and how they can be leveraged in the classroom

Discord in the Classroom

Students at my university have already started utilizing various technologies, including Discord, for every course. However, concerns have arisen regarding the potential misuse of these platforms for academic dishonesty, such as coordinating cheating, seeking unauthorized help on assignments, and sharing exam questions. Despite these concerns, it is important to acknowledge the positive aspects of Discord as a tool for facilitating class discussions.

Compared to traditional email, Discord offers greater flexibility in communication. Email is typically one-directional and personal, which may limit its effectiveness in specific scenarios. For instance, if a student wishes to address the entire class or a teacher would like to avoid repeatedly answering the same questions from multiple students, Discord provides a more efficient platform. Additionally, using email as the primary mode of communication can inadvertently perpetuate biases, as teachers may unconsciously form prejudiced views based on students’ language use, which may be influenced by their cultural backgrounds rather than intentional rudeness (Danielewicz-Betz, 2013). Discord allows for anonymous communication, as students can choose nicknames instead of real names.

While the concerns regarding academic integrity on Discord should not be dismissed, it is important to recognize the potential benefits of utilizing such platforms for class discussions. By adopting a proactive approach and establishing clear guidelines and expectations for students, educators can harness the benefits of Discord while mitigating the risks associated with academic dishonesty. Educators should explore strategies to create a collaborative and inclusive digital environment that encourages meaningful interactions and knowledge sharing among students.

Discord Basic Features

Privacy, moderation, and safety are among Discord’s best features. Teachers can set up rules for behaviour, and the platform allows for monitoring and removing inappropriate content. Establishing community norms and guidelines helps create a safe and productive space for learning where students can comfortably share their thoughts and ideas. Many studies have shown that students’ perceptions of learning, satisfaction, student-to-student interactions, student-to-instructor interactions, and grades improve in a remote and anonymous learning environment (Sher, 2009; Mogus et al., 2012; Gray & DiLoreto, 2016).

Additionally, Discord offers an organized messaging system that allows for different channels for various courses, assignments, and discussions. Teachers can create individual channels for different activities or assignments, minimizing confusion and making it easier for students to find and access what they need. The platform also enables students to directly message each other for quick clarifications or reach out to their teachers, thereby improving student-teacher communication.

Discord’s voice and video call features make it easy for students and teachers to collaborate remotely. The screen-sharing feature is convenient during virtual classrooms (sharing screen) or group projects, and the voice chat promotes an engaging and active learning experience. Teachers can use the platform to host study groups, where students can engage in group discussions while working on assignments.

Furthermore, Discord’s customizable interface allows for creative expression, which can stimulate student engagement and participation. Teachers can customize emojis for positive feedback, and students can personalize their profiles according to their interests and personalities. Discord also allows teachers to integrate external web tools, such as Google Docs, links, and intranets, making it easier for students to access external resources.

The Basic Setup of a Classroom Server

To get started, you need to create a server on Discord. This server will serve as the central place to store channels and information. When setting up the server, choosing an appropriate structure is essential. An organized server structure will make it easier for students to navigate through the channels.

Channels in Discord are where discussions are grouped. They allow students to find specific information about a course activity or engage in conversations about a particular subject. I recommend creating a different channel for each assessment, discussion group, or activity in your classroom. For instance, you can have channels like “Assignment 1 Discussion,” “Assignment 2 Discussion,” “Tutorials,” “Group Project Meetup,” and “Office Hour.” It may also be helpful to set up a “General” channel where students can chat and get to know each other.

Roles in Discord group the users within your server. Roles can be used for dedicated communication with specific groups of people, such as teaching assistants in your classroom. Students can send direct messages to each other and those with predefined roles. For instance, a student can ask for clarification on an assignment by tagging the teaching assistants specifically. You can also assign limitations to created roles on the server. For example, you can create a “student-leader” role that has access to create new channels but does not have the ability to ban a specific member.

The Discord support site provides a useful template that sets up channels and roles and enables security features for a typical classroom. This template can be an excellent starting point for beginners on Discord.

Discord Extensibility

Discord bots can greatly enhance the classroom setup for more advanced users by automating administrative tasks, facilitating real-time interaction between students and teachers, providing customized instruction and feedback, and simplifying assignment delivery. They offer an excellent way to maintain engagement, collaboration, and interactive learning, while also keeping students engaged and attentive. Incorporating bots is a prime example of how technology can assist educators in delivering lessons effectively and achieving better student outcomes. Integrating Discord bots is one of the most effective methods for significantly improving the quality of teaching.

Discord bots are capable of efficiently handling various administrative tasks. They can facilitate polling, schedule events and moderate chat rooms. Bots can also help maintain organized and spam-free chat rooms and send students reminders about important dates. By utilizing bots, instructors can free up more time to focus on classroom activities. To invite a Discord bot to your server, use bot hosting sites like top.gg. Once invited, the bot will be installed on your classroom server. The following video demonstrates a basic setup of a classroom and the workflow for integrating Discord bots:

Tips for Encouraging Students to be Active Participants Online

Students are more likely to actively participate in online classes if the platform is safe, user-friendly, and easy to navigate. As a teacher, it’s essential to ensure that students have access to tutorials, guidelines, and support resources to help them navigate the platform easily. Encourage students to ask questions and be prepared to respond to their concerns. Additionally, assigning role colours can provide incentives for students who complete specific tasks. For example, you can create a role called “level-2-XP” and assign it a red colour on the server. This visual recognition can motivate students to engage more frequently.

Providing feedback is crucial in maintaining student engagement and fostering improvement on the platform. Regularly offer constructive feedback to students, highlighting their strengths and areas for improvement. It’s important to provide feedback positively and privately to avoid discouraging students from participating. This approach allows students to take ownership of their learning and motivates them to persist.

Engaging students by asking open-ended questions, facilitating discussions, and creating breakout rooms for group brainstorming is also important. Initiating discussions on topics beyond the scope of the class can help students feel a sense of safety and encourage their participation. Here are some examples of questions I have used in online discussion forums with great success:

  • Is social media more harmful or beneficial to society?
  • Who would win in a hypothetical fight (if they could ever meet), Batman or Spiderman?
  • Is it better to be an only child or have siblings? Why?
  • What is the best video game you’ve ever played?
  • What’s the best software ever written?

Digital Citizenship Warnings and Recommendations

While Discord offers many valuable features for teachers, it is important to prioritize rules for proper digital citizenship. Due to uncertainties regarding data storage, academic assessments should not be conducted on Discord. Additionally, personal conversations about grades should not be discussed. It is essential to treat Discord as a public sandbox where you interact with your students and remain accessible at all times. Furthermore, it is crucial to comply with student privacy laws specific to your institution or country and refrain from exceeding those regulations.

One of the main concerns associated with Discord is the potential for distractions. The platform provides various features, such as chat rooms, voice channels, and direct messaging, which can easily divert students’ focus away from educational activities. Anonymity among users raises privacy and safety concerns, as interactions with unknown individuals can occur on Discord. As an educator, you must establish clear guidelines and expectations regarding appropriate behaviour and usage to address these risks. Posting the rules and regulations in the server’s description, promoting responsible digital citizenship, teaching students about respectful communication, and discouraging the posting of disinformation or rumours are necessary steps. Creating private and moderated channels, educating students about online safety in the classroom, and regularly monitoring the platform are additional measures to ensure a positive and secure learning environment.

References

Danielewicz-Betz, A. (2013). (Mis)Use of Email in Student-Faculty Interaction: Implications for University Instruction in Germany, Saudi Arabia, and Japan. JALT CALL Journal9(1), 23–57. https://eric.ed.gov/?id=EJ1107960

Sher, A. (2009). Assessing the relationship of student-instructor and student-student interaction to student learning and satisfaction in Web-based Online Learning Environment. Journal of Interactive Online Learning Www.ncolr.org/Jiol8(2). https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=7810cfba73c549ffc94437375b9e6e8f84336af5

Mogus, A. M., Djurdjevic, I., & Suvak, N. (2012). The impact of student activity in a virtual learning environment on their final mark. Active Learning in Higher Education13(3), 177–189. https://doi.org/10.1177/1469787412452985

Gray, J. A., & DiLoreto, M. (2016). The Effects of Student Engagement, Student Satisfaction, and Perceived Learning in Online Learning Environments. International Journal of Educational Leadership Preparation11(1). https://eric.ed.gov/?id=EJ1103654

Competitive Programming Tools in the Classroom

Introduction

For young and upcoming computer scientists, competitive programming can be a powerful tool to hone essential skills. It helps sharpen problem-solving and analytical thinking abilities and provides the creative opportunity to experiment with algorithms in a safe and structured environment. With that said, introducing competitive programming into the classroom curriculum can open exciting opportunities for students of all ages, from elementary school through high school and beyond. In this blog post, we’ll take a closer look at what competitive programming is, why educators should consider bringing it into their classrooms and how they can do so successfully.

Competitive Programming and its Benefits for Students

One critical benefit of competitive programming is the development of problem-solving skills. Competitive programming challenges students to solve complex algorithmic and logical problems under pressure. This process helps enhance critical thinking and analytical skills and encourages students to approach problems from multiple angles. These skills are essential not only for programming but also for handling challenging situations. Students participating in competitive programming are exposed to different programming languages, tools, and mathematical methods, which they apply to discover new concepts and techniques. This exposure allows students to identify their strengths and interests in software development and tailor their learning to focus on these areas.

The interactive nature of competitive programming creates an ideal platform for students to develop teamwork and collaboration skills. In a team contest, students can organize themselves into teams during competitions and work together to solve problems. This process fosters a culture of collaboration, mutual respect and helps to build teamwork. Students can learn from each other to improve their coding skills and tackle complex problems requiring the cooperation of different skill sets. The competitions are rigorous and challenging, but successfully solving a difficult problem can increase a student’s confidence, self-esteem, sense of accomplishment, and motivation to participate in more challenges (Macgowan, 2015). This self-confidence can extend beyond the competition to other areas of their lives, whether in the classroom, workplace, or personal lives.

We are, of course, leaving out the most obvious – competitive programming can enhance a student’s career in the tech industry. Competitions can exhibit a student’s talent and abilities to a network of potential recruiters and employers such as Google, Microsoft, Facebook, and Apple, to name a few. Participating in competitions can increase networking opportunities, learn about job positions and companies, and prepare for recruitment. Tech giants such as AWS, IBM, and Huawei frequently sponsor international programming competitions such as ACM’s International Collegiate Programming Contest. The skills learned through competitive programming, including problem-solving, teamwork, and collaboration, are highly valued in today’s workplace and in-demand careers such as software development, data analysis, and project management.

Integrating Competitive Programming in the Classroom

Competitive programming can be a powerful learning tool for students, but finding the right resources can be overwhelming. To ensure that your students get the most out of their competitive programming lessons, it’s essential to choose resources that are challenging yet accessible, engaging, and proven to deliver results.

There are several useful resources to consider, such as textbooks, coding challenges, online forums, and programming contests. Seeking advice from experienced professionals and replicating past contests can also be helpful. When selecting resources, it’s important to consider the age appropriateness of the material and adjust the difficulty level to match the students’ skills.

Younger students can benefit from beginner-based coding platforms such as Snap (https://snap.berkeley.edu/) , CodeCombat (https://codecombat.com/) , and Tynker, as well as game-based projects from the Code Olympiad (https://www.codeolympiad.id/). These tools contain less competition and is geared more towards learning.

For middle or high school students, resources like The USACO Guide (https://usaco.guide/general/intro-cp?lang=cpp) and alGIRLithm (https://algirlithm.org/) are gentle introductions to competitive programming.

For even more advanced students, tools like vjudge (https://vjudge.net/) can be used to curate online judges and create custom contests for practice assessments, icebreaker games, or class exercises. With these resources, teachers can engage student participation, foster collaboration, and add an exciting twist to classroom activities. Watch the following video for a simple workflow on how to create a classroom contest:

Textbooks, coding challenges, online forums, and programming contests are some useful resources to consider. Seek advice from professionals in the field who use technical interviews to find the right resources for your classroom. Replicating past contests from experienced colleagues is also useful. To identify resources for competitive programming in the classroom, it is important to look for age-appropriate resources. For example, middle or high school students may benefit from resources like The USACO guide and alGIRLithm, which are gentle introductions to competitive programming. Additionally, it is important to consider the material’s difficulty level

Conclusions and Recommendations:

As we discussed in an earlier post, gamified activities, when properly used in the classroom, create an engaging and enjoyable learning experience by adding elements such as scoring, rewards, and checkpoints. Adding these features within competitive programming can help students enjoy the process of learning new algorithms, data structures, and problem-solving techniques, making it a rewarding and enjoyable experience. There must also be an element of progress in the contest. A strong sense of progress is one of the most significant benefits of gamification. Game elements such as ranks, badges, or community recognition can be incredibly motivating. In a team contest, competitive programming can help encourage collaboration and networking through various social features, such as leaderboards and chat rooms. Discussing strategies and approaches with other coders can help students get support and feedback on their work.

It’s worth noting that, despite its benefits, competitive programming is not suitable for all students. As the competitive programming community is filled with members who prioritize winning over all else and devote excessive amounts of time to these platforms, such people struggle to balance their personal and professional lives. Furthermore, competitive programming does not reflect real-world programming, as the development workflows and responsibilities involved are very different (mehulmpt, 2020). Instead, it serves as a means to an end. If you aren’t enjoying the ride, there’s a chance you won’t enjoy the outcome, either. Thus, it is not advisable to use competitive programming as an assessment tool for assignments or exams, as this would only add stress and increase feelings of competitiveness among students.

References

Macgowan, M. J., & Wong, S. E. (2015). Improving Student Confidence in Using Group Work Standards. Research on Social Work Practice27(4), 434–440. https://doi.org/10.1177/1049731515587557

‌mehulmpt. (2020, June 27). Mythbusting Competitive Programming – You Don’t Need to Learn It. FreeCodeCamp.org. https://www.freecodecamp.org/news/mythbusting-competitive-programming/

Zhan, Z., He, L., Tong, Y., Liang, X., Guo, S., & Lan, X. (2022). The effectiveness of gamification in programming education: Evidence from a meta-analysis. Computers and Education: Artificial Intelligence3, 100096. https://doi.org/10.1016/j.caeai.2022.100096

Computer Science Curriculum in B.C.

Introduction

As an instructor of computer science at Simon Fraser University, one of my roles involves assessing the level of computer science knowledge possessed by high school graduates and the ease of their transition into higher education. These assessments help the school to evaluate the adequacy of our university’s introductory computer science courses. Unfortunately, we have observed that a considerable number of students are struggling with our first-year programming courses.

In this article, I will explore the recommendations made by the British Columbia government regarding the computer science field in grade schools. Specifically, I will investigate how these recommendations are being implemented in schools across the Lower Mainland and evaluate whether they are effective in preparing students for university-level computer science coursework. By doing this, I hope to shed light on the current state of computer science education in our region and make recommendations for improving the preparation of students for university-level computer science coursework.

Computer Science Curriculum Recommendations in K-12 Schools

There are two ways to incorporate CS concepts into a grade’s curriculum: as an entire course or as an integration of existing materials. A common misconception about computer science is that it has a bi-conditional relationship with coding, that they are one and the same. In fact, a well-designed curriculum must also include critical thinking, problem-solving, teamwork, communication skills, technical writing skills, and testing methodologies, among other vital skills. Successful implementation of a computer science curriculum not only contains coding but also equips students with other diverse tools for their future careers.

The BC government website (https://curriculum.gov.bc.ca/curriculum/adst) recommends that students from kindergarten to grade 3 are introduced to computer science basics, such as algorithms, sequencing, and problem-solving concepts, through interactive, “non-computer” activities. In grades 4-5, students move on to learn about block-based programming, granting them an entry into coding and the ability to create interactive digital media. In grades 6-7, students now apply their computational thinking skills to solve real-world problems using charts, lists, diagrams, and arrays with an introduction to computer architecture and hardware, responsible computer use, and visual programming. Finally, in grades 8-9, students learn about basic software instructions with algorithms that others can repeat, debugging algorithms, elementary modularization, binary data representation and programming languages, including visual programming.

In Grade 10, students will delve into topics such as security risks, debugging, networking, social implications, digital literacy and citizenship, and planning and writing simple programs (including games). In a separate course, it is recommended that students explore Computer Applications that center on understanding the importance of user experience. computer hardware, peripherals, internal and external components, standards, intermediate features of business applications, including word processing, spreadsheets, and presentations, operating system shortcuts and command line operations.

In addition, the B.C. government recommends a Web Development 10-course covering design opportunities, HTML and CSS, domain and hosting, copyright laws and Creative Commons usage protocols, ethics of cultural appropriation, security and privacy, and database management. While some of these areas may appear outdated, they still offer a solid understanding of web standards and communications.

In grades 11-12, students can enroll in Computer Programming 11 and 12, where they will learn various programming skills. These skills include the design cycle, error handling, debugging, problem decomposition, reading and altering code, pair programming, programming constructs such as input/output, conditions, and loops, algorithm design, functions, classes, pre-built libraries and their documentation, inline commenting to document source code, use of test cases to detect logical or semantic errors and software ethics.

In general, the suggested curriculum appears to be quite ambitious, and I have concerns about the extent and practicality of the material taught in the classroom. Several of the topics covered are typically introduced in second-level programming courses at the university level. If the high school curriculum can provide a sufficient depth of understanding, it would establish a strong foundation for many students, enabling them to tackle more advanced computer science courses without difficulty.

CS Curriculum implementations

Code.org (https://studio.code.org/courses?view=teacher) is the leading resource for computer science education, offering an excellent and well-designed curriculum to introduce students to computer science at all grade levels.

For elementary school students (grades K-5), Code.org provides CS Fundamentals. This program includes “unplugged” non-computer activities to teach computational thinking, problem solving, programming concepts, and digital citizenship.

The middle school (grades 6-8) curriculum, known as Computer Science Discoveries, builds upon the elementary school program by introducing students to more advanced concepts at an intermediate level. These include web development, communication, and problem-solving.

For high school students (grades 9-12), Code.org offers more specialized courses in computer science for students who wish to dive deeper into the subject. These include physical computing, big data, privacy, and algorithms, and advanced placement (AP) courses in Java for more advanced students.

Code.org also offers professional development courses for educators to help them effectively teach computer science. The curriculum and courses provided by Code.org are designed to help students develop computational thinking and coding skills while broadening their understanding of computer science.

Out of the 37 public high schools in Burnaby, Surrey, and New Westminster, only 4 schools use code.org as a guide, and these schools are all associated with the Advanced Placement (AP) programs. These numbers suggest that schools are aware of the usefulness of code.org materials but need more staff to implement the courses. There needs to be a standardized curriculum across these schools.

For example, the Burnaby High School website describes Computer Science 10-12 as “an introductory programming course for students with no experience.  Learn to create video games for your phone, tablet, computer, or the web.” This description is very vague and suggests that these courses do not come close to implementing the recommendations set out by the B.C. government. Other schools in Burnaby do not even offer Computer Science 11/12 courses. In contrast, New Westminster Secondary offers Computer Programming 11/12, which fully implements the government’s recommendations and more. These courses should be AP courses, depending on the depth of coverage. The difference in offerings between the two school districts is concerning for students entering higher education computer science studies as it may result in significant differences in programming knowledge.

I attempted to reach out to over 20 Computer Science teachers from different schools in the New Westminster and Burnaby areas, but unfortunately, I did not receive any responses from them. Unfortunately, there is a lack of motivation and interest in enhancing their teaching methods in CS courses. In a recent conversation with Shannon Thissen, the Regional Administrator of Educational Technology and Computer Science in Capital Region ESD 113, she confirmed that this is a common issue in all communities. She suggested that CS mentorship and coaching could alleviate teachers’ fears and uncertainties about teaching the subject.

Conclusion

The BC government’s and code.org’s recommendations for computer science education are ambitious but achievable. Higher education instructors and industry leaders should collaborate with high school teachers to strengthen and standardize the various tools and workflows currently taught in the CS curriculum.

In subsequent posts on this topic, I plan to explore various initiatives and reach out to more teachers throughout BC to gather more specific information on the curriculum and materials being taught in classrooms. Additionally, I aim to investigate the differences in implementing CS 10, 11, and 12 courses in schools across BC. It would also be interesting to compare the needs of schools in the lower mainland, which are primarily middle to upper-middle class, with those in interior communities. By doing so, we can determine if there is a significant discrepancy in the quality of computer science education and explore potential solutions to bridge the gap.

How Effective are Pair Programming Tools for one-on-one Collaboration with Students and Colleagues?

Introduction

The practice of pair programming is a software development methodology that involves two programmers working jointly on one workstation to accomplish a shared objective. The two programmers involved in the pairing exercise work together to solve a single problem, with one functioning as the driver whose primary task is to write the code, while the other acts as the observer responsible for proposing potential improvements to the code and thinking strategically about the big picture.

The driver and observer’s roles are often rotated at predetermined intervals to keep the pairing exercise productive and engaging. This periodic rotation of roles is intended to prevent one of the programmers from becoming overly exhausted or unfocused during the task. The benefits of pair programming are to generate well-designed and standardized code while improving productivity, knowledge-sharing, and collaboration among team members. It also facilitates rapid problem-solving and reduces the probability of code errors. Moreover, it allows team members to learn from each other, share expertise and knowledge, and develop better communication skills.

The pandemic forced many software developers to transition to remote work, resulting in the need for technological advancements to facilitate remote software engineering workflows. One such innovation was an extension known as “Live Share,” which was developed specifically for remote pair programming. The following video shows the workflow of the “Live Share” extension.  It also highlights several main features:

Live Share Features

Applying LiveShare to Teaching

Since the process and workflows are very similar, I aim to delve into the effectiveness of utilizing this extension for connecting with students on a one-on-one basis as well as collaborating with colleagues on teaching materials. It is worth noting that these use cases are not the primary focus of the extension. Nevertheless, I am interested in exploring the potential benefits of using the “Live Share” extension in the following scenarios:

Scenario 1: Collaborating with Colleagues

A computer science coach is tasked with helping her computer science teachers create materials for their classes. In order to accomplish this, she uses the “Live Share” extension to work remotely with a teacher to develop and refine class materials in real time. Using this strategy, teachers and coaches can more effectively foresee problems and ensure students have the support they need to succeed.

One of the key benefits of using “Live Share” in this context is the ability to work together on specific problems that students may encounter during class. For example, if there is a coding assignment that many students are struggling with, the teacher and coach can collaborate in real-time to find possible solutions and prepare debugging strategies for anticipated student problems. This can be incredibly valuable, as it allows the teacher to work through issues quickly and efficiently, ensuring that students are able to keep up with the pace of the class.

Scenario 2:

A group of five students in a class are working on a programming assignment, and the teacher monitors their progress remotely while giving live feedback. The teacher uses “Live Share” and connects to her each of her student’s IDEs remotely.  During the live session, the teacher can monitor the progress of each of her students while giving feedback using the chat functionality.  She is also able to help students debug by writing hints into their code whenever they’re stuck.  Furthermore, she is able to insert breakpoints for her students remotely to help them with the debugging process.

By examining the potential advantages and limitations of utilizing the “Live Share” extension in these scenarios, we can gain a deeper understanding of its potential as a tool for enhancing remote teaching and learning in the field of computer science. The following video shows a high-level workflow of a teacher connecting remotely with a student as an observer and engaging in a short lesson:

Remote Teaching with LiveShare on Visual Studio Code

General analysis:

During my two-hour experience with “live share,” I was pleasantly surprised by the tool’s exceptional features that aides in code reviews and debugging. The tool allows multiple programmers to work simultaneously on the same codebase, which proved to be immensely helpful, particularly when dealing with intricate problems. It streamlines the process, making it more efficient and allowing for effective team collaboration. Whether you are working on a problem concurrently with a team member, seeking feedback on your code, or looking for debugging help, this tool will certainly prove to be beneficial.

One standout feature that I came across was the capacity to share a command-line terminal. This feature, among other things, enables remote users to access the local database of the driver, which is extremely useful for troubleshooting issues that may arise during pair programming or mob programming. The real-time collaboration aspect of this feature allowed multiple developers to work together on a data model simultaneously.

Limitations and Final Thoughts

It’s worth mentioning that the extension “live share” was initially created for pair programming. As a result, some of the difficulties I have experienced when using it for teaching may be due to the fact that it was not designed for this specific use case. However, some limitations are still worth discussing when using the app for teaching purposes.

The lack of an integrated voice connection feature can be a challenge. While users can rely on external tools like Zoom, having a built-in audio feature for real-time problem-solving during code reviews or debugging would be more convenient. Although many users have requested that this feature be returned on the extension’s website, there are currently no plans.

Secondly, the observer’s IDE cannot access the driver’s debugger. While this limitation makes sense from a pair programming perspective, it poses a challenge when using the app as a teaching tool since debugging is an important part of teaching new programmers an environment or language.

Finally, setting up the extension requires technical knowledge, which can be difficult for students who lack technical proficiency. It is challenging to differentiate between a local and a production server, particularly when teaching languages or frameworks that involve local servers. Therefore, the app is best suited for teaching relatively simple languages like Python to semi-technical students rather than beginners.

Collaborating on Git!

Introduction

Background and Motivation

Git is the industry-leading version control system that streamlines software development and helps teams collaborate more efficiently. It provides a wide range of features to track changes, manage projects, store code, resolve conflicts, create branches/rollbacks and keep an eye on contributions from each team member. Its excellent performance, security, scalability and many implementations make it the standard version control system today. It also has powerful integrations within modern integrated development tools to help coordinate tasks such as code reviews merging or scheduling efficiently amongst multiple developers.

To my surprise, I discovered that when it comes to the fundamentals of Git, many second-year software engineering students are completely lost. They lack the collaboration skills needed for a successful project and don’t understand how crucial requesting proper merges is with this online tool. Instead of utilizing proper merge requests for documents through Git’s powerful online tooling capabilities, these same students are emailing their work in and waiting for manual merges from leaders, which disregards best practices and overlooks useful commands available at their disposal.

Overview

This project aims to equip second-year post-secondary computing science students with the basic knowledge and confidence necessary for working on team projects with an introduction to Git. Through specific workflows that reflect real-world situations, students will experience how software developers can use Git efficiently, effectively, and ethically when collaborating in a group setting. As most have no prior exposure upon starting their course in Software Engineering at my school – this proposed lesson provides them with an invaluable opportunity before participating in more extensive collaborations later in the course.

ISTE Standards

The exercise is developed to align with the International Society for Technology in Education standards for students.  These standards promote students taking charge of their learning by giving them a voice and encouraging the process to be led by them. This creates an empowering environment in which they can reach new levels of achievement.

ISTE 2 Digital Citizenship

By exploring the Git-suggested workflows, students will gain a valuable understanding of working and collaborating ethically in teams. We’ll ask them to consider their rights as content producers on this platform while respecting its privacy rules, by making sure they use public/private repositories appropriately and only grant necessary access when needed. This is in alignment with ISTE standard 2a. “Students cultivate and manage their digital identity and reputation and are aware of the permanence of their actions in the digital world.”, 2c. “Students demonstrate an understanding of and respect for the rights and obligations of using and sharing intellectual property.” and 2d “Students manage their personal data to maintain digital privacy and security and are aware of data-collection technology used to track their navigation online.”

ISTE 1 Digital Citizenship

By using Git, students have the ability to interact with one another and merge their efforts on a project. This allows them to share feedback within the team and quickly implement it into their development cycle for greater overall productivity. This is in line with ISTE standard 1b. “Students use technology to seek feedback that informs and improves their practice and to demonstrate their learning in a variety of ways,” and 1c, “Students understand the fundamental concepts of technology operations, demonstrate the ability to choose, use and troubleshoot current technologies and are able to transfer their knowledge to explore emerging technologies.”

ISTE 7 Digital Citizenship

Broadly stated, ISTE standard 7 states, “Students use digital tools to broaden their perspectives and enrich their learning by collaborating with others and working effectively in teams locally and globally.” This collaborative exercise will enable students to hone their skills remotely, allowing them to experience working with peers from different backgrounds globally, the exercise centers around this core standard.

Backwards Design

We utilize the backwards design principles to create a successful learning experience (Wiggins & McTighe, 2005). This process involves three distinct stages. Firstly, our goals are aligned with accepted content standards and curriculum expectations to identify desired results. Secondly, acceptable evidence is established in order to validate that these objectives have been achieved, emphasizing knowledge over activities or covered material alone. Finally, we plan instructional experiences and instruction based on what learners need to achieve their goals.

Stage 1 Identify Desired Results

Establish Goals:

There are two main departmental learning outcomes based on this exercise:

  1. (LO1a) Students will be introduced to team processes and cooperative programming and understand their pros and cons.
    • Students will understand the use and workflows of using Git as a collaboration tool.
    • Students will collaborate on a document.
  2. (LO2a) Students will understand how to communicate effectively within a team.
    • Students will decide on a workflow for conflict resolution.

Essential Questions:

The provocative questions that foster student inquiry, understanding and transfer of learning:

  • How can you resolve conflicts or disagreements with a spouse or significant other?
  • Why is it important to communicate in any relationship?
  • Why is it essential to collaborate instead of working alone in a software development setting?

Understandings:

Students will understand

  • The general workflow of Git.
  • Why it is essential to use a collaboration tool in software development.

Knowledge:

Students will know the following:

  • What a Git repository is, and what it’s used for
  • The basics of collaborative development
  • The Git conflict resolution process

Skills:

Students will be able to:

  • Fork a project
  • Push updates to branches
  • Merge branches
  • Create merge requests
  • Communicate with teammates over git

Stage 2 – Assessment Evidence

The following are acceptable evidence of learning. We will assess the following via the six facets of understanding outlined by Wiggins (Ch4). To demonstrate mature understanding, students: can explain, can interpret, can apply, can empathize, have perspective, and have self-knowledge of the concepts.

Performance Tasks: what would be sufficient and revealing evidence of understanding?

  • Students can create a branch for their own work (can apply)
  • Students can create a pull request and communicate via the Git interface with the team. (can apply)
  • Students can fork a project from a Git repository (can apply)
  • Students can add text to a document and push it to a repo on Git (can apply)
  • Students can create a merge request and communicate with others in a team. (perspective)
  • Students can resolve conflicts in a file to make a finalized merged document (perspective, can apply)
  • Students can remove a committed document and erase history (can apply)

Other Evidence Required: What are the types of evidence required by Stage 1 desired results?

Academic Prompts:

  • A merged finalized document on the main development branch: Students will add a short profile about themselves and their development background on a pre-existing document.  They will request to merge their part into the main document and deal with any conflicts. The result is a text document that contains background profiles about each of the members of the team. 
  • Properly merged commit tree on a new Git repository after the assignment. The commit tree on the newly created repository should resemble standard merge practices on Git and have evidence of proper communication between teammates.
  • Students can write proper Git messages to communicate a commit or a merge appropriately (empathy)

Quiz and Test Items:

  • Explain the Git conflict resolution process (can explain)
  • Explain Git branches and when to use them (can explain)
  • Describe forking, merging, rebase, revert, and reset (can explain)

Student Self-assessment

  • Students will reflect on improvements to adopt within their groups for a more complex document (self-knowledge).
  • Justify the current workflow and explain other workflows students could have taken to arrive at the same results (self-knowledge).

Stage 3 – Learning Experiences

These exercises are designed to get creative juices flowing and facilitate collaboration between team members. They provide specific workflows and reflections so students can see the bigger picture. They are assessed through the WHERETO standard (Wiggins, 2005):

  • Where is it going?
  • Hook the students
  • Explorer and Equip
  • Rethink and revise
  • E2xhibit and evaluate
  • Tailor to specific needs
  • Organize for maximum engagement and effectiveness

In the classroom (Optional)

Provide each group with a poster board and have students write a brief paragraph on the poster board highlighting their common interests. Each student should write their programming experience and name on individual pieces of paper. Then, manually combine the individual papers with the poster board to create a single poster representing the group. (W,H,O)

Reflect on the following question: What difficulties might arise if we attempt to concurrently write on the poster board? (R)

Setup

Read 1.3-1.8 in the Pro Git Book (W)

  1. The students will complete a survey about their previous exposure to Git, command line tools, and teamwork. The exercise will begin at a different stage depending on their past experience. (W)
    • Students who lack prior experience will be required to install Git. (T)
    • Students who have some familiarity will need to configure Git. (T)
  2. An experienced student will serve as the repository owner. They will fork (or download) a markdown file for a pre-existing project description template from a repository and transfer it to a new repository accessible by the entire team. (E, T)
  3. Reflect on the following question: What are other ways that step 2 could have been accomplished? What are the advantages and disadvantages of each? (R, E2, O)

Experience 1: Git Basics as an individual developer

Read 2.1-2.5 in the Pro Git Book (W)

  1. Students will create a new markdown file that includes their answers to the self-assessment survey. (H, E, T)
    • They will view the changes that they have not committed yet.
    • They will commit their changes. (E)
  2. Students will practice un-staging a commit and re-staging it. (E, E2)
  3. Students will examine their remote and push their work to the main branch. They will check the main branch on the repo and see the results. (H, O)
  4. Reflect on the following question: What will I do if I have staged a change but want to amend it? What if I have committed a change but want to amend it? (R)
Figure 1: Results of Experience 1 on Git

Experience 2: Git Branching

Read 3.1-3.4 in the Pro Git Book (W)

  1. The students will generate a new working branch and switch to it. (E)
  2. In the shared markdown file, students will insert a section introducing themselves. This section should highlight their strengths, developer background, interests, and sociocultural background. (E, T)
  3. They will then commit and push these changes to their branch. (E, O)
  4. Reflect on the following question: With respect to the classroom exercise, what issues may arise during this phase? What is the definition of “stashing”? (R)
Figure 2: Results of Experience 2 on Git

Experience 3: Merge Request

  1. Students will initiate a merge request. (E)
  2. They will then wait for feedback from other group members, with every member expected to participate. (E)
  3. Finally, they will merge their branch into the main branch. (H, O)
  4. Reflect on the following question: What should you look for when a group member creates a merge request? What type of feedback would be constructive and supportive to the group member? (R, E2)
Figure 3: Result of Experience 3 on Git

Reflection

This backwards design process was a great way to carry out this exercise. Evaluating the facets of understanding made it apparent that most assessment evidence centred around application, which makes sense since learning software is fundamental here. Incorporating an empathetic and reflective component into activities could also encourage students to think strategically about how Git can be used in collaboration and why they should use it as part of their software engineering coursework. Ultimately, my hope is that these exercises will promote better comprehension of using Git for future projects.

Issues with Remote Agile Software Development

Introduction

The Agile methodology is a software development approach that prioritizes flexibility, collaboration, and iterative delivery. It involves breaking down the development process into smaller segments called sprints that typically last 1-4 weeks. The focus is on teamwork, communication, and daily stand-up meetings to keep everyone informed. Agile emphasizes individuals and interactions over processes and tools, making it a popular approach in modern software development (Agile Manifesto, 2001). However, the sudden shift to remote work has impacted the personal nature of this model.

During the COVID-19 pandemic, companies like Google, Tesla, Microsoft, and Twitter implemented remote work policies to protect their employees. As the pandemic subsides, these companies are asking their employees to return partially to in-person work, which has sparked a debate about the advantages and disadvantages of remote versus in-person work arrangements. To investigate the impact of remote work policies on team culture and productivity, several studies have examined various aspects of agile development, including onboarding, client and team dynamics, and work-life balance. Some studies suggest that remote software development can be just as effective as in-person development, while others have found that it can lead to decreased productivity and challenges in communication and collaboration.

In this article, we will discuss these findings in the context of the ISTE standard for students 1.7c: “students contribute constructively to project teams, assuming various roles and responsibilities to work effectively toward a common goal.”

Remote Team Dynamics and Development

Mob (or pair) programming is a collaborative approach to agile software development where a group of developers work together on the same task. One person acts as the driver and writes code on the computer, while the rest of the team acts as navigators and provides input, gives suggestions, and thinks strategically about the future. This approach has many benefits, including improved code quality, increased knowledge sharing, and faster problem-solving. It is considered fundamental to the success of many teams, as it aids in solving complex problems by working together. However, Nolan (2021) found that during the pandemic, there was a significant decrease in pair programming and mob programming activities, which significantly impacted companies with a mob programming culture. Without this collaboration, productivity may remain constant, but it could lead to bug fixes or a more complex redesign of features in a later development stage. This is because mob programming allows a development team to consider the big picture while developing a feature, enabling them to see the forest from the trees.

Scrum is another crucial process in agile software development. It involves short daily meetings held by a team to stay synchronized and on track. While many studies have argued that these meetings have little impact on productivity and meeting deadlines (Miller, 2021; Butler, 2021), other studies have found that distractions during virtual scrum meetings can be problematic. For example, Butt (2021) found that team collaboration decreases as there are fewer discussions about user stories or project complexities, and team members may become distracted by emails during these meetings. This can limit the effectiveness of the agile approach. Additionally, attendance at scrum meetings is decreasing, which can be a significant problem as these meetings are crucial for the team’s synchronicity, development progress, and the long-term success of a project, regardless of progress in other areas.

Team meetings are a valuable learning opportunity, particularly for junior development team members. During these meetings, developers can work together, receive feedback from colleagues, share knowledge and experience, and develop confidence in their abilities (giving them a “seat at the table”). While some aspects of this learning experience can be replicated online, Schwartz et al. (2022) demonstrated that remote meetings result in different cognitive processes than in-person meetings. Specifically, certain brain-behaviour associations arise only during live idea exchanges, indicating that specific neurobiological processes underlie human co-presence and are more beneficial for learning than remote meetings.

A goal of the agile development process is client satisfaction. However, according to a survey by Butt (2021), developers reported a decrease in remote collaboration with customers due to issues such as scheduling conflicts, slow internet speeds, and availability to discuss the project. As a result, most of the feedback from the client was received via email or on story cards. Furthermore, 76% of clients reported dissatisfaction with remote meetings with developers due to delayed project delivery times, increased costs, output not meeting their needs, fewer meetings with developers, and overall lower satisfaction with the work.

Hiring and Onboarding

During the pandemic, tech companies experienced a surge in hiring to meet the demand for developers with work-from-home abilities. To ensure a high-quality candidate experience, the virtual hiring process had to be reworked. To aid in the selection process, companies increased the number of staff involved and added more interviews. The technical interview process, which often involves whiteboarding and other in-person techniques, also had to change to a remote and less desirable setting. Candidates found it challenging to envision the company culture during online interviews, while interviewers struggled to assess non-verbal communication, like body language. Furthermore, candidates with better internet connections tended to be implicitly favoured, as highlighted by Fiechter et al. (2018).

The pandemic has affected how software development teams introduce new hires to their company. Rodeghero et al. (2021) conducted a study on 267 new hires at Microsoft. They found that most were onboarded remotely and never had the chance to meet their colleagues in person, as most meetings were conducted with cameras off. This created a challenge for new hires in building strong social connections with their team and feeling comfortable approaching anyone for help. Additionally, since new developers come from different backgrounds and have different levels of experience, a standard approach to onboarding was found to be ineffective. The researchers suggest that onboarding processes should prioritize team communication, encourage camera use during meetings, assign an onboarding buddy and mentor, support different onboarding speeds, and provide up-to-date documentation on company workflows.

Finally, Team managers can face several challenges when working on new projects with new teams. One such challenge is facilitating effective collaboration and problem-solving among team members. This is particularly true for challenging projects that require creative and innovative solutions. While many remote tools are available for brainstorming and problem-solving, research by Nolan et al. (2021) suggests that initiating new ideas without in-person interaction can be more challenging and may benefit from co-located interaction. When team members are physically located in the same space, it is easier to share ideas, build rapport, and collaborate effectively. They can have unplanned discussions and engage in informal brainstorming sessions.

Work/Life Balance

In a survey conducted by Miller (2021), which included over 2000 software developers, it was found that many developers experienced an increase in scheduled meetings, group member notifications, and ad-hoc meetings, while also experiencing a decrease in the quality of meetings and their ability to collaborate with team members. Despite efforts by numerous teams to use social engagements to support their members, 74% of respondents still reported feeling a lack of social interaction in a work-from-home environment.

According to another study by Bulter et al. (2021) conducted at Microsoft, the impact of remote work varied based on individual roles, characteristics, and sociological factors. Individuals who are visually impaired or communicate through body language face unique challenges with remote communication since it relies heavily on visual cues. Additionally, neurodivergent professionals may prefer to keep their videos off during meetings as specific activities that help them remain stimulated or calm down may be misconstrued or cause distractions for other attendees. The study also found that remote work provided flexibility during the pandemic but blurred the boundary between work and personal life in problematic ways. Non-work distractions increased, while work-related distractions decreased, leading to a sense of social and collaborative isolation for most workers in their study.

Conclusion

Remote agile software development requires different skills and tools than in-person development. Teams must rely on virtual communication tools like video conferencing, instant messaging, and collaborative software platforms to stay connected and productive. This presents several challenges that must be addressed to maintain productivity, quality, and customer satisfaction. Developers and team managers must navigate obstacles such as remote collaboration difficulties, new team onboarding, and the need for social connection and support. Additionally, the impact of remote work on individual workers varies, with factors such as role, characteristics, and sociological factors playing a significant role. Overcoming these challenges requires a multi-faceted approach, including promoting team communication, encouraging social interaction, providing mentorship and support, and adapting the onboarding process to meet individual needs. By addressing these issues, remote agile software development teams can continue to thrive in the face of the ever-evolving challenges of the modern software development environment.

References

Nolan, A., White, R., Soomro, M., Dopamu, B. C., Yilmaz, M., Solan, D., & Clarke, P. (2021). To Work from Home (WFH) or Not to Work from Home? Lessons Learned by Software Engineers During the COVID-19 Pandemic. Communications in Computer and Information Science, 14–33. https://doi.org/10.1007/978-3-030-85521-5_2

Schwartz, L., Levy, J., Endevelt-Shapira, Y., Djalovski, A., Hayut, O., Dumas, G., & Feldman, R. (2022). Technologically-assisted communication attenuates inter-brain synchrony. NeuroImage264, 119677. https://doi.org/10.1016/j.neuroimage.2022.119677

Fiechter, J. L., Fealing, C., Gerrard, R., & Kornell, N. (2018). Audiovisual quality impacts assessments of job candidates in video interviews: Evidence for an AV quality bias. Cognitive Research: Principles and Implications3(1). https://doi.org/10.1186/s41235-018-0139-y

Butt, S. A., Misra, S., Anjum, M. W., & Hassan, S. A. (2021). Agile Project Development Issues During COVID-19. Lecture Notes in Business Information Processing, 59–70. https://doi.org/10.1007/978-3-030-67084-9_4

Agile Manifesto. (2001). Manifesto for Agile Software Development. Agilemanifesto.org. https://agilemanifesto.org/

Miller, C., Rodeghero, P., Storey, M.-A., Ford, D., & Zimmermann, T. (2021). “How Was Your Weekend?” Software Development Teams Working From Home During COVID-19. 2021 IEEE/ACM 43rd International Conference on Software Engineering (ICSE). https://doi.org/10.1109/icse43902.2021.00064

Butler, J., Czerwinski, M., Iqbal, S., Jaffe, S., Nowak, K., Peloquin, E., & Yang, L. (2021). Personal Productivity and Well-being — Chapter 2 of the 2021 New Future of Work Report. ArXiv:2103.02524 [Cs]. https://arxiv.org/abs/2103.02524

Rodeghero, P., Zimmermann, T., Houck, B., & Ford, D. (2021). Please Turn Your Cameras On: Remote Onboarding of Software Developers during a Pandemic. IEEE Xplore. https://doi.org/10.1109/ICSE-SEIP52600.2021.00013