404 motivation not found | t_ishidaのブログ

11月/07

1

プログラムとは何か?

あなたは魔法の箱を手に入れた
その魔法の箱は、呪文さえ唱えれば、
呪文の通りに全てを叶えてくれる。

ただし、あなたは気を付けなければならない。
何故ならば、その魔法の箱は唱えた通りに
すべてを叶えてくれるのだ。
例え、それがあなたの意図した通りではないにしてもだ。

以前、日経ソフトウェアだったと思うが、

こんな趣旨の文章が載ってたのを思い出した。

これはなかなか良い例えだと思う。

Q.プログラムを勉強するにはどうしたら良いですか?

A.面倒くさがりになること

魔女が魔法を使って召使いに仕事をやらせて、自分が楽している姿を想像して欲しい。そう、魔法は楽をするためにある。

プログラムと言うのは魔法の箱に何かを叶えて欲しくて唱えるための呪文だ。叶えて欲しい事が無ければ呪文も必要無い。

だから、もし君がプログラムを勉強したいと思うならば、もっと面倒くさがりになって以下の事を考え続ける必要がある。

  • どうしたら楽になれるのか?
  • 何を魔法の箱にやらせれば良いか?

そうでなければ、君はプログラムを書く必要が無いからだ。

Perl言語の開発者であるラリー・ウォール氏の言を引用する。

「プログラマの三大美徳は怠惰・短気・傲慢である。」

Q.プログラムを書くにはどうしたら良いですか?

A.魔法の箱の仕組みを、まず考える必要がある。

魔法の箱が君の願いを聞き届ける仕組みを考えると良い。

  1. 呪文を聞き届ける
  2. 魔法を発動する
  3. 叶えた結果を君に届ける。

これが魔法の箱ができる事の全てだ。魔法の箱の世界では、上から「入力、演算、出力」と呼んでいる。これについて君の視点に立って、具体例と共に説明しよう。

君の手元に、以下のようなしょーもないメモを記述したテキストファイルが有ったとする。実際には1万行くらい有ると思って欲しい。

※テキストファイルの名前はx.datとする。

2007/11/01 0909XXX0000    打ち間違い
2007/11/01 09093000000    B子の携帯
2007/11/01 090-9002-0001  C子の携帯
2007/11/01 090-9003-000X  うがー
2007/11/01 foo-bar-baz    なばにび
2007/11/01 foobarbaz      xyzzy
2007/11/01 ほげほげ       今日の夜、酒を飲む
2007/11/01 ふがふが       牛乳買って帰らないと

このメモの中から携帯電話の番号を抽出して、その人に連絡する必要があるとする。手でイチイチ抜き出していてはあまりに面倒くさい。

だから、君は呪文を唱える事にした。

呪文を唱える(入力する)

具体的には、以下のようにプログラムを記述すること。
for ( grep /090-?\d{4}-?\d{4}/, <> ) {
if ( $_ =~/-/ ){
print "携帯電話と思うよ    : $_";
} else {
print "携帯電話っぽいけど?: $_";
}
}
##君はここで、このプログラムを理解する必要が無い。
##もし君がいっぱいタイプするのすら面倒くさいと言う人ならば、
##一行で以下のように書いても良い。(紙面の都合上適宜改行)
##print /-/ ? 
##  "携帯電話と思うよ    : $_" : 
##  "携帯電話っぽいけど?: $_" 
##    for grep /090-?\d{4}-?\d{4}/, <>;

※そのプログラムをx.plと名前を付ける。

魔法を発動する(演算させる)

コマンドを打って実行命令を出す。

perl x.pl x.dat

すると、魔法の箱はプログラムを理解して魔法を発動する。

叶えた結果が君に届けられる。(出力させる)

具体的には、以下のように表示される。

携帯電話っぽいけど? : 2007/11/01 09093000000    B子の携帯
携帯電話と思うよ     : 2007/11/01 090-9002-0001  C子の携帯

こうして、君は魔法を使うことで時間を大いに節約し、

手で抜き出すと言う愚行から免れる事が出来た。

Share and Enjoy:
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Tumblr
  • email
  • Facebook
  • FriendFeed

RSS Feed

コメントはまだありません。

Leave a comment!

<< 奥多摩ツーリング

目次 >>

Find it!

Theme Design by devolux.org

Tag Cloud