6÷2(1+2)=?のセマンティクス
最初のお題が途中ですが、ちょっと気になる例に遭遇したので、横道に逸れます。
Facebookでもコメントしましたが、若干加筆してコラムにも公開します。他にも同種の議論をしているIT関係者は結構いる気もしますが、私のIT教育観に関わるのであえて書いておきます。
皆さんは、ネットで話題の次の問題についてどう思われますか?
「6÷2(1+2)=?」
出題者によれば「この問題を大勢の人が「1」と答えているが、それは不正解で「9」が正解である」というのです。これを受けて、一部のコミュニティでは答えは「1」か「9」かという議論で盛り上がっているようです。
http://getnews.jp/archives/114382
http://grapee.jp/7355
要件定義の認識ズレですよね
要するに乗算記号を省略したときの計算の優先順位の決め方で、二通りの計算結果が出るのですね。それはそれで面白いのですが、この問題からするべき議論は他にもあると思っています。
この例は、一言でいえば、数式の表現の定義が曖昧なために解釈が複数出てしまうという話です。要件定義時によくある認識ズレの一例ですね。自分が正しいと教えてもらったことが、誰にとっても正しいと無邪気に信じてはだめだという教訓でもあります。
人によって当たり前が違うということ。それぞれが持っているコンテキストで、正しいか間違いかが変わること。このことは要件を満たすプログラムを作ることを通じて、IT技術者はごく初期の段階で学びます。「技術者以外の多くの人も学んでいれば、要件定義でのトラブルは相当減るだろうに」と思っています。
シンタックス・エラーにすべきでは?
この例について、私の意見は、「シンタックス・エラーではじくべきじゃないの?」です。そう考える理由は、意図して省略したのか、演算記号を書き忘れたのか区別がつかないからです。多くの人にとって想定外の計算を進めるので、結果が当てにならなくなります。こんな計算式で、高層ビルの構造計算とかされた日には恐ろしくて寝られなくなってしまいます。
そこで、値を計算するというセマンティクス(意味)レベルの処理の前に、シンタックス(文法)レベルで確認しておくというのが、IT分野を切り拓いた先人の知恵なわけです。古くはFORTRANの暗黙型宣言、比較的最近だとHTMLの終了タグの省略、など言語処理系で勝手に省略した部分を埋めてしまうと、見つけにくいバグを作りがちだよという議論にも通じます。
IT技術者が受け継いでいるもの
大げさな言い方をすれば、シンタックスとセマンティクスの概念をはじめ、コンピュータ技術の探求・深耕を通じて人類にもたらされた有益な知見は多数あります。モデルとビューなんかもそうです。数学的な厳密さを、普通の人が行う日常の仕事に持ち込む局面は、ソフトウェア開発以外にはそう多くありません。
ITの教育について、工学技術として教えるだけでなく、物事の捉え方のリテラシーを高めるという観点から議論してもよいと思うのですが、いかがでしょうか。
ということで、あっという間に時間切れになりましたので、次回こそ最初のお題を終わらせます。