How to teach a high-school CS course?
Happy New Year, Hacker News!
Short: How would you teach a High-school Grade 11 Computer Science course?
More info: I'm a STEM teacher at a Canadian high-school in China. Our program is for Chinese students whose parents want a western complement to the Chinese system. In effect, students may be wildly talented or wildly unready - I have students with a 5 in AP Calculus and students without a gist of functions. I must wear many hats at this school. My new hat is Computer Science teacher, which falls to me because I write a little code (e.g. my React Native iOS app 99to5.com for learning physics, self-promo apologies). How can I make this class most edifying for the most students?
Thanks for any advice! And I wish you joy and good-fortune in 2024!
If this is a one-school-year course then you have time to cover a tremendous amount of ground. Looking back on when I first learned programming, I would say the things that helped the most were (1) writing code as soon and as often as possible, (2) starting with a relatively simple language, (3) being given snippets of code and having to choose which of 3 or 4 possible outputs was the correct one, (4) being given working programs and having to enhance them (eg, add a language feature to a simple compiler, or add transactions to a simple database, or enhance a shopping cart on a web page, or modify a simple text editor, etc.), (5) programming a game, (6) being given pieces of code and having to identify the bug.
I used to teach AP comp sci in the US, and my 95% of my students passed the AP exam. I use a combination of resources, but primarily used CS50 and code.org resources. The hardest part for me was differentiation. I would have students who could finish a semester of problem sets in a week, and students who couldn't finish one in a month. I think it depends on the goals of the course how you organize it. My goals were familiarity, comfort, and growth, so I had several tracks students could pursue, all of which would give them the same credit. Happy to share any knowledge or wisdom further.
Build to something tangible, such as a basic video game (minesweeper, tic tac toe, etc.). To get from zero to there will cover a lot of concepts. Begin the course by saying by the end of it, you will be able to build this yourself: [show the game]. Then have each lesson relate to the end result, little by little.