結城浩
2005年2月21日
『プログラマの数学』の次は『プログラマの国語』を書きます。
…というのは冗談ですけれど、 いつも数学(算数)っぽいクイズばかり出していますので、 たまにはプログラマ向けの国語のクイズを出してみましょう。 ご興味のある方は、feedbackに解答を書き込んでくださるか、 自分のWebサイトに解答を書いて、feedbackからURLを送ってください(手動トラックバック)。 面白い解答がありましたら、 日記などで公開させていただくかもしれませんので、 そのおつもりでどうぞ。
クイズ
「仮想化」とは何ですか。また「抽象化」とは何ですか。 分かりやすく簡潔に、それぞれ説明してください。
注意
「まずは、自分の頭で考える」のが大切なこと・楽しいことなので、
いきなりGoogleで検索したりしないように。(^_^)
多数の解答をいただきましたが、 その中から一部をご紹介いたします。
どれが「正解」と決まっているわけではありません。 ポイントは「普段使っている言葉を、自分なりに説明しようと試みる」ところにあります。 けっこう反響があったので、またそのうち別の「プログラマの国語」の問題も出そうと思います (よい問題を思いついたら、ですが)。
仮想化は、実際には存在しないものをあたかも存在するかのように見せること。 (仮想化したものの例:仮想現実、仮想メモリ、仮想マシン)
抽象化は、具体性を捨て去り本質的な部分だけを抜き出すこと。 (抽象化したものの例:抽象クラス、抽象画)
「仮想化」や「抽象化」した結果として得られるものは、どちらも具体的に存在するとは限らない。 この点で「仮想化」と「抽象化」は似ている。
仮想化:物理的には存在しない空間を想定すること。
抽象化:物体(もの)ではないものに名前をつけること。
「仮想化」「抽象化」→「貸そうか」「チューしようか」
仮想化:現実世界を模倣した、概念世界を作り上げること。
抽象化:ある事象から本論に対し、非本質的な部分を省き、本質的な部分を取り上げること。
"フィギアに恋する"のは恋人の仮想化。
"昔の恋人に似た人に恋する"のは昔の恋人の抽象化。
(結城:この答え、ジョークのように見えますが、ちゃんと本質をとらえていますね)
仮想化:直接的な実装を伴わないインスタンス化の方法。
抽象化:多少の曖昧さを持たせることで逆に解釈を広げる方法。
遅ればせながら「仮想化」と「抽象化」について。
ふと思ったのですけど、“子供が人形を見る”というのは、 もともとは人間を「抽象化」したものである人形を、今度は子供が「仮想的」に人間に見立てているわけですよね。
仮想化は、その何かが実際にあるように見せかけること。
抽象化は、その何かを逐一述べていくのが面倒なので、一つにまとめて、それで全てを指すことにすること。