こんにちは、エンジニアのづやです。
LIGではRuby開発者であり、当社の技術顧問を務める、まつもとゆきひろさんによる社内勉強会を開催してエンジニアのスキルアップに取り組んでいます。
第67回のテーマは「まつもとゆきひろのAIとの向き合い方」です。
2022年11月にChatGPTが公開されて以降、メディアでAIの話を見かけない日はありません。日々新しい機能がリリースされ、正直「もうついていけない」「どう付き合っていけばわからない」という方もいるはず。
そこで今回は日々忙しいまつもとさんは実際どんな風にAIと向き合っているのかを聞き、AI時代を生き抜くためのアドバイスをいただきました。
Rubyアソシエーション理事長 まつもと ゆきひろ プログラミング言語Rubyの生みの親であり、一般財団法人Rubyアソシエーション理事長。株式会社ZOZOやLinkers株式会社など複数社で技術顧問などを務めている。オープンソース、エンジニアのコミュニティ形成などを通じて、国内外のエンジニアの能力向上やモチベーションアップなどに貢献している。 |
目次
使ってわかった生成系AIの得意・不得意
エンジニアの作業を効率化してくれる技術、ツールはこれまで多数生み出されてきました。ですがChatチャットGPTにはそれらと大きく異なる点があります。それは「分野を問わず誰でもユーザーになれる」という点です。
これまで機械学習の分野で便利だと話題になった技術は、ほとんどが同領域においてのみ活用できるものでした。そのためRubyを専門とする私のような他ジャンルのエンジニアにはほとんど関係がありませんでした。
ですがChatGPTをはじめ今話題となっている生成系AIは、どれも機械学習やAIの専門知識がなくても使えて、業務効率化につなげられます。だからこれだけスピーディーに利用が広がっているのだと思います。
私も1人のユーザーとして、ChatGPTを仕事のさまざまな場面で活用してみました。そこで気づいた現時点の生成系AIが不得意な作業、またプログラミングとの相性についてご紹介します。
生成系AIが苦手な3つの作業
(1)記事作成
私は雑誌などで記事を書くこともあるのですが、その記事作成をChatGPTに頼んでみました。記事に盛り込みたい内容を箇条書きにし、それをもとに文章を作成するよう指示したところ、生成された文章は薄っぺらい内容しかなく、使いものになりませんでした。
文章の流れはとても自然なのですが、箇条書きにした内容以上の情報はほぼ含まれておらず、「〜といわれています」といったあいまいな言葉が付け加えられた程度。現時点では、ChatGPTに箇条書きから十分な内容の記事作成をしてもらうのは難しいと感じました。
ただテキストの要約や構成、翻訳には活用できると思います。
(2)情報収集
現在リリースされているChatGPT-3.5もGPT-4も、2021年9月までのデータを使用しています。そのため最新のニュースについてはそもそも情報を有していないため、2021年9月以降の情報を含めて調べものをしたいときにはあまり活用できません。
加えてChatGPTは大量のテキストデータで学習をした「大規模言語モデル」であり、学習に使われたデータのほとんどは英語です。そのため日本語で質問をしても回答は生成されますが、英語での質問・回答に比べて内容が薄くなる傾向があります。
(3)質問
ChatGPTは知らないことがあっても「私は知りません」とは言いません。代わりに流れるように嘘をつきます。
私たちが誰かに何か質問をするのは、大体の場合「答えを知らないから」です。そこで平気で嘘をつかれてしまうと質問者はそれが嘘だと見抜けず、ChatGPTの回答を信じてしまうでしょう。ですので新しい知識を求めてChatGPTに質問をするのはおすすめしません。
ただ「情報収集」と「質問」については、改善や別の解決策がでてきています。ChatGPTは新たにサードパーティのアプリとの連携を可能にするプラグイン対応を実装しました。これを活用することで、プラグインから取得した天気や株価など最新の情報をふまえて回答が生成されるようになりました。なお、まだ全員が利用できるわけではありません。
またMicrosoftのAIチャット版の検索エンジン「新しいBing」や、同じくAI検索エンジンの「Perplexity(パープレキシティ)」は、回答に情報ソースとなったサイトURLを記載してくれます。そのため回答内容を自分で確認・検証することができます。
生成系AIとプログラミングは相性がいい
ChatGPTは今あげたような作業には不向きですが、プログラミングとは相性がいいと感じます。
そもそもChatGPTは大規模言語モデルであり、英語や日本語のほか、プログラミング“言語”も扱いを得意としています。
人間同士の会話だと、どうしてもその場の空気や暗黙の了解、常識といったコンテキストの理解が欠かせません。一方、プログラミングは、情報はほぼすべてソフトや外部ライブラリに入っていて、コンテキストは不要です。だから空気を読むといった作業ができない生成系AIにとって、プログラミングは都合がいいんです。
現状ではChatGPTが生成したコードには間違いも散見されます。ですが情報収集や質問をしたときと違って、プログラミングはミスがバグとして表面化するため見つけやすい。さらに「Microsoft 365 Copilot」なども出てきており、生成系AIがプログラミングの際の大事なパートナーになる可能性は非常に高いと思います。
一部では「AIに指示したら、自動でプログラムをつくって実行までしてくれるようになるのでは」という期待もあるようですが、今はまだ生成系AIが書いたコードが正しいという確証がとれないため、その未来がくるのはまだ先だと思います。
生成系AIでエンジニアの仕事はどう変わるのか
今後ますます生成系AIが発展し、エンジニアの仕事において活用場面が増えていけば、業務効率はかなりアップすると思います。
では具体的にどのような変化が訪れるのか、少し考えてみましょう。
今後生成系AIはどう進化してくのか
個人的な希望ですが、ペアプログラミングの相手になってくれる生成系AIの登場を期待しています。またプログラミングをしている際に指示すると該当箇所にコメントをつけてくれる、調べ物をしてくれるなど、細かな作業や雑務を担ってくれるようになれば、プログラミングのスピードがあがり、正確性も高まると期待しています。
人間の言葉ことばや考えを理解する生成系AIが登場すれば、今まで100人で開発していたソフトウェアが2人で完結できるようになるかもしれません。そうなれば開発はかなり楽になるはずです。
ChatGPTはモデルが変わるたびにパラメータ数を「GPT-2」で15億、「GPT-3」で1750億、「GPT-3.5」で3550億と劇的に増やしてきました。それに伴い受け答えはより自然になり、内容もより深いものになりました。
最近、パラメータ数は現在のGPT-4で頭打ちになるという内容のレポートが発表されました。私にはこれが根拠があるものなのかわかりませんが、たとえ頭打ちになったとしても、この先プログラミング支援用のモデル、翻訳用のモデルなど、用途別のモデルが登場してきた場合、生成系AIが目的に合わせてそれらを切り替えて対応するようになると思います。
シンギュラリティの到来でプログラマーは不要になるのか
AIの知性が人類の知性を超える「シンギュラリティ」はいずれ訪れるといわれています。私たちがプログラミングをしていると、どうしても大事な要素を忘れたり、複雑なものを把握できなかったりするといった人間の特性が開発のネックになります。
ですがソフトウェアは、記憶力などに限界がほぼありません。そのためAIが人間には理解できないような超複雑なプログラミングを行い、バグも自分で見つけて直す時代がくるかもしれません。
だからといって、私は人間のプログラマーが不要になることはないと思っています。考えてみてください。将棋や囲碁の世界では、すでにコンピュータが人間のプロに勝利していますよね。ですがプロ棋士は変わらず存在しています。それは“人間が”将棋や囲碁をすることに一定の意味があるからだと思います。
それと同様に、ソフトウェアも人間がつくるからこそ生まれる価値があるはずです。少なくとも私が生きている間は、プログラマーの数は減っても絶滅はしないと思います。
また人間にはできて、AIにはできない大事な仕事があります。それはが責任を取ることです。プログラムに間違いがあってトラブルが発生してしまった際、生成系AIが「ごめんなさい」と出力しても、それで物事が収まることはまずないでしょう。プログラムをチェックし、最終的に責任を取るためにも人間は必要なのです。
AI時代に役立つエンジニアスキル
AIの登場により、エンジニアに求められることは変わりつつあります。その一方で、どのような時代でも、変わらず持っておいた方がいいスキルもあります。
問題を見つけ、解決する力は必須
今も、そしてAIが普及した時代も、「問題把握力」と「課題解決能力」は持っておいて損のないスキルです。
そもそもソフトウェアは、誰かの課題を解決するために作り出されています。課題を認識し、それに対する適切な解決策を選ぶというのは、少なくとも現時点では人間の特権といえます。だから高い問題把握力と課題解決能力を有していることは、今後大きな強みになります。ぜひ今のうちに鍛えておいていただきたいですね。
それらを養うためにもっとも大事なのは、経験です。私は車の運転や買い物、ネット検索など、日常生活のあらゆる場面で、使いにくさや不満を感じる部分はないか常にチェックしています。
大体は「Aを実現しようとするとBができなくなる」といったトレードオフにより、使いにくくてもそれが残されたデザインになっていますし、解決策を思いついても他社製品に手を加えることはできません。ですが思考することが問題把握力、課題解決能力を鍛えてくれます。
またOSやプログラミングの基礎知識など、コンピューターサイエンスのベースは時代を経てもその内容にあまり変化がないので、しっかり身につけておけば今から役に立つと思います。
「コモディティ化」しないために+αを身につけよう
エンジニアにとって、設計書通り正確にコードを書くことは非常に大事です。ですがそれしかできなければ、ほかのエンジニアとの差別化ができません。今後AIに代替され、仕事を失う可能性もあります。
そこでAI時代に生き残っていくためには「+α」の知識・スキルが必要です。
たとえば先ほど挙げた問題把握力、課題解決能力のほか、コミュニケーションスキルなどです。私が最近ハマっている認知バイアスに関する知識も、デザインのヒントになると思います。一見すると関係なさそうなことでも+αになり、エンジニアとして差別化できる要素になるかもしれません。好奇心を持って学んでいってください。
優秀なエンジニアに必要なこと
これまでさまざまなエンジニアと仕事をしてきましたが、優秀だと感じるエンジニアには共通点がありました。AIだけでなく、今後どのような技術的転換点が訪れてもきっと変わらない部分だと思いますので、ここで紹介しておきます。
(1)自発性
一つ目は「自発性」です。
一般的に新卒でソフトウェア会社にプログラマーとして入社した場合、最初は先輩や上司がどのツールを使ってどのように作業すればいいか教えてくれます。ですがいつまでも指示されたことだけやっていれば、コモディティ化しかねません。
そうならないためには、自発的に行動し、自分の価値を高めていくことが大事です。たとえば自ら手を挙げて「私がアルゴリズムを考えてコードを書くので、ここから先は任せてください」と訴えることです。
私が所属しているRubyの開発者コミュニティでは「この機能はこのように実装したらどうでしょうか」と自分の頭で考え、実際につくったものを提示するくらいの自発性がなければやっていけません。逆にそういった自発性がある人は、その後優秀なエンジニアになっていることが多いと感じます。
一方で会社が自発性あるエンジニアを育てるためには、環境づくりが大事です。
家庭では子どもが自分で考えて行動したことに「勝手なことしないで!」と怒ってしまうことはありますよね。ですが日常的にそう言われていると、子どもはそれに適応してしまい、いずれ自発的には動かなくなってしまうでしょう。
会社においてもエンジニアが自分で考えてした行動を周囲が叱責するような職場の場合、自発性ある優秀なプログラマを育てるのはかなり難しいでしょう。
もちろん事前の相談と調整は必要で、組織に迷惑をかけないことが大前提ですが、自発的な行動を許容する組織でいてほしいですね。
(2)自己管理能力
二つ目は「自己管理能力」です。
なかでもマインドの管理は大事です。プライベートで嫌なことがあっても、それを職場に持ち込むのはNGです。周囲に八つ当たりするなどすれば信頼関係が崩れかねませんし、ほかのエンジニアにとって職場が心理的安全性のない場所になってしまいます。
時間やモチベーションの管理も必要です。当たり前のことですが締切がある仕事の場合、それに間に合うように時間管理をして進めなければいけません。どうしてもモチベーションがあがらない日は、自分なりの対応手段を見つけておくことが大事です。
たとえば「仕事を細分化して少しでも作業を進められるようにする」「タイマーをかけて、その時間は集中する」といった方法です。
自分の機嫌の取り方、やる気がでないときの対処法などを見つけておくことで、マインドや時間の管理ができるようになり、仕事をきちんと進められるようになるでしょう。
まとめ:今できることを考えよう
AIは日々開発が進んでいて、今できないことも来週にはできるようになっているかもしれません。いずれエンジニアの仕事が奪われるという見方もありますが、そんななかでも生き残っているためにはスキルを身につけておくことが大事です。
課題解決能力などは特別な技術がなくても育てていけるので、ぜひ今日から意識してみてください。次回のまつもとゆきひろ勉強会もお楽しみに!