┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
┃ ■┃
●┃● ● オ ブ ジ ェ ク ト 倶 楽 部 ■ ┃
┃ ■ ┃
┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
No.172 2007/01/24
■ I N D E X
┃
┣【Topics】デブサミ2007 開催迫る!
┣【プログラミング】ゆるーいHaskell[7]
┣【設計】ソフトウェアのお言葉[15]
┗【アンケート】気になるシステム業界 ホントのところ
〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
〇 デブサミ2007 開催迫る!
〇 〇━━━━━━━━━━━━━ ━━・
技術者コミュニティとの連携から生まれた総合ITコンファレンス
◇◆ Developers Summit 2007 (デブサミ2007)◆◇
◆2月14日(水)・15日(木)開催!◆会場:目黒雅叙園 ◆主催:翔泳社
▼無料の70セッションは完全事前登録制!お申込はこちら▼
http://www.seshop.com/event/dev/2007/
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
オブジェクト倶楽部は、デブサミ2007を応援します。
久しくオブジェクト指向から遠ざかっていたオブジェクト倶楽部が、なんとオ
ブジェクト指向について語るという、コミュニティライブの「オブジェクト倶
楽部流オブジェクト指向入門」、5分間に全てを凝縮するライトニングトークス
職人の角谷信太郎の話が、いつもの10倍の50分も聴ける「実践『From Java to
Ruby』〜 血があつい鉄道ならば/走りぬけてゆく汽車はいつかは心臓を通るだ
ろう 〜」どちらも楽しめます。お時間を作って、ぜひ会いに来てくださいね。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【プログラミング】ゆるーいHaskell[7]
西川です。前回からだいぶ時間が経ってしまいましたが、今回はカリー化のお
話をします。
「カリー化」の「カリー」とはプログラミング言語Haskellの由来にもなってい
る数論理学者Haskell.B.Curryさんの「Curry」に因んでいます。自分の名前が
そんな風に使われるなんてどんな気持ちなんでしょう。
カリー化とはすごく大雑把に「2引数の関数を1引数の関数に変換する機能」と
考えることができます。中学生(高校生でしたっけ?)の数学で説明してみます。
f(x,y) = 2 x + 3 y
#x=1を代入すると
f(1,y) = 2 + 3 y
#f(1,y)をg(y)とすると
g(x) = 2 + 3 xでg(x)も関数ですよね。これがカリー化です。かえって解りづ
らかったでしょうか?さて、論より証拠というわけで、ghciを起動してください。
$ ghci
Prelude> let f x y = 2 * x + 3 * y
Prelude> let g = f 1
Prelude> f 1 2
8
Prelude> g 2
8
先ほど書いた中学生の数学はHaskellにするとこんな感じです。ちなみにHaskell
では関数はデフォルトでカリー化されますので、
f 1 2
は
((f 1) 2)
#関数fに1が束縛されカリー化した関数にさらに2が束縛される
と同じことです。引数を5つ持つ関数hogeならば、
(((((hoge 1) 2) 3) 4) 5)
#関数hogeに1が束縛されカリー化した関数に2が束縛されさらにカリー化した関
数に3が....と、延々繰り返す。要するにHaskellでは関数は左結合する、とい
うことなんですね。
Haskellでは関数がデフォルトでカリー化されるため、プログラムを簡潔に記述
することができます。連載第5回[*1]で登場したmap関数を使ってみましょう。
ex1)
Prelude> :t map
map :: (a -> b) -> [a] -> [b]
Prelude> map ((+) 1) [1,2,3]
#map (1 +) [1,2,3]とも書けます
[2,3,4]
もし関数がデフォルトでカリー化されないとしたら、
ex2) ラムダ抽象を使った例(まだお話していません)
Prelude> map (\x -> 1 + x) [1,2,3]
[2,3,4]
といった書き方をしなければならなくなります。ex1に比べるとex2がちょっと
冗長だということがお解りいただけると思います。
このようにHaskellにおいてカリー化のメリットとは記述性にありますが、「カ
リー化」という機能や考え方は何もHaskellだけのものではありません。「カリー
化」でWebを検索してみると色々と興味深い記事がありますので、時間がある方
は試してみましょう。それでは次回は関数合成についてお話します。(西川)
[*1]:http://www.objectclub.jp/ml-arch/magazine/162.html
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-6&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-6&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-6&choice=2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【設計】ソフトウェアのお言葉[15] - エラーをみつけるつもりで実行する
こんにちは、天野勝です。
今回のお言葉は「エラーをみつけるつもりで実行する」です。今回も筆者の独
断と偏見で、解釈、解説してみます。
●テストって?
このお言葉は、もともとは「テストとは、エラーをみつけるつもりでプログラ
ムを実行する過程である」であり『ソフトウェアテストの技法 第2版』のP.6で
紹介されているものです。同じページで、マイヤーズは「正しく動くことを確
認するのはテストではない」と言い切っています。しかし、テスト駆動開発
TDD(Test-Driven Development)の「テスト」は、どちらかというと、正しく動
くことを確認するという過程です。同じ「テスト」という単語に複数の意味が
存在するようです。
今回はこの二つのテストについて、考えてみます。
●伸ばすテストと、落とすテスト
筆者は、「テスト」と聞くと、あまりよいイメージが浮かびません。さらに
「試験」となるとなおさらです。これは、これまでの筆者の学校教育で刷り込
まれてしまったイメージのような気がします。しかし、実はテストには良い効
果もたくさんあるということに最近やっと気づきました。
これを読まれている方も、高校受験や、大学受験のときに何度か模擬試験を受
けたのではないでしょうか。その試験の点数により、偏差値や、全国で自分が
何番目なのか、志望校に受かる可能性はどれほどなのか、などについてのあり
がたい情報をもらい、一喜一憂したことと思います。そして、自分の弱点を知
り、その弱点を克服するための計画を立てたり、自分の得意分野を活かすため
に、志望校をかえたりしたことでしょう。本番の入学試験では、一発勝負で受
かるか落ちるか決まってしまいます。
これら二つの試験には、以下のような特性があるのではないでしょうか。
・模擬試験:実力を知って、学力を伸ばすためのテスト
・入学試験:ふるいにかけて、落とすためのテスト
この二つは、TDDのテストと、マイヤーズの定義のテストのそれに似ていると思
いませんか。テストという形式は同じでも、目的が異なるのです。TDDのテスト
は伸ばすためのテストであり開発を促進するためのものです。マイヤーズのテ
ストは落とすためのテストであり出荷を判定するテストなのです。
どちらも同じく「テスト」を使っているので、混同しがちですが、この二つは
別と考えてよいでしょう。そして、どちらも同じく重要です。
●言葉を変えると意味が変わる
「テスト」という同音異義語をこのまま使うのは、混乱のもとです。実際に多
くの勘違いを誘発しています。そこで、ソフトウェアの世界でこれまで使われ
てきた「テスト」という言葉の代わりに、TDDのテストケースのことを「振舞
(Behavior)」という言葉で表そうという人たちが増えてきています。略して
「BDD(Behavior-Driven Development)」です。
このように言葉を変えるだけで、考え方が変わります。
TDDで開発を行おうというと、これまでしてこなかったテストケースを作成する
という追加の作業をしなくてはならないと否定的に捉える人が多いのですが、
振舞を定義すると考えると、設計作業の一環として受け入れてもらいやすくな
るのです。一種のリフレーミングの効果です。ちなみに、リフレーミングとは、
同じ事実を説明する際に違う枠組みで捉えることです。例えば「初めてでは無
理」と、「数回やればできるようになる」では、同じ事実を伝えるにしても、
その伝わり方が違うというものです。
●おわりに
伸ばすテストと、落とすテストという2種類の観点から、ソフトウェア開発で行
われているテストの目的について整理しました。さらには、TDDと、BDDという
言葉の使い方による、その意味の伝わり方について考察しました。この考察を
通しての一番の発見は、人間(少なくとも、筆者)は、言葉で思考をしていると
いう事実です。そしてまた、行動も言葉で操作されているようです。読者の皆
さんは言葉の選び方にどんな気配りをしているのでしょうか。筆者も、普段か
ら良い言葉を使うように心がけたいと思います。(天野勝)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=L001-14&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=L001-14&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=L001-14&choice=2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3 r d ■━
■
┗【アンケート】気になるシステム業界 ホントのところ
今週は「この業界で働くひとに求められる資質って?」のホントのところ。最
近のニュースで耳にする機会が増えた「不祥事」。そのニュース自体はとても残
念なことですが、ニュースがきっかけで色々なことを考えさせられました。さ
て、今回はこの業界で働くひとに求められる資質について考えてみましょう。
皆さんが思う一番大切な資質って、どんなこと?
誠実なこと。
http://www.ObjectClub.jp/special/kininaru/vote?vol=138&choice=0
自立心を持っていること。
http://www.ObjectClub.jp/special/kininaru/vote?vol=138&choice=1
謙虚であること。
http://www.ObjectClub.jp/special/kininaru/vote?vol=138&choice=2
素直であること。
http://www.ObjectClub.jp/special/kininaru/vote?vol=138&choice=3
挑戦する気持ちを持つこと。
http://www.ObjectClub.jp/special/kininaru/vote?vol=138&choice=4
人を思いやること。
http://www.ObjectClub.jp/special/kininaru/vote?vol=138&choice=5
成し遂げるという強い意志を持つこと。
http://www.ObjectClub.jp/special/kininaru/vote?vol=138&choice=6
それは秘密です。
http://www.ObjectClub.jp/special/kininaru/vote?vol=138&choice=7
ちょっと語らせて!
詳細をこのメールに返信ください!!
アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「おみくじ引いた?」の結果は公開中。ぜひご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol137/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記
こんにちは、編集人です。1月9日(米国時間)に開催されたマックワールド・
カンファレンス・アンド・エキスポ2007でのスティーブ・ジョブス氏の講演を
Podcastingで見ました。(もちろん英語なので何を言っているのかわかりません
が)プレゼンテーションって、こんなに楽しいんだ!と目からウロコでした。読
者の皆さんもご覧になりましたか?あそこまでは難しいですが、これからの参
考にしたいと思っています。
今週の強引な一言
*** 口はわざわいの門(ことわざ)***
うっかり言った言葉が後の災難を招くとうこと。言葉は慎しむべきであるとい
う戒めからできたことわざ。言葉が招くのはわざわいだけではありません。幸
せだって、言葉が招きます。たとえば、「ありがとう」とかね。
(上田雅美)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒http://www.ObjectClub.jp/community/object_ml/help/
〇 免責事項、過去の記事は ⇒http://www.ObjectClub.jp/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://www.ObjectClub.jp/
■ 編集代表:平鍋 健児
Copyright (c)2003-2007 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.