
8,576 文字

数か月前、Andre Karpathyは「英語が新しいプログラミング言語だ」という有名な発言をし、Jensen Wongも同様に「もはやプログラミングを学ぶ必要はない」と発言しました。しかし私は、Jensen Wongは完全に間違っていて、Andre Karpathyの言葉は正しいものの、おそらく皆さんが考えているのとは逆の意味だと思います。この新しい時代にプログラミングを学ぶべきでしょうか?私の意見では間違いなくイエスです。その理由を説明しましょう。
皆さん、こんにちは。Dr. knowallです。今日は暗い火曜日の朝で、外は雨が降っていて5度とかなり寒いです。でも、これから話す内容で場を温めていきましょう。プログラミングを学ぶべき理由について、そして長年プログラミングを学んできた人は時間を無駄にしたと感じるべきではない理由についてお話しします。
Jensen Wongは何度も、もはや人々はプログラミングについて心配する必要すらないと述べており、シリコンバレーの多くの著名人も同じことを言っています。私もしばらくの間、そうかもしれないと考えていました。しかし、より深く考え、経験を重ねるにつれて、彼らがこの点について完全に間違っていることに気づきました。彼らは本当に異なる考え方をする必要があります。
私は年始前から約2ヶ月間、このビデオの制作について考えていました。そして興味深いことに、スタンフォード大学のChristopher Potts教授が私と同意見であることがわかりました。実は昨日、彼が同じ頃にリリースしたビデオを見つけたのですが、私たちが同じ方向性で考えていたのは面白いですね。彼の主張はプログラミングを学ぶべきかどうかではなく、大規模言語モデルをモデルではなくシステムとして考える必要があるということです。私たちの考えは重なっており、彼は実際にそれを別の方向にさらに一歩進めています。それについては後ほど触れることにします。
まず、私のプログラミング経歴について手短に説明させてください。私は自分のことを、優れたプログラマーでも優秀なプログラマーでもなく、かなり平均的なプログラマーだと考えています。ただし、長年プログラミングを続けてきました。
以前の動画でも話しましたが、1970年代後半から1980年代初頭、私の両親はコンピューターを買う余裕がありませんでした。当時はとても高価で、私たちにはそれほどの金銭的余裕がありませんでした。父は大学教授で、母は当時働いていませんでしたので、コンピューターは手が出ませんでした。しかし、彼らは驚くほど寛大で、メモリーはなかったものの35行のプログラミングができるTI 35電卓を買ってくれました。その後、1981年頃だったと思いますが、HP41Cを購入してくれました。
これが私のプログラミングへの主な入門でした。電卓上のプログラミング言語が何と呼ばれていたのかは覚えていません。その後、高校でコンピュータープログラミングの授業を受けることができ、BASICとアセンブラを学びました。言語の抽象度という観点で見ると、この2つは大きく異なりますね。私はアセンブラがとても面白いと思いました。
大学に入学したとき、祖父母が教育目的で約6,000ドルをくれました。そのうちの約5,500ドルを使って、128キロバイトのオリジナルMacintosh、つまりSteve Jobsたちの署名が内部に入っているものを購入しました。そうです、当時はRAMがキロバイト単位だったのです。メガバイトでもギガバイトでもなく、キロバイトでした。後に1メガバイトにアップグレードしましたが。
とにかく、そのMacintoshとプリンストン大学のコンピューター設備を使って、物理学の研究をたくさん行いました。実際、ここにある1987年の私の卒業論文は、ミリ秒パルサーに関するものです。データ分析にはCプログラミング言語を使用しました。
当時は作曲のクラスも取っていて、そこではCsoundを使用しました。とても面白い言語で、基本的にはCですが、他のものではなく音を生成するものでした。その時期、Cは私にとって重要な言語でした。Pascalでも少しプログラミングを行い、博士論文でもCを使用しました。また、プログラミングに関連する他のパッケージも使用しましたが、それらにはすでに多くの機能が組み込まれていました。
1990年代半ばから、Autodesk Mayaを学び始めた際には、MEL(Maya Embedded Language)を学びました。これは3Dアニメーション環境をプログラミングできるスクリプト言語です。また、ワールドワイドウェブの初期の頃だったので、HTMLも学びました。もちろん、これはプログラミング言語ではなくマークアップ言語ですが。
2010年頃、Apple App Storeが登場したとき、最初はCを学び、その後Appleの新しいSwift言語を学びました。これは実際にとても美しい言語で、十分な評価を受けていないと思います。私はSwiftが本当に好きでした。現在はiPhone向けのプログラミングなどはしていないので、長らく使っていませんが、当時は数年かけてSwiftでかなり decent なレベルになりました。
2015年に人工知能の修士号を取得するために大学院に戻ったとき、すべてがPythonに移行していました。1990年代後半にPythonを少し試したことがありましたが、当時は動作が非常に遅く、これはおもちゃの言語で使い物にならないと思っていました。でも、私の考えは間違っていました。なぜなら、それが人工知能の言語になったからです。そこでPythonを学び、それ以降は主にPythonでプログラミングをしています。JavaScriptや他の言語も少し使いましたが。
人生がどんどん速くなっていくように感じることはありませんか?ある日はエネルギーに満ち溢れているのに、次の日にはコーヒーではもう足りないと気づく。そうです、私もそうでした。だからこそ2年前、実際に続けられるシンプルな変更を行いました。毎朝AG1を飲み始めたのです。そして、これは本当に効果があると言えます。
AG1は私の毎日の栄養補給の定番です。1回分のスクープで、75種類の高品質なビタミン、ミネラル、プロバイオティクス、プレバイオティクス、アダプトゲンを一度に摂取できます。錠剤も複雑な手順も必要ありません。混ぜて飲んで、あとは1日を過ごすだけです。
私は2年以上AG1を飲んでいますが、エネルギーレベルと消化を助けてくれるのが気に入っています。例えば、AG1にはカフェインのクラッシュなしでエネルギーをサポートするBビタミンが含まれています。また、プレバイオティクスとプロバイオティクスが協力して消化を助け、スムーズな働きをキープしてくれます。
AG1は52回もの改良を重ね、より効果的な配合を追求してきました。科学的根拠に基づき、常に改善され、最高の状態を実現できるように設計されています。味についても、私は本当に気に入っています。砂糖も変な人工的な成分も入っていません。ただ滑らかで、わずかに甘い飲み物で、毎朝楽しみにしています。
今年、健康管理を始めようと考えているなら、これが最も簡単なステップになるでしょう。drink.a1.com/knowallにアクセスするか、画面のQRコードをスキャンして、最初のサブスクリプションで20ドル割引を受けてください。AG1のスポンサーシップと視聴者の皆様に感謝します。では、本題に戻りましょう。
私はプログラミング言語に関して、かなり多様な背景を持っていると言えます。面白いことに、私が実際にプログラミングをしなかった2つの言語が、JavaとC++です。これらは標準的な言語ですが、私は常にこれらを避けてきました。どちらも好きではありませんでした。特にC++は本当にひどい言語だと思います。実際に使用される言語としてC++が廃れていくのは、とても嬉しく思います。
一方、Pythonは美しい言語ですが、非常に遅い言語です。もちろん、コンピューターが格段に速くなったことで、その多くは補われていますが、基本的に機械学習においてPythonはCのラッパーに過ぎません。PyTorchなどの開発環境で実際に行われている活動の大部分は、実際にはCで、Pythonはそれをラップしているだけです。
興味深い経歴ですね。他の経歴と同様、まっすぐな道のりではなく、ジグザグな道のりでした。結果として、私は優れたプログラマーではありませんが、まあまあのプログラマーで、実際に幅広い知識を持ち、言語を広い視点で理解しています。
では、なぜこれが今日重要なのでしょうか?ChatGPT、Claude、あるいはVS CodeやRepletなどに組み込まれた多くのアシスタントに、「PythonやJavaScript、C++でXYZを行うプログラムを書いて」と言えば、コードを書いてくれる時代です。これは素晴らしいことです。私のような平均的なプログラマーを本当に優れたプログラマーに変えてくれました。なぜなら、もう知らないことをすべてオンラインで調べる必要がないからです。ほとんどの作業をやってくれて、私はそれをチェックして調整するだけです。プログラミング環境としてはずっと良くなりました。平均的なプログラマーとして、本当にありがたく思っています。
もちろん、Jensen Wongなどは、それはもはやプログラミングする必要がないということを意味すると主張するでしょう。コンピューターに何が欲しいか伝えれば、それをやってくれるのだから。しかし、ある大手企業のメジャープロジェクトに7ヶ月間取り組んできた経験から(まだ話せませんが、すぐに公開できます)、非常に明確になったことがあります。それは、プロンプティングがプログラミング言語に漸近的に近づいているということです。
Andre Karpathyが有名に述べた「英語が次のプログラミング言語だ」という言葉は、非常に正しいのですが、それは逆さまになっています。実際には、英語がここにあり、プログラミング言語がここにあって、私たちは英語が大規模言語モデルとやり取りする方法としてプログラミング言語に漸近的に近づいているのを見ているのです。
これは何を意味するのでしょうか?これは、構文がPythonやC、Swift、その他のプログラミング言語のような人工的な構文から離れ、英語の構文に移行しているということです。それがAndre Karpathyが話していたことですが、変わっていないのは、これらの大規模言語モデルに望む動作をさせるために必要な思考の明確さです。
それが私がここで話していることです。思考の明確さは全く変わっていません。非常に明確な思考が必要です。コンピューターとどのように対話させたいのか、あるいはプログラムで何を実現したいのか、望む出力について、非常に明確に考える必要があります。そして、それを非常に明確な方法で述べなければなりません。
プロンプティングは、信じてください、非常に奇妙なゲームです。英語で書いているように感じますが、実際にはコンピューターをプログラミングしているのです。構文的に正確な方法で扱っているのです。だからこそ、プログラミングは廃れるどころか、むしろ誰もが学ぶべきだと思います。心理学や英文学などに進む予定であっても、大学で少なくとも1つのプログラミングの授業を取るべきです。あるいは、少なくともオンラインで学ぶべきです。スタンフォードの講義やMITのオンライン講座などを受講できます。
プログラミングを学ぶべきです。なぜなら、コンピューターと対話するための思考の明確さを学ぶ必要があるからです。そして正直なところ、思考の明確さは常に良いことなので、一般的により良い人間になれます。文章を書くことが目標の出力手段だとしても、より明確に自分を表現できれば、それだけ良いのです。
ここで起きているのは、人工的な構文から英語の構文、あるいは中国語(現在もう一つの主要言語です)やその他のネイティブ言語へと移行していることです。これらはよりゆるい言語です。英語で詩を書くことはできますが、Pythonで詩を書くことは難しいでしょう。もっとも、美しいPythonコードは詩的だと言う人もいますが。
プログラミング言語は非常に制限された構文を持ち、エラーの余地がありません。ミスをすれば構文エラーが出ます。プログラミングをしたことがある人なら誰でも構文エラーを見たことがあるでしょう。英語や中国語などでは、より緩やかな構文の世界があり、変更を加えることができ、完全に正確である必要はありません。Cなどの言語のように、各行の最後にセミコロンを付ける必要もありません。
しかし、その背後にある思考プロセスは正確でなければなりません。英語ではより緩やかな構文を持っていますが、その構文の緩やかさを、より正確な思考によって克服する必要があります。そこでプログラミングの経験が生きてくるのです。
だからこそ、プログラミングを学ぶ必要はないと言う人々は完全に間違っていると私は言いたいのです。これらのLLM(大規模言語モデル)と対話するために必要なことを理解していないのです。LLMは意識を持っているように見えても、依然として数学に過ぎず、単なるコンピュータープログラムです。
私はHerbertと一緒に、Nirvanic.ai のCEOであるSuzanne Gildertと時間を過ごしました。近々彼女を私のチャンネルに招待できることを願っています。彼女は、これらのエンティティに意識のシミュレーションではなく、実際の意識を作り出すことについて話しています。そうなれば状況は変わるかもしれません。
しかし現時点では、意識を持っているように見え、意識を持つエンティティのように私たちと会話するものであっても、その内部では依然として数学に過ぎず、単なるコンピュータープログラムです。だから、コンピュータープログラムとして扱いたいように扱う必要があります。
これは私にとって大きな発見でした。私は常にプロンプティング戦略についてルーズで、「まあ、十分近いだろう」と考え、特定の方法でプロンプトを行っていました。しかし、このプロジェクトが教えてくれたのは、これらの大規模言語モデルと話す際には、非常に正確でなければならないということです。数語の順序を入れ替えたり、「a」のような不定冠詞を「the」のような定冠詞に変更したりするだけで、応答の性質が変わってしまうほどです。これほどの違いを生むとは信じられないかもしれませんが、実際にそうなのです。
そこで私が言いたいのは、Andre Karpathyの「英語が次のプログラミング言語だ」という言葉は全くその通りだということです。しかし、興味深いのは、それがプログラミング言語だという部分です。日常会話のような英語ではなく、文字通りプログラミング言語としての英語なのです。より緩やかな構文や文法を持ちながらも、同じ思考の正確さを持って、意味論的に正確な形式で物事を考えることが必要なのです。私はそれが魅力的だと思います。
最後に、Dr. Pottsの講演に話を戻しましょう。説明のリンクを残しておきますので、ぜひご覧ください。とても良い講演です。彼のプロジェクトは本質的にプロンプティングコンパイラーを作成することです。
大規模言語モデルの問題の1つは、GPT-4(4oなどについては触れませんが)からLlama 2 45b、あるいはClaude Sonnetなどに移行する際に、プロンプティング戦略を大幅に変更する必要があることです。これらは概ね同等のモデルですが、あるモデルから別のモデルに移行する際には、プロンプトを大幅に変更しなければなりません。
なぜなら、これらの大規模言語モデルの内部にある数学、つまり乗算や加算される行列が異なるため、異なる方法で対話する必要があるのです。Dr. Pottsの洞察と彼が話していることは、これらのプロンプトを本質的に大規模言語モデルにコンパイルされるものとして考えることができるということです。
アナロジーが分からない人のために説明すると、コンパイラーのようなものです。Cなどの言語でコードを入力し、それをコンパイラーにかけると、基本的に機械語に圧縮されます。とても面白い仕組みですが、コンパイラーは書かれた方法を見て、個々のコンピューターの機械語に変換する必要があります。
私は今Macを使っていますので、特定の方法でコンパイルされます。Windowsマシンなら別の方法でコンパイルされ、Linuxを使用している場合、特にARMベースのアーキテクチャなどの変わったものでLinuxを実行している場合は、また別の方法でコンパイルされます。
コンパイラーは、同じ構文と同じプログラムを取り、それを各個別のハードウェアマシンが理解できる言語に変換する責任があります。Dr. Pottsのプロジェクトは、プロンプティングを同じ方法で考えているのです。これは本当に素晴らしいプロジェクトです。
個々の大規模言語モデルを実際のプロンプティング戦略から抽象化し、より抽象的なプロンプトを書くことができます。そのプロンプトは、異なるLLMに対して異なる形式のプロンプトに「再コンパイル」されるため、どの大規模言語モデルでも機能します。
ちなみにChristopherさん、もしこのことについて私のチャンネルで話をしたい場合は、ぜひお願いします。下記のメールアドレスか、Xで連絡してください。
彼のプロジェクトの要点は、1つのプロンプトを書けば、それがすべての異なる大規模言語モデルで機能するようになるということです。これは本当に素晴らしいことです。1960年代、おそらく70年代初頭に戻ると、コンパイラーは1つのマシンアーキテクチャだけに基づいており、特定のアーキテクチャに特化したプログラムを書く必要がありました。別のコンピューターシステムに移行したい場合は、プログラムを変更する必要がありました。
今では、そのような心配をする必要はありません。CやPythonなどの抽象化された言語で書くだけで、コンパイラーがそれをすべての個別のマシンで実行できるものに変換してくれます。大規模言語モデルを一種の機械と考えることができます。ソフトウェアではありますが、本質的には、これらのプログラムが動作するオペレーティングシステムのような機械なのです。
抽象化されたプロンプティング言語と特定の大規模言語モデルの間を翻訳できるプロンプトコンパイラーがあれば、Llama 4やLlama 5、GPT-5などが登場しても、これらの個々のLLMが何であれ、同じプロンプトを書くだけで、その新しい大規模言語モデルの形式に再コンパイルされます。これは多くの時間を節約できるので、とても素晴らしいと思います。
では、私が話している思考の正確さがなくなるのでしょうか?全くそうではありません。各個別の大規模言語モデルに対してではなく、一般化された意味で行う必要がありますが、思考の明確さ、構文の正確さ、そして特に意味の正確さ、つまり非常に具体的な方法で何が欲しいのかということは、大規模言語モデルの基本レベルからどれだけ抽象化しても変わりません。
従来のプログラミングと同じように、望む結果を得るためには正確でなければなりません。ただし、構文が異なり、PythonやC、C++などの代わりに英語を使用するというだけです。
結論として、プログラミング言語を学ぶ必要がないどころか、より多くの人々がプログラミング言語を学ぶべきだと思います。これは、コンピューターとより効率的に対話し、コンピューターから望むものを正確に得るためのものです。
最終的に、PythonやC++などの言語でプログラミングをすることはないでしょう。おそらく、英語や中国語など、より伝統的な言語、私たちがより快適に感じる言語でプログラミングすることになるでしょう。しかし、思考の正確さ、構文の正確さ、そしてコンピューターに望むことを正確に伝えることなど、これらすべてはプログラミングによって培われるのです。だからこそ、人々がプログラミングを学ぶことは、これまで以上に重要だと考えています。
以上が今日お話ししたいことです。コメント欄で皆さんの考えを聞かせてください。そして、もしよろしければ、いいねと購読をお願いします。チャンネルの大きな助けになります。ありがとうございます。
そして、今回の動画のスポンサーであるAG1に改めて感謝します。説明欄のリンクから最初のサブスクリプションで20ドル割引を受けられますので、ぜひチェックしてください。では、次の動画でお会いしましょう。さようなら。


コメント