LLM時代にプログラミングを学ぶなら、大工を検討すべき?
Learning Programming in an Age of LLMs
Mark Seemann氏が、LLMを使って大規模なTypeScript/JavaScriptシステムを構築したものの、その理解が追いつかず「自分の理解を超えたシステム」に苦しむ読者の悩みに答える。同氏は、LLMが人間の学習速度を劇的に変えることはないとし、検証可能な質問に限定してLLMを使うことを勧める。また、AI時代のプログラミング学習の難しさを認めつつ、自身は好奇心からデータ構造や言語意味論を学び続けていると語る。
LLMは幻覚を見るのではなく、でたらめを言う。だから私はLLMが言うことを深く疑っている。
HNでの議論
149- japhyr
私は『Python Crash Course』の著者ですが、今週まったく同じメールを受け取りました。私も公の場で回答を書こうと考えていました。なぜなら、こうした質問に真摯に答えるには、ブログ記事一本分の長さが必要になるからです。また、今まさにプログラミングを始めようとしている多くの人々が、同じような疑問のバリエーションを抱えているので、公に答える価値があると思います。
> AIによって、人が理解できる速度を超えて開発が速くなると思うか?
まったくその通りです。これがこの人物のメールの核心であり、同様の質問をする他の全員の核心でもあります。ほんの5年前なら、中程度の複雑さの動くプロジェクトを作るには、MVPを作るのに必要な基礎から中級の概念を学ぶしかありませんでした。今では、LLMをそこそこ上手く操縦できれば、自分の実装理解をはるかに超えたMVPを素早く作れます。
このメールで提起されたすべての疑問に明確な答えを持っている人はいないと思います。人は以前より速く学べるようになったと思います。なぜなら、異なる領域間のつながりを以前より速く見出せるからです。しかし、学び方と働き方にはスキルと規律が必要です。プロジェクトを作りながら、意図的に理解を深めていく必要があります。
- js8
私は自分自身にこう答えました——LLMのことを心配するのはやめよう。とてもシンプルです。カリー=ハワード同型対応により、プログラミング言語はある種の形式論理のための単なる記法にすぎません。
さて、自問してください。プログラムをどの言語で維持したいですか?自然言語が形式論理よりも簡単で保守しやすいと思いますか?
答えはノーです。だからプログラマーが必要なのです。形式的な記述を読み、新しい要件に適応できる人々です。
LLMは素晴らしい技術ですが、真実は——自然言語はちょっとダメなんです。したがって、LLMは実際には必要ありません(https://en.wikipedia.org/wiki/AI_effect も参照)。
人々がLLMを愛するのは、マジシャンを愛するのと同じ理由だと思います。しかし、マジシャンが隠されたトリックを使うように、LLMはあなたが見たり理解したりしないアルゴリズムを実行しているだけです。
なので、LLMがプログラミングの仕事を奪うのを心配するのは、マジシャンが物を浮かせられるからといって倉庫作業員の仕事を奪うのを心配するようなものです。一方で、私たちにはすでに自動プログラマーがいます——コンパイラと呼ばれています。
- duendefm
私はソフトウェアエンジニアで、ソフトウェア開発だけでなくシステム保守も行い、ネットワークや電話システムも扱い、何人かのジュニアと働いています。AIとの仕事は問題があります。スピードアップもするが、同時に遅延もさせる。システム保守の部分では、時々多くの作業を様々なマシンで素早く行う必要があり、クラウドベースのAIオラクル(時間がかかる)に仕事を任せるわけにはいきません。そして同時に、オラクルとして使えば使うほど、能力が低下します。専門家であれば、どの分野でもAIをツールとして使うことで恩恵を受けますが、それは容易に諸刃の剣となり、熟練度を下げてしまいます。ジュニアにとっては、印象的でサイトや一部のビジュアルには十分機能するものを素早く作れますが、AI使用ループに陥ると専門家になることは不可能です。AIがクリーンな影響を与えるためには、ソフトウェアエンジニアリングが重要でない世界に住む必要があるでしょう。つまり、データベースの選択、高可用性システム、プログラミング言語そのものが重要でない世界です。
- agentultra
「AIで何かを作ったけど、理解していない。変更を加えて修正したいが、なぜ失敗するのか、どう直すのかを理論化する能力がない。」
なんとまあ。つまり、LLMで作る前に自分でプログラムできなければならないのです。そうでなければ、出力を判断する方法がありません。AIはあなたをプログラマーにはしません。
プログラミングを学ぶことが、するのです。
興味深い記事です。私のアドバイスは、昔ながらの難しい方法でやることです。知識、技能、学習への王道はありません。
- dack
LLMが強力になった後にプログラミングを学ぶことがどんなものか、私は決して知らないかもしれません(私は2002年頃にプログラミングを始めました)。しかし、もし誰かが私にそういう人たちへのアドバイスを強要するなら、ただ作り始めて好奇心を持ち続けろと言うでしょう。
つまり、LLMを使ってサイト全体を作り、その後好奇心のあるところを掘り下げるのです。コードを見て、LLMにどう動くか尋ね、プログラムがどう構築されているかを理解するまで掘り下げ続けます。利点は、おもちゃの例ではなく、実際のプログラムを見ていることです。また、プログラムがうまく動かなくなったら(バグや性能問題)、LLMでデバッグし、なぜ遅かったのか、その背後にある概念を教えてもらうように頼み始められます。
最近は、基本的にその場で自分のカリキュラムを作り、クールなものを作りながら実際の例で学べると思います。
最大の障壁はモチベーションでしょう——多くの人は好奇心を持ちたくなく、ただ動いてほしいだけです。そういう方法では何も学べません。
- AnodicElegy
「中国が世界貿易機関(WTO)に加盟したときにも同じ種類の議論が使われました。そして実際、多くの新しい仕事が生まれましたが、西洋世界ではなかっただけです。」
中国のWTO加盟は、AIが大量失業を引き起こすという主張の証拠例としては、実際には良くありません。米国の失業率は当時すでに上昇しており、中国加盟直後にピークに達し、その後加盟時点よりはるかに低い水準まで下がり、再び上昇したのは大金融危機の時だけでした。それは中国との競争とは無関係、あるいはほとんど関係がありませんでした。仕事が失われなかったと言うわけではありませんが、失われた仕事は置き換えられ、米国の失業率は近年記録的な低水準に近づいています。中国のWTO加盟は、AIによって失われた仕事が新しい仕事に置き換わるという考えを支持する点であり、反論ではありません。
- aethertap
これは今私にとって非常に現実的な問題です。なぜなら、私は自分の子供たちにプログラミングを教えている最中で、もう何年も取り組んできたからです。AIがその学習の前提を無効にしているように見えるのを目撃しています。正直に言うと、かなり憂鬱な変化です。私はプログラミングが好きで、これが起こるのを見るのは辛いです。
そこで、自分の指導方法を変えました。彼らが間もなく入る世界で働く準備になることを願って、3つのことをさせています:
1. 常に手作りのプロジェクトを持ち、たとえ痛いほど遅くてもAIの助けなしで取り組む。
2. AIと仕事をするときは、ソースコードではなく、データ構造、アルゴリズム、アーキテクチャ要件を操作するコンパイラとして扱う。組み立てるように指示する前に、作っているものの理論的な部分を理解しなければならない。
3. AIを強力なツールとして使い、アルゴリズムとトラブルシューティングに関する自分の知識を成長させる。問題が起きたら、実際の問題が何かについていくつかの仮説を立てる機会とする。モデルに先にやらせない。彼らには実際にそれをカスタムkanbanツールの課題カードとして書き留めさせ、その後モデルを使って、真の問題にどれだけ近づいたかを調査させる。
これが、私が一生のコーディングで経験したデバッグに似た何かを彼らに与えることを願っています。AIとコーディングするときに私が持ち込む最も価値のある知識は、[…]