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 (?)
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.
https://www.csunplugged.org/en
https://www.barefootcomputing.org
https://www.bootstrapworld.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.
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.
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
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