By: Andrew Verrilli

In 7th grade, I got my first exposure to programming. At the time, I did not know it, but this one moment would shape a significant amount of my future. This exposure was my father (a software engineer) bringing me into his home office and showing me the block-based visual programming language and website.

Scratch had its public launch 17 years ago. At that time, the iPhone was a month away from being launched, and Netflix sent you DVDs in the mail. Given the times, block-based programming was revolutionary. Fast forward to 2024 – ChatGPT has 100 million weekly users, and autonomous vehicles roam the streets of San Francisco. As technology changes, the way we teach about it must change, too.

The time has come for programming to become a core class for students in grades 6th and up. This would be a radical change to the framework of modern education, and as such, the expectations and pedagogical approach to this class should be radical as well. Before I dive into what I believe a core computer science course would look like, I want to touch on my teaching background and influences.

I teach at a small independent school that practices project-based learning and takes a STEAM approach to education. In my eyes, the most important part of this pedagogy is that we focus more on the “process” rather than the “product”. With this approach, the true purpose of middle school education is fully realized.

Most people do not remember all the books they read in middle school, or every ancient civilization they learned about, or even most of the math equations they were taught… and that’s ok. Middle school, first and foremost, should teach students to be independent thinkers and people. That is to say, it should teach students the importance of taking the “process” of learning seriously. When you have the “process” of learning down, any new “product” you need to produce or problem you need to solve is attainable. The “process” of learning is what allows you to face these new challenges. 

So why computer science? Well, there is the easy argument that computer science and related technology are taking over our world, and to prepare students for the world, we should teach them computer science. While I wholeheartedly agree with this point, I think the real reason why computer science should be taught as a core class in all middle schools is even more compelling. I believe no other subject emphasizes and reinforces the “process over product” model more than computer science, especially if it is taught with this in mind.

AltaVista MS Sept2022 9493 1 1

Every day, my class starts with the same three words: “ABC: Always Be Coding!” And I mean this. As long as you are coding, you are actively practicing the “process” of learning. There are no compulsory assignments, no tests, and no specific homework. You are just asked to show up and program. Students work independently and at their own pace and follow lessons, projects, and challenges I have pre-created, but if they ever have an idea they would for something they would rather program, they are encouraged to stop those lessons and give it a shot. When they are in my classroom, they are in charge of their learning. This is tasking students with a great deal of responsibility, and there is a world where a student chooses to just write 100 print statements in a row, but that is not how it has ever gone in my classroom. Even with a student who has this mindset, their class typically goes something more like this:

A student comes to class and hears that they are in charge of what they learn and do, with no assignments and no tests. You can see the sparkle in their eyes, and I know they will not get anything done in class for the first week or so. I don’t do much to preempt this outcome, but I do make sure to ensure they have an IDE up and are at least putting a few print statements down. As much as I love programming, even I cannot say that simply writing print statements is enjoyable, and every student who has tried to pull this or something similar comes to the same conclusion. As this is going on, they can hear their fellow classmates having a blast, working on personality quizzes, text adventure games, battle simulators, etc. It is now time to plant the first seed. I don’t give this student an assignment or tell them what to do, but I do go over to their program and type something interesting in, something they can emulate. Maybe it’s changing the text color, or maybe it’s an if statement that prints a funny message with the right input; it depends on the student. After they mess around with this new method of control for a while, they typically ask their first question. “How do I do…” and from there, the process has begun. Going forward, they still may need more redirection and motivation than their peers, but they are actively practicing the “process”.

Even a student like this will at least master if statements and start using basic loops in a trimester. For the rest of the class, the ones who really take control of their learning might get loops mastered or even start using functions. The independence they learn and practice in this class also actively helps me, the teacher, to pay more attention to students who need more help getting motivated.

This model can work for most teachers and students, even with bigger class sizes. And that is not due to anything other than the joy students get from programming. Statistically, computer science/Engineering is second only to Drama/Art as students’ favorite class (Code.org). So not only do students buy in due to the responsibility they are given, but they buy in because they enjoy it.

This pedagogical approach does set teachers up for one very specific yet important challenge: grading. When you don’t give assignments of any sort, and you have some students writing object-oriented programs while other students are barely getting to loops, surely it must be impossible to grade?

If you are focused on “products”, then yes, it is nearly impossible to grade. I tried this once, and it required me to constantly make new assignment rubrics and assign them to students individually on our LMS. It was extremely inefficient and I could never imagine doing it with a class of more than 15 students. But then it hit me. If the focus of the class is on “process”, then shouldn’t the focus of assessment be on “process” as well?

This epiphany has made assessing less stressful and has allowed my feedback to more accurately assess my students’ approach to the learning process. The key that makes this all work is coming up with the right standards to assess on (my school also practices Standards Based Assessment). The following, are the 3 standards I assess students on:

Code Readability: 

This standard promotes best practices in coding, but more importantly, it allows students to more efficiently ask each other for help. Asking each other for help is another way to promote students’ taking control of the learning process in class.

Efficiency:

In addition to promoting best practices in coding, this standard ensures that students think about how they use the control statements they learn about.

Iterative Design:

This standard promotes student investment in the learning process and is by far the most important standard to assess. This assesses students on their willingness to reflect on their work and make it more efficient and readable. If standards are to be a reflection of what you expect from your students, then this one is essential.

With these standards, I am able to assess any student working on any project, regardless of level. When students read their comments, they immediately apply feedback so that with each project, their creative process becomes more efficient. A process-based assessment empowers each student to think critically about how they learn and create.

While there is no doubt that widespread computer science education is increasingly necessary in a technology-centered world, the real reason we need to teach computer science is that it provides a creative environment for students to experiment with the process of learning. If taught in an engaging and student-led manner, we will be able to educate a generation of learners who are prepared for the modern world and all of its challenges.

About the Author

Andrew Verrilli is a passionate computer science educator who currently teaches at Alta Vista School in San Francisco. His classes have included Everyday Programming, Board Game Makers, and Natural Design. One of his favorite projects to work on with students is P Tunes, a web-scraping Python program that saves links to students’ favorite songs on YouTube. Andrew is also an avid egg tosser.