ウェブサイト検索

ソフトウェアエンジニアリングにおけるAIは「オッペンハイマーの瞬間」を迎えているのでしょうか?知っておくべきことは次のとおりです


コーディングの進歩、さまざまな分野への広範な影響、倫理的な影響など、ソフトウェア エンジニアリングにおける AI 革命を探ります。

今朝、車にガソリンを入れたとき、また値段が上がったのでぶつぶつ言いました。今日、ガソリン価格は 1 ガロンあたり 4.55 ドルに上昇しました。

しかしその後、私はその 6 ポンドの揮発性液体を私に届けるのに何が必要なのか、特にソフトウェアがどのようにプロセスを促進するのかについて、いくつかの質問をし始めました。ソフトウェアが地質データを分析し、ボーリングマシンが過熱しないように管理しました。ソフトウェアは天候を追跡し、燃料を輸送する巨大な船を誘導するのに役立ちました。製油所システムを管理し、安全監視を提供しました。さらに、支払いと私の車に入れるためのポンプの操作も管理しました。

次に、地下の燃料を見つけるのに役立つソフトウェアを作成するのに必要な作業がありました。もちろん、コーラとピザを飲みながら Rush を聴きながらコードを書いているプログラマーは 1 人ではありません。深穴ボール盤を駆動するような産業用ソフトウェアには、専門的なソフトウェア エンジニアリングが必要です。

そしてそのソフトウェアエンジニアリングはおそらくAIによって支援されたのでしょう。

私は非常に興奮していると同時に、同じくらい深く恐怖していることに気づきました。 AI はおそらくソフトウェア エンジニアリングの「核」の瞬間であり、非常に強力な新機能を世界にもたらしていますが、それらの機能には何が含まれているのでしょうか?創造と破壊の両方を行う力。

ソフトウェアエンジニアリングとは何ですか?

ソフトウェアエンジニアリングにおけるAIを本当に理解するには、まずソフトウェアを理解する必要があります。

ソフトウェアはコンピュータを制御します。コンピュータは、机の上の PC から工場設備の小さなプロセッサまで多岐にわたります。簡単に言うと、ソフトウェアはコンピュータに何をすべきかを指示する一連の命令です。

プログラミング (口語的には「コーディング」と呼ばれます) は、何かを実現するためにこれらの命令をつなぎ合わせる実践です。私は人々が非営利団体に寄付できる小規模なプログラムを維持しています。コードは 153,259 行あります。 Windows や Linux などの大きなプログラムでは、数億行が必要になります。重要なのは、命令の順序と構造がプログラムの動作を制御することです。プログラムはあなたが望むことを実行します。誤解を招くと、結果は予測できません。

さて、プログラミング言語について話しましょう。言語は、プログラムを作成するために使用される単語の構文です。 C、Java、Swift について聞いたことがあるかもしれませんが、その数は何百もあります。重要なのは、同じことを達成するために異なる言語を使用できるということです。ラザニアのレシピがイタリア語でも英語でも、適切な時間オーブンに入れる必要があります。

言語は、タスクへの適合性から目的の環境との互換性まで、さまざまな理由で選択されます。すべてを知ることは不可能なので、プログラマーの中には、自分が知っている言語で作業することを好む人もいます。言語という概念にとらわれすぎないでください。言語とは、コードを作成するために使用される単語と単語の構造であることを知ってください。

プログラマーは、何かを実行させるためにコンピューターの命令をつなぎ合わせます。しかし、私が述べた数字について考えてみましょう。私の寄付ソフトウェアのコードだけでも、そのような命令が 10 万以上あります。それは非常に複雑です。すぐに非常に混乱し、すぐに壊れてしまう可能性があります。

ソフトウェア エンジニアリングを分野として考える方法は次のとおりです。

  • ソフトウェア エンジニアリングでは、橋を架けるのと同じように科学的手法を使用してソフトウェアを設計し、テストします。
  • これは構造化されたアプローチに関するもので、建築家が建築前に計画を立てるのと似ています。
  • エンジニアが堅牢な構造を実現するためのベスト プラクティスを使用するのと同じように、ソフトウェア エンジニアは信頼性の高い効率的なソフトウェアを保証します。

