学ぶべきプログラミング言語?

これを真に受けるような弱気な人種を淘汰しようという陰謀か

ネットサーフィンをしていれば、学ぶべきプログラミング言語なんてわかるだろうと思いつつ、あなたが学ぶべき10の現代実用プログラミング言語という記事を見ての感想

(弱い)サピア=ウォーフ仮説の観点から、多くのプログラミング言語を学ぶことには大きな意義があると私は思う。でもそれは、考え方がぜんぜん違う言語の場合であって、同じような言語をいくつも学ぶのは時間の無駄でしかないでしょう(最初がCなのも罠)

前に書いた私案と比べてみよう(XHTMLが言語じゃないという人は、空いた余裕にPrologでも)

CodeZine 私案
C sed, awkなどシェルスクリプト関連
C++ SQL
Java XHTML
C# Ruby
Visual Basic JavaScript
JavaScript Mathematica
Perl Java
Ruby S
PHP Lisp or Scheme
Python C

最後にNorvig先生の教えを引用

少なくとも半ダースのプログラミング言語を学ぶこと。そのうちの一つはクラス抽象をサポートするもの(例えば Java や C++)、一つは関数抽象をサポートするもの(例えば Lisp や ML)、一つは構文抽象をサポートするもの(例えば Lisp)、一つは宣言的記述をサポートするもの(例えば Prolog や C++ テンプレート)、一つは coroutine をサポートするもの(Icon や Scheme)、そして一つは並列処理をサポートするもの(例えば Sisal)であること(「プログラミングを独習するには10年かかる」より)

Lispは神の言語か

Paradigms of Artificial Intelligence Programming: Case Studies in Common LispLispは神の言語より

神は6日間で仕事を終えなければならなかった。
だからこそLispで書いた。

そんなことはないでしょう

なによりまず、発言にカッコがありません

神は言われた。「光あれ。」こうして、光があった。(創世記1:3)

がんばって探せば、新共同訳に見いだせますが、Lispのカッコではありません

計算機プログラムの構造と解釈

神は言われた。「いや、あなたの妻サラがあなたとの間に男の子を産む。その子をイサク彼は笑うと名付けなさい。わたしは彼と契約を立て、彼の子孫のために永遠の契約とする。(創世記17:19)

「光あれ。」でわかるように、(今日の)プログラミング言語よりは(今日の)自然言語に近いものを使っておられると思います。少なくとも、LispよりはPrologのような宣言的な言語のほうが近いでしょう

「LispはPrologを含んでいる」とLisperは言うかもしれません。たしかに、Lisp(あるいはScheme)をあつかった名著3冊(Paradigms of Artificial Intelligence Programming, On Lisp, 計算機プログラムの構造と解釈)すべてが「LispでPrologを実装するのは簡単」みたいなことを言ってはいます。でも、よく注意して読むと、そう簡単なものでもありません。『On Lisp』から引用しましょう

On Lisp―Advanced Techniques for Common Lisp

LispコンパイラはPrologではなくLispのための最適化を狙っている. Lispコンパイラの行う最適化に誤りはないが,低レベル過ぎる. (On Lisp)

「自分の好きな言語を最上の言語だと考える人の割合がLisperには多い」という不思議な現象について考察すれば、神の御心の一端がわかるかもしれません

妊産婦死亡率、京都が最悪?

朝日の記事から(いまいましいことに、ウェブ上の記事はそのうち消える)

妊娠や分娩(ぶんべん)がもとで妊産婦が死亡する確率に、都道府県によって5倍以上の差があることが、厚生労働省の研究班の調べでわかった。過去10年間の平均をとったところ、最も低い広島が出生10万件あたり1.84人だったのに対し、最も高い京都は10.70人。

これは全数調査だから(数えられていない出産が無いとは言わないけれど、無視してもおこらないよね)、差があると言われればそのとおり。でも、10万人に約10人と10万人に約2人っていうのは、大騒ぎするほどの違いなのかね(もちろん人命は大事)

死亡率っていうのはまあ、死者数/全件数なわけだけど、出産するときに死亡する確率のほうが興味あるよねえ(突き詰めれば「確率とは何か」という話になる)

じゃあ、広島の妊産婦死亡率(Ph)と京都のそれ(Pk)が本当に違うのかっていうと微妙な話になる

