縦のプログラミングと横のプログラミング。

その昔。現在みたいな構造化プログラミング言語が未だ存在していなかった頃。

人々は BASIC やアセンブラや(※ハンドアセンブラのことです)直接に機械語でプログラムを書いてた。電卓プログラミング(CASIO FX-502P 等)でもそうです。

文章は横長になる。切り替える列は条件分岐の GOTO である。

そんな文章は読みにくい。欠陥ばかりというのだ。

機械語の直訳ではなく人間の理解しやすい形式で記述する。それが構造化の発想なのだった。

-----------

こんなこと雑誌で書かれてても構造化プログラミングがそのまま授業で行われたわけではない。

1982年のプログラミング言語の授業は FORTRAN だった(※最善だったと思います当時は / 当時でも)。大学の片隅に作られた端末ルームでぱちぱちと打つのである。打った中身は大学のサーバに直接保存される。次の授業ではそれを呼び出して使用する。つまりログインネームとパスワードが必要となるわけだが、それがいちいちプリンタから印刷して吐き出されるわけである。

IWAASA が早速ごみ箱をあさる(※リアルごみ箱です)「こういうとこにネームとパスワード落ちてんだよ」。拾ってきた情報で早速ログインしてみる IWAASA である。大学の巨大なコンピュータをタイムシェアリングで使う授業である。使用時間は限られてる(半年で30時間くらい)。なので拾ってくるわけだ。いまなら「パスワードが書かれた紙をその辺に放置してはいけません」などと指導されてしまう状況だが、そんなことしてもインターネットもないからハッキングも個人情報漏洩もなく、問題とはならなかったのである。

そいつを使って Prolog など本筋とは離れた言語の練習を行う。論理プログラミング言語である。現在では消滅してしまった、日本が国運を掛けて開発するはずだった第五世代コンピュータの主要言語となるはずのものであった・・

-----------

話はとんで構造化プログラミングである。

フローチャートの概念は否定された。フローチャートは私たちが小学生の頃から、パンチテープ(紙テープ、穿孔テープ、ASCIIテープ)の時代から、使われていた概念なのである。

構造化プログラミングではループや条件分岐をそのまま言語の通り書くというのだ。while ~ do ~ や if ~ then ~ else ~ などである。それまで GOTO 文で一意に処理されていた条件判断は2種から3種に、あるいはそれ以上に分類された。機械語レベルでは結局同じになってしまうのだが、表記的には違うものとなったのである。人間が見て理解できる、そのことが最重要と判断されたのだ。

-----------

最近のプログラミングである。

横長の、入れ子構造の、表記技術を駆使した文体で若い衆は書く。

-----------

これ、こういうことしたって、結局速度は上がりません。機械語の水準では結局同値に落とされてしまう。長文の表記と入れ子構造の表記とでは人間の見た目で変わるだけである。

印刷時の行数が減るだけである。翻訳され機械が理解する段階ではインタプリタコンパイラの仕様によってすることは同じになってしまうわけである(最近の内部レジスタを特定しない形式の X86-64 ではそれこそどんどん同じになる)。

-----------

しかし技巧を尽くして格好いい入れ子構造にしていくのだ。

なぜなら見かけが良く自身のプログラミングスキルの存在を他の観客に提示できるからである。

-----------

機械のレベルでその認識は存在しない。

重要なのは効率の良い言語であるか否か(速度の早い言語であるか否か)、学習曲線が高く習得の容易な言語であるか否かである。

最終的には生産性はプログラマ自身のスキルの有無より機械自体の性能や言語自身の特性に問題は還元される。いいマシンでいい言語で短時間でプログラムが済めばそれに越したことはない。

プログラミング自体に工程を食わないことが望ましい結論なのである。

逆に言えばプログラミングは不要である。なしで使えることが一番いい。利用者の段階ではプログラミングはなしである(※スマートフォンに限らず電卓でもカメラでもスーパーのレジでも銀行のATMでも天体観測望遠鏡でもそうである)。プログラマは黒子であるわけだ。仕様に従って書き下す、それがプログラミングなのであって、人間が自然言語を使うのと同じくらい自然な作業である。異なるのは記述に厳密さが要求されるとか、年中言語仕様が変わるとか(←ほんと年中である)、流行があるとか、そんなんである。

-----------

それが「気にくわない」人々がいるらしい。

プログラミング自体に、膨大な工程と人数と思考とが必要であると考える人々である。

プログラミングの過程を膨大に見せかけたい人々である。

-----------

彼らがすごいプログラムを書く。一見して読めない。何をしているのかわからない。特殊な文を多用してつくる入れ子構造である。

横に長く、長たらしく、目線の動きがついていけなくなる。かつて BASIC が PASCAL 一派に否定された、あの横長プログラミングを延々し続けていくわけである。

-----------

結局ああいうものはプログラマが自分の腕を示しつけたいだけがためにやってたものなのだ。

機械が動く段階では大した差なんてない。結局同じ機械語に直される。

BASIC だってほんとは縦長に書けるのだ。そうしなかったのはプログラマ自体の自己顕示欲の問題である。

人間どうしの意味のないバトル、現代風に言うところのマウントの取り合いだったのである。