I'm teaching a beginner computer science class for middle and high school students soon (about 10 students). Does anyone have any suggestions for teaching groups programming effectively, especially with an age-diverse group?

I'm working on a course, and I've never taught a class before. So pointers to related resources would be greatly appreciated. 🙂

Further explanation:

I currently have not chosen a language. I'm considering Python and Scratch, but really almost anything works.

It is a 12-week course with one hour class each week. Pre-recorded lectures are possible to make the most use of in-person time.

The requirement for the class is a laptop of some kind provided by the students themselves. I have no guarantees beyond that.

I have complete freedom with the curriculum.

/cc @ndanes @blackmore

Update on the computer science class:

I think we're going to learn Forth. It's simple, provides the basic concepts of computer science, and shapes a different mindset than most other languages. (thank you @neauoire, for suggesting it!)

Resources related to Forth would be greatly appreciated. Especially on teaching it, interpreters for it, and interesting projects to make in it. 🙂

Update on the computer science class 

We did the first class! Thank you everyone who has given input so far. 🙂

We haven't gotten into Forth just yet. This class focused on what computers *are*.

When I first asked the question "What is a computer?" several students predictably pointed at their laptops.

We discussed various things in the world (desktops, laptops, smartphone, ENIAC, abacuses, brains, and toddlers) and determined if they were a computers or not. Then we discussed computer history.

Just got back from teaching the next (third) lesson of our computer science class! We went over the basics of Forth, including the stack, basic operators, and word definitions.

Best of all: everyone seems to be getting it! After I explained words, someone said, "That's crazy! I didn't know this could be so fun." 🙂

We're going through the EasyForth, aided by the applicable chapters of StartingForth.

Thank you everyone for your help! 😃

@josias @ndanes @blackmore Julia looks interesting, and it's quite popular amongst scientists...

I'm loving Haskell, but probably not a good introductory language. Not great for I/O...

@alcinnz @josias @ndanes @blackmore

And whilst I prefer #bash, #Python is far more portable, beginner-friendly and versatile for a lot of users.

So it's easy to pick-up anyone from tech-illiterate to skiddie and get them up to speed with it...

@alcinnz @josias @ndanes @blackmore not to mention that a #Pi0 / #Pi0W or #Pi400 kit are also affordable options and allow to follow the lessions, too...

@josias @blackmore @ndanes Some languages are designed specifically as teaching languages. e.g. #Pascal. I think it's a mistake for schools to try to be like industry or to try to accommodate industry. Should be the other way around. Schools should /lead/ & they should be ahead of industry. And in entry level courses the instruction should be designed to simplify learning.

@ndanes @blackmore @josias If there is a real need to prepare students in more of a vocational scenario, #Ada is a Pascal influenced but has industry applicability. Not many jobs in Ada but it's a good learning language.

@josias @blackmore @ndanes Ada also teaches students to take a disciplined approach. I don't know how other languages with weak typing end up being the center of academia but it's a bad idea.

@koherecoWatchdog @josias @ndanes I would still go with Python as it’s both simple to learn and very popular so a student who is interested to learn more can easily find ton of resources or fun projects.

@koherecoWatchdog Absolutely. This class isn't going to teach anyone industry programming. It's about getting our feet in the water and learning tools that will help regardless of industry viability. I'm planning on forming a programming club with students who are interested after the course is over.

@LovesTha I do not know that. They're homeschool students so they aren't issued Chromebooks through the school, but a couple might have them anyway. I might be able to avoid Chromebooks if necessary.

@josias Chromebooks wouldn't be a showstopper but would push you to an online programming platform.

@josias @ndanes @blackmore for projects, a good topical option is a Wordle clone, then option Lister, then optimal guess suggestor.

@josias @ndanes @blackmore then JavaScript, since they already have a js interpreter installed (a web-browser).

@josias I can't recommend Starting Forth enough, it's an excellent book, it's illustrated and witty. It's entirely available online:

