若年層初心者の学習用プログラミング言語には,Scratchのようなビジュアル言語が多く 利用されていると思います.
そうしたビジュアル言語は簡単なゲームやキャラクタが動くようなものなどを作るの
には良いと思います.
ですが,例えば算数の問題を解いたりすることにはちょっと無理があると思います.
(実際に私もScratchで円周率の計算などをやってみましたが,できなくはないが
非常にやりにくい,といった感じでした)
このためビジュアル言語では,プログラミングによって算数の問題を解くような, 身近な課題を解決できるということに現実味を持ちにくいし,教える側もそちらに 誘導しにくいという課題があると思います. (つまり,それによって算数の問題を解くようなことに繋がりにくいと思うわけです)
そうした「身近な課題を解決する」となると,やはりPythonなどの本格的な プログラミング言語になるかとは思いますが,それらをいきなり学ぶことは, 初心者には敷居が高すぎます. 簡単なプログラムを動かすだけでも,理解しなければならない構文や概念やルールが 多いためです.
つまり,算数の問題を解くようなことに現実味が持てるような言語で, さらに難しい概念や構文・ルールなどを理解しなくてもとりあえず使える言語, というものが必要だと思うわけです.
NLLはそうしたプログラミング初心者(とくに,小学生低学年くらいの)がプログラミング に入門するための言語として開発されています.
このためNLLでは,プログラムにおけるブロックやスコープのような,広い範囲を 認識しなければならなかったり,概念を理解しなければならないような難しい 構文や文法を廃止し(もしくは最初から学ばなくても大丈夫なようにして), 行単位で解釈できるように設計されています.
簡単なコマンドを数個覚えるだけで,あとは(広い範囲を見ずに)1行ずつ読み進めれば 理解できるようになっています.
その上で,文字列や浮動小数や各種関数などは通常のプログラミング言語並に不都合 無く扱えるようにすることで,ちょっとした算数の問題(最大公約数を求めるとか)を 解いたりといった,身近な課題をプログラミングによって解決できるという実感を 持てるように設計してあります.
変数はすべてグローバル変数です.サブルーチン内のローカル変数というものは ありません.(つまり,C言語等の「関数のスコープ」のような概念が存在しません)
C言語等のブロックのような,処理の単位や範囲はありません. 条件分岐によってできるのは「決められた場所へのジャンプ」か 「次の命令を実行」であって,「ブロック内の命令を実行」のようなものは ありません.
これにより,C言語等のブロックのような「処理の範囲」という概念を廃止し, そうした概念を理解しなくてもプログラムを読み進められるようになっています.
例えばIが10のときにIを1加算する例は,以下のように書けます.
(I!=10): GOTO NOT ++I .NOTこれは,以下のようにも書けます.
(I==10): ++I
またNLLでは,プログラムの編集は(通常のプログラミング言語のように)テキスト エディタを用いずに,(昔のBASICのように)処理系の中でできるようにしてあります.
実行中に実行中断し,そのときの変数の状態を見たり,変数の値やプログラム自体を 書き換えて実行再開といったようなことが標準的にできるようになっています.
これによりNLLだけ立ち上げれば,あとはそこに閉じてプログラミング・実行・ デバッグが可能で,ひとつの環境内でプログラムを実行しながら編集していくような ことができるわけです.
これにより,様々なツールをまたぐ必要が無く,初心者がプログラムの動作を感覚的に 理解しやすいようになっています.
NLLでは,英文字は基本として大文字のみです. これはキーボードが大文字で刻印されているため, 小文字と大文字の対応をまだ知らない小学生には, 小文字が使われるとその時点で入力が厳しいためです.
さらに,キーボードにまだ不慣れなことへの対処として,コマンドの省略を可能に してあります.
このため入力しなければならない文字数を削減できます.
例えば表示のための「PRINT」というコマンドがありますが,これは「P.」と略す ことができます.