第27話 ソフトウェアの一般化
文字数 1,831文字
(ソフトウェア開発では、一般化を図る必要があります)
夢のソフトウェアが生産性が高いということは、高い一般性を持っていると考えます。そこで、ソフトウェア開発における一般化とは何かを考えます。
1)横の一般化
横とは、分野の違いを指します。
Aという分野用に作ったソフトウェアは、Bという分野でも使えれば、一般化ができ、開発コストが下がります。
一般に、Aという分野用に作ったソフトウェアが、そのままBという分野でも使えることはなく、モジュールを共通部分と分野依存部分に分解する必要があります。あるいは、オブジェクト指向であれば、継承を使うことになります。
ソフトウェアの開発には、これ以上深入りしませんが、横の一般化で重要なことは、横の一般化は分野の破壊を前提することです。
日本では、分野ごとの専門家が独立して存在するという人文的文化が主流です。例えば、生態学では、特定種の専門家がいます。歴史学では、ルネッサンスのイタリアのようにある地域のある時代の専門家がいます。
歴史学の現状は分りませんが、現代の生態学は、エネルギー収支を微分方程式でとき、生物多様性をクラウドであつめたビッグデータで分析し、環境政策を自然資本の経済学で解析しています。つまり、生態学では、旧来の分野は破壊されています。
現代の生態学はDXのかたまりと解釈できます。
日本のように、特定種の専門家の意見を入れて、レッドデータブックを中心に種ごとの縦割り生態学を推進している国はなくなりつつあります。
日本では、産業界のDXの遅れが指摘されていましたが、科学的文化に基づかず、人文的文化と経験科学に基づく学問分野のDXの遅れは、より深刻になっています。
2020年6月の科学技術基本法に「人文科学のみに係る科学技術」が追加されたことは、DXの否定になりますので、問題点を端的に示しています。
2)縦の一般化
ソフトウェアは、時間をかけて開発されます。その特徴は、次になります。
(1)バージョンアップ
機能を追加し、処理効率を上げます。セキュリィティ対策を向上します。
(2)システム化ツール
ソフトウェアを効率的に開発するソフトウェアを開発します。
この機能の一部は、ソフトウェア言語の進歩によってもたらされています。
オブジェクト指向と関数プログラミングが、2本の柱になっています。
ソフトウェアによって作られるエディタ、デバッガも進歩を支えています。
これはソフトウェアに自己増殖性があることを意味します。
ゲームソフトの開発企業が、ゲームソフト開発のためのプラットフォームを同時に作っていれば、自己増殖性の点で、デジタル企業と言えるでしょう。
複数のA,B,Cのゲームで使われる共通モジュールを開発して利用する手法が横の一般化です。ゲームソフト開発のためのプラットフォームを開発するのは縦の一般化です。交換できれば、縦の一般化は、横の一般化が極度に進んだ状態であると見ることもできます。
3)高さの一般化
ソフトウェアは人間のグループが作ります。
1人の生産性も重要ですが、グループの生産性も重要です。
グループの生産性を上げるためには、クラウドツールの活用が欠かせません。
この文章は、Googleドキュメントで書いていますが、Googleドキュメントのようなクラウドに対応したツールを使えば、生産性を劇的に上げることができます。
紙の雑誌の印刷では、編集者がゲラ刷りに赤を入れたものを、著者に郵送して、修正点をチェックしていました。それには、数日かかりました。
グラウド上のエディタを使えば、こうした編集は瞬時に終わります。
紙の雑誌を、WEBに切り替えれば、印刷費が要らなくなるだけではなく、速報性が上がります。
ウィキペディアであれば、選挙の次の日には、選挙結果が書き込まれています。
紙の百科事典で対応するには、数年を要していました。
紙の雑誌が廃刊になっていますが、速報性、双方向性に利便性がなく、コストが嵩みますから、廃刊になるのは当然と思われます。
一方では、電子教科書には、速報性、双方向性がなく、電子化のメリットが全くない不思議な状態になっています。
ソフトウェア作成における高さの定義はありませんので、ここでは、第3の一般化と呼んでもかまいません。
4)まとめ
他にも、見落とした一般化の切り口があるかもしれません。
いずれにしても、ソフトウェアは、開発の方法、開発後の利用、システムとしての自己増殖性によって、高い生産性を実現できます。
夢のソフトウェアが生産性が高いということは、高い一般性を持っていると考えます。そこで、ソフトウェア開発における一般化とは何かを考えます。
1)横の一般化
横とは、分野の違いを指します。
Aという分野用に作ったソフトウェアは、Bという分野でも使えれば、一般化ができ、開発コストが下がります。
一般に、Aという分野用に作ったソフトウェアが、そのままBという分野でも使えることはなく、モジュールを共通部分と分野依存部分に分解する必要があります。あるいは、オブジェクト指向であれば、継承を使うことになります。
ソフトウェアの開発には、これ以上深入りしませんが、横の一般化で重要なことは、横の一般化は分野の破壊を前提することです。
日本では、分野ごとの専門家が独立して存在するという人文的文化が主流です。例えば、生態学では、特定種の専門家がいます。歴史学では、ルネッサンスのイタリアのようにある地域のある時代の専門家がいます。
歴史学の現状は分りませんが、現代の生態学は、エネルギー収支を微分方程式でとき、生物多様性をクラウドであつめたビッグデータで分析し、環境政策を自然資本の経済学で解析しています。つまり、生態学では、旧来の分野は破壊されています。
現代の生態学はDXのかたまりと解釈できます。
日本のように、特定種の専門家の意見を入れて、レッドデータブックを中心に種ごとの縦割り生態学を推進している国はなくなりつつあります。
日本では、産業界のDXの遅れが指摘されていましたが、科学的文化に基づかず、人文的文化と経験科学に基づく学問分野のDXの遅れは、より深刻になっています。
2020年6月の科学技術基本法に「人文科学のみに係る科学技術」が追加されたことは、DXの否定になりますので、問題点を端的に示しています。
2)縦の一般化
ソフトウェアは、時間をかけて開発されます。その特徴は、次になります。
(1)バージョンアップ
機能を追加し、処理効率を上げます。セキュリィティ対策を向上します。
(2)システム化ツール
ソフトウェアを効率的に開発するソフトウェアを開発します。
この機能の一部は、ソフトウェア言語の進歩によってもたらされています。
オブジェクト指向と関数プログラミングが、2本の柱になっています。
ソフトウェアによって作られるエディタ、デバッガも進歩を支えています。
これはソフトウェアに自己増殖性があることを意味します。
ゲームソフトの開発企業が、ゲームソフト開発のためのプラットフォームを同時に作っていれば、自己増殖性の点で、デジタル企業と言えるでしょう。
複数のA,B,Cのゲームで使われる共通モジュールを開発して利用する手法が横の一般化です。ゲームソフト開発のためのプラットフォームを開発するのは縦の一般化です。交換できれば、縦の一般化は、横の一般化が極度に進んだ状態であると見ることもできます。
3)高さの一般化
ソフトウェアは人間のグループが作ります。
1人の生産性も重要ですが、グループの生産性も重要です。
グループの生産性を上げるためには、クラウドツールの活用が欠かせません。
この文章は、Googleドキュメントで書いていますが、Googleドキュメントのようなクラウドに対応したツールを使えば、生産性を劇的に上げることができます。
紙の雑誌の印刷では、編集者がゲラ刷りに赤を入れたものを、著者に郵送して、修正点をチェックしていました。それには、数日かかりました。
グラウド上のエディタを使えば、こうした編集は瞬時に終わります。
紙の雑誌を、WEBに切り替えれば、印刷費が要らなくなるだけではなく、速報性が上がります。
ウィキペディアであれば、選挙の次の日には、選挙結果が書き込まれています。
紙の百科事典で対応するには、数年を要していました。
紙の雑誌が廃刊になっていますが、速報性、双方向性に利便性がなく、コストが嵩みますから、廃刊になるのは当然と思われます。
一方では、電子教科書には、速報性、双方向性がなく、電子化のメリットが全くない不思議な状態になっています。
ソフトウェア作成における高さの定義はありませんので、ここでは、第3の一般化と呼んでもかまいません。
4)まとめ
他にも、見落とした一般化の切り口があるかもしれません。
いずれにしても、ソフトウェアは、開発の方法、開発後の利用、システムとしての自己増殖性によって、高い生産性を実現できます。