<?xml version="1.0" encoding="utf-8" ?>
<rss version='2.0' xmlns:atom='http://www.w3.org/2005/Atom'><channel><atom:link href='http://oldtype.sumibi.org/get-rss/perl.TMTOWTDIの謎を探る' rel='self' type='application/rss+xml'></atom:link
><title>perl.TMTOWTDIの謎を探る::TMTOWTDIの謎を探る(調査報告：単純さと複雑さの関係とは？)</title
><link>http://oldtype.sumibi.org/show-page/perl.TMTOWTDIの謎を探る</link
><description>TMTOWTDIの謎を探る(調査報告：単純さと複雑さの関係とは？)</description
><lastBuildDate>17 Jul 2008 14:54:57 +0000</lastBuildDate
><docs>http://blogs.law.harvard.edu/tech/rss</docs
><generator>OldType version 0.3.7</generator
><item><title>perl.TMTOWTDIの謎を探る::TMTOWTDIの謎を探る(調査報告：単純さと複雑さの関係とは？)</title
><description>&lt;pre&gt;TMTOWTDIの謎を探る(調査報告：単純さと複雑さの関係とは？)
 
 この資料は、オリジナルは2002/05/10にkiyokaが書いた文章で、OldTypeに移してリンク切れ等をメンテナンスしたものです。
 オリジナル:TMTOWTDIの謎を探る(調査報告：単純さと複雑さの関係とは？)
 kiyokaはこの少し後にPerlに影響を受けた処理系Gaucheと出会い、Gaucheをメインに使っています。
 
&lt;h2&gt;イントロダクション : 調べようと思ったきっかけ
&lt;/h2&gt;-  Perlって他のコンピュータ言語よりもなんか複雑じゃない？
個人的にはC言語よりもスラスラ書けるようになるまでの時間が長かったように思う。
- それは、Perlの言語設計の哲学と関係があるんじゃないか？
そういえば TMTOWTDIと関係がありそうだ。調べるてみるとやっぱり関係ありそうだということになった。
- TMTOWTDIというPerlのスローガンの本質が世間で理解されているんだろうか？
(少なくとも僕は、調べるまで本質を知らなかった。)
- 調べて、自分なりの結果を発表してみよう。
違うと思った方は、つっこみお願いします。
 
&lt;h2&gt;結論 : スローガンTMTOWTDIの本質って？
&lt;/h2&gt;皆さん、TMTOWTDIがThere&#39;s more than one way to do itの略だということは御存知だと思います。「やり方はひとつではない」というスローガンです。
Perlの世界ではcoolとされている哲学をスローガンとして掲げたものです。
 
&lt;h2&gt;シンプルなほうが良いんじゃないの？
&lt;/h2&gt;&lt;h3&gt;Q.でもなぜ？やりかたが少ない方がシンプルで良いんじゃないの？
&lt;/h3&gt;- A.それが違うようなのです。
Perlの設計者のLarry Wallは言語はいろんな対象をシンプルに記述するためには言語をある程度の複雑を持っている必要があると信じています。
次のような文章を見つけました(オープンソースソフトウェアという書籍からの引用です「努力、忍耐、謙遜」の章)
 「我々がよく知っていることだが、現実とは乱雑な状態を指す。実際、人類の
 言語が複雑なのは、それが現実を扱わざるを得ないためである。」
(略)
 「そしてPerlは、それを可能にさせてくれる新しいツールなのである。私が英
 語を使って現実を単純化できるのは、英語が乱雑な言語だからである。英語は
 乱雑だからこそ、我われが現実と呼ぶ、これまた複雑な世界をうまく描写する
 ことができる。同じように、Perlも(できるだけ精密なやり方で) 乱雑になる
 ように設計されている。」
なるほど、スローガンTMTOWTDIの本質はここにあったんですね。
&lt;h2&gt;解説 : 僕なりにかみくだいてみました
&lt;/h2&gt;「さっきの例え話はわかったけど、もうちょっと説明してよ。」という方のために次のようなグラフを作ってみました。
&lt;h3&gt;得意分野を扱った場合
&lt;/h3&gt;まず、それぞれの言語が得意とする分野の問題を記述した場合。これは、言語の設計者が意図した使い方の範囲に収まった問題とも言えるよね？
[img] 
 
この場合、どの言語もたいして複雑にならないということは分かるよね？
だって、それぞれの言語は最初は、ある特定の問題を記述するために設計したはずだから。
 
&lt;h3&gt;現実を扱った場合
&lt;/h3&gt;それぞれの言語が得意かどうかにかかわらず、その言語でいろんな問題を記述しなければならない場合。つまり現実に対処しなければならない場合ね。
これは、言語の設計者が想定していた範囲を大きく超える問題を扱った場合とも言えるね？
例えば、tclやBASICで文字列のパターンマッチングやリスト処理やデータフォーマット変換なんかをやろうと思ったらキツいのは想像できるよね？
でもそれをやらないといけない状況が発生したと仮定すると？
[img] 
 
なんとなく理解していただけましたか？
Perlのコードを日々書いている方は、Perlがどんな問題を扱うにしてもそこそこの許容範囲のコードで解決できることは経験的に知っているはずです。それって cool ですよね？
また、母国語(日本語) ならもっと、扱える範囲が広いことも知っているはずです。身近な例で言うとマイクロソフトなんかは強力な「それは仕様です」というコードを持っていますからね。これは Perlでは書けないですが、母国語ならシンプルに書け、扱う範囲の大きさもかなり広いです。(極端な例かもしれませんが...)
母国語は真の言語だけれどもPerlもなかなか良い線いっているんじゃないかな？
 
&lt;h2&gt;まとめ : TMTOWTDIはカッコいい
&lt;/h2&gt;TMOTOWTDIのスローガンはなんとなくカッコいいと思っていたけど、これでカッコよさの意味がわかってきました。
Rubyにもこの哲学は引きつがれているので、Rubyも同じ考えかたが通用するのはうれしいですね。
TMOTOWTDIはカッコいいんです。自信を持ってカッコ良さを自慢しましょう。
 
&lt;h2&gt;参考資料
&lt;/h2&gt;&lt;h3&gt;書籍等の資料
&lt;/h3&gt;- 書籍名: Perlプログラミング第3刷
 著者:Larry Wall and Randal L. Schwartz
 訳者:近藤嘉雪
-- 「はじめに」iiiから引用
 「そして、ある操作を行なう方法がただ１つだけ存在すべきだと信じるミニマ
 リストにとっては、Perlはまるで悪夢のように冗長で派生的であると感じられ
 るかもしれない。ともかく、UNIXのミニマリズム的なツールボックス哲学の枠
 から大きく踏み出すことによって、Perlは小規模から中規模の仕事に最適なツー
 ルとなり、再びツールボックスにしっくると収まるようになった。Perlは、新
 しいツールを作り出す工具職人の作業台であるということができるだろう。」
(略)
 多くの面で単純である反面、Perlが奥の深い言語であるのもまた事実であり、
 学ぶべきことは山ほどある。Perlの全能力を自分のものにするためにはかなり
 の時間がかかる。」
-- P12から引用
 「いずれにせよ、あなたの好きなように書けばよい。もしあなたがＣ言語に通
 じていて、その上でPerlを学ぼうというのなら、あなたの書き方はシェルスク
 リプトやBASICやRPG IIから入った人とは違っていることだろう。それでいい
 のだ --- 他人があなたと同じ書き方をすると期待してはいけない。Perlには
 *正しい*書き方というものは存在しない。Perlは、多様性に関してきわめて寛
 容な言語である。(Perlのスローガンを思い出そう) --- Perl の世界では、ま
 あまあ読めて、ボスにクビにされないうちに仕事を片づけられるものが*正し
 い*プログラムなのである。」
 