ですから、車に時速 110 マイルで高速道路を走らせるつもりなら、ピザとシックスパックで生計を立てているプログラマーが書いたテストされていないソフトウェアの手に自分の命を委ねているわけではないことを知っておくとよいでしょう。レッドブルの技術を採用しましたが、その代わりに、運転を行うソフトウェアの作成とテストにいくつかのエンジニアリング分野が導入されました。

コーディングとソフトウェア エンジニアリングの間には重複する部分があります。私は訓練を受けたソフトウェア エンジニアであり、コーディングもできます。企業から個人までさまざまな開発者がソフトウェア製品を作成します。彼らのスキルには、コーディング、ソフトウェア エンジニアリング、ビジネス開発が含まれます。

ソフトウェア エンジニアリングは、コーディングの背後にある規律であり、コーディングを管理しやすく、保守しやすくし、最終的には信頼性を高めます。

AIとソフトウェアの違いは何ですか?

技術的には、ソフトウェアとは、ハードウェアではなく、ビットとバイトに基づいて何かを実行するものを指します。たとえば、Excel の予算スプレッドシートは、そのスプレッドシートに大量のマクロが含まれていて、ソフトウェア アプリケーション自体として販売されていない限り、Excel プログラム自体ほどソフトウェア的なものとは見なされません。

従来のソフトウェアは、一連のステップと決定がすべてです。ステップと決定を記述してコードを作成している場合は、従来のプログラミングを行っていることになります。

しかし、AIはそのようには機能しません。 AI の全体的な考え方は、ステップや決定として事前に定義されていない知的飛躍を実現するということです。代わりに、AI はデータ (通常は大量のデータ) を使用して、出力をガイドします。

ChatGPT に IT インフラストラクチャに関する記事を書くように依頼すると、デザイナーがあなたの質問を予想して、IT インフラストラクチャに関する記事を書くのに役立つ特別なコードを書いたからではありません。同様に、Midjourney がラップトップから飛び出す空飛ぶ象の画像を作成するのに役立ちます。それは、誰かがその画像を欲しがるからといって、誰かのプログラマーが空飛ぶ象のルーチンを書いたからではありません。

代わりに、AI システムは大規模言語モデル (LLM) を使用して、膨大なデータ ライブラリ (ほぼインターネット全体に加えて、AI エンジニアがシステムに入力できるその他すべての情報) から要求されたものを構築します。

これらすべてにより、AI はソフトウェアを超えたものになります。また、ChatGPT がそのように応答する原因を正確に知っている人間はいないということも意味します。これらは「創発能力」と呼ばれ、最初からプログラムされたわけではない大規模な言語モデルの機能です。

AI に関して興味深いのは、典型的なエンジニアリング レベルの分野から離れ始めていることです。 AI が何をするか、どのように行うかを常に予測できるわけではありません。生成型 AI に何かをさせるよう指示すること、いわゆる「プロンプト エンジニアリング」は、従来のエンジニアリングの実践とほぼ同じくらい管理と交渉が必要です。

元プログラミング教授として、ChatGPT のような LLM と対話することは、コーディング環境よりも学生と対話しているように感じます。

AIはソフトウェアエンジニアリングにどのように応用できるのでしょうか?

AI が主流になるにつれて、ソフトウェア エンジニアと生成 AI ツールとの間に何が共生関係になるかを私たちは目の当たりにしています。たとえば、AI はコードの最適化を提案したり、バグを特定したり、システム内の変更の波及効果を予測したりすることもできます。

今年の初めに、私は AI で何ができるかを確認するために、AI を使って多くのスタント コーディングを行いました。また、特にわかりにくいバグを見つけたり、新しいバージョンのプラットフォーム ソフトウェアとの互換性を確保するために変更が必要なコードを特定したり、妻のビジネスに役立つ短いルーチンを作成したり、Chrome ブックマークレットを作成したりするためにもこのツールを使用しました。 ZDNET の記事に「これも」リンクを作成します。 AI が私の仕事に不可欠になったとは言えませんが、大きな助けになったことは確かです。

