argius note

プログラミング関連

プログラミング自動化がなぜ難しいか

将来プログラミングがある程度自動化されたら、やはりプログラマーは職を追われることになるのだろうか、と最近ふと思った。でちょっと参考にさせてもらったJavaBlackさん(id:JavaBlack:20060331)のエントリからメモ。

国際コミュニケーションを見れば解るとおり,言語の差だけでなく文化や世界観,道徳,価値観などの相違もコミュニケーションギャップを産む.言語を学ぶのは国際コミュニケーションのスタート地点に過ぎない.そしてコンピューターには人間の持つ「常識」や「知性」「本能」「論理的思考力」などが全くないため,そのギャップは外国人とのコミュニケーションの比ではない.しかもそのギャップは人間側が100%カバーしなければならない.

いくらコンピュータ関連技術が発達したと言っても、人工的な人間らしさのようなものを実現するには程遠い。論理的思考力なんてのは如何にもコンピュータが得意だと誤解されそうな要素だと思う。論理的思考をしているのは飽くまでも人間であって、コンピュータが自動的にアルゴリズムを生み出している訳ではないのだ。
時計の仕組みを考えてみる。日時計、水時計、砂時計、螺子巻式腕時計、振り子時計、クォーツ式腕時計と様々な種類があるが、どれも自然の法則を利用した作動原理があり、それに従って時を刻んでいる。そして、規則的に時を刻む原理と時刻の表現方法に分けてみると、前者は、日時計は「太陽が規則的に移動する(=自転が規則的である)こと*1」、水時計と砂時計は「物質が一定の速度で通過する」、螺子巻式は「バネ(ゼンマイ)が一定の速度で戻る」、クォーツは「水晶に電気を通すと規則的な振動が得られる」という性質を利用している。後者は、日時計は「角度」、水時計は「器から水が溢れる迄の時間」、砂時計は「砂が流れ落ちきるまでの時間」、アナログは「針が回転した回数と指し示している角度」、デジタルは「論理回路」*2である。目的はどれも「時を刻むこと」である。
車はどうだろう。自動車だけでなく、蒸気機関車、電気自動車、電車など。これらのうち電動以外の機関*3は、気体が急激に膨張するエネルギーをピストン運動に転化して回転を生む。電気は詳しくは分からないが、子供のときにおもちゃの自動車を作るのに使った電気モーターは、電磁石で動いていた記憶がある。目的は「人間の動力を使わずに高速でかつ長距離を移動すること」だ。
話が大きく逸れたが、要点は、コンピュータの原理も自然界の法則を利用しているに過ぎないということである。コンピュータが動く原理は、時計や車とそう変わらないのだ。反対に、時計や車はハードウェア的なプログラミングに近い感覚がある。しかし、コンピュータがこれらと大きく異なる特徴として、利用目的の選択肢が果てしなく多様(とりわけ知的活動において)であり、エンジニアでない人間が使いたい機能を容易に変えることができる、という点にある。ただし、数十年前には、コンピュータもやはり一部のエンジニアにしか扱えないものであったので、正確には、現代のパソコンは、である。
コンピュータの原理を知らない人間がコンピュータが知性を持っているように見えるのは、ハードウェアやソフトウェアが「自活」しているように見えるからではないか。実際はそうではなく、人間の知性がテクノロジーを通して垣間見えているのである。コンピュータは原理に従って動いているに過ぎない。コンピュータが賢く見えるのは、それを作った人たちが賢いのである。
コンピュータそのものの基本能力は計算であり、これだけは優れているかのように見えるが、実際はコンピュータ自身には1+1=2ということすら理解できていない。ピアノの鍵盤を叩いたときに音が出るのと同じ*4で、電気を流した時にそういう答えが出るように人間が作っただけだ。
コンピュータに知性を与えるには、人間が知性そのものを解析し解明して、それをプログラミングしなければ実現できない。そういったアプローチも実際行われているが、まだ発展途上で実用的ではない。
コンピュータに知性が生まれるとすれば、それは人間の「発明」からであろう。

*1:まだ地動説が一般的になるかどうかに関わらず使われていたという点は面白い。

*2:つまりマイコンのようなもの?

*3:原動機というのは知りませんでした。

*4:かなりこじつけだが、調律師がハードウェアのメンテナンサ、ピアニストがソフトウェアエンジニアに相当する?