独自言語「NLL」を 開発していますが,普及のためには公式のテキストが必要と思い,書いてみました.
書籍化において,独自言語の単なる説明というだけでなく 「NLLで何ができるのか?」といったところを説明したいと思い, 「プログラミングができるようになることで,算数の問題を解くといったような, 身近な課題解決ができる」という方向性で書いてみました.
また,単に言語を説明するだけでなく,初心者がいろいろ知ったり試したりしながら 学べるようにするために,キャラクターの対話形式で書いてみました. (私としては,初)
会話形式にする際に,長い説明をキャラクターにしゃべらせることは避けたいと 思ったので,短い言葉でのやりとりで説明するように気を付けて書いてみました. また,プログラマの実際みたいな話題も入れたくて,そうしたことも書いてみました.
本文中でも触れていますが
「プログラミングができるようになることで,身近な課題を解決できる」
ということが実感できれば,プログラミングを習得することのモチベーションに
しやすいと思います.
そして小学生くらいの若年層にとっての身近な課題とは,
例えば算数の問題を解くといったようなものがあると思います.
そう考えると算数の問題を解くといったことは,実はプログラミングの題材として 向いています.
プログラミングができれば,
例えば教科書にあるような「系統的な解き方」とは別に,
総当たり的な解き方で別解として解くということができるわけです.
(最大公約数を素因数分解とか使わずに総当たりで探すとか,
図形の面積をドット数を数えて調べるとか,そういうのです)
こうした解き方は「コンピュータの計算力に任せて解く」
ということになるため,系統的な解き方とは対極にあるとは思いますし,
膨大な計算量が必要となるため,人間がやるには向いていません.
ただここで言っている「膨大な計算量」というのは「人間がやるとするならば」
「人間にとっては」という話のものであって,コンピュータで解くことを考える
ならばたいして膨大なわけではなく,たいした問題にはなりません.
だからコンピュータを使ってプログラムで解くならば,そうしたやりかたも使えることになります.
(もちろん教科書にあるやりかたを否定するわけではなく,それとは別の解き方「も」
できるし,状況に応じて解き方を選べることになる,ということです)
そして,この場合の解くための理屈は,多くの場合,簡単です.
総当たりやモンテカルロ法で,数を片っ端から当てはめてみて調べる,などで
できたりするからです.
つまり難しい理論を知らない(習っていない)小学生でも,プログラムさえ書ければ,
高校や大学で習うような問題を(総当たり法などで)解くことができるかもしれない,
ということです.
例えば以下のようなものは,プログラミングで解くことに向いていると思います.
こうした問題はもちろん高速化・最適化しようとすれば,難しい理論はいっぱいあるでしょうし, プログラムもいくらでも難しくできると思います.
しかしそうではなく,こうした問題に対して 「計算時間はかかるが単純で簡単に書けるプログラム(つまり短時間で書ける)で, 現実的な時間内でほどほどに良い解が得られる」ということができれば, 結果的に問題解決のトータルコストは低くなり, それは「プログラミングができる」ということをうまく活用していると言えると思うわけです.
系統的に解くとしたら難しい理論の理解が必要で,そもそもその理解のための基礎知識として
高校レベルの数学の知識が必要になるとしたら,それは小学生が解くことは基本的に無理という
ことにもなります.
でもプログラミングができることで,そうした「解くことが無理なはずの」問題を
解決できるようになったとしたら,それはすごく有益なんじゃないかなあと思うわけです.