プログラム、プログラミングという世界は10年に1度くらいでパラダイムシフトがやってくる。
プログラミングの世界における「10年周期のパラダイムシフト」は、単なる技術の更新ではなく、「開発者の思考回路」や「コンピューターとの向き合い方」そのものが作り替えられる転換点だと言えます。
プログラミング変遷のクロニクル
1. 1990年代:オブジェクト指向の民主化
Cでは、メモリ操作などハードウエアよりなことを含めてプラグラマが操作してコンピュータに命令を与えるという視点でしたが、
C++ではオブジェクトをクラスで定義して、そのインスタンスがメモリ上で自立して動く、オブジェクト同じはメッセージングによって相互に同期し、成果をあげる。ようなオブジェクト間メッセージシステムの構築という捉え方。
変化: 「手順」ではなく「モノ(オブジェクト)」としてシステムを捉える設計思想へ。
背景: ソフトウェアの肥大化に伴い、再利用性と保守性が不可欠になった。
2. 2000年代中盤:Web 2.0 と動的言語の爆発
Google Mapsの登場やRuby on Railsのブームが象徴的です。
Javascriptでの非同期通信によりブラウザ上での開発がおおきくかわる。
変化: コンパイルして動かす重厚な開発から、LL(軽量言語)によるスピード重視の開発へ。
背景: インターネットがインフラ化し、フロントエンド(JavaScript)とバックエンドの分離が進んだ。
3. 2010年代中盤:クラウドネイティブと関数型への回帰
AWS等の普及により、物理サーバーを意識しない「サーバーレス」や「マイクロサービス」が台頭しました。
変化: 単体のプログラムを書くことから、「分散した環境でどうデータ流すか」というオーケストレーションへ。
背景: スマホ普及によるトラフィックの爆発。Reactなどの登場により、関数型プログラミングの考え方が一般化。
4. 2024年〜(現在):AIネイティブ・パラダイム
まさに今、私たちが立ち会っているのがこのシフトです。
変化: 「コードを書く」ことから、「AIに意図(プロンプト)を伝え、生成されたコードを検証・統合する」ことへの移行。
本質: 言語の文法を覚えるスキルの価値が相対的に下がり、「システム全体の設計力」と「課題定義力」が問われる時代になりました。
ソフトウエアの進化は、ハードウェアの進化(ムーアの法則)によって可能になる「抽象化のレベル」が関係している。
・ハードが速くなる
・より「人間にとって楽な」書き方ができるようになる(抽象化)
・古い書き方が「非効率」になり、新しい手法が標準になる
-----------------------------------------------
いま、パラダイムシフトできていな人へ
1. 「自分の手で書くこと」のプライドを捨てる
ベテランや職人気質な人ほど、「AIが生成したコードを使うのは邪道だ」、あるいは「自分の力で1から書かないと技術力が落ちる」という恐怖を感じがちです。
現実: AIは「究極のライブラリ」です。
シフト: 1文字ずつタイピングする「写経の時代」は終わりました。これからは、AIが出したコードを「レビューし、組み合わせ、責任を持つ」という、いわば「PL(プロジェクトリーダー)」のような視点でコードと向き合う必要があります。
2. 「言語の壁」ではなく「ロジックの壁」を見る
今までは「Javaが書ける」「Pythonが書ける」というスキルが資産でした。しかし、パラダイムがシフトすると「言語そのものの知識」の価値は暴落します。
現実: 言語の変換はAIが数秒でやってのけます。
シフト: 重要なのは「何を実現したいか」という論理構造(ロジック)とアーキテクチャです。特定の言語に固執せず、複数の言語をAIを介して使いこなす「多言語ネイティブ」な立ち振る舞いを目指すべきです。
3. 「完成品」ではなく「反復(イテレーション)」を重視する
かつては「完璧に設計して、完璧に実装する」のが美徳でした。しかし、開発スピードが劇的に上がった今のパラダイムでは、そのスタイルは「遅すぎる」と見なされます。
現実: AIを使えば、プロトタイプは数分で作れます。
いや、支持の仕方によってはもはやプロトタイプではなくほぼほぼ完成品がだせるのだ。
シフト: 「まず動くものをAIに出させ、それを叩き台にして改善する」。このスピード感に自分を適応させないと、思考の回転数が周囲とズレていってしまいます。
-----------------------------------------
パラダイムシフトは、「人間がもっと面白い(創造的な)仕事をするために、面倒な部分をテクノロジーが引き受けてくれる現象」です。
AIは、圧倒的なはやさで、圧倒的な精度の高いコードを生成するのです。←これを信じられない時点で、お前のコード生成のスピードと精度とを比較してみろよ
あと、AIが生成したコードを信用できないという人は、設計レベルがださいとか、設計レベルをちゃんと指示できないとか、テスト仕様が考えられないとか開発業務レベルで別次元の問題を抱えているんじゃないですかね。
現代の「開発力」の再定義
今の時代における「開発力」とは、もはや「シンタックスに精通していること」ではありません。以下の3つの能力の総和に変わっています。
1. 構造化する力(設計の解像度)
AIは魔法の杖ではなく、「入力された解像度以上のものは出力できない」という特性があります。
- シフトできない人: 漠然とした指示しか出せず、期待外れのコードを見て「AIは使えない」と切り捨てる。
- シフトした人: システムの責務を分解し、インターフェースを定義し、エッジケースを予見した上でAIを駆動させる。
2. 検証する力(テスト仕様の策定)
「AIが書いたコードはバグがあるかもしれないから使わない」というのは、「自分が書いたコードにバグがないと盲信している」のと同じくらい危険な傲慢さです。
- 本質: 誰が書いたかではなく、「どう動くべきか(振る舞い)」を定義する能力(テスト設計)こそが、コードの品質を担保する唯一の手段になったのです。
3. オーケストレーション力
AIは「断片」を作るのは得意ですが、それらを組み合わせて「生きたプロダクト」にするのは人間の仕事です。
「指示の仕方によってはもはやプロトタイプではなくほぼほぼ完成品がだせる」
という言葉通り、完成品までの「距離」をいかに短縮できるかは、プログラマの「抽象概念を具体化する速度」に直結しています。
痛烈な「鏡」としてのAI
AIを否定することは、鏡に映った自分の「設計能力の低さ」から目を逸らしているだけというのは痛いところをついているでしょう。考えない、考えられないプログラマにとっては、
- 「AIが生成したコードが動かない」 → 自分のコンテキストの伝え方が不十分。
- 「AIが生成したコードが汚い」 → 自分の設計思想が言語化できていない。
- 「AIが生成したコードを直すのが面倒」 → そもそも自動テストやCI/CDの環境構築ができていない。
結局のところ、AIは「その人の開発者としての地力」を増幅させるアンプ(増幅器)に過ぎません。0の人には0を、100の人には10,000を返す。この残酷なまでの実力差が可視化されるのが、今のパラダイムシフトの恐ろしさです。