今年大流行した生成 AI ツールは、間違いなくソフトウェア エンジニアによって構築されました。 AI はソフトウェア エンジニアリング プロセスの一部となる場合があります。ソフトウェアエンジニアリングの結果である可能性もあります。

さらに、AI は開発者の仕事を支援します。ソフトウェア エンジニアリングの側面 (いくつか例を挙げると、設計、コーディング、デバッグ、メンテナンス、管理、テスト、配布、移行) について考えると、AI はこれらすべての分野で役立ちます。たとえば、AI は反復的なコーディング タスクを自動化し、プロセスをより高速かつ効率的に行うことができます。さらに、コード内の潜在的なバグや脆弱性を予測し、より堅牢で安全なソフトウェアを保証します。

ただし、限界もあります。私は最初に AI を使用していくつかの簡単なルーチンを作成しました。次に、より複雑なルーチンで試してみると、AI が尻尾を追い始めました。しかし、壊れかけていた(何が間違っているのか見つけられなかった)コードの山を AI に与えると、AI はエラーを指摘しました。 AI はテスト体制の構築にも役立ちます。これは、新しいエージェントが自分で答えを知る経験がない場合に、技術サポート担当者が質問に答えるのに役立ちます。

現状では、ソフトウェア エンジニアリングを支援する際に AI を信頼して適切に実行することはできません。これは、非常に才能があるが、同様に不安定で、時には深い才能に満ちた洞察力を持っているものの、必要な正確な答えを出せない大学生に例えることができます。

次に、AI が世界のためにできることです。ここで、コンセプトについての共同の思索が必要になります。

以下に挙げる AI の驚くべき進歩と応用は、ソフトウェア エンジニアリングの基礎の上に構築されていることに留意してください。ソフトウェア エンジニアリングの原則と実践がなければ、こうした AI 主導のツールやサービスは実現できません。

現在、AI が現実世界で私たちのために行っている 10 のことは次のとおりです。

  1. Siri、Alexa、Google アシスタントなどのパーソナル アシスタントは、タスクを手伝ったり、質問に答えたりしてくれます。
  2. ヘルスケア アルゴリズムは、病気の診断と患者の転帰の予測を支援します。
  3. 財務分析ツールは株式取引や不正行為の検出に役立ちます。
  4. コンテンツ推奨アルゴリズムは、私たちの好みに基づいて映画、音楽、記事を提案します。
  5. カスタマー サービス チャットボットは、顧客の問い合わせや苦情に対応します。
  6. 製造ロボットは組立ラインと品質管理を支援します。
  7. 言語翻訳サービスは AI を活用しています。
  8. 大手スタジオのゲームでは、ゲームをインタラクティブでインテリジェントで魅力的なものにするために、AI が多用されています。
  9. セキュリティ システムは、サイバーセキュリティにおいて顔認識と異常検出を使用します。
  10. マーケティング アルゴリズムは、広告と顧客リーチをパーソナライズします。

そして今年は生成型 AI が台頭したため (これはさらに大きく変化しています)、当然のことながら、今後 10 年間に AI が私たちのためにやってくれるであろう 10 のことは次のとおりです。

  1. 先進医療には、AI 支援創薬や個別化医療が含まれる可能性があります。
  2. 気候変動の影響を予測し、緩和するための気候モデリング。
  3. 人間の感情を読み取って応答できる AI の心の知能指数。
  4. 複雑なタスクを実行し、日常生活を支援できる高度なロボット。
  5. AI を活用した仮想現実体験は、完全に没入型の仮想世界を提供します。
  6. 個人のニーズに合わせたパーソナライズされた学習体験を提供する教育システム。
  7. AI が宇宙船のナビゲーションと操作を支援する宇宙探査。
  8. 法的調査と訴訟準備における AI による法的支援。
  9. AI によって生成されたアートや音楽によって、またはアーティストのコラボレーション ツールとして強化されたアートと創造性。
  10. 災害予測と対応における AI による公共の安全の向上。

