Imagine the program as a tree of nested boxes: a leaf node / box for each single-line statement, an inner node (= outer box) for compound statements. Introduce some modalities: insertion between nodes, selection of node subtrees. Edit and create nodes using aggressive code completion. Complete initial keywords, consider using 'let' and 'call' or equivalents for assignment and invocation expressions (avoids starting statements with an identifier). Complete identifiers aggressively, starting with params, locals and most-recently-used, being able to browse up into an outer scope, possibly converting long lists of potential identifiers into Patricia trie navigation to avoid laborious scrolling.
A typed language would probably be better, though with inference wherever possible, because completion has much higher quality there.