HACKER Q&A
📣 eimrine

How to become a great CS teacher for youngsters?


I am going to teach Computer Science to a group of young students, 20-30 motivated people aged 10-25 on a volunteer basis in my village without the experience of being a teacher. The task that I set for myself is to reveal to young people all the possible areas of computer science in 10-15 lessons and then divide them into smaller groups according to their interests, after which only occasionally monitor their progress. This set of lessons is going to be much broader than CS50, with much more demonstrating of electronic stuff, but with almost no homework. Because I suppose that no programming language should be mandatory to everyone but you know, everyone should know what is a bit, what is a code, and how long is a way of light travelling for one millisecond.

What should I watch out for in these classes that are aimed at everyone? What, on the contrary, is not worth mentioning despite the temptation? How early should I show things like: systems programming, functional programming, declarative programming? How much to give discrete mathematics? At what stage should I give Lisp, C, JavaScript or Python, Wolfram Alpha? What names do I need to mention besides Claude Shannon, Alan Turing, Linus Torvalds and von Neumann? And last but not least, what should I do about the fact that I have never used smartphones (iPhone/Android) and I have no interest in them, when the vast majority of my students will only have such a "computer"?

Here are few books I am going to start from, but I have a strong feeling that a lot of CS topics are missing in the list:

Charles Petzold - Code (mandatory)

Paul Graham - Hackers and Painters (mandatory for younger students)

Alan Cooper - The Inmates Are Running the Asylum (mandatory)

Steven Strogatz - The Joy Of X (mandatory for younger students)

Fred Brooks - The Mythical Man-Month

Linus Torvalds - Just For Fun

https://missing.csail.mit.edu/ (mandatory for advanced students)

Don Knuth - TAoCP volume 1

SICP/The Land Of Lisp (?)


  👤 logicalmonster Accepted Answer ✓
1) IMO, a teacher's first priority ought to be to satisfying their students' goals. So, what is the actual goal of these young people in coming to you? Are these people planning to pursue an actual academic and theoretical path, or do they want to become working professional programmers? You mentioned a village, so I wonder if they might just generally be a bunch of young people from poor backgrounds wanting to prioritize leveling up in life, not necessarily learning the details of CS theory. As interesting as functional programming might be to some of them, many of these people might just want to get their foot in the door somewhere with some entry-level Java job.

2) What is these peoples' experience level with programming and computers? You're listing a lot of good things, but you might end up going into too dense of detail for some beginners and scare them away with too theoretical of a discussion too quickly before they get their feet wet with some basic problem solving.


👤 _448
Start here:

https://www.csunplugged.org/en

https://www.barefootcomputing.org

https://www.bootstrapworld.org

https://www.nand2tetris.org

In an ideal situation I would like to see, what I call, a "ladder strategy" of teaching a subject i.e. as with a ladder, a curriculum should have two vertical support, one for "theoretical" part of the subject and the other the "applied" part of the subject. And as with the ladder these two supports should be connected with strong links at each level, from basics to advance, so that the students can climb up the ladder of that subject with confidence.


👤 gus_massa
The topic is too broad. My recommendation is to give they a good enough kick start to motivate them to learn more about the subject instead of a general knowledge that is more difficult to apply immediately. Start with a hands on course of programing.

Just teach them how to nest two `for` and two `if`

It's incredible the amount of task that you can solve with two `for` and two `if`, and they look like magic to uninitiated. Functions may be a nice optional objective in case some students go too fast. Under promise and over deliver.

Stick to one language. I recommend Python that is beginner friendly, battery included but is also used professionally and has a ton of advanced libraries. [1]. If someone knows another language, allow them to use it.

If they can't use a normal computer for each one, it may be a problem. It's hard to install a programing languages in smartphones. What about Jupyter? I never tried that, but it may be a good alternative.

For a hand on curse, I strongly recommend to have 2 teachers instead of 1. With 20 students it's too easy to get distracted and answer a question that is too long with one student. The second teacher can help to avoid the dead time of the rest of the class. For 30 students I recommend to have 3 or 4 teachers. I guess this is a personal project, so it's hard to get helpers, but perhaps you can invite a different one for each class.