そして自動運転車も登場します。実際、AI と機械学習により、自動運転車の通信効率が向上し、スマートフォンのカメラの性能が向上しています。

AIは、ソフトウェアと同様に、私たちが使用するあらゆるものに組み込まれ、できれば途中で価値を追加することになるでしょう。

AI とソフトウェア エンジニアリングにおける差し迫った倫理的問題は何ですか?

AI がソフトウェア エンジニアリングの実装プロセスを支援することに加えて、ソフトウェア エンジニアは AI の成長を導く必要があります。言語モデル自体について説明しましたが、ソフトウェア エンジニアは AI の動作を微調整し、ベスト プラクティスを確保し、最終製品 (一般大衆に届く部分) に倫理的な動作を確保するためのガードレールを確実に設ける必要があります。

これは大変です。ソフトウェア エンジニアには、コーディングとデバッグを超えた「義務」と言えるものがあるようになりました。基本的に、AI を構築するソフトウェア エンジニアは、AI システムの主な「保護者」および「教師」です。したがって、AI 技術が倫理的に開発および実装されることを保証するのは、これらのエンジニアの義務です。

ここではっきりさせておきますが、これはほとんどのプログラマーにとって快適ゾーンから大きく外れています。ほとんどのソフトウェア エンジニアは、実装とコーディングの実践だけでなく、プロセスと分析についても訓練を受けています。彼らは哲学や倫理の訓練を受けていません。そして、ほとんどのソフトウェア エンジニアは、人間の異なるグループが倫理的なもの、さらには何が正しいか間違っているかについて異なる視点を持っている場合に、どのように対処するかという訓練を受けていないのは間違いありません。

ZDNET では、AI システムに現れるバイアスの問題を長年取り上げてきました。それは単純な問題ではありません。しかし、AI のバイアスは、不公平な融資決定や雇用慣行における隠れたバイアスなど、現実世界の問題を引き起こす可能性があります。 AI は、医療、金融、公安などの分野で不可欠なものになりつつあります。

AI が悪用されたり、単に公平な意思決定を組み込んだ幅広い考慮事項を考慮して実装されなかったりすると、壊滅的な結果が生じる可能性があります。そのため、エンジニアは AI ベースのシステムにアクセス制御、使用状況の監視、監査メカニズムなどを組み込む必要があります。

しかし、これらの問題は、従来のソフトウェア エンジニアリング ワークフローで可能な範囲をはるかに超えています。 AI システムを導入するチームには、心理学、社会科学、倫理、コミュニティ管理などの分野の専門家を巻き込む必要があります。

最新の大規模言語モデルがインターネットや図書館やデータベースのコンテンツでトレーニングされた場合、本質的にそれらのソースのバイアスを継承することになります。しかし、AI ベースの意思決定は、否定的なフレーズに反応する人に不快感を与えるだけでなく、個人に永久的、物理的、費用のかかる、痛みを伴う損害を引き起こす可能性があります。

これらはすべてソフトウェアで管理する必要がありますが、工学学校で通常教えられるものよりも広い世界観を持つ専門家によって指導されます。

AIは今「オッペンハイマーの瞬間」を迎えているのだろうか?

少し前、私は高校最後の化学の授業を受けました。ポケット電卓は人気がありましたが、化学の先生は、みんな計算尺を使って計算することを学ぶように主張しました。

その授業以来、私は一度も計算尺を使ったことはありません。私の先生は明らかに時代遅れのスキルを教えていました。電源のない黙示録的なシナリオで計算尺の使い方を知ることには多少の利点があるかもしれないと思いますが、黙示録を扱っている場合は計算尺よりも大きな問題が発生すると思います修正に役立ちます。

