I've taught CS for about 15 years now. To get the majority of kids in a class actively involved is an art. It's less about the tools, though those can help, and more about who you are, as a teacher. It takes time to develop that. The ability to read kids, adjust your lessons on the fly, and keep their attention. Sometimes it's about developing relationships and trust within the school, which can take months or even years.
For me, there is no silver bullet, and every year I adjust to suit the class I'm teaching. This year the kids were much less able than the year before, so we played more revision games, and came back again and again to the basics, just from different angles. The year prior was a solid lot, and I was able to go beyond the curriculum and have fun with them exploring things.
Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.
I was a CS teacher for 8 years and the way I was able to hook like 85% of classes was I was introducing them to Hackits [1]. They all loved it because they use the web so much and this gave them the feeling of being able to look inside the matrix
This was also how I got into CS many years ago. The old tricks still work
These are genius. Thanks for sharing. I'll definitely be sharing w/ my kids when they get old enough. What's your take on the lower bound where kids are generally capable of figuring these out?
Breaking peers into groups and letting them compete on wargames is also a fun exercise. Not sure how this will be impacted by LLM-powered coding software, however.
I put the second puzzle into ChatGPT. It makes an extremely stupid mistake but gets lucky.
GPT gets JavaScript numerical semantics utterly wrong but the only non-integer operation is a red herring: "the result [of 14/3] is approximately 4.6667, but JavaScript will store it as 4 since we are not using floating-point numbers"
No. There's a limited amount of hours in a day and dollars in a month I spend on discovering things.
I spent about four hours looking into LLVMs myself. I decided it was worth it for VSCode autocompletion and not worth it for anything more complex.
I'm working through a networking textbook right now in my learning time. So far my estimate is that that's a much more useful long term.
But I peek at HN posts about LLVMs. People are always telling me if I do yet one more thing I'll be wowed, but people are never posting concrete evidence of amazing things they've done. My heretics tell me that means this* is vaporware.
*Not that LLVMs are vaporware, but LLVMs allegedly an order of magnitude more useful than Copilot are.
And the results of this specific question aren't interesting. GPT 3.5 getting the second question of the first lesson in a middle school intro to programming class wrong shows its limitations. GPT 4 getting it right merely shows it's as least as capable as your average middle schooler before they've been taught programming, doesn't tell me anything interesting about it's ability to help me.
This smells of Dunning-Kruger effect. Four hours is not adequate time to research the current state of the art of LLMs. You're adopting an authoritative tone a subject which you readily admit you've only spent four hours learning about.
Exactly what evidence are you looking for? What is your bar of excellence? I've had more "wow" moments than I can count. So much research is going into this space. It's definitely worth it to do a bit more yourself before writing it off.
I am bookmarking this website for when my kid is old enough. So please don't shut this down. Host it on cloud flare or something which has a good free plan.
You just unlocked a nice memory for me! I remember many years ago going to a website like that (probably the one mentioned in the blogpost) and feeling a lot of satisfaction every time I was able to “hack” the exercise. Thank you!
This is similar to my hook for friends and family - show them how to use Inspect Element to change parts of the page they didn't think you could change.
That usually is an eyeopener to how the whole thing is working.
For a totally different way of getting it to work than the others:
Back in my highschool there was an intro to programming course and no teacher, so every year one of the math teachers was recruited to take it over the summer and teach the class the next year. The best one was the geometry teacher, who kinda took the lazy route - she was the one I found out about this scheme from, and was totally willing to admit when she didn't know something.
She ended up encouraging students to help each other and was extremely lax with the rules, resulting in: two or three of us who wandered the classroom to help others, one showoff who kept people interested in what they could create (one example, in the classroom he made a chat program and gave everyone a copy, then weeks later activated a hidden feature that popped open the CD tray of everyone using it, which turned out to be about half the students), and another who joked about using the "blackboard compiler" - we somehow got one more student than computers so he volunteered to go without, and did his work in chalk on the blackboard (yes, where everyone could see it, and the teacher was in the room and knew what he was doing), only actually coding it once someone else was done and a computer freed up.
Some people did get frustrated at times, but it never lasted long because of how she encouraged us to help each other for all the work. Only during tests was she strict.
I've seen parents fall into two camps when this dynamic arises in classes with a wide(r) spectrum of ability:
First group of parents are happy that kids are helping each other out, acting as "teacher aides" for their class peers, especially the parents of kids being helped because this dynamic drops the "teacher"-to-student ratio (i.e. slightly more individualized attention per student at the expense of the student teaching assistants).
Second group of parents acknowledge that student teaching assistants develop some form of leadership skills but aren't happy that the tradeoff seems to be at the expense of learning new knowledge that the teacher should, in theory, be imparting. Also, there's probably a limit where student teaching assistants might/can become bored teaching instead of learning if the dynamic continues on too long or across multiple classes.
By far the most memorable college class I took was an advanced electronics lab where I ended up as the "unofficial TA". I was by no means an expert but I guess I got a reputation for picking the material up quickly and being able to help guide my classmates to the same understanding. It was honestly a little stressful but in retrospect being pushed to internalize what I was learning deeply enough to be able to explain it clearly to fellow students was highly beneficial to my own learning process. I was never all that interested in grad school or academia, but the meta-lesson of that course has stuck with me in guiding career choices... I tend to seek out opportunities for consulting or mentoring type roles knowing that they will help further my own learning as well.
> knowledge that the teacher should, in theory, be imparting
I get that teachers at high schools are not subject matter experts, but it blows my mind that they're expected to teach topics that they themselves do not understand.
I come from a family of teachers and I've seen the effort that some of them put in behind the scenes to learn these topics, and they do have the best of intentions, but if I was a parent and found out my kid's teacher was all "I don't know this topic so you guys just do whatever" I'd be a bit peeved as well.
> if I was a parent and found out my kid's teacher was all "I don't know this topic so you guys just do whatever" I'd be a bit peeved as well.
That's certainly a bad situation, but the teacher's attitude can make a world of difference.
I heard a very interesting response from a student in one of those classes where the teacher didn't know much. Essentially, "This class was really interesting. I never would have learned any of this stuff without (the teacher) taking the risk." The student's other choices were band or study hall, not Advanced Swift with Chris Lattner.
I assume around here people understand that real SW devs easily make twice what a teacher makes, and there's just no way a school could afford someone who "really" knew what they were doing on a technical front. (Of course there are other factors, but suppose you found one cs teacher and they do great work. Now how do you find another? It seems like panning for gold.)
From what I've seen, the vast majority of high schools still hold the belief that CS in a branch of "business", and those in charge know neither pedagogy nor content.
This is either way too cynical or an obvious consequence of the free market economy.
I think things can be done differently, but there are some hard constraints in place.
Things are discovered, this is a messy, error prone process full of false leads, backwards reasoning and incorrect assumptions. Then this is compiled into a neatly ordered stream. and feed to others. the problem is that the neatly ordered stream is boring, uninteresting and hard to focus on.
There is a hidden aspect to teaching. When done well it is not to just impart knowledge on a subject. It is how to learn.
The best classes I have ever taken, the most interesting ones that have stuck with me the longest. Were with a teacher who did not know the subject well but was enthusiastic about learning it and was able to guide the class into learning it together. When you learn this way the process is more akin to discovering a thing for the first time. you first hand experience the things that don't work, you understand not only what the thing is but why it is.
The best teachers are able to recreate the experience of discovery when teaching. Most are unable. I know I have a hard time teaching in an interesting manner.
The "best" professors/teachers i saw yet, where radiating an exhuberant joy while talking about their topic. It is fun to listen. They where a russian teaching in america who recorded a series about physics for TTC, The Teaching Company. He got voted best professor in america twice.The other one was David Malan of Harvards CS50 on [0]. Beware though, it sadly spoils you for later lectures by others.
I don't know how they do it though - I could imagine enjoying teaching a subject once in awhile, but to be "on" for 5 or 6 identical classes a day and then repeat that until the pension kicks in seems pretty tough. Of course, professors have it better than high school teachers since teaching isn't their primary job.
Some people really like to teach others, so I can understand how teachers would find joy in this.
I think it has to be especially hard to maintain that in K-12 where all the children have to be, but most of them don't want to be.
At least college is optional, so there is a higher percentage that actually desire to learn. I think that would make it easier for a teacher to keep their passion for the job.
> Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.
There's nothing wrong with kids not enjoying CS at the end of the class. It's an elective, meaning some of them are there because they aren't sure they'll enjoy the subject and want to test the water. Your (I'm sure excellent) teaching probably saved a few from enrolling in CS and then dropping out or wasting a year switching majors.
This might be somewhat controversial, but I believe the point of early CS education should be to expose students to computational thinking and get them a sense that some problems are easy to solve with computers (if you can break it down as a series of steps) and some are incredibly hard. I think it's normal it'll click for some students and not others (intro to programming at the college level is reputed to be completely bimodal as well). [0]
> …should be to expose students to computational thinking and get them a sense that some problems are easy to solve with computers (*if you can break it down as a series of steps*)
Emphasis mine. This bit, taught through CS or otherwise, is so incredibly useful. I’ve seen so many people throughout my life if all ages run into an issue and have no idea how to approach it because it was ‘too big’. Internalizing that can be so incredibly useful.
> Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.
> Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.
I'm not a teacher but I think this is probably true of most subjects. I wish my high school math teachers had applied this idea in their teaching.
I never taught kids, but I taught numerous classes and labs to university students and professionals at various levels. Programming is like a game and is fun for a lot of people. It's an easy topic to teach, but there are a few (obvious) rules
1. Exercises should be solvable, not too easy, not too hard, and self-contained.
2. Students come with extremely different abilities, so you need to have exercises of gradual difficulty to accommodate everyone. You want everyone to be able to find some solutions otherwise they'll be frustrated.
3. If you provide good material, you can relax during the class, the computer does the work for you
"The Skillful Teacher", by Saphier, Haley-Speca, and Gower, is an authoritative and comprehensive guide to the craft of teaching. Like the commenter says, there's a lot going on, and so potentially a lot to juggle.
For me, there is no silver bullet, and every year I adjust to suit the class I'm teaching. This year the kids were much less able than the year before, so we played more revision games, and came back again and again to the basics, just from different angles. The year prior was a solid lot, and I was able to go beyond the curriculum and have fun with them exploring things.
Edit: You'll never get all the kids to leave the class loving CS, but you can usually get all of them to leave the class not feeling frustrated by it.