Hi,<p>I want to start a small community pilot project to help young kids, 8 and above, get interested in programming. We will use video games and robotics projects. We want to keep our tech stack as simple as possible. Here are some of the choices:<p>Godot + Aurdino: We can use C in Godot and Aurdino. Aurdino might be more interesting for kids as opposed neatly packaged Lego Kits.<p>Apple SpriteKit + Lego Mindstorm: We can use Swift with Legos. But cost will be higher.<p>Some of the projects we are thinking are:<p>Game-ish:<p>1. Sound visualizer like how Winamp and old school visualization were. Use speakers. And various other ideas around these concepts.<p>2. AR project that shows the world around you in cartoonish style. Swap faces etc.<p>3. Of cousre, platform games.<p>Robotics projects:<p>I see a lot of tutorials for Arduino such as robots that follow sound or light, or stuff like lights display. We will use mostly those.<p>Some harder project ideas I have are for drones, boats, and other navigational vehicles. This is why I want to use Arduino. But is C going to be too hard for young kids to play with?<p>What do you recommend? If this works, I would like to expand it and start a company around it.
For kids that young, Scratch, Logo, or BASIC would probably be good options. They tend to focus on simple syntax with an emphasis on seeing an outcome pretty quickly.
Aside of IoT the #1 choice for learning programming is obviously Ruby.<p>For several reasons:<p>1. Designed with dev-x as a primary goal.<p>And that’s crucial for absolute beginners who don’t want to waste time understanding legacy decisions of python or shitty infra of c++ etc.<p>2. Both truly oop and packed with strong fp features - so you can learn almost any modern programming idea without hacks and workarounds.<p>3. Serious and modern enough for huge projects yet friendly and simple enough for absolute beginners.<p>So you would not throw away your skills like if you’d learned BASIC or some other “nobody really cares in 2021” kind of language.
There are a lot of options out there already. From low level audrino stuff to high level commercial stuff. Most of them aren't widespread, because the kids aren't that interested in the nuts and bolts aspect.<p>That said, the classes for this aren't too hard to find. Some schools and college summer camps do offer this kind of class. Schools can even get grants for the equipment.
> But is C going to be too hard for young kids to play with?<p>Speaking from personal experience, I “learned C” alongside actually learning BASIC when I was 10-12. When I say “learned C” I actually mean I “learned basic imperative programming with C-style syntax”: simple single-file programs inside of a main block. Arrays (probably all statically allocated), but few (if any) pointers of scalar quantities, no structs, and I doubt I ever even used headers or macros. By contrast, I understood the BASIC runtime and overall language much better than I did C.<p>But I was able to be reasonably effective for a kid: writing simple ASCII games, interfacing with some educational robotics toy with a C library, physics simulations, and so on. So I don’t think C is too difficult for kids, or even necessarily more difficult than any other language. The <i>complete specification</i> for C is obviously too complicated for most kids, as are the details of safe and performant native code, but you can quite effectively create small programs with a minimal subset of C.<p>That said, it is probably harder to find reference material for kids learning C in 2021. And the nice thing about Python is that kids can much more easily do more complex tasks, plus it has a bespoke interpreter for learning the basics. Kids are also more able to create their own complete applications in Python than C. Of course learning basic imperative programming with C is a very enriching experience for a child. But doing the same with Python-style syntax seems like a perfectly fine replacment.<p>In my view C is ok for kids - it might even be the best choice if you’re focusing on hardware - and that the important thing is getting started with something. But I would caution against using C unless the specific code you have in mind is relatively simple. Complex memory management considerations or data manipulation that’s very close to the metal is probably inappropriate for first-time young learners.
I used to teach intro programming at a summer camp for high school students and now teach full-time at an undergraduate college.<p>Two tips:<p>1. Don't worry about "impressive" projects. Even the simplest interactive programs will be impressive to new programmers. I have jaded college students that go crazy showing off their third-week rock-paper-scissors programs to their roommates and parents.<p>2. Think about the environment. If you want to do programming (as opposed to Lego kits or Arduino) you should look into a cloud-based IDE like repl.it so that everyone has the same interface and no one needs to install software. Choose a simple editor that allows them to run programs in one step.<p>Scratch is good for doing animations, stories, and simple games. The block-based interface becomes clunky and confusing when you try to write larger programs, but it's a good place to start with younger kids who enjoy the creative aspects.<p>Python is a good choice for writing text-based games. Don't underestimate the power of this approach for teaching new students: They can clearly see the link between what they write and what the program does and then make the leap to coding up their own ideas. It's harder to do that with a self-contained project that relies on external packages and pre-written code.<p>Twine is an interesting option. It isn't "programming" in the same way that Python is, but it's easy to use and writing interactive stories gets students thinking about sequential logic, conditions, and using variables to manage state.<p>You'll know you're doing it right when the kids are running with your examples, making up their own projects, and bouncing ideas off of each other.<p>I have a huge soft spot for Karel the Robot, which was very successful when I used it with my high school students. Look into it if you want a simple, creative predecessor to Python that isn't Scratch. I don't know if there is a high-quality free web-based version currently available.
Python. It's designed to be easy to learn and has hundreds of thousands of libraries, from Web backends to ML to Data Science to NLP to virtually anything you could want to do with a computer. There's even a Python library Numba for compiling Python to the GPU. Many APIs such as GPT-3 only provide Python libraries and no other libraries.<p>Want a progress bar? tqdm instantly adds a progress bar to a Python for loop.<p>Want to measure earthquakes? There's a library for that. Want to parse Java? There's a library for that. <a href="https://pypi.org/project/javalang/" rel="nofollow">https://pypi.org/project/javalang/</a><p>I recommend learning starting with Thonny and then going to PyCharm.
I tried teaching my 10 year old nephew bash and python about a year ago. What I learned is that you have to make it fun for the kid. For example, I taught my nephew the "say" command and he went berserk over it for about an hour.
Do you actually want to introduce young kids to programming or programming robotics?<p>The two things are different.<p>Scratch has proven to be a wonderful programming introduction for young kids. You can even control physical robots with it:<p><a href="https://en.scratch-wiki.info/wiki/Hardware_that_can_Connect_to_Scratch" rel="nofollow">https://en.scratch-wiki.info/wiki/Hardware_that_can_Connect_...</a><p>There are also numerous Scratch tutorials online where you program a virtual robot on the screen (eg. moveLeft(1),moveDown(2), and so on.<p>The "game-ish" projects you list sound great, but are generally beyond introductory programming for kids level.
It's still early days for this project but take a look at <a href="https://www.codelearncreate.org" rel="nofollow">https://www.codelearncreate.org</a> (Build section)
awesome-python-in-education > "Python suitability for education" lists a few justifications for Python:
<a href="https://github.com/quobit/awesome-python-in-education#python-suitability-for-education" rel="nofollow">https://github.com/quobit/awesome-python-in-education#python...</a><p>There is a Scratch Jr for Android and iOS. You can view Scratch code as JS. JS does run in a browser, until it needs WASI.<p>awesome-robotics-libraries:
<a href="https://github.com/jslee02/awesome-robotics-libraries" rel="nofollow">https://github.com/jslee02/awesome-robotics-libraries</a><p>FWIU, ROS (Robot Operating System) is now installable with Conda/Mamba. There's a jupyter-ros and a jupyterlab-ros extension: <a href="https://github.com/RoboStack/jupyter-ros" rel="nofollow">https://github.com/RoboStack/jupyter-ros</a><p>I just found this:
<a href="https://coderdojotc.readthedocs.io/projects/python-minecraft/en/latest/" rel="nofollow">https://coderdojotc.readthedocs.io/projects/python-minecraft...</a><p>> <i>This documentation supports the CoderDojo Twin Cities’ Build worlds in Minecraft with Python code group. This group intends to teach you how to use Python, a general purpose programming language, to mod the popular game called Minecraft. It is targeted at students aged 10 to 17 who have some programming experience in another language. For example, in Scratch.</i><p>K12CS Framework has your high-level CS curriculum: <a href="https://k12cs.org/" rel="nofollow">https://k12cs.org/</a> [PDF]: <a href="https://k12cs.org/wp-content/uploads/2016/09/K%E2%80%9312-Computer-Science-Framework.pdf" rel="nofollow">https://k12cs.org/wp-content/uploads/2016/09/K%E2%80%9312-Co...</a><p>Educational technology > See also links to e.g. "Evidence-based education" and "Instructional theory"
<a href="https://en.wikipedia.org/wiki/Educational_technology" rel="nofollow">https://en.wikipedia.org/wiki/Educational_technology</a>
<a href="https://en.wikipedia.org/wiki/Educational_technology" rel="nofollow">https://en.wikipedia.org/wiki/Educational_technology</a>
"C is too hard" isn't your worry at this stage. Get some kids doing stuff and worry about what language and platform to use when they complain. MicroPython might be easier; indeed... doesn't matter if none of the kids are interested in bending wires.<p>My small sample of "minecraft kids" were very willing to spend effort in minecraft and eager to learn for self directed goals. But none of that translated into the real world at all. Making real things was something they expect others to do, I think.<p>Best of luck; perhaps that wont be a problem for you.
Processing (<a href="https://processing.org" rel="nofollow">https://processing.org</a>) would be a good place to start, especially if you want to illustrate and play with math concepts visually. You can even make games with it.
I've been looking at Minecraft pi on raspberry pi but am unsure id use the pi for much else<p>I'm instead looking at Minecraft on the laptop or the other option is code.org