このジョークが笑いを取れるのは、写真の両人が同じ仕事をしているからだ:機械に自分の意図を説明しようとして、その機械が最も役に立たない文字通りの解釈をしていることに気づく。
一方はそれをデバッグと呼び、もう一方はプロンプティングと呼ぶ。両者とも、うまくいくはずなのにうまくいかないものを見つめている。
Seahawk Mediaでウェブサイトを構築し12年以上、数千ものサイトを出荷してきた経験から言うと、プロンプトエンジニアリングがソフトウェアエンジニアリングに取って代わるとは思わない。むしろ、クラウドデプロイメント、可観測性、セキュリティが専門家の関心事から日常業務へと移ったのと同じ方法で、ソフトウェアエンジニアリングの必須部分になると見ている。
- プロンプトエンジニアリングはインターフェーススキルであり、ソフトウェアエンジニアリングの代替ではない。
- 本番環境のAIは、決定論的テストと確率的評価の両方を必要とする。
- プロンプト、コンテキスト、ツール、モデル設定はコードの隣にバージョン管理に含める必要があります。
- 最初に何を学ぶかを選択する場合は、ソフトウェアの基礎を学び、その上にプロンプティングを追加してください。
この比較が面白いのは、両側ともデバッグしているからです。
ソフトウェアエンジニアはコードを書き、実行し、エラーを読み、コードを変更し、再度実行します。プロンプトエンジニアは命令を書き、出力を読み、命令またはコンテキストを変更し、再度試します。ループはほぼ同じです。失敗の表面は異なります。
従来のコードはより頻繁に大きく失敗します。関数がスロー、テストが赤に、型チェッカーがビルドを拒否します。モデルは完全に落ち着いたように聞こえながら失敗する可能性があります。有効なプロサ、有効なJSON、またはハッピーパスが公開しない方法で間違っている有効に見えるコードを返します。
それはデバッグ方法を変えます。あなたはもはや「コンピュータはどの命令を実行したのか」だけを尋ねていません。「モデルはどのコンテキストを推論したのか、それはどのツールを見ることができたのか、どの曖昧性を開いたままにしたのか、そして代表的な一連の入力全体でこれはどのくらいの頻度で失敗するのか」も尋ねています。
重要な要点:両方の分野は意図をマシン動作に変換します。ソフトウェアエンジニアリングはその動作の周りのシステムを制御します。プロンプトエンジニアリングはそれの内部の1つの確率層を制御します。
ソフトウェアエンジニアリングが依然として所有しているもの
ソフトウェアエンジニアリングは手を振ることができない部分を所有しています:データモデル、認証、権限、状態、並行処理、再試行、キャッシング、支払いフロー、マイグレーション、パフォーマンス、アクセシビリティ、セキュリティ境界、監視、およびシステムが午前2時に失敗した場合の復旧。
優れたプロンプトは欠落しているデータベース制約を修復することはできません。不正なアクションを安全にすることはできず、2つのワーカーが同じジョブを請求するのを止めることはできず、支払いウェブフックがべき等であることを保証することはできません。それはそれらのことのためのコードを提案することができます。システムはまだなぜそれが重要であり、それがどのように機能するかを証明する方法を知っているエンジニアが必要です。
「モデルがアプリを書いた」というフレーズがたいていやり過ぎなのはこのためです。モデルはほとんどの可視コードを生成しているかもしれませんが、プロダクトは目に見えない判断です。どのデータが信頼できるのか、どこでバリデーションが起こるのか、何がログされるのか、何が再試行可能なのか、何が人間の承認を必要とするのか、依存関係が消えたときに何が起こるのか。
それがエンジニアリングです。コード生成が速くなればなるほど、仕事の大部分はこれらの判断に移っていきます。
プロンプトエンジニアリングが実際には何であるか
プロンプトエンジニアリングはしばしば「適切な言葉を見つけること」と説明されます。相互作用全体が一つのテキストボックスだったころは合理的な説明でした。現在のエージェンティックシステムには狭すぎます。
本当の仕事はモデルの作業環境を設計することです。指示は大切ですが、システムプロンプト、リポジトリコンテキスト、取得したドキュメント、例、ツールの説明、権限の境界、出力スキーマ、モデル選択、トークン予算、結果を判定するために使われるevalセットも同様に重要です。
優れたプロンプトエンジニアは魔法のようなフレーズを磨いている人ではありません。モデルが何を知る必要があるのか、何を仮定してはいけないのか、どんなアクションを取ることができるのか、どんな証拠が完了として数えられるのかを判断している人です。
これはコピーライティングよりもインターフェース設計とシステム思考に近いです。私の本番環境のClaude Codeワークフローが機能するのは、ハーネスがコンテキスト、制約、ツール、検証を提供しているからです。賢いセンテンスは最も重要でない部分です。
境界線はコード対英語ではない
人々はこれを片方がコード、もう片方が自然言語という形で考えます。より有用な区別は決定論的な振る舞い対確率的な振る舞いです。
通常のアプリケーションコードでは、同じ入力と状態は通常同じ出力を生成すべきです。テストは正確な振る舞いを保証します。モデルでは、妥当な指示が受け入れ可能と受け入れ不可能な出力の分布を生成することができます。テストは依然として重要ですが、evalsも必要です。固定された現実的なタスクのセットを繰り返しスコアリングして、プロンプトまたはモデルの変更がシステム全体を改善したのか、それとも目の前の例を単に修正しただけなのかを確認できるようにします。
「プロンプティングは単なるAIとの会話」という考えはここで破綻する。カジュアルなチャットは現在の回答を最適化する。本番環境でのプロンプティングは多くの回答にわたって反復可能な動作を最適化する。
2つの分野が韻を踏む場所
| レイヤー | ソフトウェアエンジニアリング | プロンプトエンジニアリング |
|---|---|---|
| Single Source of Truth | リポジトリとランタイム状態 | インストラクション、コンテキスト、ツール、モデル設定 |
| よくある障害 | 例外、不正な状態、またはリグレッション | もっともらしいが誤った出力、コンテキスト損失、またはツールの誤用 |
| 変更単位 | コード diff | プロンプト、コンテキスト、スキーマ、ツール、または eval diff |
| 検証 | ユニット、統合、エンドツーエンドテスト | Eval セット、グレーダー、スキーマチェック、人間によるレビュー |
| 再現性 | ピン留めされた依存関係と既知のインプット | ピン留めされたモデル、キャプチャされたコンテキスト、ツールトレース、サンプリング設定 |
| 可観測性 | ログ、メトリクス、エラー、トレース | プロンプト、コンプリーション、ツール呼び出し、レイテンシ、トークン、コスト |
| デプロイメント | バージョン管理されたアプリケーション成果物 | バージョン管理された命令とモデル設定およびロールバック |
語彙は変わるが、規律は変わらない。入力を明示的にする。変更は小さく保つ。現実に対してテストする。失敗を再現するのに十分な状態を保存する。新しいバージョンが悪い場合はロールバックする。
なぜ「もう一度試す」はワークフローではないのか
プロンプトエンジニアリングで最も危険な習慣は、リトライを証拠として扱うことだ。2番目の回答がより良いため、問題は解決したように見える。最初の回答が失敗した理由、改善が繰り返されるかどうか、またはどの変数が変わったのかについて何も学ばれていない。
有用なリトライは意図的に1つのことを変える。欠けていた制約を追加する。無関係なコンテキストを削除する。出力スキーマを厳密にする。ツールにより安全な権限を与える。失敗ケースを評価セットに追加する。その後、同じ評価を再度実行する。
ソフトウェアエンジニアはこれをフレーキーなテストと「私のマシンでは動く」バグの数年を通じて学んだ。プロンプトエンジニアは「前のチャットで動いた」という同じ教訓に直面している。どちらの場合も、記録されていない状態が敵だ。
これが、同じぼんやりとしたリクエストについて5つのモデルが投票するのではなく、定義された役割を持つ1つのモデルを保持することを好む理由でもある。なぜ多くのAIモデルを開くと出力が悪くなるのかについて書いた。より多くの試行は、不十分に仕様化されたタスクを修復しない。
コンテキストは新しいランタイム
AI生成の仕事が失敗した場合、人々はしばしばモデルを最初に非難する。本番環境のコーディングセッションでは、欠けている部分は通常コンテキストだ。
エージェントはリポジトリの規約を知らなかった。データベースマイグレーションを目にしなかった。API呼び出しが外部状態を変更することを伝えられなかった。古いパターンを見つけてそれをコピーした。長いセッションの前半では関連ファイルを持っていたが、コンテキストが満杯になるにつれてその詳細を失った。
プロンプトエンジニアはこれをコンテキストの問題と見る。ソフトウェアエンジニアはそれを環境と依存関係の問題と見る。組み合わせたビルダーはシステムを修正する:リポジトリに永続的な指示を置き、ツールに正しい状態を公開させ、破壊的なアクションに承認を要求し、結果を実際のアプリケーションに対して検証する。
最良のプロンプトはしばしば長いプロンプトではない。それはより良いツール、より小さいコンテキスト、またはエージェントが推測なしに実行できるテストである。
両方を組み合わせた本番ワークフロー
これはAI支援ソフトウェア作業で信頼するループである。意図的にデモより控えめである。
- 実装を求める前に受け入れ基準を書く。ユーザーに見える成果、制約、変わらないままでなければならないものを定義する。
- 実際のシステムを検査する。関連するコード、スキーマ、ログ、現在の状態を読む。モデルに想像上のリポジトリに対して設計させてはいけない。
- モデルに限定されたコンテキストを与える。重要なファイルと規則を含め、無関係な資料は除外し、行動する前に質問すべき場所を述べる。
- 最小限の一貫した変更を生成する。小さいdiffは人間とモデルの両方にとって推論しやすい。
- 決定論的なチェックを実行する。型チェック、テスト、リント、ビルド、セキュリティ規則、データベース制約は依然として堅い保証をもたらす。
- モデルが製品に組み込まれた確率的な評価を実行する。通常の入力、エッジケース、敵対的な入力、拒否、ツールの失敗を繰り返しサンプル全体でテストする。
- 差分と動作を確認する。コードレビューは実装の間違いを捉える。プロダクトレビューは技術的には正しいが、間違った問題を解く変更を捉える。
- 意思決定全体をバージョン管理する。コード、プロンプト、ツールコントラクト、評価ケース、それを再現するために必要なモデル設定をコミットする。
これがエージェント型エンジニアリングの機能するバージョンだ。モデルが実行を加速する。エンジニアが成果の所有権を保つ。さらに長い実装の詳細が必要なら、私が本番環境でClaude Codeをどう使っているか見てほしい。
AIビルダーの採用時に何を見ているか
長いプロンプトを見せてくれるだけでは、本番AI職の採用候補にはしない。実装してリリースしたシステムを見せてもらい、1つの失敗について説明してもらう。
モデルは何を間違えたか?どうやって再現したか?修正はプロンプトか、コンテキストか、ツールか、スキーマか、周囲のコードか?失敗の再発を防ぐテストや評価は何か?モデルプロバイダーがタイムアウトしたらどうするか?ロールバックは何か?
これらの質問は誰がモデルを操作しているのか、それともプロダクトをエンジニアリングしているのかを明かす。強い候補者は両方のレベルを行き来できる。指示を厳密にできるし、その後、実際の修正はべき等性キーだと気づける。評価を追加できるし、その後、出力は決定論的な検証なしに信頼されるべきではないと認識できる。
これが私がAIエンジニア採用ページで区別するところだ。この職務はプロンプトのコピペではない。モデルの動作、ツール利用、評価、コストがシステムに加わるソフトウェアエンジニアリングだ。
純粋なプロンプティングで十分な場合
すべてのタスクが本番環境対応を必要とするわけではありません。プロンプティング単独で十分なのは、作業がローリスク、可逆的、そして実行前にレビューされる場合です。
- ポジショニング、名称、アウトライン、代替案の探索。
- ソースと比較できる資料の要約。
- 人間が編集する社内ドキュメントの作成。
- アイデアがエンジニアリング時間に値するかをテストするための使い捨てプロトタイプの作成。
これらのケースではプロンプトは思考インターフェースです。回答が不十分なら破棄するだけです。顧客データを損傷させるものはなく、移動する金銭もなく、タブを閉じた後も継続する暗黙的な自動化もありません。
ソフトウェアエンジニアリングが譲歩できない場合。
出力が他の人に影響を与えたり、直接的な監視なしで継続する瞬間、閾値が変わります。
- 認証、パーミッション、決済、顧客データ、および不可逆的なあらゆるアクション。
- データベース、リポジトリ、受信箱、または外部サービスに書き込みできるツールを持つエージェント。
- レイテンシー、信頼性、アクセシビリティ、またはコスト目標を満たす必要があるAI機能。
- ひとつの妥当な誤答が法的、財務的、セキュリティ、または評判上の損害を生じさせる可能性があるワークフロー。
その時点で、プロンプティングはエンジニアリングされたシステムの一要素になります。境界線、検証、監視、フォールバック、リスクに比例した人間による承認経路が必要です。
プロンプトエンジニアはスキルであり、最終的な職務ではありません。
独立したプロンプトエンジニアという職務は、スキルそのものほど重要ではなくなると予想しています。スキルは本物です。それを囲む境界は、隔離されたままでいるほど十分に安定していません。
デザイナーはそれを使用して作成し批評します。マーケターはそれを使用して調査し制作します。オペレーターはそれを使用してプロセスを自動化します。ソフトウェアエンジニアはそれを使用してシステムの計画、コーディング、テスト、保守を行います。価値のある人材は秘密のフレーズの集合を守っている人ではなく、自分のドメインを深く理解し、モデルに有用なコンテキストを提供し、その結果を判断できるほどの力量を持つ人です。
ビルダーにとって、それはバイリンガルになることを意味します。コンピューターに何が真実であるべきかを正確に伝えるための精密性と、どの真実を言語モデルに委譲することができないかを知るためのエンジニアリング判断の両方が必要です。
未来はソフトウェアエンジニア対プロンプトエンジニアではなく、プロンプティングができるソフトウェアエンジニア、エンジニアリングを学ぶプロンプト専門家、そして両者の間の縮小するギャップです。
よくある質問
プロンプトエンジニアリングは本当の仕事ですか?
はい。ただしプロンプトエンジニアリングは、AIエンジニアリング、プロダクト、デザイン、研究、またはオペレーションの中での機能として機能する方が、独立した職種として機能するより強力です。本番環境でのプロンプト作業には、コンテキスト設計、ツール契約、評価、出力スキーマ、安全性の境界、可視性、バージョン管理が含まれます。巧妙な指示を書くことはその一部に過ぎません。
プロンプトエンジニアはソフトウェアエンジニアを置き換えるのか?
いいえ。プロンプティングはコード生成を加速させ、ソフトウェア作成をより多くの人々がアクセスできるようにしますが、本番システムはアーキテクチャ、セキュリティ、状態管理、テスト、デプロイメント、監視、復旧が必要です。確率的モデルが追加されると、これらの責任はより重要になります。
ソフトウェアエンジニアはプロンプトエンジニアリングを学ぶ必要があるか?
はい。コーディングエージェントを扱うエンジニアまたはAI機能をリリースするエンジニアは、タスクを明確に指定し、コンテキストを制御し、ツールの権限を設計し、非決定性の出力を評価する必要があります。プロンプティングは、良い課題、APIコントラクト、またはテストプランを書くのと同様に、エンジニアリングインターフェースの一部になりつつあります。
最初に学ぶべきは、コーディングですか、それともプロンプトエンジニアリングですか?
本番ソフトウェアを構築することが目標であれば、まずソフトウェアの基礎を学んでください。プログラミング、データ構造、データベース、HTTP、Git、テスト、セキュリティは、生成されたコードを判断するのに必要なメンタルモデルをあなたに提供します。プロンプトとコンテキストエンジニアリングを、システムの理解の代わりではなく、加速レイヤーとして追加してください。
プロンプトエンジニアとAIエンジニアの違いは何か?
プロンプトエンジニアはモデルの指示、コンテキスト、ツール、出力品質に焦点を当てます。AIエンジニアは、アプリケーションコード、データ、検索、権限、評価、監視、レイテンシ、コスト、デプロイメントを含む、モデルの周りの本番システム全体を所有しています。小規模なチームでは、1人が両方を行うことが多いです。
両方ができる人間になれ
その画像はオチについて正しい。両方のロールは、動くはずのものが動かない理由を突き止めるのに1日の大部分を費やしている。有利なのは、両方のレイヤーをデバッグできる人間だ。
正確な指示を書くことを学べ。コンテキストを形作ることを学べ。ツールをいつ使うか、いつ外すかを学べ。そしてモデルが登場する前にソフトウェアを信頼性あるものにしたエンジニアリングの習慣を維持しろ。小さな変更、明示的なコントラクト、反復可能なテスト、有用なログ、慎重な権限管理、デプロイ後の責任だ。
より良いプロンプトは、より良い下書きを生み出す。より良いエンジニアリングは、その下書きを人々が信頼できるプロダクトに変える。
ライブビルドでその統合されたディシプリンが必要なら、agentic engineering serviceを見るか、Claude Code developerを雇え。
