ChatGPTはプログラミングの楽しさを殺している

ChatGPTはプログラミングの楽しさを殺している

長年にわたり、プログラミングは私の人生における最も重要な喜びの源の 1 つでしたが、この喜びがどれだけ長く続くかについては考えたこともありませんでした。しかし、ほんの数日前、ChatGPT が私のために Python プログラムを書いているのを見て、突然、強い予感がしました。近い将来、人々がプログラミングから得られる楽しみは徐々に消えていくかもしれない、と。

言い換えれば、ChatGPT はプログラミングの楽しさを徐々に殺しているのです。この点を説明する前に、ChatGPT が実際に私に何をしてくれたのかを簡単に振り返ってみましょう。

ChatGPT でプログラムを書く

まず最初にChatGPTについて簡単に紹介します。 ChatGPTは、人工知能企業OpenAIが2022年11月にリリースしたGPT自然言語生成モデルをベースにしたチャットボットです。これは強力であり、記述した要件に基づいて実行可能なプログラムを作成するなど、人間の目には非常に複雑である多くのタスクを簡単に完了できます。

一昨日の夜 11 時頃、ベッドに座って携帯電話を閲覧していたとき、数か月間先延ばしにしていたルーターのツール スクリプトを突然思い出しました。自分で書きたくないので、今回は ChatGPT に任せてみようと思います。

このツールの要件を簡単に説明すると次のようになります。

URL アドレスをパラメータとして受け取り、URL 内のドメイン名と URL によって返されるページ内のすべてのドメイン名を dnsmasq サービスの構成エントリに変換し、/etc/dnsmasq.conf ファイルに書き込みます (繰り返しの書き込みを考慮する必要があります)。

ChatGPT にコードを書いてもらうためには、プログラムの目的と大まかな実行フローを自然言語で明確に記述する必要があり、これには約 5 分かかりました。

要件は次のように説明されます。

Python プログラムを作成します。このプログラムは、コマンドライン入力から URL アドレス url を受け取り、url からドメイン名を抽出して src_domain という変数に格納します。次に、指定された URL アドレスを要求して応答を HTML として解析し、応答内のすべての有効なドメイン名を見つけて、secondary_domains というセットに格納します。次に、src_domain と secondary_domains を出力してユーザーに通知します。

dnsmasq の設定ファイルを更新し、src_domain と secondary_domains を domains という大きなセットにまとめます。domains を反復処理します... (以下の内容は省略)

ChatGPT に送信すると、すぐに応答が返ってきました。Python コードの長い文字列でした。

図: ChatGPT チャット インターフェース

以下にその一部を抜粋します。

 def main(): # ... # Extract the source and secondary domains from the HTML response src_domains = {src_domain} secondary_domains = extract_domains(html) domains = src_domains | secondary_domains domains = sorted(list(domains)) # Create the configuration entries for each domain domain_configs = create_domain_configs(domains) # Write the configuration entries to the dnsmasq config file dnsmasq_conf_path = '/etc/dnsmasq.conf' write_config_to_file(domain_configs, dnsmasq_conf_path) # ...

客観的に言えば、ChatGPT は明確なコード構造、正確なコメント、適切な関数と変数の命名を提供し、全体的なコードの見栄えも良好でした。ローカルに保存し、実行できるようにしました。しかし驚いたことに、最初の実行は失敗しました。

調査の結果、コードに少なくとも 3 つのバグが見つかりました。

  1. バイトと str 型の互換性の問題
  2. ファイルは「a」モード(追加)で開かれたため、内容を読み取ることができませんでした
  3. ループ内で .read() メソッドが呼び出されてファイルが読み取られますが、ファイル カーソルはリセットされないため、完全な内容が読み取られるのは初回のみです。

これらのバグは Python ではよくあるものなので、修正するのは難しくありません。これらすべてが完了すると、プログラムは最終的に正常に実行できるようになります。簡単なテストと検証を行った後、必要な機能が完璧に実現されていることがわかりました。

それから時間の計算をしてみました。要件の記述からプログラム全体のデバッグまで約 10 分かかりました。つまり、ポモドーロの半分以下で、ChatGPT を使用して頭の中にあるアイデアを 88 行の実行可能な Python コードに変換することに成功しました。

