http://q.hatena.ne.jp/1221708568の
「Q1ってそんなに難しいですか?簡単な問題のつもりだったんだけど。」
といわれていますが、皆さんはどう思われますか?
以下を読んで回答してみてください。
Q01まずは「プログラミングに詳しい」かどうか判定するための質問です。正しいものを選んでください。これに答えられない方は解答をご遠慮ください。(択一)
Schemeは1.5からオートボクシングの機能をサポートした
Schemeはインデントによってブロックを表現する
Schemeは多くのレンタルサーバに標準でインストールされている
Schemeでは関数がファーストクラスのオブジェクトである
Schemeの文の終わりはセミコロンである
Schemeは純粋関数型言語であり、副作用はモナドでくるむ必要がある
Schemeは型に厳格なため整数の加算と浮動小数点数の加算の演算子が異なる
Schemeは関数の呼び出し時に括弧を省略することが出来る
Schemeのマクロ定義には#defineを使う
Schemeの言語仕様はキューマシンとしての実装に適しているため並列化が容易である
Schemeのブロックはbeginで始まりend.で終わる
SchemeのコンパイラとしてはGHCが有名である
コメント(4件)
Schema という言語が出てくる時点で、いかにも「学者さん」という感じがしてしまうんだけど、学問としてのプログラミング言語と、商売道具としてのプログラミング言語がどれだけ違っているか、というのを如実に表しているような気がするなぁ。
そもそも Schema と聞いて、そんなプログラミング言語がある、ということを知っている人が、学者、研究者、学生を除くと、何パーセントぐらいなんだろう。
では、私がJULYさん15年間以上のキャリアで初めて聞く、「Schemeで商用プログラムを書いて喰っている人」になりますね。以後お見知りおきを。ただScheme/Lispプログラマは絶対数が少ないだけじゃなく、一品もののカスタム生産で表に出ない仕事が多いので、なおさら目に触れない、ということはあると思います。
JULYさんが商売道具としてどのプログラミング言語を使っているかはわかりませんが、「それらのプログラミング言語を作った人たち」のことをご存知でしょうか。かなりの確率で、作った人たちはScheme(に限らず、「学術的なプログラミング言語」)について広い知識を持っていると思いますよ。
もちろん言語を使うだけならそういった知識は必要ないです。そういった知識を必要としなくても使える言語を作る、というのがある意味作る人達がやっていることですから。ただ、言語を教える立場なら、「なぜその言語はそういう設計になっているのか」が語れないとまずいですし、それを語るにはある程度「作った人達」と共通の基礎を持っている必要がありますね。
一応、20 年ほど前に、情報工学科なるものを卒業した身なので、「学術的なプログラミング言語」の世界も、多少なりとも知っているつもりではいます。
で、元の質問が「プログラミングの本質」を教える上で、どんな言語が適当だと思うか、という問の前段として、Scheme を取り上げて、その言語の特性を問う、というのが、サラリーマンでプログラムを書く人から見ると、とてつもなく「縁遠い」ものじゃないかなぁ、と。
個人的には「プログラミングの本質」といった時に、今あるコンピュータアーキテクチャ上で、自分の書いたプログラムがどのように動くのか(動かされるのか)、を理解するためには、アセンブラと C 辺りがよいかなぁ、と思うのですが、学術的な意味での「プログラミングとは」あるいは「そもそも、プログラミング言語とは」という話だと、むしろ、同じ目的のプログラムをいろんな言語で書かせるのが良いのでは、と思っています。そうすれば、いろんなプログラミング言語が存在する理由も実感できる。
数年前に、「なぜプログラムは動くのか」という書籍が売れたことがありましたが、この書籍を見た瞬間、「そうだよなぁ、今の人は、自分の書いたプログラムが計算機上でどんなことになっているか、実感つかめないだろうなぁ」と思ったことがあります。今は、それすらよく分からなくても、プログラムを書いて生計を立てることが可能だったりします。
今回の質問に対して「難しい」とか「知らない」と思った人たちの多くは、学術的な側面を知らない人たちだろうし、逆に、「こんなことも知らないのか」と思った人たちは、プログラミング言語を道具として使っている現場の感覚がわからないのかなぁ、と。
単に「こんなの知るかぁ!」「こんなことも知らんのかぁ!」じゃなくて、互いの世界の違いを認識するきっかけになればよいなぁ、と、かつて学術的な世界で落ちこぼれたサラリーマンは思うのでした。
>逆に、「こんなことも知らないのか」と思った人たちは、プログラミング言語を道具として使っている現場の感覚が
>わからないのかなぁ、と。
>
>単に「こんなの知るかぁ!」「こんなことも知らんのかぁ!」じゃなくて、互いの世界の違いを認識するきっかけに
>なればよいなぁ、と
完全に同意です。