現代ソフトウェア開発読本(1) - モダナイゼーションと温故知新
これからのソフトウェア開発のモダナイゼーションを探る
次回:ウォーターフォールは廃れていくのか
ソフトウェア開発のモダナイゼーションの心得
「ソフトウェア開発は最新技術でモダナイゼーション」
「最新技術と伝統技術の融合こそモダナイゼーションの神髄」
これは挿絵にある二人の言葉で、この言葉はソフトウェア開発の新しい在り方、モダナイゼーションを表す心得です。この読本シリーズでは現代ソフトウェア開発として、ソフトウェア開発のモダナイゼーションを見ていきます。
モダナイゼーションの定義とマイグレーションとの差異
モダナイゼーション(現代化)とは、現代技術で対象全体を新しくすることです。一方、マイグレーション(移行)とは、現代技術で対象の一部を新しくすることです。つまり両者の違いは対象の全部か一部かの違いになります。
なおモダナイゼーションの定義として、最新技術で全体を再構成しているという定義も見受けられますが、この差異については、以下の最新技術と現代技術の項目を参照してください。
(参考)最新技術と現代技術、従来技術(レガシー技術)
最新技術とは数年以内に新しく出現した技術です。例えば生成AIやノーコード開発などがあります。
また現代技術とは最新技術だけでなく、さらに数年よりも以前に出現した技術も含み、他の技術で現代でも代替されていない有用な技術のことです。例えば、アジャイルソフトウェア開発は20年以上前の技術で最新技術ではありませんが、現代でも立派に通じる現代技術です。またウォーターフォール開発も異論はありますが現代でも通じる技術です。
一方、従来技術(レガシー技術)とは、過去の技術であり、現代では廃れた技術です。しかし過去のしがらみから現代でも一部で残っている技術もあります。例えばフルスクラッチ開発や非構造化プログラミングなどがあります。一部ではウォーターフォール開発は廃れたレガシー技術と定義する人もいます。
モダナイゼーション技術の心得「適材適所」
モダナイゼーションは対象全体を新しくするときに使う現代技術は、最新技術ばかりである必要はありません。
そこで現代技術の中から適材適所の技術を選択して、対象全体を新しくすることがモダナイゼーションの心得になります。つまりモダナイゼーションは適材適所の技術選択が重要です。
モダナイゼーション方針の心得「反面教師と温故知新」
モダナイゼーションをするための技術として適材適所の技術を選びます。このときに役立つ心得が「反面教師」と「温故知新」の心得です。
従来技術の悪いところを反面教師にして現代技術でモダナイゼーションをし、また温故知新の考えで従来技術を学び現代技術と融合してモダナイゼーションをすることが心得です。この心得を見ていくことにします。
反面教師 - 他人の振り見て我が振り直せ
なぜソフトウェア開発のモダナイゼーションをする必要があるのでしょうか。それは従来のソフトウェア開発が悪いからです。それを反面教師として、現代技術でモダナイゼーションします。
ここでは従来技術の悪いパターン、アンチパターンを見ていきます。
反面教師の例
(1) スパゲティプログラミング
スパゲティプログラミングとは、構造化されていないプログラムコードを作成するプログラミングです。この非構造化コードの主な原因は分岐命令による繰り返し構造の破壊にあります。
繰り返し構造を破壊するプログラムコードには、以下のものがあります。
(a) 例外処理などのためのgoto文(throw文なども含む)
(b) 繰り返し中のbreak文やcontinue文による繰り返しの例外脱出
(c) たすき掛けの分岐命令
例えばJavaで上記の命令文を多用しているプログラムがスパゲティコードになります。
このスパゲティプログラミングに対しては、少数の構造(例. 順次、分岐、繰り返し構造)だけでプログラミングする「構造化プログラミング」を採用する必要があります。これが現代技術です。
(2) カウボーイコーディング
カウボーイコーディングとは、一人で荒野を駆け抜けるカウボーイのように、各プログラマが勝手にプログラミングをすることです。アジャイルソフトウェア開発では、コード優先ということもあり、このカウボーイコーディングになる傾向性があります。
これを防ぐには、コーディング規約やその中に含まれるネーミング規則などを制定し、各プログラマが勝手にプログラミングしないように標準規則を作ってプログラマを縛る必要があります。これが現代技術になります。
(3) バイブコーディング
バイブコーディングとは、生成AIに自然言語でプログラム作成の指示を出して、コードを生成して作ることです。バイブの意味は音楽用語で雰囲気で音楽を作るときの用語で、雰囲気だけでプログラミングすると言う意味を持っています。
特定用途のトイプログラムであれば、これでも可能ですが、汎用向けの大規模な実用プログラムである場合は(今のAI における)バイブコーディングでは困難です。
AIで汎用的なプログラムを生成するためには、AIにおける記号接地問題を解決する必要があります。記号接地問題とは、用語(シンボル)を現実世界の意味に繋げる問題です。これは汎用AI(AGI)の永遠の課題と言ってもいいかもしれません。この問題が解決しないとバイブコーディングは特定用途のトイプログラムを作るだけしか通用しないアンチパターンになります。
温故知新 - 従来技術をたずねて最新技術と融合
最新技術以外の現代技術には将来的にも有用な技術が多くあります。この技術が新しく出てきた技術になぜ代替されないのか、なぜ今も生き残っているのかは重要な観点であり、次代の最新技術との融合を考えるのは重要です。
また廃れてしまった従来技術の中にも、その当時なぜ流行し、なぜ廃れていったのかを見直すことも重要であり、最新技術を考えるときに反面教師も含めてヒントになります。
これらのキモを新しい技術に結び付け、融合させてることはまさに「温故知新」の考えです。
温故知新の例
(1) 関数型プログラミング
関数型プログラミングとは、数学の関数のように副作用がない関数でプログラミングすることです。関数型プログラミングでは、副作用がないため、プログラムを自由に組み合わせて、新しいプログラムを作ることができます。
このため、関数型プログラミングは、生成AIによるプログラミングの基本技となります。そして関数型プログラミングは構造化プログラミングのように最小限の構造(順次、分岐、再帰構造)でプログラミングできる傾向があります。
このように関数型プログラミングの考えを新しいプログラミングパラダイムに適用していくことになるでしょう。
(2) 定量的品質分析
IPAで公開しているソフトウェア開発分析データ集は、定量的品質分析のためのデータ集になっています。この分析データ集では従来技術であるウォーターフォール型開発でのSLOC(Source Lines Of Code、ソースコード行数)やFP(Function Point、ファンクションポイント)をソフトウェア規模としています。
一方、アジャイル開発やノーコード/ローコード開発、バイブコーディングなどの現代技術の開発手法でも、上記の定量的品質分析と融合した分析を行うことになるでしょう。
まとめ - モダナイゼーションと温故知新
今回は現代ソフトウェア開発読本の第1回序論として、指針「モダナイゼーションと温故知新」を紹介しました。モダナイゼーションは過去を捨てることでなく、もちろん過去のまま進むのではなく、従来技術と現代技術を温故知新の考えで融合させた技術で、現代化(モダナイゼーション)をすることです。
今回は序論として抽象的な指針と簡単な例を紹介してきましたが、次回以降は具体的な現代ソフトウェア開発を見ていくことにします。モダナイゼーションはあなたの手にあります。
(参考文献)
IPA
IPAソフトウェア開発分析データ集(定量的品質分析)
IPA DXITフォーラム(現代ソフトウェア開発の関連情報)
IPAソフトウェア開発調査(現代ソフトウェア開発調査)
NOTEマガジン
プログラミングの掟
IPAソフトウェア開発分析データ集 教科書
関数型プログラミング事始め
アジャイル開発分析 ~アジャイル開発の掟
ソフトウェア開発マンガFAQ
マンガ読本 ソフトウェア分析 事始め
IPAソフトウェア調査分析
いいなと思ったら応援しよう!
よろしければサポートをお願いします!