今からプログラミング言語を学習するなら自分の考えはbrainf**kです。

お題「今からプログラミング言語を学習するなら何を学ぶ?」

こんにちは、NANDbrainです。

 

今回はもし自分が0からプログラミング言語を学ぶなら何にするかを考えようと思います!

自分のプログラミング歴は小学生ぐらいの頃scratchをやって、見下ろしゲームなどを作った後

pythonをやってその時は難しくて飽きてしまい、しばらく立った後ゆっくり解説を見て知ったbrainf**kという命令が8個しかない難解プログラミング言語をスタートしたらプログラミングにまた目覚めて、そこからコンピューターの仕組みに興味が出てきてTuring completeというCPUを作るゲームをやって現在は自作OSに挑戦中です。

そして本題の「今からプログラミング言語を学習するなら何を学ぶ?」の場合ですが、やはりBrainf**kかなぁと思います。

まず理由なのですが、Brainf**kは命令が8個しかない分プログラムがどう動くかをよく考える必要があり、さらにC言語で言うポインタを利用する言語なのでC言語のポインタを楽しく簡単に学べるんです!

ちなみに命令はこちらです

+:今選択している箱の数字(デフォルトでは0)を1増やす

- :今選択している箱の数字を1減らす

>:選択を右にする

<:選択を左にする

[: 選択している箱の値が0なら、対応する]にジャンプする。(これを使ってループを表現)

]:選択している箱の値が0でないなら対応する[にジャンプする。(これをループで使う)

,:プログラムを実行する人に入力してもらい、その文字を文字コードの数字にして箱に入れる。

.:箱の数字を文字コードに変換して文字として出力する。

すこしわからないところがあると思うので補足します。

例えば[と]でどうやってループを表現するの?というところですが、処理をわかりやすい画像にするとこんな感じです(scratch)

画像

例えばBrainf**kで選択している数を0にするコードである「[-]」を

日本語にすると

あああ:

    選択している箱を1減らす

    もし 選択している箱が0でないなら「あああ:」に戻る

(0ならここは無視されてあああに戻らずに次のプログラムに進む)

って感じです。

そしてもう一つわからなそうな「文字コード」というものですが、簡単に言えば英数字などと一対一で対応している数字で、それの対応表は「ASCII 表」ででてくると思います(1から32までは謎で埋め尽くされていて自分はよく知らない)、よくわかってないので簡潔になってすみません。

 

そしてBrainf**kは難解プログラミング言語(esolang)というジャンルの言語で、四則演算ができるタイプのesolangには面白いものが多く、Brainf**k以外で自分が気になっていてまだやっていないのは「whitespace」というものがあります。これは公の場で言えますね!

Whitespaceはその名の通りtabとspaceと改行だけで命令を書くのでソースコードが通常は肉眼で見えない狂った言語なのですが、なんとデフォルトの命令で掛け算と割り算があります!やったね!

さらにスタックというコンピューターの奥の方にある普段は使わないものが使えるので低レイヤーの勉強にもなります!完璧!さらにbrainf**kと一緒でチューリング完全というものなので計算が全てできるらしいです!すごい!

 

いかがでしたか?esolangは面白そうですね!pythonよりはややこしいけど複雑ではないし楽しいのでぜひやってみてはどうでしょうか?

面白かったらbrainf**kやwhitespaceをやってみてください!さようなら!