プログラミング未経験者は,全自動プログラミングの夢を見るか.

http://itpro.nikkeibp.co.jp/article/OPINION/20060324/233229/

根元的な問いも出た。「なんでプログラミングしないとソフトウエアができないの?。もっと簡単に作れたほうがいいのに」。もっともである。もし,人間が普通の言葉で指示すると,その通りにコンピュータがやってくれるようになれば,プログラミングは不要になる。

コメント欄より.

「将来プログラミングが不要になる」かどうかについては、アイザック・アシモフ作の「アイ・ロボット」や、アーサー・C・クラーク作「2001年宇宙の旅」の、未来のコンピュータの概念を記述したあたりをお読みになると、まつもとゆきひろ氏がおっしゃった「遠い将来」と言った事の答えが書かれていると思いますが、いかがでしょうか?。

これは同感.

それに加えて,やはりホーガンの「未来の二つの顔 (創元SF文庫)」は外して欲しくないなあ.
参考:「Google Adsense星新一http://d.hatena.ne.jp/katotaku/20060313/1142223000

未来の二つの顔 (創元SF文庫)

未来の二つの顔 (創元SF文庫)

未来の二つの顔 (講談社漫画文庫)

未来の二つの顔 (講談社漫画文庫)

HAL(ハル)伝説―2001年コンピュータの夢と現実

HAL(ハル)伝説―2001年コンピュータの夢と現実

新版 電脳都市

新版 電脳都市

とにかく無知な人間は少しは勉強してからものをいうようにしてもらいたい.


それにしても,コメント欄を見てると脱力する.

日本語を英語に翻訳するのを自動的に行ってくれるように、いつかはコンピュータの理解できる言語に自動的に翻訳してくれる何かができるのかもしれません。プログラミングが特別扱いを受けているような感じですが、コンピュータと会話を行う、単なる「言葉」だと思います。外国語を学ぶのと同じじゃないかと思います。

全然分かってない.

まず第一に,機械翻訳は未だ実用化されていない.翻訳の質が悪いので結局人間が手作業ですべて確認しなおさないと危なくて使えない.これでは実用性は皆無だ.*1

またプログラミングの難しさのほとんどは,言語の違いではなく人間とコンピューターとの思考形態 −もしコンピューターのそれを思考と呼ぶことができるのであれば− の違いによるものである.

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

たとえば人間相手の場合は指示を多少間違えても,簡単な場合は間違いを即時修正する.人間であれば,文章に多少の誤字脱字や主語と述語の非対応,時制の不一致等があっても,ほとんど問題なく指示を実行できる.間違いが修正できない場合でも「問題が適切でないようだが,その指示の通り実行して良いか?」のような確認を行い,それにより多くのミスを未然に防ぐことができる.むしろそのような間違った指示を指示の通りに的確で厳密に処理した方が,「融通の利かない奴」として評価が下がることさえある.

このような曖昧性を判断できるのも,人間は多少の差はあれ多くの「常識」を共有し,判断の拠り所としていることによる.たとえばみずほ証券の誤発注の一件でも「発行済み株式より遙かに多くの売り注文を出すはずがない」という常識があれば,防げたかもしれない.人間相手の指示には多くの曖昧さや些細なミスが含まれており,しかもその問題を多くの人間が自覚していない.この曖昧さをそのままコンピューターに対する指示やプログラミングに含めてしまうと,致命的なバグになる可能性が高いのだ.よってプログラマーは常にそのような曖昧性を認識し,曖昧さを排除してコンピューターにも分かる形の指示に置き換えなければならない.*3

もし遠い将来において自然言語をほぼ100%理解できる人工知能が生まれたとしても,それとの対話に専門的技能が必要となるのはほぼ確実だろう.この辺りは「未来の二つの顔」や故アシモフのロボット物*4あたりでも参考にしてもらいたい.*5

*1:「一瞬たりとも気を抜けず,操縦桿から手を離すこともできない自動操縦装置」を想像してもらえばいい.しばらく手を離してコーヒーを飲んだり食事をしたりできないと,自動操縦装置とは言えない.

*2:そういう意味ではプログラマーの素質の一つは「相手の立場に立って考えることができるかどうか」と言える.つまり「コンピューターの気持ち」になって,コンピューターの視点から効率の良いような指示を出せることができるか否かだ.「コンピューターの気持ち」が理解できない人間が,良いプログラマーになるのは難しいだろう.

*3:たしか「カーマーカー特許とソフトウェア―数学は特許になるか (中公新書)」だったと思うが,「法律家とソフトウエア技術者では考え方に共通する部分が多い」というような記述があった.これは,このいずれもが上述したような「人間が日常的に慣れ親しんでいる曖昧さ」を廃し,厳密で定量的な処理への置き換えが求められる職種だからではないだろうか.
さらに余談だが,「仕様」と「実装」との関係は,法律の「条文」と「判例」の関係に近いと言える.仕様は少しでも多くの実装が実現可能なように包括的に記述される.故に抽象的で全体像を把握するのが難しい.また良い仕様というのは実現可能でなければならないし,実装の効率のことまで考えて記述されなければならなない.仕様は実装から独立したものであるが,同時に仕様を考慮し,実装するのに最適化されていなければならない.仕様は実装ではないが,仕様を真に理解するには実装を熟知する必要がある.仕様の難しさはこのような仕様の持つ性質ゆえのものであり,図で書かれているか否かと言う問題ではない.よって仕様を図示して「見える化したから理解しやすい」という主張は,法律の条文を図示して「見える化したから理解しやすい」というのと同じくらい馬鹿げている.

*4:「われはロボット」「ロボットの時代」「アンドリューNDR114」「鋼鉄都市」「裸の太陽」「夜明けのロボット」「ロボットと帝国」など.ただし映画版は原作無視のB級SFなので注意.

*5:ちなみにタイトルの元ネタはもちろんアレ....よく考えると,こういうことを知らない人の大半はディックも電気羊も知らないのね.
http://www.geocities.jp/hcvalis/data/what.html