Date:  Wed, 14 Mar 2007 17:20:40 +0900
Subject:  【オブジェクト倶楽部: 2007-10号】
X-Mail-Count: 00185


       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.179 2007/03/14

■ I N D E X
┃
┣【Topics】オブラブ待望の春イベント開催!(3月28日)
┣【プログラミング】ゆるーいHaskell[9]
┣【PF】たまには仕事に役立つコミュニケーションのヒント[8]
┗【アンケート】気になるシステム業界 ホントのところ

〇━━━━━━━━━━━━━━━━━━━━━━━━━━━T o p i c s━
 〇 オブラブ待望の春イベント開催!(3月28日)
   〜 第1回 天野カンファレンス 〜
  〇 〇━━━━━━━━━━━━━ ━━・ 

オブジェクト倶楽部では過去に計7回、夏と冬の平日日中に有料イベントを開催
してきました。昨秋には、夏や冬のイベントよりも気軽に参加していただくこ
とことを目的として、平日夜に参加費無料のイベントを開催いたしました。
おかげさまで、盛況のうちにオブジェクト倶楽部2006秋イベントを開催するこ
とができました。今回開催するオブジェクト倶楽部2007春イベントは、2006秋
イベントと同様のコンセプトによる、気楽に参加いただける、平日夜の参加費
無料イベントです。

今回は「第1回 天野カンファレンス」と題しまして「天野とソフトウェア開発」
をテーマに、「天野」とソフトウェア開発について、参加者の皆さんと一緒に
考えたいと思います。スピーカー陣には、天野界の第一人者の皆さまをお迎え
しております。「天野のできるまで」「天野がいま興味のあること」「天野か
らみなさんへ」といった天野にまつわる興味深い話題を参加者の皆さまと共有
したいと考えています。

「天野」に興味のある皆さまのご参加をお待ちしています。

最後になりましたが、今回の企画の着想は、那須のKent Beckとの会話から生ま
れました。ありがとうございます。

【概要】
  タイトル :  オブジェクト倶楽部2007春イベント
              〜第1回 天野カンファレンス〜
   日 時 : 3月28日(水) 19:00〜21:00(18:30より受付)
   会 場 : 港勤労福祉会館(田町)
         http://www.minatoku-town.com/map/mn035338
   参加費 : 無料(先着70名様)
 プログラム:  天野の第一人者たちによる講演およびワールドカフェ(30分程度)
 スピーカー:  - 天野 勝  (オブジェクト倶楽部事務局長)
              - 天野 良  (オブラブ2006夏イベントベストトーカー)
              - 天野 仁史(Developers Summit 2007 ベストスピーカー)
   申込み : http://www.objectclub.jp/event/event2007spring/
       ※ちょっと特殊なシステムになっています
       「申し込みシステムについて」のリンクも参照してください。
   問合せ : オブジェクト倶楽部事務局 2007spring@ObjectClub.jp

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━1 s t ■━
■
┗【プログラミング】ゆるーいHaskell[9]

西川です。暖かくなったり寒くなったりなんだか最近過ごしにくいですね。
今回はHaskellの最も重要な特徴の一つである型システムについてお話します。
特にtype宣言、newtype宣言、data宣言についてお話ししたいと思います。

*type宣言
type宣言を使って既存の型に対して型シノニム(別名)を設定することができま
す。例えば、HaskellではStringはCharのリストになっています。ghciを起動し
て確認してみましょう。

$ ghci
Prelude> :i String
type String = [Char]    -- Defined in GHC.Base

StringがChar型のリストの別名であることが分かります。さらにFilePathとい
うStringの別名も存在します。

Prelude> :i FilePath
type FilePath = String  -- Defined in GHC.IOBase
Prelude> :i System.Directory.getDirectoryContents
System.Directory.getDirectoryContents :: FilePath -> IO [FilePath] -- Defined in System.Directory

getDirectoryContentsは関数名のとおり、ディレクトリの中の要素を参照する
関数です。FilePathも結局はStringなのでgetDirectoryContentsには"."など
Stringを渡すことができます。

Prelude> System.Directory.getDirectoryContents(".")
(カレントディレクトリの要素が表示されます)