その夜は眠れなかったと言っても過言ではありません。午前 4 時に、私はベッドに座り、頭の中でいくつかの質問を繰り返しました。「将来、どのようにプログラミングすればよいでしょうか。要件をコンピューターに説明して、コンピューターに完了させるか、IDE を開いて直接開始するか。何年後も、人々はまだプログラミングを必要とするでしょうか。なぜ今、プログラミングをしているのか。」

これらの疑問から、私たちのプログラミングの背後にある重要な原動力は常に「楽しさ」であったことに突然気づきました。具体的には、プログラミングがもたらす楽しさは大きく分けて2つあり、ChatGPTはその中の非常に重要な1つを急速に飲み込んでいるのが現状です。

プログラミングの2つの楽しみ

「創造は人を幸せにする」この特性は、何万年も前に人間の遺伝子に刻み込まれていたのかもしれない。プログラミングはクリエイティブな仕事です。人々はコードを書くことで段階的に望むものを達成し、このプロセスによって幸せを感じます。こうした喜びは、人間がものを作るときに自然に生じる「家を建てる」「道具を作る」といった喜びに似ています。

プログラミングに秘められた楽しさは、大きく分けて2つあります。それは、プログラミングにおける2つの大きな要素、つまり「企画・設計」と「小さなパズルを解くこと」から生まれます。

1. 「企画・設計」

ソフトウェアプロジェクトを開発する際に、ユーザーからの要件を受けて最初に行う必要があるのは「企画・設計」です。このフェーズでは、まずユーザーのニーズを理解し、次に次のような「大きな」決定を心の中で下す必要があります。

  • プロジェクト内のビジネス モデルと用語を使用して、このユーザー要件を翻訳する方法。
  • この要件がプロジェクトの各レイヤーにどのような変更をもたらすかを分析します。
  • 実装中に、どの部分でスケーラビリティを考慮する必要があり、どの部分で考慮する必要がないか。
  • それに関連する古いコードをどのように処理し、マージ、書き換え、または拡張しますか?

一言で言えば、「企画・設計」段階で私たちが考える中核的な課題は、「ユーザーのニーズを満たしながら、プロジェクトの品質を長期的に健全に保つにはどうすればよいか」ということです。重要なのは、ソフトウェア全体の複雑さを適切な範囲内に維持し、過度に増やさないことです。

2. 「小さなパズルを解く」

「企画・設計」が完了したら、次は「小さなパズルを解く」です。このセッションの目的は、「企画・設計」における「大きな決断」を、次々と「小さなパズル」に分解し、一つずつ解決していくことです。

たとえば、「ユーザー登録インターフェースにパスワード強度検証を追加する」という要件は、次のような小さなパズルに分解できます。

  • リクエストからユーザーが入力したパスワードを読み取るにはどうすればよいでしょうか?
  • パスワードに少なくとも 1 つの特殊記号と 1 つの大文字が含まれていることを確認するにはどうすればよいですか?
  • ユーザーの以前のパスワードを取得し、それが新しいパスワードと等しいかどうかを判断するにはどうすればよいでしょうか?

すべてのパズルが解けたら、次のステップはそれを解くコードを書くことです。 TDD (テスト駆動開発) の実践、ドキュメントの確認、検索エンジンからの支援の取得など、各パズルをよりスムーズかつ迅速に解決するのに役立つテクニックやツールは数多くあります。しかし、どれも ChatGPT に匹敵するものはありません。

ChatGPTによってもたらされた変化

人類がコンピューターを発明した最初の日から、プログラマーは上記の 2 つのタスクを完了するために完全に自分の脳に頼ってきました。

しかし、ChatGPT を使用すると、「計画と設計」の部分が完了すると、残りの作業、つまり小さなパズルを次々と解決する際に、実際に自分でコードを書く必要がなくなり、ChatGPT に要件を渡すだけで済むことがわかります。

たとえ特定の要件が極めて複雑であったとしても、それを多数の独立した小さなパズルに分解すると、各パズルに含まれる抽象的な概念や論理的な関係が大幅に削減されるからです。つまり、ChatGPT に明確に説明してコードの記述を完了させるのに多くの労力を費やす必要はありません。

一見すると、これはプログラマーにとって良いことだと思いませんか?そうすることで、作業効率が大幅に向上するからです。しかし、よく考えてみると、効率は向上する一方で、別の深刻な問題も引き起こす可能性があることがわかりました。つまり、誰もが小さなパズルを自分で解く必要がなくなると、プログラミングの楽しさのほとんどが失われてしまうのです。

