Hacker News new | past | comments | ask | show | jobs | submit login
Ask HN: How to become a great CS teacher for youngsters?
11 points by eimrine on March 24, 2023 | hide | past | favorite | 14 comments
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 (?)




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.


> 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.


Aren'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.


First of all, I myself come from a non affluent background, and the students I'm working with are also from a pretty economially/socially disadvantaged background. The factor doesn't change the teacher's job.

The teacher's job is, if you're in grade 5, to take you to grade 6. Sometimes you as a student may dislike the process, since it involves learning stuff you think is not useful, but the teacher ought to know what's profitable to learn. The teacher is in a better position to take the student out of the poverty, than the student themselves. If they don't know what the student needs to learn, then the teacher fails the student. That's my point.

Essentially, the teacher's job is not to bend to student requests on what stuff they're to learn. If the teacher is there to "satisfy" the student's goals alone, then there's no hope for civilisation or for the students themselves.


If OP were asking about a public school role, I'd say that your reasoning would be a little more understandable.

Maybe we can agree to disagree, but I think considering the needs of the students to be more important from this description.

It seems like the students are coming to him outside of their normal school time to try and learn. So they might have a specific goal that makes sense for them. And I don't know these students life details, but since OP mentioned village, it's conceivable their current biggest problem in life is why they're there in the first place: learning enough practical stuff to get a job.

I love computer science stuff too, but that can't matter as much to me if I was starving and insecure in my life.


> If OP were asking about a public school role, I'd say that your reasoning would be a little more understandable.

A teacher is a teacher, whether in public school role, or your local swimming coach or gym trainer. The job of a teacher is to expand your capabilities, to help you see a more capable you and help you get there, one step at a time. The major hurdle is that humans (regardless of economic background) have "bad brains" and many times the learners have horrible expectations about what education is meant to be. There is an effort to build an image for education as a comfortable journey. That's a dangerous image for civilization, and for people of all economic classes. Education is the great equaliser. Remember, when euclid said "There is no royal road to geometry", it was to an emperor! The emperor had his own goals ("royal road to learning"), but such a thing doesn't exist, whether in public schools, or physical exercise, or any other capability such as music/painting. A real teacher will remove the misconception (like Euclid did with the emperor). False salesmen will "teach" you geometry in 3 easy steps :)


> So, what is the actual goal of these young people in coming to you?

I used to have a talk with some kids, their parents and school teachers in our village. All of them use to complain about bad quality of CS teaching in our area. Their goals are different in details but in general they want just to become closer to computers somehow. Somebody wants to get an entry-level job, typically in gamedev field. Somebody wants to improve their electronic toys by programming a microcontroller. Somebody wants to became a musician or a graphical artist and they realize that ability just to play an instrument is not enough nowadays for a musician. Few students have a great reading (therefore researching) skills, their ability to learn anything and everything is not utilized fully by a school program.

> Are these people planning to pursue an actual academic and theoretical path, or do they want to become working professional programmers?

Most of them have not finished elementary school (in our country this is 12 years of learning starting from 7 y.o.) so a question of finding a work is not going to be a highest priority. One guy is expelled from university and he is going to try again getting a formal education this autumn. So, finishing my classes does not guarantee a student to find a work at all, because of age, but at least I can guarantee a good time spending, filled with discussing of valuable things limited to only CS/STEM areas.

To tell the truth, I do not have a defined sequence of the whole classes, I have only a plan of the first 1-hour lecture and aim to gather a feedback questions for the sake of building the second one. Also I have no formed group, just I have promised to a few youngsters to improve their CS skills if they manage to gather in a big group for the sake of respect to my time resources.

> What is these peoples' experience level with programming and computers?

At least everybody is able to install TikTok on his device with no help. One girl speaks English better than me (a foreign language to all of us). Few boys have some skills with electronics, like repairing MicroUSB in smartphone or playing with Arduino without changing a flash or schematic. One really young boy used to write programs on some smartphone application using graphical programming approach. But most of them, of course, are not very shiny. I do not want to just filter those weak students because almost certainly they will work with computers somehow, and at least they should be familiar with keyboard (our schools do not insist on touchtyping or learning hotkeys or even get familiar with any GUI).

But definitely I am willing to work more with talented students because obviously this is a way to spend my time with greater outcome.

> You mentioned a village

Please stop considering living in a rural place as a bad life. Yes, most of our citizens earns less than $500 monthly, but we have an access to a lot of treasures: free and fresh water everywhere (both in wells and water pipes, because of no pollutions into our local river), organic meats and vegs (because everyone uses to have a farm and advanced families use to have a cattle), clean air everywhere, almost no criminality (because everybody knows everybody), real nature (beautiful forests with no dangerous predators), no noise/light pollutions. Our children use to go to school on foot and no car is required for that. Cockroaches are not a common problem in our households. I have not ever seen any house without electricity except of simple dachas which are not supposed for spending nights.

Last but not least, if my student will find any entry-level IT job because of my help I consider this as a great success and maybe a sign to keep improving in a teachership.


Try to keep the group small. Let's say 10. It's very difficult to work with a group that have so many different ages and levels if it's bigger.

If they have their own Arduino, it may be a interesting option to use the C like language that Arduino has.

It's not about preparing them to a job directly, one semester is not enough in spite the advertising of bootcamps . It's about helping with the initial steps that are sometime very confusing.

They must install the compiler and guess where to write and how to run the program. and learn what the error message says and how to fix it. Even some tricks like using Google Translation to read the answers is Stack Overflow is not obvious.


> Please stop considering living in a rural place as a bad life.

Just FYI, while I live in a city, I adore the countryside and would rather live there.

But depending on the country or area, it can be mired in substantial poverty. So without knowing any details before, I'd just have urged you to consider that in thinking about what to teach these people as they might prioritize something different than pure computer science theory.


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.


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.


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


> 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


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.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: