今年三冊目。
来週4月16日発売です。
専門誌Software Designの連載をまとめたものですが、これを機に専門外の方に読まれるようになれば著者冥利につきます。
はじめに
コードな世界へ、ようこそ!
コード?コードって何でしょう?
元をたどると、この言葉はラテン語 codex に行き着きます。
ORIGIN Middle English: via Old French from Latin codex, codic- (see codex). The term originally denoted a systematic collection of statutes made by one of the later Roman emperors, particularly that of Justinian… -- Oxford American Dictionary
ここに出てくるJustinianとはユスティニアヌス1世のこと。「ローマ法大全」(Corpus Iuris Civilis)を編纂させた人。codexとは、元々はこのローマ法大全のことを指し示す言葉だったのです。固有名詞から生じた一般名詞。
このことはBibleという言葉の対局にあります。こちらは元々は「本」という一般名詞でした。そのことは bibliomania (本の虫--どこの私だ?)、 bibliography (本の目録)といった英単語からも伺うことができます。Bibleとは"The Book"という意味だったのですね。一般名詞から生じた固有名詞。
コードに話を戻しましょう。本来のコードであったローマ法に関して、塩野七生はこう述べています。
人間の行動原則の正し手を、 宗教に求めたユダヤ人。 哲学に求めたギリシア人。 法律に求めたローマ人。(「ローマ人の物語」他多数)
この意味において、日本を含め、およそ法治国家を標榜する国々の市民はローマ人の末裔ということになります。
ところが、このローマ人、法を作成し、改訂し、施行することには熱心でも、編纂することには少しも熱心ではなかったのです。前述のユスティニアヌス1世の527年から565年。ローマの全盛期はとっくに過ぎて、東西に分裂した後だったのです。
おそらく、それに熱心に取り組んでいる人にとって、それはあまりに当然で必然なことで、わざわざ「外から」編纂するという気持ちにはなりにくかったのでしょう。
ローマ人にとってそうであったように、コードという言葉は現代人にとってそういう存在になりつつあります。ただし現代人にあってローマ人になかったものが一つあります。
それが、電脳(computer)。これはローマ人に奴隷がいて現代人にはいないこと(になっている)ことと対をなしています。ローマ法はあくまでローマ市民に適用されるものであって非市民たる奴隷や異邦人(barbarian)に適用されるものではなかったのですが、現代人は、その電脳で実行されるプログラムのことも、コードと呼んでいます。
本書の「コード」は、その双方を指しています。電脳に適用するコードと、人脳に適用するコード、その双方を。いや、もしかしてもう一つあるかも知れません。この世界自体に適用されている、コード。
最後のそれは、「法則」とも呼ばれます。残念ながらこれは我々が書き下したものではなく、この世界自身に書かれているものです。それを読み解く人が、科学者。そして人電両脳のコードを読み書きする人が、技術者。これは、科学者と技術者の違いでもあります。扱うコードがリードオンリなのかライタブルなのか。
本書の想定読者は、一応後者たる技術者ということになっています。しかしこの両者が深く繋がっていることを、私は「『中卒』でもわかる科学入門」に書いています。
およそどんな人でも、幸せな瞬間というのは次の二つしかないのかも知れません。
- できなかったことができるようになった瞬間
- わからなかったことがわかった瞬間
コードは読み解くべきものでもあり、書き下されるべきものでもある。そしてそれが出来た時、よろこびが生まれる。
それが私にとってのコードであり、本書で扱うコードの範囲(scope)です。
では改めて。コードな世界へ、ようこそ!
よろしければ、ご一読を。
Dan the Author
0, function(x){ return x };が出力されるんですが。。。
var zero = function(f){
return function(x){
return x
};
};
var one = function(f){
return function(f) {
return function(x){
return x
};
};
};
alert(zero(function(n){return n+1})(0));
alert(one(function(n){return n+1})(0));