Uxn is probably the closest thing to doing graphics that you'll find, but there are also good emulators out there for the jupiter ace with graphics(the manual for the machine is EXCELLENT too)

Postscript is a drawing language similar to forth which might be worth looking into :)

@neauoire @josias Postscript is nice to play with, you don't have to learn very much to get started!

Specifically Forth, or also concatenative languages in general? I really liked Joy (from a theoretical standpoint, barely coded anything in it)

@vanderZwan Other similar languages might work. Joy looks interesting, and I'll check it out on my own time. Thanks for mentioning it!

@josias do you have a plan for the kind of work environment you want to let them work and play in?

I'm sure you've already come across, right?

@vanderZwan I don't have a plan for the environment, which is one of the reasons I asked for suggestions.

I haven't come across before. It looks interesting, though maybe not so approachable for complete newbie students.

@josias Oh, no, it probably isn't useful introductory material. I meant it more as a wiki for you to sift through and hopefully find good material or inspiration, since it gives a decent overview of various projects in the concatenative language "space"

@josias learning forth 200%. the illustrations alone are worth it, but the entire book (at least the first few chapters) are the polar opposite of the classic "Programming with X" book.

@josias (that being said! im also a _why stan, so is worth checking out. not sure if Ruby is the type of thing you're going for, but I'd imagine kids would like the code readability

@PetabyteStudios Haha. Corescript is good, I had forgotten about it. How extensible is it now? Is it theoretically possible to make visual games or no?

@josias It would be possible, but I never designed it to make games. (although I did make a text adventure in it once)

It's still a good beginner language though, I was able to get my Mom to understand the basics in a few minutes.

@josias @neauoire
In addition to the classics Starting Forth and Thinking Forth, which I think are exactly right for high schoolers, Elizabeth Rather wrote a newer, more standard 'Handbook of Forth' textbook. There are some issues of Forth Dimensions magazine available online, and these contain some great resources too.
I teach Mecrisp forth on microcontrollers and I love it. gforth is a good choice for PCs.

@neauoire @josias what kind of stuff can you do in forth?

Like with python they can use it for software dev, there are a lot of demands for python, and they can use is as an alternative to mathematica. But forth isn’t a greatly known language and it could be harder for them to keep on learning by themselves after the course for the lack of support online.

@neauoire @josias it seems only to run on emulators, so it’s kind of sad that students won’t really be able to keep the software they make,

@louisrcouture @josias forth runs on everything, it's one of the most portable embedded language.

@neauoire @josias

This seems to be an extremely difficult language with highly unintuitive syntax.

This review says that Forth is not suitable to be a general purpose programming language. It seems to lack key programming concepts like class and some data structures like heap.

It’s also basically looks like am assembly remake. Not a good language for beginners at all.

Learning the language for basic programming is initially quite enjoyable. Starting with only Words and Numbers with which the Words are either interpreted or compiled into the dictionary in an interactive mode gives instant feedback to the user. However, when more complicated constructs such as variables need to be used, than the initial euphoria of playing with the new language comes to an abrupt end. Just trying to figure out how to use and manipulate floating point numbers has a steep learning curve.

@louisrcouture @josias On the contrary, it's an extremely simple language, rivaling lisps, with no precedence rules, no complex toolchains, no classes, or types or any other distractions. I believe that it will create a good basis to learn programming from.

Assembly is probably the ideal language scope to start off, it has very few primitives, it will create programmers solving fundamental problems, instead of students who spend all their time navigating frameworks and deps management.


I know this isn't probably super helpful but I really liked this tutorial for lisp/beginning programming.

Some of the ideas/methods of explanation might give you inspiration tho!

@josias i liked teaching python. There are some books that tech python by showing kids how to write a game.

For teaching programming it needs to be very easy for students to install the language /compiler easily on their machines. This can be tricky for some languages.

For small kids if you have the budged you could play with micropthon. There are small boards dedicated to teaching kids.

@josias _why's poignant guide to Ruby is pretty fun, and would likely appeal to people across age groups


You can start with Scratch and continue with Python (and maybe show them Godot).
That way you demonstrate that the concepts are what matters, not the syntax.

@josias May I suggest Python as first programming language. May I also suggest using PyBoard+MicroPython. Kids enjoy programs that interact with the physical world


Do you have any goals in mind?

A final project or specific outcomes or concepts that you want the students to come out with?

@emacsen I have some goals. I want to give a basic foundation for programming that they can explore on their own after the class, including possibly joining a computer club I'd like to start.

I've also been considering working on a final project, but I don't know how much we can get done in 12 one-hour classes.


Yes, 12 one-hour classes is tough.

Two resources come to mind immediately. One of them is a book written by someone I used to know, called "How Think Like a Computer Scientist"

This is a solid programming book, written by academics in a high school environment.

But the other might be more fun, depending on the group, and it would be to program a video game.

Let me tell you how I'd do it...


With so few hours together, you have a rough road ahead, so I'd suggest you start with a goal of building a video game.

People love video games, and this could help get the students excited.

I'd do what they call "Flipping the Class", where the homework is learning the material, and the classroom is used for questions and help. This is how you can optimize for your time- not by lecturing but by facilitating.

I'd use the TIC-80 and Tamara O'Malley's videos:


The homework becomes "Get this installed (or use your own installation of it so they can log in, etc.) and then their assignment is to watch a video or two and follow along.

During the classroom time, you can review the higher level concepts (variables, functions, etc.), identify weaknesses in understanding and offer help.

You can also facilitate student->student help as well.

By having their work along the way, you can evaluate their progress and identify problems as they come up.

@josias my biggest advice: prepare to find out how much assumed knowledge you've acquired.

Computing isn't a naturally intuitive human experience. Beginners have almost no background or context at best and at worst have confidently incorrect assumptions.

Reconciling your current knowledge with your student's knowledge with compassion is a rare skill that takes time to finesse.

Not sure about the language, but you could maybe distribute live bootable usb key with linux, so everyone has the same environment, they send their file to some email or dropbox to save the work, or even better, commit to some repo ?

If it's within the budget, I recommend integrating physical devices, like simple robots, with the curriculum. When I was first learning to program, it was so much fun to tinker on a Lego Mindstorms kit flashed with Lejos, which allowed me to use Java. Seeing a tangible result brought to life by your own work is rewarding and has a long-term impact.
Another similar, but more affordable, idea would be to use scripting in a simulated/game environment. Many games come with Lua scripting interfaces and their own physics engines.

@goodkinghenry I would love to do that. Unfortunately, that's not within budget, as it's a free class and I don't have the resources myself to provide physical devices.
A simulated game environment does sound plausible though. Thanks for the input!

@josias I would absolutely recommend going for scratch, some form of basic, or python depending on the level in that order

@josias especially as kids might show up with Chromebooks so having. Abrowser based thing would be really helpful

@josias If you're working with kids that have zero coding concepts, Hour of Code ( is a pretty easy out of the box way of getting started.
- it's free
- it's Scratch, so the code keywords you need are on the screen
- there's a set of excercises that start really, really easy and then get harder to help with working at their level
- it comes in flavours including frozen and minecraft (which helped sell it to my kids)
- it introduces programming concepts one at a time

@josias haskell, for sure. Pascal isn't the worst. Depends on the course goals, really.

@josias Personally, I'd recommend the #RaspberryPi Guide that is part of the €/$/£ 100 "Pi 400 Kit".

AFAIK there's a free PDF version of it and almost all sessions could be literally done on a #Pi0 / #Pi0W, as it teaches programming #Python.

And Python is the 21st century version of #BASIC, not to mention more portable than #bash and providing a quick yet powerful learning option that is easy to start yet not absurdly childish or with a low skill ceiling.

Also an entire class set of #Pi400 Kits is affordable and even if one fecks up the OS, a microSD is easily bought and quickly reflashed.

Sign in to participate in the conversation

For people who care about, support, or build Free, Libre, and Open Source Software (FLOSS).