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.