なぜそんなことを言うのですか?私のお気に入りのビデオゲームの一つである「Hades」の例えを使ってみましょう。

プログラミングのアナロジーとしてハデスを使う

Hades は、ギリシャ神話に基づいて Supergiant Games が開発したアクション ゲームです。このゲームでは、冥界の王子であるザグレウスを操作して、冥界から脱出します。

画像: Hades のゲームカバー

Hades のコアゲーム体験は、「リアルタイム戦闘」と「能力構築」の 2 つの部分で構成されています。

「リアルタイム戦闘」の部分は、その名の通り、Hades Blade (片手剣)、Eternal Spear、Hearth Bow など、さまざまな武器から選択できます。各ゲームの前に、プレイヤーはそのうちの 1 つを選択できます。最高の報酬を得るためには、さまざまな武器を巧みに使い、あらゆる攻撃をかわし、優れた操作ですべての敵を倒す必要があります。

「能力強化」は『Hades』のもう一つの特徴的なゲームメカニズムです。 「Hades」はローグライクゲームです。プレイヤーがプレイするレベルはすべて毎回ランダムに生成されます。新しいゲームが始まるたびに、主人公の能力値はリセットされます。キャラクターを操作して小さなレベルを通過すると、次のレベルにつながる 2 つのドアがマップ上にランダムに表示され、各ドアには獲得できる報酬がマークされます。これら 2 つのドアのどちらかを選択する必要があります。

図: 次のドアを選択

ゲーム内の報酬は多様で、体力の上限の増加、大量の金貨の増加などがあり、最も重要なのはキャラクターの能力の強化、つまりさまざまなオリンポスの神々からの「祝福」です。これらの「祝福」の中には、キャラクターの攻撃力を強化するもの、通常攻撃にリバウンド効果を追加するもの、スプリント距離を伸ばすもの、武器を直接アップグレードして新しいクールな動きを追加するものなどがあります。

図:「祝福」を選択

Hades が魅力的なのは、リアルタイムの戦闘と能力構築が完璧に組み合わされている点です。ゲームがリリースされた後、何百万人ものプレイヤー(私を含む)がゲームに夢中になりました。私たちは武器と祝福のあらゆる組み合わせを熟考し、次の報酬を選ぶのに頭を悩ませ、主人公を操作して非常に巧みな戦闘で敵を粉々に吹き飛ばすことに夢中になりました。

さて、別のパラレルワールドで、「Hades」の開発チームが「Hades」ゲームをリリースしたと想像してください。ただし、このタイムラインの「Hades」では、プレイヤーは各バトルを解決するために冥界の王子を個人的に操作する必要はなく、各プレイの前に次の事項に責任を持つだけで済みます。

  • 武器を選ぶ
  • 能力ボーナスを選択
  • 隣を選択(報酬)
  • 神の「祝福」を選ぶ
  • 爆弾攻撃を優先するか、敵の集団に突入するかなど、戦闘ごとに戦略を選択してください。

つまり、このゲームでは、プレイヤーは、ハートスネークボウを操作してチャージ攻撃を放つ方法や、エターナルスピアのスプリント攻撃を使用して敵を効率的に倒す方法を練習する必要がなくなりました。プレイヤーがしなければならないことは、各主要ノードで分析と指示を行い、AI がすべての戦闘を完了するのを見て、最終的な報酬を楽しむことだけです。

このバージョンの Hades は以前と同じくらい楽しいと思いますか?

管理と戦略に重点を置き、アクション要素を完全に排除した Hades ゲーム。ChatGPT が最終的に「プログラミング」を変革する可能性があるのは、このゲームだと思います。

ChatGPTに関するいくつかの質問

これまで ChatGPT を実際に使用したことがない場合は、いくつか疑問があると思います。

ChatGPT によって書かれたコードは本当に優れているのでしょうか?

公平に言えば、ChatGPT によって書かれたコードは完璧ではなく、多くの経験豊富なプログラマーと比較するとまだ大きなギャップがあります。前に説明したように、ChatGPT によって記述されたコードは直接実行されない可能性があり、いくつかの小さなバグがあります。

しかし、ChatGPT のもう 1 つの強力な点は、会話を通じていつでもコードの改善を依頼できることです。たとえば、ツール スクリプトを書いているときに、次のように実行するように要求しました。

  • 責任に応じてコードを異なる関数にカプセル化してください。メイン関数の名前はmainです。
  • HTTPリクエストを完了するためにサードパーティのライブラリを使用しないでください。