私はエンジニアなので計算尺は使いません。私は強力なコンピューター、複雑なコーディング、スプレッドシート、そして現代のデジタル世界が提供するあらゆる機能を使用しています。 「科学を行う」ために何が必要かについての私の老教師の見解は、私のキャリアを通じて実際に「科学を行う」実践となったものとは大きく異なりました。

私が新卒エンジニアだったころの PC と同じように AI ツールが普及し、状況を一変させる世界が進むにつれて、私たちのツールは大きく変わっていくでしょう。私たちのツールには AI 機能が組み込まれるため、AI を理解して使用するためのスキルを拡張する必要があります。

多くの工学分野では、実践者が安全性を積極的に考慮することが求められています。橋の建設者は、ケーソンを使用して橋脚を建設する際に、作業員に酸素を供給し、海を寄せ付けない方法を理解する必要があります。航空技術者は、雲の上を飛行するときに飛行機を空中に保ち、機内に酸素を供給する方法を理解する必要があります。道路建設者は、周囲の地域にダメージを与えずに、爆発を慎重に形作り、地面をきれいにする方法を理解する必要があります。

したがって、ソフトウェア エンジニアリングは、テストと検証から、社会の安全を真に考慮するところまで進歩する必要があります。これらは、AI とソフトウェア エンジニアリングの将来を考える際に心に留めておくべき最後の考えです。

私たちは、産業革命、PC 革命、インターネットの黎明期と同様に、変革的であり、異なるものであり、力を与えながらも問題を抱えた新しい時代の先端に立っています。私たちがかつて依存していたツールや方法論は進化しており、それに伴い私たちの責任と倫理的考慮事項も拡大しています。

変革の次の 3 つの柱を念頭に置く必要があります。

  • 変化を受け入れる: 最新の電卓やコンピューターの出現で計算尺が時代遅れになったのと同じように、AI の機能に直面して従来のソフトウェア エンジニアリングの実践も適応する必要があります。これは基礎的な知識を捨てることを意味するのではなく、AI がもたらす新しい洞察やツールで知識を強化することを意味します。

  • 全体的なアプローチを採用する: AI をデジタル環境に統合するには、ソフトウェア エンジニアリングに対する全体的なアプローチが必要です。もはやコーディングだけではありません。それは、社会への影響から倫理的配慮に至るまで、私たちの創作物がもたらすより広範な影響を理解することです。

  • あらゆるレベルで継続的な学習を実践する: AI の急速な進歩は、継続的な学習と適応が不可欠であることを意味します。ソフトウェア エンジニアは、AI 開発の最新情報を常に把握し、責任を持って効果的に AI の力を活用する必要があります。同様に、AI も継続的に学習し、その導入による影響が日常生活で明らかになるにつれて、新しいベスト プラクティスやガードレールを採用する必要があります。

生成 AI がテクノロジー業界を活気づけたこの年の真ん中に、映画『オッペンハイマー』が私たちの映画スクリーンを席巻したのは当然のことです。この伝記映画は、「原爆の父」として最も知られる理論物理学者、J・ロバート・オッペンハイマーの生涯を描いたものです。

本質的に、オッペンハイマーは、科学の進歩のコスト、イノベーションの最前線にいる人々が負う責任の重さ、そして現代世界における科学、倫理、政治の複雑な相互作用についての痛切な考察として機能します。

クリストファー・ノーラン監督は最近のインタビューで、「現在AI分野の第一人者研究者たちと話をすると…彼らは文字通りこれをオッペンハイマーの瞬間と呼んでいます。」と述べました。

この同じ声明は、ソフトウェア エンジニアリングにおける AI の波及効果が、コーディングの実践からコミュニティ全体にどのように爆発的に波及するかを完全に説明しています。

ソーシャルメディアで私の日々のプロジェクトの最新情報をフォローしてください。 Substack で毎週の更新ニュースレターを購読し、Twitter で@DavidGewirtzをフォローしてください。 Facebook ではFacebook.com/DavidGewirtz、Instagram ではInstagram.com/DavidGewirtz、YouTube ではYouTube.com/DavidGewirtzTV

関連記事