Coding course for school students includes tons of books, online courses and video tutorials on how to code in Python or Java, I still see them struggling to learn. Many start but never finish. In fact, I won’t be surprised if popular platforms such as Coursera or Udemy release their course completion data (my best guess is 20–30% of students finish end to end).
In my humble opinion, practice is the best way to learn programming and that’s where most of the students, especially newcomers struggle. We all know that learning a concept is easy but implementing it in a different scenario is hard and that’s where the importance of practice is. I wanted to design and develop a course around practice. At the same time, during execution, I want to provide real-time help so that student can make move when stuck.
After all, I find designing a course very similar to designing a software system — Analysis, Design, Develop, Implement and Evaluate (collectively known as the ADDIE model). With my background in designing enterprise systems and a keen interest in teaching, I could apply a lot of experience. While designing a course, I also utilized some experience of Bloom’s Taxonomy.
Coding Course Design for School Students
Identifying high-level units is relatively easy. Usually, I have seen courses begin with Hello world and gradually move into the syntax of loops & data structure. However, with a focus on problem-solving, we started with algorithm, flowcharting and trace tables. We introduce tools such as flowchart maker, trace tables etc. well before writing a lot of code.
Next, I along with my team began to identify concepts which build on top of each other – all small concepts such as single decision (if statements), dual-decisions, multiple-decisions etc. with real-life examples. It is much easier to write if statements if you know what a decision is and how multiple decisions can be combined to create a powerful decision expression. Similarly, before we introduce built-in functions, we introduce the very concept of function, reusability and modularity.
Practice and Practice
Each chapter starts with a lesson in which students learn concepts in reading comprehension (if you remember those English reading passages) style. Each passage (concept) comes with 5-6 questions (gradually increasing in complexity) and a detailed explanation. Once the student finishes a lesson, he/she is presented with at least two worksheets (practice). Students can take their own time in practising and everyone learns at its own pace (no rush, no pressure). We incorporate a variety of questions – Multiple choice, Fill in the blanks, Short answer, and coding (primarily). This is to ensure that students don’t get bored with the same type of questions. After all, retaining interest is one of my main objectives.
A group of chapters is a unit and we designed an exit test. If a student doesn’t do well, we ask them to go back to the unit and do more practice. We are adding more worksheets continuously so that students never run out of questions for practice. Since we use our home-grown coding/assessment platform Perfectice, we provide a lot of analytics on student’s performance and pin down exact areas of improvement.
Problem Solving Skills
I also wanted to design a course that is independent of programming language and I could do it only if I focus on teaching problem-solving skills – after all, coding is all about solving problems. Keeping this in mind, each coding problem makes student draw flowchart, write trace tables and develop bubble chart (wherever applicable). Once a student learns one programming language, learning another one would be a breeze – that’s our promise.
I have added enough bells and whistles to capture student feedback at each stage – student should be able to provide feedback about the quality of the questions, solutions, code, alternating code. I will share more details on the student’s feedback on another blog. In case you are interested, you can read some feedback here. I also plan to measure the success of the course using some data points and will share them later.
This is how I have designed a coding course for school students and teaching students effectively. Many of you have learned coding from scratch and have built a successful career in IT. I welcome your suggestion to improve by providing guidelines, tips and feedback.