ChatGPTなど生成AIの著しい進化によって、これまで人にしかできないとされてきた知的労働も代替される場面が増えてきました。
この先さらにAIが賢くなり、誰もが手に入れられるような時代になったら、知性だけでは価値を生み出すことができなくなるかもしれません。
そんな時代に、ソフトウェア開発はどのように変化していくのか。本稿で考えてみます。
目次
ソースコードを書くことはプログラミングの一部にすぎない
「AIによってプログラマは不要になる」という言説は、プログラマの仕事は何か?を定義しないと議論に誤謬が生じます。
「ソースコードを書くこと」をプログラミングと呼ぶのであれば、その仕事は無くなってしまう可能性が高いでしょう。かつて「ソースコードを打ち込むこと」を仕事としたコーダーという職業は、今はありません。
しかし、「ソフトウェアを生み出すこと」をプログラミングとするならば、そう簡単には無くなりません。
ソースコードとして実装する前には、どのようなソフトウェアなのかコンセプトを決めて、どんな機能があれば問題が解決できるのか、必要なデータ構造はどんなもので、どういったインタフェースが求められているのか、そういった行為が必要になります。
一般的にプログラミングだと思われている「ソースコードを書く」行為は、ソフトウェア開発の一部でしかありません。そこだけを工程として切り出して、人が作業をしていたとしたら、それはAIで置き換えることは可能です。
しかし、そもそも工程として「ソースコードを書く」だけを切り出すのは、ソフトウェア開発においては非効率で、合理的とは言えません。ソフトウェアをデザインすることは、試行錯誤の繰り返しなので、書く行為だけ分離しないほうが早く試すことができて、成果につながりやすいのです。
分業の終焉と統合される開発プロセス
「ソースコードを書くこと」の中には、昔だったら、アルゴリズムを考えることが含まれていましたが、オープンソースのライブラリが登場して以来、そんな原始的なコードを書くことは既になくなっています。
プログラムの構造すらも、フレームワークを前提とするようになり、大きな枠組みは考えるまでもなくなっています。また、高度な開発環境によって、全て打ち込む前にコード補完されるようになっています。
このように既に「ソースコードを書くこと」は今でも相当に省力化されており、その行為だけ工程を分離して分業するのではなく、もっと手前の工程も含めてプログラミングをしています。
現代のプログラミングとは、どんなソフトウェア(の機能)を作るのかを設計することであり、その考えた設計を表現するためにソースコードを使っていると言えます。
前工程にコードを書く行為を含めていく、と考えるのか、コードを書く行為が前工程を取り込んでいく、と考えるのか。いずれにせよ、ソフトウェア開発から工程の分断が減ってきたのが、これまでの歴史の流れです。
私のスタンスは、そうした工程の分断をなくした結果、ソフトウェア開発という行為と、プログラミングという行為は同義であるという主張です。プログラミングにソフトウェア開発の全てが含まれていると考えています。逆に言えば、プログラマとは、ソフトウェア開発者そのものなのです。
ソフトウェア開発の歴史にみる「工程の省略」
はるか昔(と言っても数十年前)は、パンチカードという仕組みでプログラミングしていた時代があります。紙にパンチ穴を空けて、それをコンピュータに読み込ませて実行していたのです。そうなると、パンチ穴を空けるためのパンチャーという仕事が必要でした。
ディスプレイとキーボードの登場によって、その仕事は無くなりましたが、ソフトウェア開発であり、プログラミングの仕事はなくなっていません。本質的に、ソフトウェアを作るという行為は代替されていないのです。
これまでのソフトウェア開発に関わる技術の進歩は、このように効率化して工程をなくしていく歴史でもありました。クラウドの登場によって、コンピュータを調達して組み立てて、ネットワークに繋ぐ仕事も、ソフトウェア開発の側面から見ると無くなりました。
一人当たりのソフトウェア開発者ができることが広がり、生産性が高まってきたのです。それに伴い、分業がなくなって、ソフトウェア開発=プログラミングという行為に統合されていく。それが、生成AIによって、さらに進むと考えられます。
よって、「ソースコードを書く」行為だけを考えたら、それだけをする仕事はなくなるのは必然でしょう。そして、一人当たりの生産性が高まることで、一つのソフトウェアを開発するための人員は減っていくことになるので、そういう意味での仕事も減っていくと考えられます。
一方で、必要とされるソフトウェアは、まだまだ増えていきます。SaaS企業などのソフトウェアをコアコンピタンスとする事業会社では、ソフトウェアの機能拡張は事業拡大に影響を与えます。ソフトウェアそのものでビジネスをしない業種の事業会社であっても、ソフトウェアによる効率化や付加価値の増大は重要な経営課題です。
「ソフトウェアを開発する」その仕事は、当分なくなることはないでしょう。世の中の経済活動や、資本主義の根幹をなす部分でさえ、AIによる変革が起きたとしたら、話は別ですが、そのような人類の変革が起きたら、そもそも人が働くとは何か、という部分まで変わっていくでしょう。それはそれで楽しみですが、本稿の論旨から外れるので考えません。
AIがあっても変わらない、ソフトウェア開発の本質
「ソースコードを書く」行為が「ソフトウェアを開発する」ことに含まれているので、その「ソフトウェアを開発する」仕事の最終的なアウトプットは、ソースコードであることに変わりはありません。
ソースコードがないと、コンピュータは動きません。コンピュータを動かすことでソフトウェアとして価値が生まれます。
このソースコードも、歴史で振り返ると、かつては0/1で表現するマシン語があり、アセンブリ言語が登場し少し命令っぽくなって、C言語のような人間が理解しやすいものが出て、そこから現代はさらに抽象化されたプログラミング言語で開発するようになっています。
時代や技術によって変わっていくとしても、ソースコードという成果物はなくなっていません。今後、AIを前提として、より抽象化したレイヤで構成されたソースコードの表現方法が誕生するかもしれませんが、ソースコードという存在がなくなるわけではありません。
自然言語による表現方法も可能性としてはありますが、ソフトウェアに期待する正しい動作を規定するには多様な状況に耐えうる厳密さが必要で、それを抽象度を高く表現するとしたら、今のプログラミング言語の延長上で考えた方が良さそうに思います。
ソフトウェアを開発するためにソースコードを生み出すことは欠かせませんが、進化した生成AIにソースコードを書かせることが増えて、人間が手を使って書くこと自体は減っていく可能性は大きいです。
ただし、ソースコードをキーボード使って、一言一句打ち込んでいかなかったとしても、ソフトウェア開発者=プログラマがソースコードを生み出していることに違いはありません。前述した通り、既に既存のライブラリも使えば、コード補完も使って、全て打ち込んでいるわけではないからです。
今はプログラマが、生成AIのエージェントに「何を作るのか」を準備して依頼をするし、書かれたコードを見て「これでよいか」を確認することをしています。それも、ある種のコーディングとみなせます。
コードを書かないソフトウェア開発とは、キーボードで全て手打ちする必要はないけれど、AIに限らず様々な技術を駆使して、ソースコードを生み出してソフトウェアを作っていくことです。
ソフトウェア開発における保守性と責任の重要性
今でも、業務上のちょっとした困りごとを解決したり、思いついた簡単なゲームを作ってみたり、そういったソフトウェアは、生成AIによって作ることができます。それ自体は素晴らしいことです。
ただし生成AIを活用して、コードを書かずにソフトウェアを一旦は作ることができたとしても、それを保守し続けることは簡単なことではありません。
ソフトウェアの特性として、使い続けていくために、直し続けていく必要があります。一度作ったものを、大きくは変えずに使い続けていくのがハードウェアだとすると、ソフトウェアは変化し続けていける特性があります。
新しく欲しい機能を追加していくとか、使い勝手を改善していくといった前向きな改修もあれば、利用しているライブラリやフレームワークのバージョンアップに合わせてアップデートしていく改修や、法律の改訂や事業環境の変化、利用者や物量の増加に合わせた改修などの変化が考えられます。
そうした改修をせずに放置しておくと、競争力の劣化や、セキュリティホールによる被害など、事業成長の妨げとなってしまいます。ソフトウェアにかかる開発の工数と期間は、使い始めるまでよりも、使い始めてからの方が、はるかに大きいのです。
現代において、事業会社で働く多くのエンジニアの仕事は既存のソフトウェアの改修になります。ゼロからソフトウェアを作る機会は、それほど多くありません。そうした場面でも、生成AIは有効ですが、生成AIの書いたコードをそのまま適用するのはリスクが伴います。
ソフトウェアは、一部の不具合によって全体の動作に影響を及ぼすことがありますし、セキュリティホールが一部でもあれば、全体のデータが抜かれかねません。他者と協調して開発している際の、相互の影響も気にする必要があります。
AIエージェントは、ソフトウェア開発者にとって優秀なパートナーではあるけれど、ソフトウェア開発者がいなくても良いわけではないのです。そして、ソフトウェア開発者にとって、直し続けていくためには、ソースコードの保守性は欠かせません。
保守性で求められるものは、今は読みやすさや修正のしやすさといった観点となりますが、それはこの先は変化していく可能性があります。しかし、ソフトウェアにおいて保守性が重要であるという点は変わらないでしょう。
ソースコードを生み出していくことがソフトウェア開発なのだとしたら、保守性の高さに加えて「いいコードとは何か」を考え追求していくことは、この先も求められる姿勢だと考えています。
ソフトウェア開発を担う開発責任者という仕事
私たちソニックガーデンでは、プログラマという職種と、プログラミングという仕事に誇りを持って取り組んでいます。
ここまで書いた通り、私たちの言う「プログラマ」とは、ソフトウェアを開発し保守し続ける人のことであり、プログラミングはソフトウェア開発そのものと考えています。
そのため、私たちは要件定義や設計や実装といった形で工程を分離していませんし、フロントエンドやバックエンドといった形で範囲も分離していません。
そして「納品のない受託開発」では、私たちのお客さまは事業を束ねる「事業責任者」の役割で動かれる方をプロダクトオーナーとして直接やりとりしながら、動くソフトウェアにするためソースコードで表現するところまで、分業せずに取り組みます。
それは簡単な仕事ではないですが、そうした仕事ができる人にとっては、生成AIの活用は生産性を向上させるチャンスになります。
お客さまの事業責任者に対峙する役割として、「開発責任者」と私たちは呼んでいます。言われたものを作るのではなく、「何を作るべきか」「どういう体制で作るべきか」といった正解のない意思決定に関わって一緒に悩むことも、開発責任者の仕事になります。
開発責任者の仕事は、単純に技術に詳しいだけでも、ソースコードを書くことだけでも成立しません。担当する事業や業界のことに興味を持ち、ヒアリングで本質的なモデルを抽出し、事業戦略について理解し、持論を持って提言していくことが求められます。
また、プロジェクトマネジメント能力や、前提となるコミュニケーション能力も重要です。そうした土台の元があって、いいソフトウェアを作ることができると考えています。いいソフトウェアのために必要なことは、すべて行うのが開発責任者と定義しています。
その上セルフマネジメントができて、内発的動機づけのもとで、自らの意思で自律して動いていく状態を目指しています。そこまでいけば、近いうちに生成AIに代替されることはないのではないかと考えています。
ジュニア層をどう育てるか、という課題
ここまで述べたことから考えると、既に多くの経験を持ってソフトウェア開発できるシニア層のハイパフォーマーたちは、生成AIの恩恵を受けることはあっても、その立場が脅かされることはないと想像できます。
課題となるのは、ジュニア層の仕事です。そもそもソフトウェア開発の経験が浅い人にとって、生成AIを活用したとしても、ハイパフォーマーが生成AIを活用するほどには生産性は出せません。
そもそも、ソフトウェア開発の仕事の場合、ハイパフォーマー数人の少数精鋭で開発をしているところに、ジュニアなメンバーを入れたとしても全体の生産性は上がりません。その辺りについて詳しくは拙著『人が増えても速くならない』に書いています。
つまり、生成AIが登場する以前から、ジュニアメンバーを多く参加させてプロジェクトを組むのは、筋の良くない取り組みだったのです。それが、生成AIによって、より顕著になってきたと言えます。このことは、私から見ればあるべき姿に戻っているように感じます。
ソフトウェアに関わる人数が売上や事業成長に直結しないような、一般的な事業会社を経営する立場で考えると、ジュニアなエンジニアを採用して、現状の生産性を落としてまで育成する理由が見当たりません。
これは企業ごとの目線では良いかもしれませんが、社会全体として、ジュニアなメンバーが経験を積んでいく機会と場所が減ってしまうことは課題として残ります。
現時点のハイパフォーマーたちも、年数が経過することで、パフォーマンスを出せなくなる時が来るかもしれません。そうした時に、あとに続く人たちがいないことは社会として大きな問題に直面することになるでしょう。その頃には、すべてAIで世界は良くなっている・・・と言うのは、流石に楽観的すぎる予測でしょう。
一流の開発責任者になるには──徒弟制度の意義
私たちソニックガーデンは「いいソフトウェアをつくる。」を活動の理念としています。
手を使ってソースコードを打ち込むこと自体は減っていくかもしれませんが、動くソフトウェアのためにソースコードを生み出すことは、これまで以上に求められていくと考えています。
人口が減少していく社会において、その社会を維持・発展していくために、もっともっと沢山のソフトウェアが必要となっていくはずです。
そのためには、ソフトウェア開発ができる人を増やしていかねばなりません。それも、いいソフトウェアを増やしていきたいというのが、私たちソニックガーデンの目指すところです。
そして私たちの考える「ソフトウェア開発」は、ソースコードを生み出すことも含めたソフトウェアをつくるための全てを統合した活動です。
その前提で、優れたソフトウェア開発者になるためには、分業された工程の一部だけをするのではなく、分割された範囲だけの開発をするのではなく、未熟ながらも全体に取り組んでいく必要があります。
一流のソフトウェア開発者のもとで、その仕事ぶりを学びながら、自らもソフトウェア開発に取り組んでいくことが、一流への道となります。それが、私たちが用意している徒弟制度の根幹にあるものです。
徒弟制度では、師匠となる親方にとっても、師匠のもとで努力する弟子にとっても、それを見守る会社や人事にとっても、相当にコストのかかる活動です。生成AIの時代に、それだけのコストをかける必要があるかといえば、経済合理性だけでは説明ができません。
しかし、私たちが様々なコストをかけてでも、ジュニアなソフトウェア開発者を育成していくことは、自分たちの活動の理念に沿ったことでもあるのです。
ソニックガーデンでは、一流のソフトウェア開発者を目指す人を募集しています。
【ソニックガーデン採用情報】
・採用トップページ
【関連記事】