2014年3月30日日曜日

現在のプログラム開発

現在のプログラム構築方法について改めて考えてみる。

漫画やSFの未来の世界では、ロボットや人工知能はあたりまえ。今や人工知能の危惧が真剣に論じられる時代になりました。
100年後の世界でプログラムを今のように記述していることは100%ないだろうことは、疑う余地はないと思う。
そんな時にはどんなプログラム言語が利用されているのか、それともプログラム言語なんて通常は存在すら何でも構わなくてよく、ソフトもハードのように意識しない時代が来るのかもしれない。

これは近いうちに訪れるパラダイムシフトの可能性を予感させてくれる。

では現状は具体的にどうなっているのか?

多分こんなことは先端企業では既に意味を持たず、すでにある環境では完全な自動化は当たり前なことで、プログラムを手作りで構築していないことは当然のことかも知れないが、本当のところどの程度まで実現されているのかは企業秘密であまり実態は分からない。

現状を検討すると、

1.XMLを記述してこれをもとにプログラムを生成させる。
2.DSLでプログラムを構築する。
3.フレームワークも多数存在していて、ほとんど全部スクラッチでコードを書くことはない。
4.高級なツールを使う。(小規模な開発では無理)
5.フリーなツールを使う。(利用できるドメインが限られる)

以上の現状から既にプログラム構築は自ら記述することから、管理、テストや習得技術に移行していると把握している。

では、WEBで自由にプログラムを構築してリーリスすることをやろうとした場合は現実的に可能なのか、バージョン初期の段階はうまくいく、けれどもWEBの技術は進歩が速い。
Rubyを使ったり、PHPを使ったりしても制約を受ける。これが最終手段であるならば良いのだが、Javaや.Netの開発は違うやり方がある。ファームウェアの開発はもっと違うやり方で実施される。

方法論から検索していると、別の角度からこんな言葉がヒットした、
分子生物学者福岡伸一、書籍「世界は分けてもわからない」から
『世界は分けないことにはわからない。しかし、世界は分けてもわからない』の言葉が重要なことを示唆していると思う。

他人の書いたプログラムを完全に理解しようとすると、ソースコードを全部読んで解析しないと解らない。
ドキュメントや解説書があればかなり効率を上げられるが、では改造や連携させてプログラムを構築させることが自由にできるかというと、ここからは創造的な要素があるので分けても解らない。
実開発では何年後のプログラムメンテナンスはどうすればいいのか問題が残る。
特に開発の担当者が変わってしまう場合は深刻な問題が存在する。

XMLが規格化された初期の頃は、XMLで記述すれば何でも解決できそうな夢のパラダイムのように思えていたが、時が経つにつれ単なるフォーマットであって、別に理解するにはアルゴリズムが必要になる。可視化しても限界があるように思える。
DSLでのプログラム生成はXMLよりも、より複雑なことまで表現できるが方法として万能な手法ではなく、一般的にはローカルなシステムでの適用になる。

何かが足りないことに気付く、「管理、テスト等に一番役立つ技術が不足している」のでは?
メソッド言語はProlog、Haskell、Alloyを利用をしようと思う。
ターゲット言語はJavascriptとする。
この3つの言語を抽象的なツールとして使えば、かなり高度なことまでカーバできる。

未開発なアルゴリズムは固有の問題で、完全に自動化することは不可能なので、人が記述するしかない。
アルゴリズムの記述が容易かどうかは、要件や記述言語に依存しているが、実装するまで通常は前もって準備することは無理なので、あまり良い基準がないように思えるが、

アルゴリズムの設計基準は、自動化が目標で、既存のフレームワークを利用してできるだけ、手動で実装をしていることを自動化するにはどんなアルゴリズムが必要なのかを基準に考える。
幸いJavascriptには数多くの便利なフレームワークが存在するので、これを利用する。