Dear Friends and Students,
This article is highly debatable, much like the age-old question of
whether the chicken or the egg came first. Twenty-seven
years ago, during my academic journey, I encountered a significant challenge. As
part of a lab exam, we were tasked with writing a quicksort algorithm – a
sorting technique used in computer programming to arrange numbers in ascending
or descending order. While I understood the logic and could outline the steps
in plain English, I struggled to pass the test case when it came to
implementing it in C++. Regrettably, this remains a personal weakness to this
day.
The mere recollection of that day still makes me break into a sweat. I grappled with the code, but the test case remained unyielding.
Finally, in the last frantic 10 minutes, I transcribed the code onto paper and
submitted it to the examiner. An anxious moment followed as she asked,
"Will this code work?" My response, laden with uncertainty, ranged
from "Yes" to "No" and "Maybe." Ultimately, I
lost 15 marks due to my inability to memorize the syntax, even though I grasped
the underlying logic and had written pseudo code.
It was this fear that led me to pursue a career in Pre-Sales at
Wipro. However, my ability to comprehend and adapt
others' well-written code to my context allowed me to excel in managing
projects and even take on the role of Dev Manager. Nevertheless, if tasked with
passing a test case in an examination-style coding assessment today, I might
still falter. In fact, I have faced such failures in the past, and I am
confident that many students studying computer science degrees share similar
experiences.
The landscape of coding education is undergoing a profound
transformation. Last year, when I boldly proclaimed at a conference
that "Generative AI would write code in the future," I faced
backlash. I also asserted that there is no need to teach "How
to write code"; instead, we should focus on imparting "Code
Comprehension Skills and Task Comprehension skills." These ideas
were met with disagreement.
What may come as a surprise is the following statistic: "GitHub
Copilot, an AI-powered code completion tool, is now being used to generate an
average of 46% of the code that developers are writing. This marks a
substantial increase from the 27% generated by Copilot in June 2022."
Copilot has gained popularity among over 1 million developers and has
generated more than 3 billion accepted lines of code. With this rate of
adoption, one must consider the necessary changes in programming education at
universities and in the assessment tests for fresh graduates in coding
contests.
If you visit codeium.com/playground, you can write a simple prompt (a
problem statement in English), press "Enter," and watch as AI
generates code for you. It supports coding in over 70 languages. In light
of these developments, I propose a renewed focus when teaching and
assessing computer science students:
Code Comprehension Skills (40%): This skill
set involves reading and understanding code. It empowers students to maintain,
extend, debug existing code, and craft new code that is efficient, reliable,
and maintainable. Encourage students to read code regularly, practice coding
with AI assistance, employ debugging tools (e.g., Codecheck), consult the
documentation, and seek answers from AI tools like Bard, Bing chat, or ChatGPT.
Task Comprehension Skills (40%): These
skills encompass understanding requirements, breaking tasks into manageable
steps, and identifying the necessary data structures and algorithms.
Syntax and Writing Code (20%): The
significance of syntax and writing code has evolved, with my recommendation
being to reduce its weight to 20%. We are entering an era of Generative AI,
where the emphasis shifts towards comprehension over rote memorization.
Does this approach make sense? Will it work? My intuition says,
"Yes, it will!"
Best regards,
Ravi Saripalle