AI向けソフトウェアエンジニアリングの最適化 | オリジナル、AI翻訳
目次
- AI最適化のためのソフトウェアエンジニアリング
- AIファースト開発のためのフラットアーキテクチャ
- AI駆動ワークフローにおけるPythonの利点
- コンテキストエンジニアリングとトークン最適化
- AI支援のためのコード構造化
- マニュアルAIエージェントとしての成功
- エンタープライズ環境におけるAIツールの活用
- ツール選択とコンテキスト管理
- 再利用可能なプロンプトシステムの構築
- Java開発におけるPythonの活用
- Javaプロジェクト支援のためのPythonスクリプト
- クロス言語開発戦略
- AI支援によるコード生成
- AI時代のプログラミング言語
- Python、Rust、Javaの未来
- パフォーマンスとシンプルさのトレードオフ
- 言語進化とAI統合
AI最適化のためのソフトウェアエンジニアリング
このブログでは、翻訳、プレイグラウンド、フロントマターのメンテナンス、Telegramボットなどの作業を支援するために、数百のスクリプトを利用しました。この開発アプローチは、AI最適化されたソフトウェアエンジニアリングの未来を表しているかもしれません。
私はPythonモジュール機能にあまり依存していませんし、大規模なJava Springプロジェクトのようにコードを構造化したいとも思いません。
私はこれまで多くのソフトウェアプロジェクトに携わりました。印象的な銀行アーキテクチャ、マイクロサービス、複数国間の設計で重複を最小限に抑える効果的な設計、Springを基盤とした堅牢な基盤フレームワーク、中央集権的な設定による強力なガバナンスなどを見てきました。
これらの銀行アーキテクチャは印象的ですが、もし今日から始めるなら、LLMやAIに最適化することを検討します。これはより良いコンテキストエンジニアリング、改善された責務の分離、人間中心設計よりもAIファースト思考を優先することを意味します。Springは複数のレイヤーと良い抽象化を提供しますが、LLMやAIがナビゲートするのは難しい場合があります。
私はフラットな構造を目指すべきだと思います。これは、フラットな組織に似ています。つまり、2つのレベルのみを使用します。第一レベルは第二レベルを呼び出します。関数では、50の関数を直接呼び出す方が、50のネストレベルやスタックを持つより良いです。AI/LLMは過度に複雑でネストされた構造を判断または推論するのに苦労しますが、100~200行のコードの小さな関数を処理するのには優れています。Pythonは他のファイルから呼び出しやインポートに適しています。
PythonコードがJavaよりも簡単な理由の1つは、その依存関係管理が簡単であることです。pip install
を使用して依存関係を追加するだけです。Mavenでは、依存関係をPOM XMLファイルに記述し、mvn compile
を使用してMavenが依存関係をダウンロードさせる必要があります。
Pythonのシンプルさのもう1つの理由は、そのコードを直接実行できることです。
Java 11以降、java
コマンドは単一ファイルのソースコードプログラムを別途コンパイルすることなく直接実行できます。ただし、Javaプロジェクトは大きいことが多いため、mvn spring-boot:run
といくつかのプロパティ設定を使用して実行する必要があります。
3つ目の理由は、Pythonのモジュール設計がシンプルであることです。from
とimport
を使用して、他のファイルからコードを簡単にインポートできます。
現在、多くのAIチャットボットは、GrokのようなチャットボットウィンドウでPythonコードを直接実行できます。
100のJavaファイル(各ファイル約1000行)と、いくつかのシンプルなPythonスクリプトを比較するのは公平ではありません。この種のプロジェクトでは、1000のPythonファイル(各ファイル約100行)を持つ方を好みます。
コードの行または関数を編集することは許容されます。ただし、どこを選択するかを知る必要があります。なぜAIにこのタスクを任せ、私たちの生活を楽にさせないのでしょうか?そのため、コードをすべて選択し、AI/LLMに編集方法を伝えるだけです。
Pythonでは、if __name__ == "__main__":
を使用してファイル内の関数を実行およびテストするのが簡単です。また、このファイル内の関数を他のPythonファイルから呼び出すのも、テストを実行する必要がないため簡単です。
これはAI最適化されたコンテキストエンジニアリングです。他の方法でアプローチできますか? AI/LLMは自己回帰的です。しかし、CopilotやClaude Codeを使用すると、AIソフトウェアエージェントがどのように私たちを支援するかはわかりません。彼らは私たちの代わりに考えるべきです。
ユーザー側で、トークン使用量を減らすためにコードを特別に配置できますか? この点について、1000のPythonファイル(各ファイル100行)を持つアプローチはこの目的に適しています。なぜなら、他のPythonコードがそれらを呼び出す前に、関数とコードファイルを簡単に確認できるからです。
ただし、複数のコードファイルを同時に変更したい場合、それは簡単ではありません。簡単な方法として、コードをAIチャットボットにコピーし、それらのファイル内のコードを編集する方法を教えてもらうことができます。
おそらく、関数やロジックを分離するために行数を使用する必要はありません。ただし、ロジックを小さな関数に分離する必要があります。これは、ロジックの種類で自然に分離することで、より短く見えるようにすることで実現できます。
なぜAI最適化されたソフトウェアエンジニアリングが必要なのでしょうか? なぜならAIは強力だからです。私たちはすべてをAIに最適化し、AIがソフトウェアエンジニアリングをできるだけ支援できるようにすべきです。
これはコードだけでなく、テキストにも適用できます。私たちが非常に厳格な編集者である場合、AIに大規模なテキストを一度に編集させたくないかもしれません。段落ごとに確認したいでしょう。コードの場合、軽微なエラーやバグは許容できます。テキストの場合も許容できます。なぜなら、ほとんどの読者はそれほど厳格ではないからです。
ただし、コードは時々、軽微なエラーが大規模なプロジェクトの完全な機能不全につながる場合があります。
XMLやYAMLファイルは、すでに高度に構造化されているため、それほど分離する必要はないかもしれません。
HTMLファイルについては、分離する必要があります。数百のJavaScriptファイルと数百のHTMLファイルを一緒に記述し、1000行を超えるコードを作成するのではなく、import
を使用してJavaScriptを管理するべきです。JavaScriptコードについては、上記の方法で分離できます。
私たちは、AIがコードを簡単に追加、編集、削除、実行できるようにコードを構造化したいです。これが始まりです。AIがすべてのコードを簡単に生成または修正できる日を想像してください。世界は高度にデジタル化されます。
自分が100の大規模なソフトウェアプロジェクトを書き、他のプロジェクトと接続するためのAPIを提供する様子を想像してください。これは私の日常のアジェンダに含まれています。私は今や、1000人の従業員を持つテック企業のような存在です。それらは私のニーズに合わせてカスタマイズされ、収益を生み出したり、私の利益のために費用を支出したりします。これは本当に驚くべきことです。
マニュアルAIエージェントとしての成功
AIエージェントはコードで自動的に実行されるべきです。しかし、このエッセイのタイトルは「マニュアルAIエージェント」です。冗談だと思われるかもしれませんが、そうではありません。
「マニュアルAIエージェント」と言う理由は、大企業ではセキュリティデータの懸念や長期的な考慮事項のため、技術採用が遅いからです。
市場には多くの新しい技術があります。どれが残るか、どれがすぐに消えるかは誰にもわかりません。
彼らはセキュリティデータの懸念も抱えています。通常、彼らは厳格で公衆の監視下にあるデータポリシーを持つ大手ブランドと提携したいと考えています。これが、マイクロソフトがフォーチュン500企業のトップパートナーになった理由です。他の企業は、Teams、Microsoft Office 365、Azure、Copilotを使用しています。
しかし、大企業が従業員にLLM APIを提供しない場合、マニュアルAIエージェントとして働く方法を考える必要があります。
つまり、APIの機能呼び出しやツール使用に似た多くのツールを使用して働くことになります。自分でプロンプトエンジニアリングやコンテキストエンジニアリングを行います。
複雑なタスクをClaude CodeやManusに行わせる代わりに、シンプルなAIチャットボットで自分でタスクを実行するかもしれません。
AspectJはAOPプログラミングを使用してメソッドをインターセプトするために優れています。SpringのフィルターはHTTPリクエストのログをキャプチャするのに優れています。Log4jのロガーは特定のログをファイルにリダイレクトするのに優れています。IntelliJ IDEAはオブジェクトをテキストとしてエクスポートする機能を持っています。
SQLクライアントは行をCSVやExcelファイルとして簡単にエクスポートできるため優れています。Git diffは比較テキストを提供できるため優れています。
それらはすべて、AIチャットボットに対してより良いコンテキストを提供するのに役立ちます。AIチャットボットはまた、多くのPythonスクリプトがタスクを実行するのを支援できます。
効果的なAIエージェントになるには、タスクを実行するために多くの効果的なツールを使用する必要があります。簡単なタスクでも複雑なタスクでもです。
LLM/AIチャットボットのAPIがない場合、テキストをチャットボットにコピーする必要があります。これは直接AIを呼び出すよりも少し面倒ですが、良い知らせは、コンテキストやプロンプトをより慎重に選択できることです。
したがって、自動AIエージェントのようにAIチャットボットに何度も質問する必要はありません。使用するツールを慎重に選択できます。
マニュアルAIエージェントとして働くことは利点があります。ただし、AIエージェント技術は迅速に進化し、その可能性を世界に示しています。
それらが非常に有用であれば、大企業はAIチャットボットと同様にそれらを採用するでしょう。そうでなければ、それらを採用した他の企業と競争できません。大企業だけでなく、小規模なスタートアップも含まれます。AIは今や非常に強力です。数十人の従業員を持つスタートアップは、1000人の従業員を持つ企業を凌駕する可能性があります。
マニュアルAIエージェントとして働くことは時には避けられません。その仕事には、高度なAI技術がないという利点以外にも利点があります。良い仕事を見つけるのは簡単ではありません。そのため、この場合、私たちはAIチャットボットを最大限に活用するために伝統的な知恵を活用する余地があります。
そして、これは私たちがプロンプトを整理し、蓄積して、AIチャットボット用のシステムプロンプトを作成できることを意味します。ClaudeやGrokが公開したものと同様のものです。このように、繰り返しプロンプトを書く必要はありません。Pythonスクリプトを使用してプロンプトの作成を支援できます。HTTPリクエストのログを取得し、プロンプトを使用してAPIテストケースを生成できます。
プログラミングの魔法は、無限の抽象化レベルにあります。関数のように、100レベルの関数呼び出しを持つことができます。例えば、WeChatはiOSの上に構築されており、WeChatミニプログラムはWeChatの上に構築されています。iOS自体はObjective-CまたはSwiftの上に構築されており、それらはLLVMとAppleのARMチップの命令セットの上に構築されています。
Java開発におけるPythonの活用
AI時代にPythonを使用してJava開発を支援するにはどうすればよいでしょうか? 私はPythonが好きです。ChatGPTが2022年末にリリースされてから、過去約3年間で最も多くPythonを使用してきました。
1つの方法は、Pythonを使用してJavaプロジェクトのSQLヘルパースクリプト、テストスクリプト、ログ検索スクリプトを記述することです。
Pythonを使用してJavaのPOMファイルとパッケージ依存関係を分析します。Pythonを使用してJavaのデータ整合性を確認します。Javaで行うことの多くはPythonで行うことができます。
ただし、JavaにはPyTorchがありません。Pythonは、Javaで500行かかることを200行で行うことができます。ただし、AIツールを使用しても、PyTorchの独自バージョンを簡単に取得することはできません。TinyGradのようなものを構築するのにも時間がかかります。
なぜ最初に独自のスクリプトを記述するのでしょうか? 1つの理由は、非常にカスタマイズ可能であることです。公開ソフトウェアやオープンソースプロジェクトは、特に大企業のプロジェクトを直接支援することはできません。
大企業の大規模プロジェクトは、10年以上にわたって開発されています。すでに多くのカスタマイズが行われています。
したがって、今後、大企業の大規模プロジェクトを取り巻く多くの周辺プロジェクトが生まれるでしょう。大企業の内部コーディングエージェントツールには、Claudeのようなコードルーターがさらに増えるでしょう。大企業には、よりカスタマイズされたPostman、SQLクライアント、コンパイラが増えるでしょう。
PythonコードはJavaエージェントにも接続できます。
つまり、PythonとJavaの両方をよく学ぶ必要があります。1つを使用して他を支援する方法を知るためです。
そして、AIの支援を受けて、自分自身や企業プロジェクトのために多くのことを作成できます。Javaは障害にはなりません。Spring、データベース、Angular、Vue、またはReactをフロントエンドとして使用するJavaは、Pythonが多く支援する障害にはなりません。
プログラミングは非常に柔軟なものです。限界は私たちの想像力です。
AIは急速に成長しています。私たちは、AIの進歩を、AIの支援を受けてコーディングや学習でどれだけ多くのコードを使用してどれだけ簡単に達成できるかで測定できます。
ある日、AIエージェントをいくつか書き、それらのエージェントがTikTok全体を作成し、その多くのマイクロサービスや大規模なiOSまたはAndroidプロジェクトを含めることができるでしょうか?
AIが非常に強力であれば、今日の私たちは何をすべきでしょうか? おそらく何も、私たちが今日行うことは、AIの支援を受けて簡単に実装できるでしょう。2025年、AIの支援を受けて1年間の作業は、2030年のAI能力で1ヶ月で完了できるでしょう。
これは私たちに本質的な質問を投げかけます。私たちの人生の目的は何ですか? これは何についてなのでしょうか? どうすれば良い人生を送れるでしょうか?
AIは他の技術と同様に、私たちに自由をもたらすために現れています。しかし、資本主義社会では、誰もが機械のように忙しく見えます。
話題に戻ります。PythonはJavaコードを書くのにも役立ちます。Pythonを使用してコードを書くためのコンテキストを取得し、Copilotにそれを書かせることができます。
AIはプロンプトエンジニアリングとコンテキストエンジニアリングについてです。プロンプトとコンテキストはAIチャットボットの応答を支援します。
Pythonはコンテキストを支援できます。Pythonはプロンプトを生成するのにも役立ちます。
これはJavaだけでなく、他のすべてのプログラミング言語についても言えます。Pythonはそれらを深く支援できます。では、なぜ他のプログラミング言語を使用し続ける必要があるのでしょうか?
Pythonの固有の設計が、C、C++、またはRustのような他のプログラミング言語よりもパフォーマンスが劣る原因です。
AI時代のプログラミング言語
AIは今や非常に強力です。AIの視点からすべてを再考する必要があります。次の10年間で人気のあるプログラミング言語はどれでしょうか?
Pythonは間違いなく人気があります。多くのAIチャットボットは、Grokのようなブラウザでコードを実行するためにPythonを使用しています。Pythonはシンプルさ、学習の容易さ、そして十分なパフォーマンスで人気があります。多くのソフトウェアプロジェクトで採用されています。
PythonはC++、Java、Rustよりも遅いです。Javaには大きなコミュニティがあります。RustはCの上に構築されています。
多くのプロジェクトがRustに書き直されるか、Rustに置き換えられるかもしれません。書き直すとは、古いプロジェクトを参照し、Rustを使用して同じ機能を実装することを意味します。置き換えられるとは、他の言語で書かれたソフトウェアが、Rustで書かれた類似のソフトウェアに置き換えられることを意味します。
Rustの構文は比較的複雑です。しかし、AI時代では、これは大きな問題ではありません。AIがコードを書くのを支援するためです。複雑な構文についても、人間は実際にはそれほど苦労しません。
私はヒンディー語やタミル語がかなり複雑だと思います。しかし、北部に住むインド人にはヒンディー語は問題ではなく、南部に住む人にはタミル語は問題ではありません。
しかし、中国人である私にとっては、それを学ぶのは大きな問題です。
最初の印象では、ヒンディー語の文字はすべて私にとって似ています。ヒンディー語とアラビア語の違いは、中国語と日本語の違い、または英語とスペイン語の違いのようなものだと思います。
プログラミング言語の違いは、自然言語の違いよりも少ないです。1つの大きな理由は、プログラミング言語は文字の外見だけが異なることです。一方、自然言語は文字セットと発音の両方が異なります。
プログラミング言語は約1世紀の歴史しかありませんが、自然言語は100世紀以上の歴史があります。人々が何かを長く行うほど、より多くの違いが生まれます。少し異なる意見を持つ人々は、独自のバージョンを作成します。
これは英語のアクセントを説明します。一部のTikTok動画では、最悪の英語アクセントはバーミンガムだと言われています。
実際、Rustには大きな問題はありません。そのパフォーマンスは非常に良く、C/C++の上に構築されています。
パフォーマンスは多くのアプリケーションにとって重要です。現在、多くのアプリケーションは数十億人のユーザーによって使用されています。基盤となるクラウドコンピューティングインフラでは、そのサービスが何度も呼び出されます。したがって、小さなパフォーマンス向上でも多くのお金を節約できます。
Rustには多くの欠点がありますか? 人々が不満に思うのは、学習が難しいことです。学習曲線が急です。AIは学習を支援するのに良いニュースをもたらします。
私はRustについてそれほど多く知る必要はありません。10年の経験を持つソフトウェアエンジニアとして、AIの支援を受けて多くのシンプルなRustアプリケーションを書くことができます。基本的なRustコンパイルコマンドであるcargo
とcargo build
を知っているだけで十分です。Rustの構文自体についてはそれほど知る必要はありません。
Rustについては、可変性や借用モデルは私にとって問題ではありません。200行未満のシンプルなアプリケーションの場合、エラーメッセージを提供することで、AIに直接エラーを修正させることができます。
しかし、Rustがそれほど優れているのに、なぜ人々はまだ多くのPythonを使用しているのでしょうか? それはPythonが別の側面で優れているからです。非常に簡単に使用でき、学習できます。大きなコミュニティと多くのライブラリがあります。
Pythonはまだ十分なパフォーマンスがあり、数百万、数千万人のユーザーをサポートできます。ほとんどの製品はそれほど多くのユーザーを得ることはありません。それほど多くのユーザーを得た場合、RustやJavaのプログラマーを雇ってパフォーマンスを最適化できます。
Pythonは多くの開発に適しています。機械学習、Web開発、数学、教育、スクリプティングなどです。Pythonはデスクトップアプリケーションには適していませんが、MicroPythonはRaspberry Piで使用されています。
AI時代のJavaはどうでしょうか? それは良いでしょう。大きなユーザーベースとコミュニティがあります。AIはそれに大きく貢献します。多くの大企業で使用されています。彼らは主要なプログラミング言語を変更することを考える傾向があります。彼らの大規模なレガシープロジェクトを新しいプログラミング言語で書き直すには、10年の努力が必要になるかもしれません。AIはそれを支援しますが、プロセスは依然として遅いでしょう。
しばしば、大企業の合理的な人々は、主要なプログラミング言語を変更することを考えません。彼らの主要なビジネスは他のセクターにあります。彼らは技術にそれほど関心がありません。もし関心があれば、彼らはソフトウェアやインターネット企業になり、オープンソースコミュニティをリードするでしょう。しかし、フォーチュン500企業の多くはそれに関心がありません。
AIのおかげで多くのスタートアップが生まれるでしょう。スタートアップは新しいことを好むので、新しいプログラミング言語を試すでしょう。AI時代には、アジャイルなプログラミング言語が中小企業で勝つでしょう。
アルゴリズム競技大会では、お気に入りのプログラミング言語が変わるでしょうか? C++はこのセクターを何十年も支配してきました。実際のアルゴリズム競技大会では、AIを使用できません。しかし、AI時代には、より少ない人が参加するでしょう。
アルゴリズム競技大会に参加する人々は非常に優れたプログラマーです。AIのおかげで多くの機会があります。なぜより多くの人がユーザー向けの実際の製品を構築する練習ではなく、アルゴリズム問題を練習するのでしょうか? アルゴリズム競技大会のGOATであるGennady Korotkevichでさえ、Devinに参加しました。
しかし、アルゴリズム競技大会は、優れたプログラマーにとってリラックスしたり引退したりする趣味になるかもしれません。それはチェスやバスケットボールのようなものです。人々はそれを好きだからやったり、必要だからやったりします。多くの人々は30代や40代でバスケットボールをします。おそらく健康のためや、人生をより楽しくするためにやっているのでしょう。
iOSとAndroidについては、Java、Kotlin、Swift、Objective-Cがあります。AIの影響で大きな変化はないでしょう。なぜなら、選択肢が限られているからです。エンドユーザーサイドでは、パフォーマンス要件はそれほど高くありません。GoogleとAppleはプラットフォームに対して非常に高い制御を持っています。GoogleとAppleが変わらない限り、プログラマーは変わりません。
ただし、サーバーについては多くの選択肢があります。AIフレンドリーな言語が勝つでしょう。
手続き型プログラミング言語は、オブジェクト指向言語よりも勝つでしょう。手続き型言語は直接的で、AIによって簡単に生成できます。一方、OOP言語には多くのネストレベルやデザインパターンがあります。
AIのおかげで、より多くのプログラミング言語が生まれるでしょうか? そう思います。ZedやOCamlのユーザーが増えるでしょう。LLM/AIはパターンを学ぶのが非常に得意なので、他の言語でプロジェクトを書き直すのは簡単です。
プログラミング言語は今後、より激しい競争を経験するでしょう。パフォーマンス、構文、コンパイラの品質に優れた言語は、自然に人気を集めるでしょう。競争はLLMのようなものです。ClaudeやDeepSeekのような、本来優れたものは人気を集めます。
AIが非常に強力になり、プログラミングを学ぶ必要がなくなるとしたらどうでしょうか? それはまだ遠い話です。1000のJavaファイルを持つ非常に大きなプロジェクトがあると仮定すると、AIはそれを簡単に処理するのに10年かかるでしょう。