type宣言で別名を設定することにより、Stringをいちいち[Char]と書かなくて
良かったりSystem.Directory.getDirectoryContentsの型宣言を見ると「ファイ
ルパスを渡せばいいんだな」と想像がついたりするように、type宣言はHaskell
の記述性と可読性を向上します。

*newtype宣言
「newtype Hoge = Fuga String」のように宣言します。しかし実はnewtype宣言
でできることは後述するdata宣言でも同じことができます。ただしnewtype宣言
を使った場合の方がdata宣言を使った場合よりも処理系にかかる負荷が軽くな
ります(らしいです)。とりあえず「こういうものある」という程度に頭の片隅
に止めておけばよいのではないでしょうか。

*data宣言
data宣言は型構築子(type constructor)とデータ構築子(data constructor)か
らなります。

Prelude> :i Bool
data Bool = False | True        -- <wired into compiler>
(instance宣言が表示されます)

この場合、"="の左側のBoolが型構築子です。右側のFalseとTrueがデータ構築
子です。Bool型はFalseまたはTrueからなると読みます。Haskellの関数の型を
参照したときに型宣言に現れるのは型構築子です。実際にBool型を使った関数
andの型宣言を参照してみましょう。

Prelude> :i and
and :: [Bool] -> Bool   -- Defined in GHC.List
Prelude> and [True,False,True]
False
Prelude> and [True,True,True]
True

次はMaybeと呼ばれる型を見てみましょう。

Prelude> :i Maybe
data Maybe a = Nothing | Just a         -- Defined in Data.Maybe
(instance宣言が表示されます)

instance宣言については次回お話します。Maybe が型構築子でNothingとJustが
データ構築子です。データ構築子Justは1引数のデータ構築子です。data宣言の
"a"は型変数と呼ばれています。型変数には(制約がない場合には)任意の型を適
用することができます。

Prelude> :t Nothing
Nothing :: Maybe a
Prelude> :t Just (1 :: Int)
Just (1 :: Int) :: Maybe Int
#"a"がInt型に決定するのでMaybe Int型になります。

Prelude> :t Just "hogefuga"
Just "hogefuga" :: Maybe [Char]
#"a"が[Char]型(String)に決定するのでMaybe [Char]型になります。

ちなみに型変数"a"は"a"同士必ず同じ型にならなければなりません。もし同じ
型にならない場合は、型が決定できないためエラーになってしまいます。

Prelude> :t []
[] :: [a]
Prelude> [Nothing, Just 1, Just 2]
[Nothing,Just 1,Just 2]
Prelude> [Nothing, Just 1, Just 2, Just "3"]
(エラーが表示されます)

[]の型を一意に決定することが出来ず、エラーになってしまいました。data宣
言だけでなく関数の型宣言にも型変数は使われています。length関数やmap関数
などこれまでに出てきた関数の型宣言をもう一度見返してみてはどうでしょう
か。foldl関数やzip関数など型変数が2つ以上型宣言に出現する関数は、慣れな
いうちはとくに難しいと思います。

さて、さらにdata宣言ではこのような宣言をおこなうことができます。

Prelude> :m Data.Tree
Prelude> :i Tree
Prelude Data.Tree> :i Tree
data Tree a = Node {rootLabel :: a, subForest :: Forest a}
        -- Defined in Data.Tree
(instance宣言が表示されます)

Prelude Data.Tree> :i Forest
type Forest a = [Tree a]        -- Defined in Data.Tree

この場合、Treeが型構築子です。Nodeがデータ構築子です。右側の{}の中に注
目してください。rootLabelとsubForestというフィールドラベルがあります。
このようにdata宣言をするとデータのフィールドにフィールドラベル名で参照
することができるようになります。

Prelude Data.Tree> let t = Node 1 [Node 2 [Node 3 [], Node 4 []], Node 5 []] Prelude Data.Tree> rootLabel t
1
Prelude Data.Tree> :t flip
flip :: (a -> b -> c) -> b -> a -> c

#型変数が3つあります。a,b,cはそれぞれ同じ型でも、全く異なる型でも構いません

Prelude Data.Tree> :t (!!)
(!!) :: [a] -> Int -> a
Prelude Data.Tree> rootLabel $ flip (!!) 1 $ subForest $ flip (!!) 0 $ subForest t
4

さらに普通のdata宣言と同じように、パターンマッチングによってフィールド
名を使わずに参照することもできます。

