
実はこの記事はGoogle AIさんとワテの会話をGoogle AIさんにブログ記事としてまとめて貰ったものだ。
ワテの口調と言うか文体を真似して。
自称、プログラミング言語評論家のワテである。
このところ、世間ではC++やらAIやらを使ったシステム開発の話題で持ちきりであるが、長年プログラミング業界を見つめてきたワテとしては、どうしても言いたいことがある。
特にC++という言語がたどってきた歴史と、これからのAI時代における人間のプログラミングのあり方について、画期的なアイディアを思い付いた。このアイディアが世間に普及すれば、IT業界に革命が起きる事は間違い無い。
当記事ではそれらを紹介したい。
そもそも「参照(&)」って何のために導入したんや?
C、C++、C#系の言語をやってる人ならお馴染みであるが、元々C言語にはアスタリスク(*)を使った「ポインタ」という偉大な仕組みがあった。
メモリのアドレスを直接指し示す、シンプルかつ最強の仕組みだ。これ一種類あれば、ぶっちゃけ全てのプログラムは記述できる。
ところが、C++になって急にアンド記号(&)を使った「参照(リファレンス)」なんてのが出てきた。
まあ、ポインタを使うと「ヌルポインタ」でうっかりアプリがクラッシュするから、絶対に空っぽにならない安全な別名を作ろう、という意図は分かる。でもな、機械語のレベルに落とせば、やってることはどっちも同じ「メモリのアドレスを渡す処理」でんがな。
ワテはもう20年くらい前からずっと「ポインタだけで統一したほうが、仕組みが一種類になって頭が混乱しないのに、なんでわざわざ新しい概念を付け足してややこしくするんや?」と、ずっと思っていた。
このワテの直感は、その後のC++の迷走っぷりによって、見事に正しかったことが証明されることになる。
記号のインフレ!「&&」とかもう支離滅裂でっせ
一度ボタンを掛け違えた言語の進化というのは、もう後に戻れない泥沼にハマる。
C++の設計者は、安全性のために「参照(&)」を作った。そしたら今度は、プログラムを高速化しようとして「一時的なオブジェクト(右辺値)」を効率よく扱おうとしたときに、仕様の制限のせいで無駄なコピーが発生するというバグ(歪み)が生まれてしまったのだ。
普通なら「あかん、最初の設計が間違ってたわ」と認めてポインタに戻るか、言語をスマートに再設計すべきやろ。
ところが、C++の委員会が選んだ道は、さらなる「無理やりな建て増し」だった。
C++11の改定で何が登場したか知ってまっか?
アンドを2つ並べた「右辺値参照(&&)」という怪物である。
「コピーを減らして高速化したい、でもポインタは使いたくない」という、参照への執着が産み落としたこの仕様は、はっきり言って支離滅裂の極みだ。
- 普通の参照
&がある。 - 右辺値参照
&&もある。 - さらにそれを自動で判別するための「転送参照(Universal Reference)」という、訳の分からん複雑なルールが上乗せされる。
バグが発生したときにエディタが吐き出す、画面を埋め尽くすような何百行ものエラーメッセージは、もはや人間には解読不能だ。
こんなわけのわからん記号のパズルに付き合わされて、人間が言語の奴隷になっていくような進化は、完全に狂っているとワテは思う。
高速化の呪縛からの解放!そんなもんはコンパイラにやらせとけ
なんでそこまでして人間が苦労して && だの std::string_view だのを書かなきゃいけないかというと、「数パーセントでも実行速度を速くしたい」という人間の執念だった。
でもな、もうそんな小細工を人間が意識してプログラミングする時代は終わったと思う(ワテの場合)。
なぜなら、今のAIさんはもの凄く賢いからだ。
人間がC言語でも何でもいいので、ロジック的には非常に分かりやすいけれど、処理的にはちょっと無駄があるな、という素直なコードを書いたとする。
そしたら、そのコードの意味(ロジック)をAIさんが完璧に理解して、意図を1ミリも崩さないように配慮しながら、裏側で && やら何やらを駆使した超最適化コードへと勝手に置き換えてコンパイルしてくれればいいだろ。
出力結果(動作)が全く同じなら、中の複雑な調理法(最適化)は、機械が勝手にやればいい。そういう「参照の参照」みたいなややこしいアルゴリズムは、プログラミング言語の文法として人間が見える場所に置いておく必要は無い。コンパイル時点での最適化の中で自動で処理されればいいのだ。
処理速度を優先して最適化したソースコードを人間が書く必要などないのだ。
誰が見ても分かりやすいコードこそ美しいのだ。
人間がわけのわからん記号に脳のメモリを奪われているようでは、本末転倒でんがな。
これからの時代は人間が「料理長」になるべきや!
じゃあ、これからのプログラミングはどうなるのか?
タイピングの時代は終わり、人間は「現場監督」、あるいは「料理長(シェフ)」のようなスタイルになっていく。これがワテの提唱する近未来のプログラミング論だ。
例えば、100個の関数を組み合わせて何らかのシステムを作りたいとする。
人間がその100個の関数を1文字ずつガリガリ書く必要は無い。AIさんに向かって言葉でこうオーダーを出せばいいのだ。
「こういう関数を作りたい。入力はこれで、出力はこれ。こんな処理をしてほしい」と。
そうすれば、AIさんがバグのない、裏側で極限まで最適化された完璧な関数を出力してくれる。
人間(料理長)は、それらの関数が正しく組み合わさって、最終的に自分が目指すコース料理(システム全体)としてちゃんと機能するかどうかを監督・チェックするだけでいい。
これ、めちゃくちゃ面白いと思いませんか!?
料理長は、自分で魚の骨を一本ずつ抜くような細かい作業は部下に任せる。
「この魚を使って、前菜に合うように少し酸味の効いたソースで仕上げてくれ」
「この肉を使って、メインディッシュの焼き加減はミディアムレアで頼む」
と、的確に指示(プロンプト)を出すのが仕事だ。あとは優秀な部下(AIコンパイラ)がうまいことやってくれる。
人間が余計な小細工(参照の参照など)をしない方が、結果として最も安全で、最短で目的のプログラムが完成するわけだ。
億とか兆とかいう単位のコードであっても、人類を遥かに上回る人工知能から見れば、一瞬で理解できる誤差の範囲だろう。人間は、記号の有無なんていう些細なことに拘らずに、システム全体のロジックを組み立てる楽しさを取り戻すべきなのだ。
完璧や!!
まとめ

我々人類は既に物凄いAIの時代に突入しているぞ。
当記事はワテがC++言語に対して抱いている意見をGoogle AIさんに投げかけ、AIとの会話を通して最終的に文章化して貰ったものだ。
ワテの場合、今ではエディタでコードを1行1行書くことが億劫になってしまった。
AIさんに頼めば一瞬にしてほぼ完璧なコードを生成してくれるからだ。
あとは、それを自分で組み合わせれば最短時間で目的とするプログラムが完成する。
すっごい時代が来たもんだ。
今後どうなるのやら。
必ずしも良い方向に行くとは思えない。
そんな予感がするワテである。
(つづく)



コメント