When my daughter was in grade 5, I volunteered to teach programming for an afternoon while the teacher could do one-on-ones.
I took Robocode[1], made a basic Robot class that the kids could easily extend, and then taught them just enough logic and syntax so they could have their robots battle their classmates'.
It was a huge success. We had to close the door to the classroom because the kids were so loud, cheering their robots on.
Whenever a kid was called by the teacher to do their one-on-one, they protested "one more minute, I need to improve my robot!"
In September, my daughter starts university in software engineering; mission accomplished! ;)
Was this a school for gifted kids? I tried teaching some very basic python in high school once when someone formed a "computer club" and it was a total waste of time. Nobody was capable of understanding it. Maybe younger kids are just more receptive but this experience solidified to me that understanding programming is something that some small subset of the population is capable of and can't really be taught to the others, same as my compsci professor and some studies said, and my experiences working tutoring suggested.
I can confirm. I went to a gifted school and Lego Mindstorms was on the curriculum.
Then in (conventional) high school I hosted a workshop on beginning Python (with Turtle) and half the people couldn’t understand why x=2 after “x=1” and “x+=1”.
They need a consistent framework to understand what is happening - "variables are like little boxes where you can put a number or some letters" and "The equal sign lets you change what is in the box."
x+=1 just complicates the situation; use x=x+1 to avoid adding more special rules for now.
This stuff is teachable, but it doesn't help that the framework is very different than the similar-looking expressions from math class, where "x=1" followed by "x=2" is not allowed.
It’s nearly impossible to remember what it feels like to not know this information. Often the best programming teachers are people who recently learned the material, for that reason.
I remember exactly my first time learning to code as a kid, the book I used used the "box" analogy for variables and it worked well. It was fairly uneventful experience, I just worked through the exercises at my own pace and was through the book in a couple of weeks.
The problem with learning to program in a classroom environment is that one kid may find exercise one difficult, another kid may find exercise three difficult, etc, the probability that any kid will get 'left behind' at some point is high. Classrooms are pretty bad places for learning.
I've never taught programming, but i find your last point hard to believe. Programming is human-made, and it was created to be understood and used by humans -- in contrast to say, math or science where things just are. Maybe you can claim that only a small subset of people can get great at programming, but i think that the vast majority of people can manage to learn the basics given enough time.
Yes, they can. No, you can't force them to learn it in a practical way quite the same as you can, say, algebra. It's like teaching kids to paint. If you magically made everyone interested in painting most kids could become decent painters, but in real life they just aren't. Teaching a programming course to the general school population won't make 80% of kids capable of programming any more than compulsory art classes would make them into graphic designers.
I mean let's set aside the empirical sciences for a moment but mathematics is not just some weird set of rules that fell from the sky. It's designed by humans and for humans.
And for obvious reasons empirical models are also generally made to be understood by humans, though there at least you can argue that the underlying reality was not designed to be intelligible (and frequently isn't hence why we've got shortcuts like thermodynamics to reason about chaos).
Physical activity has existed since long before Homo sapiens. Do some people find it easy to participate in strenuous physical activity while others find it hard?
Why do you think that situation would be different for any other kind of activity that humans take part in?
> Later I discovered CoreWar [2] and enjoyed that until I learned all of the main classes of algorithms/bots had been identified.
The evolvers sometimes break the bomber-scanner-paper stereotype. They just don't scale well to normal sized cores.
I wonder if one could make a better ML system than genetic programming for creating CoreWar warriors. Perhaps a neural net connected to a differentiable SAT solver?
> The evolvers sometimes break the bomber-scanner-paper stereotype. They just don't scale well to normal sized cores.
That's interesting that you're familiar with how it scales to different cores; I've never played around with the core parameters that much./
In fact, it's been about 12 years since I last played around with CoreWars, so I'm not up on the newest theories.
It would be interesting to see how a genetic algorithm fares against current ML strategies. I'm completely in the dark as to how AlphaGo/AlphaZero work, I only know classifiers/SSD/autoencoders. Would be fun to learn with this environment tho.
> That's interesting that you're familiar with how it scales to different cores; I've never played around with the core parameters that much.
It's simply the combinatorial explosion: it's easier to find a surprising and good program in ten lines with pointers limited to a max value of 800, than with hundred lines and a pointer max value of 8000.
In case anyone on here is interested, I made a simple, in-browser JavaScript robot battle programming game like this (human vs. CPU only) that embeds VS Code's editor: https://jaredkrinke.itch.io/cyber-coliseum
Don't expect too much -- I just made this for fun :)
I watched the youtube videos of all the battles so far and I was really surprised to see that a very simple strategy (in retrospect) was sufficient to win the competitions.
I've been waiting to see if someone implements an AI bot that's trained on all the bots in the competition but maybe you just don't need to.
In most of these sorts of competition environments, it's a lot less work (and cheaper) to make a competitive hand-tuned algorithm that a really competitive AI version. If you are already working on a similar training environment with a bunch of free/cheap compute jumping in for a weekend or whatever could give decent results, but otherwise you're likely going to get destroyed by bespoke tactics.
Years ago, I played around with Robocode and genetic programming to "evolve" battle strategies. I was always surprised by how simple the generated winning strategies were. They were always counter intuitive.
Actually the discussion of using an AI trained robot has been frequently discussed on the various forums. Nimbella has even an "python ai" runtime that would support it. However does not seem the winning robots actually uses any A.I.
I took Robocode[1], made a basic Robot class that the kids could easily extend, and then taught them just enough logic and syntax so they could have their robots battle their classmates'.
It was a huge success. We had to close the door to the classroom because the kids were so loud, cheering their robots on.
Whenever a kid was called by the teacher to do their one-on-one, they protested "one more minute, I need to improve my robot!"
In September, my daughter starts university in software engineering; mission accomplished! ;)
[1] https://robocode.sourceforge.io/