Prelude Data.Tree> let subForestLength = \(Node n s) -> length s

#nにrootLabelが、sにsubForestがパターンマッチングされます

Prelude Data.Tree> subForestLength (Node 1 []) 0 Prelude Data.Tree> subForestLength (Node 1 [Node 2 [], Node 3 [Node 4 []]])
2
data宣言を使うとデータを構造的にあつかうことができます。さらに型変数の
導入によって関数やデータの共通化を容易におこなうことができます。
今回はHaskellの型システムについてお話しました。Haskellの型システムは慣
れないと非常にとっつきにくいのですが、慣れてくれば改めてHaskellの型シス
テムの強力さに気づくと思います。次回はさらに詳しく型システムを紹介しま
す。(西川)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-8&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-8&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=E008-8&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━2 n d ■━
■
┗【PF】たまには仕事に役立つコミュニケーションのヒント[8]
     - 「聴く」(2)

日曜日にテレビを見ていたら、イチロー選手と阿川佐和子さんが対談をしてい
る番組を見つけました。その対談の後半で、イチローが奥様の話を聴く姿勢に
ついて研究しているという話題に。ふんぞり返って聴いているよりも、前かが
みになってこう聴いたほうが、相手には聴かれているって感じがしませんか?
とその様子を冗談を交えて披露していました。
「態度」の問題じゃないよね・・・汗
さて、今回は前回に引き続き「聴く」を取り上げてみたいと思います。
													
●本当はみんな聴いている

きっと皆さん「人の話を聴いていますか?」と訊ねると、沢山のYESという答
えが返ってくるはずです。自分が忙しくても、何かをしながらでも、話してい
る相手に関心を持って耳を傾けているという人は沢山いるはずです。また、相
手の話を熱心に聴いた結果、自分の意見や考えも伝えたりしていませんか?
自分の意見をきちんと持って相手に関わるのは、相手に対する誠意の表れとも
いえるでしょう。

●今回のポイントは

今回は「すぐ使える」をポイントに焦点をこの2つに絞って考えてみることにし
ます。
 ・相手に「ちゃんと話を聴いている」ということを表現する
 ・会話泥棒にならない
では早速考えてみましょう。

●聴いていることを表現してみよう

・うなづき・相槌
うなづきや相槌が無い相手に話をしてみると、とても窮屈です。壁に向かって
一人でキャッチボールをしているような気分になります。やはり、話し手は自
分が話した内容に対して、何らかの反応を自然に求めています。
また、ずっと同じ反応の場合にも、話し手には話のしにくさを感じます。実際
のセミナーで、うなづきや相槌をずっと同じ反応だけにしてみることをやって
みました。その時に私が受けた印象は、「本当はどうでもいいと思っているの
では?」というものでした。うなづきや相槌には沢山のバリエーションがある
ほうが自然です。

・体も使って伝える
前職の上司はよほどのことが無い限り、手を止めて体の向きを変えて話を聴い
てくださいました。もしかしたら本人は無意識なのかもしれませんが、職場の
皆さんもなにか大切な相談はその上司のところに持ち込んでいたようで、話し
にくいことこそ、その人のところに相談に行くという姿を覚えています。
会議やミーティングに参加するときには、あまりほかのことをせずにその場に
集中して参加したほうが良いと思います。自分にとっては必要と思ってしてい
る行為でも、話し手には「関心が無い」ように伝わる場合もあります。

・メモを取る
顧客先での打ち合わせなどでは、メモなどを取るのも良いかもしれません。
後々確認をするのにも重宝するはずですし、熱心にメモを取っている姿は相手
にもきっと姿勢で伝わるでしょう。こういうときに、きっとアジャツールが活
躍しますね。
気をつけたいのが、メモに没頭してしまうことです。メモは所詮覚書き程度と
おもって、時折自分が気がついたことや、解らなかった言葉などを質問してみ
るのもお勧めです。

・話を要約する
話のポイントを簡潔にまとめて相手に伝えることを、要約すると言います。
私は、ポイントを絞って簡潔に話すことがとても苦手です。そんなときに「こ
れは、○○ということですね。」と簡潔にまとめてもらえると、自分の話がど
んな風に伝わっているのかを知ることが出来るので、とても話しやすく感じま
す。話の要約というのは、よほど相手の話やその様子に関心を払っていないと
出来ません。これを自然に行うことは少し応用編かもしれませんが、練習する
と誰でも少しずつ出来るようになってきます。

●会話泥棒にはならない

相手の話を聞きながら、「自分はこう思う」といった意見や、体験やアドバイ
スなどを伝えたくなることはありませんか?
話をきちんと聞いているからこそ起こる自然な感情ですが、相手にとっては自
分の話が遮られることにもつながり、「あまり自分に関心が払われていない」
といった受け止め方につながりやすいのです。
原点に戻って、私たちは一体誰の話しを聴いているのかをちょっと考えて見ま
しょう。

話を聞きながら、私たちは色々なことを感じたり考えたりしています。「それっ
て、一体どんなことなんだろう?」「自分のときにはこんなことがあったぞ!」
これらの言葉は、相手の言葉ではなくて自分の内側から聞こえてくる声ではな
いでしょうか?

自分の内側からの言葉に耳を貸してしまっていると、相手の話が入ってきませ
ん。会話をするときには気持ちの矢印を徹底して相手に向けて、話を聴くこと
が大切です。
勿論相手が一通り話し終えた後に、自分の意見や考えを伝えることは可能です。
その場合には、「自分の考えを話してもいい?」と一言前置きをして、相手に
「話を聴く準備」をしてもらうと良いでしょう。

●話し手が求めているものは何か?

冒頭に書いたイチロー選手のインタビューで面白いと思ったのは、「相手はた
だ聴いて欲しいだけなんですね!」とという感想でした。イチロー選手は、奥
さんの話の内容を聞きながら、「きっと問題を解決したいんだ!」と思ったの
でアドバイスをしたそうですが、良く話を聴いてみると「ただ、聴いて欲しかっ
た」と言われたそうです。これにはがっかりてしまったとの話でしたが、私た
ちも意外に相手のニーズに対して注意を払っていなかったということはないで
しょうか?
私はこの食い違いを防ぐためにも、「私に出来ることはなに?」「どうすれば
いい?」と、話し手に途中で声をかけることがあります。
そうすることで初めて、話し手も聞き手に何を求めているのかを考えることも
あるからです。

●まとめ

会話、ファシリテーション、インタビュー、ヒアリングなどのどれをとっても
共通しているのは話を聴くことです。「相手の」話を聴くというように、誰の
話を聴くのか?というスタンスを明確にすると、たいていのことは解決してし
まいますよ。(上田雅美)
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M003-7&choice=0
普通:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M003-7&choice=1
イマイチ:
http://www.ObjectClub.jp/community/object_ml/estimate?vol=M003-7&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━3 r d ■━
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「マインドマップを何に使いますか?」のホントのところ。マインドマッ
プが書けるようになりたい!と思い、早速練習を開始しています。上手に使っ
ているひとに上達の秘訣を聞いてみると「まずはやってみること」だとか。さ
て、皆さんは何に一番マインドマップを使ってますか?

  ミーティングや会議のメモや板書。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=145&choice=0
  自分のブレーンストーミング。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=145&choice=1
  資料作成のストーリー作り。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=145&choice=2
  企画を考えるとき。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=145&choice=3
  ブックレビューや講演などの自分のための記録。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=145&choice=4
  妄想。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=145&choice=5
  それは秘密です。
     http://www.ObjectClub.jp/special/kininaru/vote?vol=145&choice=6
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「健康に良いことしてますか?」の結果は公開中。ぜひご覧下さい。
⇒http://www.ObjectClub.jp/special/kininaru/vol144/PlonePopoll_results2
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人です。春イベントの募集が始まります。今回は「天野カン
ファレンス」と題し、ただ今旬の「天野さん」たちが大集合です。遊び心もま
じめさもたっぷりなイベントになりそうです。月末の忙しい時期ですが、ぜひ
遊びに来てくださいね。

今週の強引な一言
*** 転ばぬ先の杖(ことわざ)***
あらかじめ転ぶ前に予め杖を突くという意味で、事前に注意していれば失敗し
ないで済むという意味。失敗を怖がるあまりに、何もしないということとは違
います。失敗から学び、トライ・アンド・サクセスでいこうじゃありませんか!
(上田雅美)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒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.