In my curses for kids I used problems of integer math that can be solved by brute force nesting two `for` and two `if`. (In the last clases we have some advanced topic like naive primality check.) (Actually, the amount of `for` and two `if` was not fixed.) They are easy to understand and to create new ones, and there are many recreational math problems that are trivially bruteforzable.

The math problems were relevant for the activity that organized the curses. Perhaps you can try with some turtle graphics like the old logo. I think there is a package for python for that, but I'm not sure it's smartphone friendly, I never tried the package and I never used it in a curse. I just guess it may be interesting.

Avoid explaining bits, just use numbers, magic numbers. It may be a problem with floating point equality, but just explain that floating point numbers are weird and will be explained in the next curse.

[1] Later they can get enlighten and learn Racket. Save some parens in the beginners curse. [2]

[2] I'm ashamed for the amount of value I got from using a little of html + javascript + php, but I prefer that beginners avoid any language where 1+"2" is not a syntax error.


👤 atomicnature
I have personal experience doing something similar for the past 2 years.

My opinion is that in the phrase "CS Teacher" the more important part is "teacher", and not "CS" :)

The first task is to raise the aspiration level of the students' to high levels; much higher than what has been done previously, to excite them that there's potential for raising capabilities. Humans tend not to come pre-loaded with civilisational aspirations (merely biological impulses and all sorts of mediocre influences), hence raising aspirations is an uphill battle. You can get some excitement initially, but keeping it going while working for it day to day is tough.

The second task is to teach how to accept unpleasantness in the process. There is a natural energy saving tendency in humans, unless they are highly trained against such tendencies. Scholars are people who have trained themselves to acquire knowledge and skills, overcoming the biological human tendency to avoid exertion. One must set personal example, in tackling hard problems, and also use books, media, examples, and speeches to fire up the capacity to exert oneself. The most important quote here is: "There is no royal road to mathematics (or subject X)". Also, something I've found is that examples from sports psychology/training can help in learning better.

The third task is about installing a belief in the power of consistency. So building up a system where everyone works together in a consistent and systematic way helps with the knowledge acquisition process. It is about continuous followup. Not a single thing gets done, or assimilated properly without continuous followup. So build systems to keep people continuously engaged, to raise the quality of their understanding through quantitative and qualitative methods.

These are some of the things I've learned over the past 2 years. If you're interested in learning more, you can ping me at shrijith `at` hexmos.com


👤 gilch
> And last but not least, what should I do about the fact that I have never used smartphones (iPhone/Android) and I have no interest in them, when the vast majority of my students will only have such a "computer"?

Android is basically Linux, which is great for development. You can install the Termux app (https://github.com/termux/termux-app) on Android phones, then you have a shell and a decent package manager. You can install compilers and interpreters and text editors. Python, Emacs, and so forth. (And shell is a scripting language in its own right.) The Play Store version of Termux is kind of crippled, so you'd want to sideload. It might be easiest to sideload the F-Droid store first and install from there. Recent versions of Android (12+) also aggressively kill processes to save battery life, which makes Termux much less usable. It takes some technical know-how to turn that off, but there are instructions linked in the Termux repo.

I'm less familiar with the iPhones, but they're a lot more locked down. I'd expect Android phones to be more common because they're cheaper, but sufficiently old iPhones are not that expensive either. There are some iOS IDE apps, but I don't think they're quite as complete as Termux can be.

Single-board computers like the Raspberry Pi are fairly cheap and can run Linux. I think even iPhone users can ssh into a server. Linux is multi-user, so students could share. Simple command-line apps don't require a very powerful computer by modern standards.

There are also a number of online IDEs that would only require a decent web browser. Some of them might be compatible with iPhone Safari. I'd consider JupyterLite, which is free and runs entirely in-browser. https://github.com/jupyterlite/jupyterlite


👤 gilch
One can learn a lot about programming by talking to ChatGPT. Sure, it has a bad habit of making stuff up, but you can run the code to see if it works.