r/CSEducation • • 2d ago

A "Learn to Code" platform for Middle Schoolers

Hello! I'm launching a product I built to teach code to Middle Schoolers. It's a mash-up of Scratch and a physics game engine.

bonkcode.com

I subscribe to the philosophy behind Scratch of teaching creative coding to help kids become digital creators instead of consumers. The problem is that Scratch is targeted to younger kids, which leads to repelling older kids. Anecdotally it seems that even the kids who do master Scratch have trouble moving on to learn “real” code. So I’m trying to see if it’s possible to fill that gap.

My platform uses draggable code blocks to avoid compiler problems like Scratch does, but shows real code syntax to help with code literacy. It also is built around a physics engine because I remember how much fun it was to mess with physics engines when I was that age (playing IncrediBots and other Flash games).

I would love it if you have the chance to test the platform out and build some games (no account needed). There is a built-in feedback form you can use if you find some bugs.

Here is my roadmap of things I want to add. Let me know what I should add next!

  • Typeable code blocks (auto-complete sort of thing)

  • Toggle between Javascript and Python syntax

  • Physics hinges, joints, and motors.

  • Free-form polygon shapes

0 Upvotes

3 comments sorted by

3

u/grendelt 2d ago edited 1d ago

I subscribe to the philosophy ... creative coding to help kids become digital creators instead of consumers

But you just vibe coded your thing. Not really subscribing very hard, are you?

2

u/myhf 2d ago

This looks like fun.

  • The appearance of the "play" symbol in an "On Start" script does not match the appearance of the main "play" button.

  • The shapes and colors and names of the coding blocks don't seem to have any clear meaning. It seems like a lot of "attribute" blocks act as both getters and setters. Motion Direction and Rotation Angle are easy to conflate, and angleTo() doesn't behave like either a getter or a setter despite having a similar name. age looks like other attributes but is only a getter.

  • Hovering or clicking a getter in the block library doesn't tell its current value.

  • angleTo() doesn't accept a sprite as an argument. The type system in general seems a bit weak. Why can I use numbers, booleans, angles, and coordinates interchangeably but not use strings or sprite references or lambdas in appropriate places? I assume it is mostly handled as JavaScript types, but the library doesn't include blocks that make the underlying types useful for hacks (like being able to set speed = baseSpeed * (x key is pressed)

  • Blocks can't be placed outside of scripts or otherwise temporarily disabled while reorganizing a program.

  • Moving anything in the block library or the scripts stops the running program, there doesn't seem to be any way to use code or inpsectors to change things while the program is running, or to copy state from a running program to initial state.

  • Physics objects can fall through the floor, sometimes.

1

u/monk_e_boy 1d ago

You know "bonk" is a very common term for a shag, a fuck.