この調査は10年間の平均らしいけど、面倒だから、厚生労働省統計表データベースから平成17年の出生数だけを持ってきてみると、広島は24740件(Nh)、京都は21560件(Nk)

件数が多いから死者数(S)は正規分布になると思っていい。つまり

Z = (S – N P) / Sqrt[N P (1 – P)]は平均0、分散1の正規分布になるとしてよい

「Ph = Pk」を仮説とすると、

Z = (Sh – Nh Pk) / Sqrt[Nh Pk (1 – Pk)] = -1.35 < -19.6 = -Z(0.025)

統計でウソをつく法―数式を使わない統計学入門だから、有意水準5%で仮説は棄却されない

結論:広島の妊産婦死亡率は、京都のそれが同程度だと考えて悪くない(主語を変えれば別の話もできるけど、それでも全国平均(6.39)となら同程度と言える)

ゲーデルと20世紀の論理学が完結

ゲーデル生誕100年にあたる昨年に刊行が始まった「ゲーデルと20世紀の論理学」(東京大学出版会)が完結しましたね。私のサイトには「ゲーデル」をキーワードに来られる方も多いので。各巻3990円、高いなあと思いながらも・・・ええ、

  1. ゲーデルの20世紀
  2. 完全性定理とモデル理論
  3. 不完全性定理と算術の体系
  4. 集合論とプラトニズム

413064095X413064096841306409764130640984

UNIXという考え方

The Art of UNIX ProgrammingEric S.RaymondによるThe Art of UNIX Programmingの翻訳が発売されて、なかなか好評なようです(たとえば、404 Blog Not Foundの書評

「The Art of」を名乗る性質のものなのかという疑問を別にすれば、この本はすばらしい本だと私も思う

でも、この本がすばらしいのは、UNIXに親しんでいる人にとってであって、そうでない人には、分厚くて高い(500ページ超、6000円超)せいで、あまりうまくアピールできないんじゃないかと思う(英語でいいならウェブで読めるから、値段のことは関係なくなるかも)。UNIXを使ってない人の「UNIXって何がいいの?」という疑問を解決する道具としては重厚すぎる

UNIXという考え方―その設計思想と哲学

UNIXのよさを伝える書籍といえば、『UNIXという考え方―その設計思想と哲学』が一押し。これなら150ページ・1680円と手頃だから、UNIXのありがたみがわかっていない人でも手に取りやすいと思う

『The Art of UNIX Programming』と『UNIXという考え方』の違いは、UNIX文化における2つの大きな考え方の例示になっているような気がして面白い。ちょうど、Emacs対viという記事があったが、これと似ている。一口にUNIXといっても、そう単純ではない

重厚で何でも書いてありそうな『The Art of UNIX Programming』がEmacsなら、コンパクトだが役割はちゃんと果たしている『UNIXという考え方』はviだ(とはいえ、個人的にはviのように扱いにくくはない)

これは、どちらがいいかという話でもなくて、私自身、エディタは何でもできるEmacsが好きだけど、思想本はコンパクトなほうがいい。まあ、一貫しないことを弁解する必要もないだろうが

UNIXがいいことはわかっているけど、もうちょっとちゃんと知りたいという人は『The Art of UNIX Programming』を読んでいいけれど、「UNIXって何がいいの?」と思いつつもこの厚さと高さは勘弁して欲しいという人には、『UNIXという考え方』が断然お勧め

追記:Joel on Softwareにこんな紹介がありました

1つの文化史か知らないプログラマがあまりに多い。それはミネソタのセントポールから出たことのない典型的なアメリカ人の子供が、個別の文化的価値と人類共通の中心的価値の違いが分からないのに似ている。私は、Windowsが異教で愚かだと考え、Windowsプログラミングを軽蔑しているUnixプログラマにずいぶんと出会ってきた。レイモンドは、それが何に由来するのか考えもせずに、他の文化の価値をさげすむという罠に、あまりにもしょっちゅうはまっている。これほど偏狭な人は、総じてソリューション指向で非イデオロギー的なWindowsプログラマには滅多にいないだろう。(中略)この弱者の立場への高慢さが、『The Art of Unix Programming』の最大の欠陥だ。とはいえ、そんなに大きな欠陥というわけではない。(p.155)