orangeitems’s diary

クラウドではたらくエンジニアの日々の感想です。

ふと思ったこと、「世の中にはプログラミングを理解できない人間が存在する」

f:id:orangeitems:20180530145433j:plain

 

小学生のあの日

話題となっている下記のエントリーを読んで。

本の虫: 世の中にはプログラミングを理解できない人間が存在する

思うに、先天的に、あるいは幼少期の教育の結果、プログラミングに向かない学習方法に最適化されてしまった人間がいるのではないだろうか。

 

私は過去エントリの通り、小学生にしてMZ-700というシャープのパソコンを与えられBASICしかやることのない数年間を体験しました。そのころはファミコンブームだったのですが何で親はファミコンじゃなくパソコンだったのか。まあこうやってコンピュータの仕事に就いているから親に感謝かな。

で、このエントリーの話に戻ります。おそらくBASICなら、else ifをいきなり書くとSYNTAX ERROR(文法エラー)だなあと思いました。小学生がプログラムの文法なぞ理解しているわけもなく、本に載っているソースコードをカチャカチャ打ち込んで、run(実行)したら、いろんなところで転記ミスして、SYNTAX ERRORを喰らってたあの日。

そういえば、エラーコードでいろんなことをパソコンから教えてもらっていたことを思い出しました。プログラミングが上達するためには、プログラムが動かないとき、エラーコードを読んでなぜエラーになったのかを学ぶが大切ですよね。で、一番怖いのは、エラーコードを出さずに淡々と誤作動するプログラム、というのも小学生のころ学んだ気がします。

 

エラーコードのイメージ(小学生)

英語もわからない小学生が、エラーコードに持っていたイメージです。

 

Syntax error

打ち込みミスだよ、だせえ。本をよく見て修正せい。(レベル1)。

 

Illelgal Function Call

関数(str()とか)のかっこの中に数字を入れなきゃいけないのに文字が入ってたり、その逆だったり。何しろ命令の呼び出し方がおかしい。

中学校に行って数学を勉強した時に、関数という言葉が出てきて、おおあのBASICで出てきたやつと似てると思った記憶があります。似てるんじゃなくてそのものだったんですな。

 

Device I/O error

お目にかかったことはなかったと思うのですが、持っていたBASICの参考書には、「致命的なエラー」って書いてあった気がするのです。当時、死、についてぼんやりとしたイメージしかない小学生に致命的という言葉をつきつけるのはどうかと思います。なんかこれが出るとパソコンが壊れたということになり、親に怒られるようなイメージがありました。

とはいえ、BASICに慣れてくると、逆にどうにかするとこのエラーが出るんじゃないかとあれこれしたことがあったような気がします。致命的と言う言葉が含むレア感がありました。

 

File not foundとかFile not OPENとか

当時はファイルという概念がイマイチなかったので、いろいろとセーブ・ロード処理にトライしてわけわかんなかった思い出があります。いろいろやってもこのエラーが出るのでもういいやーって思ってやめた記憶あり。あのときファイル処理を理解してたらもしかしたら天才プログラマーになれたかもなあ・・。

 

Division by zero

0で割ったら出るエラー。わざとやって楽しんでました。

10 cls
20 input a
30 input b
40 print a/b
50 end

clsとか超なつかしい。画面をクリアするコマンドでした。これでaに適当な数字入れて、bに0入れるとDivision by zero。なぜエラーになるのかを考えてああそうか0はいくつ足しても0だからぶわわわわん、となって宇宙の無限大を感じた小学生の記憶。

 

RETURN without GOSU

そもそもGO TOとか GOSUB TOとか、あっち行って処理しろっていうプログラムの書き方は禁止になってますよね。当時の長大プログラムではサブルーチンがたくさんあったソーススパゲッティーの象徴になってました。GO TOをIF文に書き込もうならどこで動いているかわけわからなくなること請け合いでした。

自分の書いたプログラムに、処理を継ぎ足し継ぎ足ししていくと、気づいたらGO TO/GOSUB TOの迷路にはまってしまったことがありました。

多分に昔のデスマーチはそうやって作られていたんじゃないかと思います。このエラーが出るとバグを見つけるのが超大変だった(というか諦めたような気がする)。

最近のPythonとかRubyとかSwiftとかはGO TOすらないという徹底ぶりです。そういえば昔のお役所はGO TOが多くてたらいまわしにされたような気がします。今は随分整理されましたが・・。

 

プログラミングを理解できない人間はいないが向き不向きはある

かなり個人的な意見ですが、「世の中にはプログラミングを理解できない人間が存在する」って言い方と、「世の中には感情的で理屈が通用しない人間が存在する」っていう言い方って、すごくニュアンスが似ている気がするのですよね。何となく私も子供のころからプログラム言語に馴染んできたということもあって、プログラマブルに会話をすることが多い気がします。逆に、それが本当に苦手な人もいてそれはそれで、パッと答えを出すのがすごい人もいます。

最近のディープラーニングだのというのは、たくさんのデータからより良いと思うものを優先順位をつけてパッと並べたりしますが、実行結果をみるとプログラマブルではなく感覚的に結果を出したような感じがします。これが結局のところ「AI(人工知能)」の現在のイメージではないかなと思います。今までのシステムがプロセスと条件分岐の組み合わせであったことと比べて、非定型からパッと正解に近いものを出すという違いですね。特にデザイン分野の人には求められる意思決定の方法ではないでしょうか。

ということで、直感的な人はifとかforとかまどろっこしいでしょうし、それはそれで向いている分野があると思います。むしろプログラマブルな人にその辺アウトソースしちゃって、「こんなの作ってよニヤニヤ」ってしながら、意識が高い会話を繰り広げてマネタイズしちゃってくれちゃったりした方が、世のため人のためではないかな?と思う今日この頃です。