As the main developer of the Bacon.js library I'd love to apply the Functional Reactive Programming (FRP) paradigm. The source code using Bacon.js and CoffeeScript would look something like this:
princessPos = spacePress.scan 4, inc lionPos = Bacon.interval(500).scan 0, inc lionWon = Bacon.combineTemplate { princessPos, lionPos } .filter ({princessPos, lionPos}) -> princessPos == lionPos princessWon = princessPos.filter((pos) -> pos >= 13).take(1)
Fine? Well, to me this looks awesome, but how likely is a 4-year old to grok FRP while my colleagues are still struggling with it? Surely she beats 50% of them in her Vim skills already but FRP, really? Also, she's totally unspoilt by Object-Oriented Programming (OOP) too. The code above is full of object method calls. She can hardly understand functions.
Next, imperative Javascript without OOP, with some helper methods (key, tell, later) I wrote. (That's an image. Blogger is driving me crazy by consistently ruining my nice formatting)
Like that? Hmm. That doesn't seem daunting to me. Even my wife understood the code after I explained it to her. And she's never seen Javascript before. On the other hand, neither has my daughter. So, using this approach I'd have to expose her to Javascript with mutable variables. Would you do that to your daughter?
Then I tried the Elm programming language that has a syntax familiar to her already. The problem is I couldn't come up with a satisfying solution at all. See the Gist if you're into that kind of thing.
Currently I'm slightly leaned towards the Javascript solution even though it feels like domestic violence. The upside is that the code is indeed quite simple and it will teach her to write code that you can actually run in a browser without a complex toolchain. Because that's what she'd really want to learn. To write games she can run in her browser.
Maybe I'll teach her out of the bad habits later when she masters them already. I'd really really like to make this simple game happen... I started with BASIC and gotos and I come out pretty ok, didn't I? Ha.
Update: I got the Elm version to work too.
http://scratch.mit.edu/ try this
ReplyDeleteYeah, we've played with Scratch. It's nice. Not my choice for this excercise though, as it doesn't promote composing code from re-usable pieces.
ReplyDelete(http://girlscantcode.blogspot.fi/2013/12/reaktor-kids-kode-skool-iii-scratch.html)