本質について
エンジニアの人達と働いていて「抽象的に本質を述べること」を好まない傾向があると感じました。
プログラムは誤字が一つで全てが動かなくなったりするため、正確に定義し、曖昧さを取り除きたいとい職業倫理がそうさせるのかもしれません。
文系の世界では、文章を書くとして、少しぐらい誤字があっても、あまり問題は起きません。そして、人間関係の本質は愛、ビジネスの本質は信用というようにズバリ言い切ることを好んだりします。そんな感覚でプログラミングの本質について考えていきたいと思います。
配列・分岐・ファイル
前回の記事でプログラミングをデータ・ロジック・スコープの3つから捉えることができると書きました。では3つのそれぞれの中で、特に何が本質的であると言えるのか。
私はデータ=配列、ロジック=分岐、スコープ=ファイルがそれぞれの本質であると考えます。
データの本質は配列
いきなりですが、発想を転換してアニメーターについて考えてみます。
ジブリの宮崎駿が「良いアニメーターは良い”線”が書ける」みたいなことを言っています。アナロジーとして考えた時に、プログラミングにおいて”線”とは何でしょうか。それは配列だと思います。
上記の写真のような対応関係になっているイメージです。
そして、コードを書く場面でカギになるのは配列になることが多いです。
配列をバリエーションや分岐処理の判定基準に使ったり、データベースから判定基準に合致したエンティティを配列に格納したり、マップ化して処理を早くしたりと配列がカギになります。
エンジニアとして学び始めたばかりのころは”オブジェクト指向”という言葉に引っ張られて、オブジェクト、クラス、インスタンス化、継承などといった概念いわゆる”面”に関する技術を一番に使うのではと考えていましたが、私の実務経験においては配列の扱いがカギになっています。
ロジックの本質は分岐
次にロジックの本質について考えてみましょう。
プログラミングには3大ロジックと呼ばれるものがあります。「順次、分岐、反復」です。
その中で私は”分岐”こそがコンピュータの本質だと考えます。
順次は道具の本質であり、反復は機械の本質であると考えるからです。
順次とは因果関係あるいは時系列と言い換えることができます。例えば、ヤリという道具によってイノシシを肉に変えることができ、紙を使うことで記憶を記録に変化させることができます。
そして機械は、例えばミシンのように、なんども同じ変化を再現できます。
コンピュータはそれまでの順次や反復を”分岐”させることでより多くのパターンに対応できるようになりました。エアコンは温度を計測して点いたり消えたりして、さらに、ユーザーが座っている場所を判断して送風したりできます。
ちになみにAIは分岐を自ら分岐して考えられるというメタ構造を持っていると言えます。そのためコンピュータの中に包含できます。
スコープの本質はファイル
最後にスコープの本質について考えてみます。
「コンテナ革命」という言葉をご存知でしょうか。
これは港で船で積み下ろしするコンテナの規格を統一したことによって、世界貿易の効率が劇的に改善した物流革命を指します。
何かの単位を統一すると効率が上がるという現象は人類史で繰り返されてきました。歴史を振り返ると、メソポタミアで60進法が発達したり、秦の始皇帝は度量衡を定めたりしました。
日本においても寸=約3センチや尺=約30センチと決められたりと、文明のあるところに常に単位がありました。
そしてプログラミングはファイルで構成されています。
具体例を挙げると、オープンソースのOSであるUNIXは「すべてがファイルである」という思想の基に設計されています。
ファイルは文書、コマンド、ハードディスク、キーボード、プリンターなど、すべてを扱う概念です。これらは、階層構造を持つファイルシステムに格納され、アクセス権限で保護されます。
スコープ=ファイルであり、あるいは、スコープ=ディレクトリであると言っても良いかもしれません。
まとめ プログラミングの本質は「配列・分岐・ファイル」である
今回はアナロジーや歴史的思考という文系的観点からコンピュータの本質に迫ってみました。みなさんはプログラミングの本質は「配列・分岐・ファイル」だという考えにに賛成ですか?反対ですか?
初心者の方や、文系の方でもこういう見方をすることでよりプログラミングに血が通い、楽しく勉強できるようになるかもしれません。
この記事を読んで、楽しんで頂けたなら嬉しいです。最後までお読みいただきありがとうございました。


