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. 🙂
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.
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! 😃
So it's easy to pick-up anyone from tech-illiterate to skiddie and get them up to speed with it...
@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.
@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.
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 :)
@vanderZwan Other similar languages might work. Joy looks interesting, and I'll check it out on my own time. Thanks for mentioning it!
@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 concatenative.org 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.
@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.
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.
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.
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.
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 https://docs.micropython.org/en/latest/pyboard/quickref.html
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 (code.org) 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
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.
For people who care about, support, or build Free, Libre, and Open Source Software (FLOSS).