結果からすると、ChatGPT は私のリクエストを完全に理解し、瞬時に修正されたコードを提供してくれたようで、感心するほどでした。

ChatGPTを使わなくても大丈夫でしょうか?

上記をすべて読んだ後、おそらくあなたはこう言わずにはいられないことを心の中で思っているでしょう。「作者のあなたが ChatGPT でコードを書くのは楽しくないと思っているのなら、なぜそれを使わないのですか? なぜそんなにナンセンスなことを言うのですか?」この点に関して、次のシナリオを検討してください。

ネストされたデータ型をフラット化しようとする関数を作成しています。これを行うには 2 つのオプションがあります。

  1. 関数と対応する単体テストコードを手動で完了します。これには20分かかります。
  2. 考えを整理し、要件を記述し、ChatGPTに送信し、ChatGPTによって書かれたコード(およびテストケース)を少し調整して直接使用します。これには5分かかります。

どちらを選びますか?あなたの選択が何であるかはわかりませんが、私は現在、最初のアプローチの必要性を疑っている状態です。

最後に

読者の皆様、この記事のタイトル「プログラミングの楽しさを殺す」が少々大げさなものであることは認めます。 ChatGPT はプログラミングの楽しさをすべて奪うものではありません。しかし、ChatGPT を使用した私の体験をご覧になった後は、入力を止めて考えてみてください。AI の急速な発展の波の中で、わずか数十年の歴史しかない知的行動であるプログラミングはどのように変化するのでしょうか。そして、これらの変化は私たちをどこへ導くのでしょうか。

最後に、ChatGPT は(部分的に)人間と同等の品質の Python コードを提供してくれましたが、それが短期間でプログラミングを排除し、プログラマーという職業を過去のものにするとは思いません。根本的な理由は、「企画・設計」の部分を短期的には機械で実行できないからです。

しかし、プログラミングがなくなるわけではありません。つまり、ChatGPT が人々のプログラミング習慣を変えないということではありません。これは、プログラミングの楽しみ方をすでに形作り始めている、あるいは完全に消し去りつつあると思います。

おそらく、経営と戦略に重点を置き、アクション要素を完全に排除した「Hades」ゲームが登場するだろう。今後も楽しい時間を過ごせるよう祈っています。

私のブログ: https://www.piglei.com/

<<:  Gen-2 は AI 生成ビデオに革命をもたらします。一言で4K高画質映画が作れる。ネットユーザー「ゲームのルールを完全に変えた」

>>:  私はパニックになりました。上司はこう言いました。「AIはフロントエンドを100%置き換えるだろう」

推薦する

自動化された機械学習は AI 研究の次の主流となるでしょうか?データサイエンティストの意見

自動化された機械学習は、過去 1 年間で大きな関心を集めるトピックになりました。 KDnuggets...

WEF: 2023 年のトップ 10 新興テクノロジー

世界経済フォーラム(WEF)は毎年、世界経済と社会に大きな影響を与える可能性のあるトップイノベーショ...

機械翻訳:人工知能分野の重要な中核技術

近年、機械翻訳 (MT) は大きな進歩を遂げ、満足のいく成果を達成しました。 MT は人工知能分野の...

機械学習の導入を成功させるための3つのヒント

人工知能の時代において、機械学習、自然言語処理 (NLP)、認知検索技術が急速に導入されているのは当...

...

...

...

...

データ分析と機械学習のための 11 の高度な視覚化

視覚化は、複雑なデータ パターンと関係性を直感的でわかりやすい方法で伝えるための強力なツールです。こ...

ビジネス AI とデータの課題に対処する垂直インテリジェンス

人工知能は大きなビジネス価値をもたらすことができます。しかし、AI のメリットを最大限に引き出すには...

ReAct: 言語モデルにおける推論とアクションを組み合わせてよりスマートな AI を実現

本日は、Google Research とプリンストン大学の研究者グループが言語モデルにおける推論と...

比較ベースのアルゴリズムでは、5 つの要素をソートするのに 7 回のパスが必要だと言われるのはなぜですか?

結果のソートアルゴリズムの唯一の要件は、オペランドが全順序関係を満たすことです。 a≤b かつ b≤...

...

...