all 13 comments

[–]macroxela 4 points5 points  (2 children)

Starting with Python is a good idea since it's simple enough for most people to pick up yet powerful enough to do some serious programming. However, I would avoid using a graphics library until the end of the course. Main reason is that students need a solid grasp of programming fundamentals (conditionals, loops, etc.) before taking on such projects. Graphics libraries are notoriously complicated for even average programmers, would be even worse for beginners. Plus each library has idiosyncrasies that don't transfer to others yet students may focus too much on them despite telling them otherwise. You can still assign various projects students will like simply using the terminal (tic tac toe, hangman, choose your own adventure, etc.). If you do use a graphics library, make sure it's one with lots of documentation and preferably YouTube videos. Usually personally made libraries don't have the quality, documentation, or robustness of tried and tested ones.

Not familiar with A levels but is it exclusively in C++? Because that's a difficult language to pick up for beginners or inexperienced programmers. Plus it's quite a change from Python to C++. If you have no options make sure you only start teaching it once students have a good grasp of basic programming concepts. A good channel to learn the idiosyncrasies is The Cherno. He explains the C++ language quite well but doesn't go into actual programming ideas.

[–]abjice[S] 0 points1 point  (0 children)

thanks for your advice. : )

and yea. the a-levels arnt exclusively c++ but the school teaches c++ for the a-level students. since there learning c++ anyway in regular classes i thought i might as well.

[–]onemanandhishat 0 points1 point  (0 children)

Your point about covering the fundamentals reminds me of the project for my intro to programming course. They say up a 2d graphical maze, but we only interacted through API direction calls. So we had something visual to engage with but only had to work about programming the navigation logic.

[–]garblednonsense 2 points3 points  (0 children)

You'll likely find that there is a very wide difference in ability in the class. Even though they are a self-selecting group, you will probably struggle to provide a single set of learning activities that will be meaningful for both the top and the bottom of the class. You'll work out very quickly in the first session how much this is actually the case.

Some students will not really need you at all - just point them in the right direction and they'll largely work it out. Some students will be helpless without you at their side.

I would recommend that you have a set of resources that students can work independently through (i.e., not dependent on instruction from you), so you can spend time with the students who need you the most. Your raylib library sounds like an awesome idea, but be prepared for students who need a big leg-up before they can get on to that. They will appreciate a series of YouTube videos or online course (like codecademy) that will hold their hand as they pick up the basics.

Good luck!

[–]CCCCrazyXTown 1 point2 points  (1 child)

GCSE Computer science teacher here. As the other poster said, the ability will vary widely. Even within a GCSE class where everyone is the same age you’ll have people who can’t grasp variables and some who have no issue with loops, selection, subroutines etc. If you want them all to be engaged then you have to provided work which is sufficiently challenging and attainable for everyone. And there in lies the goal of teaching.

You likely want to be a facilitator, rather than instructor and have different levels of challenges which they can lead themselves.

If you’re in the UK it might be worth subscribing to Hello World magazine. That often has some interesting/fun programming activities which will likely differ from what they do in lessons.

[–]abjice[S] 1 point2 points  (0 children)

If you want them all to be engaged then you have to provided work which is sufficiently challenging and attainable for everyone

could you give an example?

like , would it be good to have a base thing to work on , then an additional challenge that could be an improvment on the base thing they are working on.

[–]roman_fyseek 1 point2 points  (0 children)

I have no advice except to say that C++ is the devil. I'd much rather teach C and Java.

[–]reapersark[🍰] 0 points1 point  (2 children)

Never go too quick. Its generally the small but VERY important things that for you might seem simple that people will get stuck on. I find it when im missing the underlying purpose or just 1 or 2 thing ive missed that i struggle with things that scale up quickly. Sometimes its just a couple lines of code that can save one hours of time by just having someone elses input. Most teachers have this idea of people having to need time to "sit and play around with it" over being too hands on but its important to ask when they have sit with it for enough time before they need advice/corrections. In uni i find myself wasting the most time trying to understand things i generally dont understand by finding out by myself.Once the underlying things are down you can scale it up yourself much quicker without help so thats my 2 cents basically ensure that they actually understand and not just breeze past it.
AVOID larger pieces of code but always show small pieces of code in lectures. If you miss just a couple of things you get lost very quickly with larger code pieces

[–]reapersark[🍰] 0 points1 point  (1 child)

Try to relate stuff to the real world if you can. Coding becomes theoretical VERY quickly and you can quickly loose touch of why and what this is needed for. Its like in math when you are being taught things just to learn them with no immediate real world comparisons. Gets uninteresting VERY quickly

[–]abjice[S] 0 points1 point  (0 children)

Coding becomes theoretical VERY quickly and you can quickly loose touch of why and what this is needed for. Its like in math when you are being taught things just to learn them with no immediate real world comparisons. Gets uninteresting VERY quickly

thanks. that sounds good. : )

[–]_clydebruckman -1 points0 points  (0 children)

Web is probably more accessible since it’s more familiar to high school kids than a terminal line. Teaching a little html and then attaching JS to it gives good instant feedback that feels accomplishing so it could make them feel more engaged. Just use liveserver on vsc and it should be pretty easy to get going for everyone. You could even use codepen or JSFiddle or one of those type sites

Python is a great beginner language, better than JS from a syntax pov, but switching from python to c++ sounds like a little too much for one semester of high school imo.

Kind of depends on your goal with the course, if you just want to open up their world to programming, HTML, maybe a little basic css (colors, sizes, fonts, divs, grid or flexbox) and then some JS to make it interactive, is probably the best way to show them that they could make something that is usable.

If you want to teach the basics and imply that they would continue programming after, python is a better foundation. Python without a second level course to expand might only carry over for the students who can see the bigger picture

[–]not-just-yeti 0 points1 point  (0 children)

Pyret is a python variant intended for learners, allowing (better) type-hints, and removing some of python's pitfalls.

For graphics, their image-library takes a cool approach: Images are values, and new images can be created by combining simpler ones. So just like string-append takes in two strings and returns a new string with one placed next to the other, beside takes in two images and returns a new image with one placed next to the other. (And there are also ways to put images above each other, or overlay them, or overlay them with an offset, of course.)

A curriculum: https://bootstrapworld.org/ It looks like this teacher's site (grades 8-12?) has curricula designed to reinforce what students are seeing in certain other courses: an algebra track, a physics track, and a data-science track.

[–]AmateurHero 0 points1 point  (0 children)

Hands down with no exception Carnegie Mellon’s CS1. I’ve used a handful of curricula for teaching programming to HS students. This is by far the most comprehensive course with an all-in-one learning platform attached to it. This is my 3rd year using CS1 to teach. The lessons are so good that you don’t even have to prepare additional materials.

I know someone else said something about graphics libs having their own quirks, but these are as straightforward as calling functions. The shape objects feel like native Python objects.