&lt;h3&gt;ネット上の資料
&lt;/h3&gt;- 以下ラリー・ウォールの章「努力、忍耐、謙遜」からの引用
 我々がよく知っていることだが、現実とは乱雑な状態を指す。実際、人類の言
 語が複雑なのは、それが現実を扱わざるを得ないためである。我々はみな、な
 んとかして現実に対処しなければならない。そこで、物事を単純化して考える
 のだが、単純化しすぎることがよくある。コピュータ言語の設計者の多くは、
 言語を単純化しすぎて、この世の複雑なところの面倒をすべてプログラマに押
 し付けている。実は、あなたの脳はPerlをプログラミングするようにできてい
 るのである。私はたったいま英語を使って現実を単純化しようとしているが、
 人は誰でも複雑なことを単純にしたいという強い要求を持っている。そして
 Perlは、それを可能にさせてくれる新しいツールなのである。私が英語を使っ
 て現実を単純化できるのは、英語が乱雑な言語だからである。英語は乱雑だか
 らこそ、我われが現実と呼ぶ、これまた複雑な世界をうまく描写することがで
 きる。同じように、Perlも(できるだけ精密なやり方で)乱雑になるように設計
 されている。 Perlのカルチャーでは、ほとんど何も禁止されていない。この
 世はすでに禁止事項であるれている。
 
- Rubyのまつもとさんのセッションの記録より
(本資料はリンク切れで探しきれませんでした。Wikipediaには、下記のような文章はもうありません。まつもとさんの昔の定義だと思われます)
Ruby哲学
## UNIX主義
## 簡単なことは簡単に、難しいことは可能に
## やり方はいろいろある
 
- 真・コンピュータ用語辞典
以下引用
 てぃむとぅでぃTMTOWTDI
 【法則・真理】There&#39;s More Than One Way To Do It.
  - 「それのやり方は色々ある」と、Perlで使われるスローガン。
  - 多くの場合、この法則を当てはめる事が出来る。が、メーリングリストな
    どで質問はしたものの、「自分の『「期待する回答』が一つだけ、ポコっ
    と出てくる事」を期待して待っている人間にとっては酷な事。
  - つまり、「複数の選択肢からの制約・状態に応じた最善策の判断」を否定
    し、新たな価値観を取り入れる余地も気も無く、伝承に基づいた価値観を
    唯一の拠り所とする事で、自己の存在を保っている人間には、永遠に理解
    できないものであろうもの。
 
- 英語がわかるスクリプト言語『レボル』 | WIRED VISION
以下、上記URLから引用
 Perlの作者、ラリー・ウォール氏は、レボルを、役に立つことを実行する「ま
 た他のやり方」だとみている。「私は、選択肢が多いことはいいことだと言っ
 ている。Perlのスローガンは、それをやるには他のやり方もある、というもの
 だ。レボルが役立つものにはレボルで、Perlが役立つものにはPerl でという
 具合に使われると素晴らしい。どうすれば両者が連係できるか、調べてみたい」
 と言う。
 
- Natural Language Principles in Perl (ja)
Perlの設計哲学が書かれています。さすが言語学者の視点です。
 
&lt;h2&gt;コメントお願いします。
&lt;/h2&gt;[comment]
 
&lt;/pre&gt;</description
><link>http://oldtype.sumibi.org/show-page/perl.TMTOWTDI%e3%81%ae%e8%ac%8e%e3%82%92%e6%8e%a2%e3%82%8b#130</link
><guid>http://oldtype.sumibi.org/show-page/perl.TMTOWTDI%e3%81%ae%e8%ac%8e%e3%82%92%e6%8e%a2%e3%82%8b#130</guid
><pubDate>17 Jul 2008 14:59:57 +0000</pubDate
><author>kiyoka</author
></item
></channel
></rss
>