Just An Ordinary Programming Language
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
ordinary-frontend
reflex-dom-contrib @ d75fcd5
reflex-platform @ 3fae704
.gitignore
.gitmodules
.travis.yml
LICENSE
README.md
build-hs.sh
build-js.sh
build.sh
cabal-ghcjs.project
cabal.project
default.nix
save

README.md

Ordinary Build Status

Ordinary is a Incremental Game Programming Language.

What the heck am I seeing?

In an incremental game like cookie clicker you start from almost nothing, do stuff and numbers go up.

Since there isn't a lot of opportunity for number to go up in a programming language, we focus on qualitative change: the language is organized into levels, and you might gain new features for your language by finishing levels.

Also you start from almost absolutely nothing: a turtle in a grid world. And you can only move forward.

Why the heck do I want that?

There are two ways to teach programming concept: use analogy or don't.

The downside of not using it is obvious: most people don't want to learn this way and want analogy instead.

But analogy also has it's limit - just look at all those monads are pipes/containers/burritos tutorial. It doesn't work, and even has detriment outcome to the reader. Now they still don't get it, but they think they know and has to unlearn it before really learning it.

Is it hopeless? I don't think so.

I believe that, no matter how radical an idea seems, if you trace the deduction step that produce it, each step is nothing but straightforward and trivial (given you has break the deduction step down to sufficiently low level).

So, why not use this method to teach programming? We will start at nothing but a forward button, and no features are added unless it help to solve next level. We will keep incrementing, until we found ourself using a modern general purpose programming language.

Where the heck are you at?

I am a bit stuck on implementing conditional. Since it is the only composition right now, before this point all we has is straight line command (not even arithmetic expression), so I has to add structural editor support which is painful.

How the heck do you get your idea?

This is basically Seymour Papert's continuity principle taken to the extreme. Specific implementation plan is from lambda the ultimate/typing dynamic typing/lazy functional state thread. Basically, any paper that implement some concept using other concept.

Extending from live programming is from "Doing with Images make Symbols".

The analogy breakdown is from "On the Cruelty of Really Teaching Computing Science".