5 ms·
Ask HN: 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 (?)
- gilch 4y ago> 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 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 https://github.com/jupyterlite/jupyterlite
- gilch 4y agoOne 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.
- gus_massa 4y agoThe 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 4y agoI 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
- logicalmonster 4y ago1) 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.
- atomicnature 4y ago> a teacher's first priority ought to be to satisfying their students' goals I'd like to challenge this assertion. I'd argue that the teacher's goal is to improve the goals students come up with, sometimes even helping them abandon unproductive goals & pick more appropriate goals. For example, if you let students choose for themselves what sort of mathematics they want to do, I am pretty sure that they're going to pick easy problems (in general; there will be some exceptions). Hence, the teacher's task is to expand the vision for the student, to help them target bigger problems, more difficult ones and to expand their capabilities beyond what they envisioned for themselves. If a teacher cannot challenge the student to envision something bigger for themselves and the world, in my worldview, the teacher hasn't done a good job.
- logicalmonster 4y agoAren't you approaching this thinking from a likely (far) wealthier perspective? There's people in very bad living conditions trying to learn computers to dramatically improve a shitty life. I'm not saying learning computer science theory isn't great, but the details of these potential students lives should be considered and are important for what their goal in trying to learn. Would you go and tell a student this? ------------------------- I'm sorry you have heaps of rats and cockroaches crawling in your shack my student. I'm sorry you don't have working electricity. I'm sorry your brother is sick because he can't afford extra medical treatments he needs to fix his condition. What's that? Your main goal is to start out on an entry-level Java job so you can help your family and want to be guided on the right path for that? Oh, no. No, no, no. That's NOT appropriate. We need to teach you computer science theory first. If your life spirals out of control in the meantime, at least you'll know it was for an appropriate cause.
- _448 4y agoStart here: https://www.csunplugged.org/en https://www.csunplugged.org/en https://www.barefootcomputing.org https://www.barefootcomputing.org https://www.bootstrapworld.org https://www.bootstrapworld.org https://www.nand2tetris.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.