プログラマーは皆サイバネティクス人類学者
本記事で主張したいこと
プログラマーは開発を通してコンピュータと会話する
会話に用いられる(広義的な)プログラミング言語は人間にも、コンピュータにも優しい
両者に優しいテクノロジーこそが複雑な世界の中で必要なものである
ここ最近は普通のプログラマー?エンジニアとして働いていますが、一年ちょっと前は人文系の発信をしておりました。
しかし最近では仕事に飲まれ、人文系のことなんてさっぱりでした。
とはいえ何も人文系を捨てたわけではなく、プログラマーに参与観察をしていました(としておきます)。
プログラマーといえばコンピュータ、コンピュータといえば…そう、サイバネティクスです。そうです。そういうことにしておきます。
サイバネティクスがはじめましての方に軽く説明すると、機械と人間の共通点に着目した学問です。
ウィーナーという人が、「フィードバック」に注目しこの理論がスタートしました。詳しくは東京大学の資料がわかりやすかったです。
して、プログラマーは仕事でコンピュータと会話します。プログラミング言語は出力すると大抵エラーが出てきますし、それを元に人間が修正します。CLI(command line interfaceの略。ハッカーが見てそうな黒い画面がいい例でプログラマではない人は滅多に見ない)では、黒い画面とちょっとした英語で、コンピュータの深いところ(人間で言うとプライベートな部分でしょうか)と会話できます。ちなみにCLIの対義語?はGUI(Graphical User Interface)です。
深く使うからこそ「今日はパソコンの調子が悪いなあ」とかファンが唸ると「エンコード頑張れ…!」とか、若干人間と被せて見てしまう節もあるかと思います。だんだん人類学っぽくなってきました。
でもエラーとか、CLIの会話って所詮人間がプログラムしたものじゃん!
と思うかもしれません。コンピュータが真に理解するのは機械語、01のみじゃないかと。
でもそれでは人間がとんでもなく扱いにくかったこそ、プログラミング言語というものが進歩してきました。
最初は01にちかい、計算に時間がかからないコンピュータに優しいものでしたが半導体の進化により、Pythonのような人間が読みやすい言語がたくさん増えてきました。
プログラミング言語はコミュニケーションツール
しかしコンピュータの基本の基本、コマンドラインなどはまだまだ最小限の構成でCLIでしか会話をしません。
なんでGUIがないんだ!と思うかもしれませんがそれはプログラマーがCLIからGUIを作らなければいけない、つまりGUIは人間とコンピュータの間の子のようなものですね。
ノーコードツールという、プログラミング言語を書かずともアプリが簡単に作れるツールが世の中にたくさん出ましたが非エンジニアがまともに使えているところを見たことがありません。正直。
しかしハイコード(いわゆるプログラミング言語をたくさん書いて作ること)なものを開発している人はノーコードツールを簡単に使いこなします。むしろ
「ノーコードは重いし痒いところに手が届かないのが敵わん」
「早くAPI公開すれば使いやすくなるのに」
とか呪文をブツクサ言います。
なぜ、ノーコードツールなのにプログラミング言語を書いていると扱いやすいのか?
それはコンピュータとどれぐらい会話できるかの違いです。
ハイコードを書いているプログラマーはコンピュータとの会話は慣れっこなので、CLIだろうがGUIだろうが目的が見えています。
それに対してノーコードツールから使うとなると話は別です。そもそも何をするとコンピュータに最も仕事をさせることができるのか?それを初心者が理解するのは難しいのです。
計算能力が発達した今、どのような構造が望ましいのか
残念ながら、ノーコードツールは大流行というわけにはいきませんでした。
その代わり、LLMなどが発達したことで初心者がハイコードを開発することが簡単になりました。
LLMはもちろんコンピュータなので、コンピュータと会話するプログラ民言語の扱いには長けています。
よくSNSで「LLMはこんな問題もわからない。馬鹿だな」みたいな投稿がありますが、人間がまだ得意な分野でイキってるだけです。ましてや画像生成のプロンプトがミスっていたら、人間のせいですし。
そんな中でもプログラミング言語は得意です。01からの派生が故に、ハルシネーションも起こしにくい分野です。
LLMのおかげでプログラミング言語での開発は随分と早くなりました。
そんな中、同時にLLMとは別の動きがありました。
計算速度が速くなり、膨大な量のプログラミングコードおよびデータが処理できるようになったものの、それを人間が扱いきれなくなってしまいました(LLMはその産物かもしれませんが)。
そこで巨大なサービスを作っていた会社は、既存のシステムの分解を始めました。
この思想はマイクロサービスアーキテクチャと言われています。
小さなプログラムの集まりで、大きなサービスを構築しようという試みです。
オライリーの本ではハニカム構造が表紙になっています。(マイクロサービスアーキテクチャがそのような思想だとか書いていたような…)
また、Dockerのようなコンテナ化もこの思想に一役買っています。分割したシステムは人間だけでなく、機械側も管理をしやすくなっています。
それだけでなく、言語に関しても人間にも機械にも優しい言語が再発明されてきました。C, C++のような言語はコンピュータに優しい言語でしたが現代においてはあまり人間に優しい言語とはいえません。
そこで人間にも機械にも優しいGoやRustなどが最近では盛り上がりを見せています。
話をLLMに戻しましょう。LLMがプログラミング言語を理解することができると言っても、限界があります。膨大なファイル数になれば、プロンプトも複雑になるし整合性を合わせるのが大変です。
ここで出てくるのがマイクロサービスアーキテクチャです。膨大なプログラムから分割することでLLMも理解しやすくなります。
エンジニアのために例を挙げるとバックエンドのファイルがOpenAPI1つだけでやりたいことが理解できる、とかでしょうか。
もう主張の意図がわかるかと思いますが、コンピュータと人間に優しい設計構造こそが、今後の主流になっていくでしょう。まとめると次の3つです。
人間にも機械にもわかりやすいインターフェース(ハイコード)
人間にも機械にも優しい言語
人間にも機械にも網羅できる小さな設計
そう、この共通性こそがサイバネティクスだと私が感じているところです。プログラマーは仕事をするとき、サイバネティクスの研究を行っているのです。
なぜこの構造が良いのか?
「なんだ、ただのプログラミングの流行りを羅列しただけじゃないか!」
ぶっちゃけそうです。私はミーハーですし、乗せられているだけかもしれません。
しかしプログラミングの世界の流行りというものは、しっかりとした理由があります。
その潮流の中、個人的に確信していることがあります。
それは機械のボトルネックについてです。
今までは計算速度がとても重要でした。corei3じゃなくi7に、メモリは4GBじゃ足りないから8GBは欲しいとかPCについて詳しくない時スペックにはかなり頭を悩まされました(詳しい友人に聞くと「金が出せる分積むだけ積んどけ」と言われました)。
しかしM1のMacが出て、インテルも13世代くらいになると並大抵のことはなんでもできるようになりました。メモリも今では16GBがベースになりつつあります。
むしろ今のPCはオーバースペック気味で、私が持っているMacのファンなんてかれこれ1年なってません。完全に計算能力を持て余しています。
しかしぬるいことをしているわけではなく、仮想環境や動画編集もしています。
また、クラウドサービスが多くなったおかげでクライアント側では処理の必要性も少なくなっているのも要因です。LLMも、クラウドサービスの例ですね。
そう、100年近く行われてきた半導体の進化は、人間の認知機能の大半はクリアできるようになってきました。
少なくとも「計算能力が足りない」という状況はなかなかありません。
でもいまだにサーバーは落ちるし、計算機能力は足りてないんじゃないの?
いえ、捌こうと思えば捌けるんです。しかしボトルネックはコンピュータの計算能力ではありません。それはコストです。
どんなに計算できても、お金は無尽蔵に使えません。最近ではLLMにより必要計算能力が大幅に増え、膨大な計算をこなすコンピュータを運用するお金がいくらあっても足りない状態です。
誰でも、スムーズにコンピュータが利用でき、便利なサービスが使えるようになった。しかしどんなに計算が早くても、電気代がかかってしまいます。知っての通り電気は無尽蔵ではありません。よって省電力をする必要があります。
電気を節約するにはこまめなスイッチのオンオフや、エコな家電を使う必要があります。
そのような節約思考が、コンピュータにも求められています。
実はこの節約思考、マイクロサービスアーキテクチャは得意です。必要な時に必要なものだけを動かす運用ができるんです。
まとめ
コンピュータ界の次のボトルネックを解決するマイクロサービスアーキテクチャは、ひとつのサイバネティクス研究成果のひとつだと思います。
プログラマーは、サイバネティクス研究に知らず知らずのうちに従事し、貢献しているのです…ふふふ。
ここから先は
¥ 100
いただいたサポートは健康のさらなる研究に役立たせていただきます。