2014年12月25日木曜日

Do the Right Thing

今の会社の社訓(のようなもの?)のひとつに "Do the Right Thing" というのがあります。これは、長期的な目で見たときに正しいと思われる答えが存在すると信じてアクションを起こすということで、学校の授業で先生がよく生徒に呼びかける "There is no right or wrong answer" とはある意味、相対する考え方です。僕は There is no right or wrong answer よりも Do the Right Thing のほうを信条としています。世の中白黒つかないことで溢れかえっていますが、そんな状況だからこそ自分の直感を信じてより正しいと思う方向に身を投じていきたいのです。そして、そのほうが長期的に見て充実した人生になると信じています。僕は決断の際に迷いこそすれ、下した決断そのものを後悔したことは一度もありません。そういう直感を養ってくれたのは、現在過去を含め僕の周りにいる(いた)人たちのおかげだと思っています。願わくば、来年も今年のような充実した年になりますように。

二日後に休暇のため、日本に帰国します

2014年11月30日日曜日

雑記:とりあえず更新 その3

今月は筆休めの月。ボストンは雪が降る日も出てきましたが、気温が高い日もそれなりにあり、ニューヨークのバッファローに比べると、穏やかな冬の始まりなのではと感じています。

日本に帰ったら、温泉いきたい

2014年10月31日金曜日

雑記:10月

秋も深まってきたということで、New Hampshire 州にある Mt. Major というところに紅葉ハイクに行ったりしてました。
山頂少し前の登山風景。向こうに見える湖は Lake Winnipesaukee

あと、ハードコピー版に先駆けて Scott Myers 氏 による待望の  Effective Modern C++ の電子版がリリースされました。会社経由で買ってもらってちょうど読んでるところです。あと残すところ3章ですが、めちゃくちゃ楽しいです。

全8章

仕事ビザ H-1B の後半3年の許可も下りました。年末日本にまた休暇で戻るので、米国大使館でビザスタンプをもらうことになります。

2014年9月30日火曜日

U.S. オープンテニス 2014 男子準決勝

錦織くんが準々決勝でワウリンカに勝利してから、急遽 U.S.オープンテニスに行くことを決めました。僕自身、中学で二年間、高校で二年間、大学・大学院で六年間、硬式テニスをやってきて日本男子がグランドスラムで準決勝進出するということがどれだけの快挙かはっきり分かっていたので、考えるよりも先に体が動いてチケットを購入していました。2005年、2012年に引き続き、今回が三度目のU.S.オープンになりました。

5日(金)の夜、仕事の後にバスを捕まえボストンを発ち、夜10時過ぎにニューヨークに到着。翌朝、久しぶりということでニューヨークに住んでいるカーネギーメロン時代の友人が僕の滞在先のホテルまで来てくれ、試合会場である7番電車の Mets – Willets Point 駅まで一緒に行きました。

thunderstorm の予報でしたが、朝はまだ大丈夫でした

試合開始は正午でしたが、二時間前に到着

殿堂入りした歴代の男子選手

お気に入りの伝説のプレーヤー、サンプラスの姿も

殿堂入りした歴代の女子選手。グラフのフォアハンドが光ります

Arthur Ashe スタジアムの前で

試合前の個人ウォームアップに臨む錦織くん

高速のバックハンドがコートに突き刺さります

僕の席はテレビ中継で見ると北東の方角の4階席

錦織くん最初のサービスゲーム、1st ポイント。ジョコビッチのバックがネットにかかりました

準決勝第一試合終了直後、突然の thunderstorm

天気回復後、フェデラー対チリッチ。雷雨直後の雲のおかげで二戦目は涼しかったです

錦織くんの勝利を目撃した瞬間、涙で目の前がかすんでしまいました。決勝戦はボストンに戻り、テレビで観戦。チリッチに敗れはしたものの、グランドスラム準優勝という歴史的快挙を成し遂げてくれました。トップ10入りも果たし、苦しい局面でのテニスが冴え渡ってきたように見えました。錦織くんの、リターンとグラウンドストロークを主体に試合の流れをつかむところは、個人的にアガシを彷彿とさせます。そして錦織くんはアガシよりもネットプレイに長けていると僕は思っているので、それらを武器にグランドスラムで優勝する日がいつか来てほしい。

これからも錦織くんが U.S. オープンで準決勝以降に進んだときは、できる限り会場まで出向いて目の前で応援したいと思います。

2014年8月29日金曜日

10年の歳月を経て

約14年の付き合いになる友人が、アメリカの大学院で見事博士号を取得しました。と書いてて気づいたんですが、彼と知り合ってから7割以上の時間、彼は博士号取得というひとつの目標に向かって走り続けていたわけです。月並みに言って頭が下がります。

僕は、6年前の留学をきっかけにこのブログを始めたのですが、留学のきっかけなどについては一度も話すことはありませんでした。端的に言うと、それは彼の影響でした。

学部時代、彼と同じテニスサークルに所属していた僕は、テニスの大学間対抗戦の合間をぬって英検1級を受けに行くという彼の人並み外れた行動力を目の当たりにしました。普通の人はこんなことしないぞ、彼は何かあるぞ、とそれ以来彼の一挙手一投足を意識し始めるようになりました。そして、お互い学部を卒業後、彼はいまのアメリカの大学院の修士課程に合格が決まり、彼が産地直送の情報をブログで綴るようになって以来、僕は彼の見ているものを直に見てみたいと思うようになりました。アメリカで彼に再会してからはアメリカに残るよう洗脳すると彼に言われ、以来僕は今のような状況になっています。

今回博士号を取得しただけでなく、彼は大変面白そうな職も得られたようで、本当に素晴らしいと思っています。昔から常に10歩ぐらい先を見ている彼なので、これからの時代どんなスキルが重要になるか、それをよく踏まえた上での意思決定だったのでしょう。10年後にどんな人物になっているかとても楽しみです。僕も自分の今いる場所でしっかり頑張らねばなりませんね。

もちろん彼だけではなく、彼の家族の健康があったればこその今回の達成だったと思うので、彼を含め彼の家族全員におめでとうと言いたいです。

2014年7月6日日曜日

異を唱えるということ

2013年の自分に対する360度レビューで一番真摯に受け止めた事項が「Yuki はもっとはっきりと異を唱えること」でした。多かれ少なかれ僕と会話したことのある人なら「あれ、この人ほとんど反論してこないな」と気づいたことがあるかもしれません。僕が人と会話をしてほとんど反論しないのは、調子を合わせているからではなくて、僕自身の頭の回転が遅いからなのです。反論するときは常に相手の改善に繋がるようにと考えると、必要な材料を会話の最中に揃えるのが難しい。なのでその場で理にかなった反論をする人は頭がいいなと僕はいつも思っています。

今の職場はとても恵まれており、このレビューをボスから受けるときも「仕事ぶりをみていて、Yuki がどんな人間かはみんな知っている。その Yuki が異を唱えるんだ、みんなはきっと真剣に受け止める」といわれたときは正直胸が熱くなりました。

この異を唱えるという行為が、人と面と向かって話すときのアクションとして一番難しいと僕は考えています。同意する、質問する、といったアクションはそれに比べれば難度が低い。同意をする場合、適当に相槌を打てば相手はいい気持ちになって終わる(話全体が建設的になるかどうかは別として、そういう意味では真に同意をするのも難しいアクションなのかもしれない)。質問をする場合、片方は物事を理解している側、もう片方が教わる側という図式が往々にして成り立つので、多少の行き来こそあれ同じ理解の土俵にたどり着いてしまえば後腐れなく終わる。異を唱える場合、なぜ難しいかというと「自分の理解が確立されている」+「相手の言っていることを理解している」+「相手の議論に穴があり、具体的な事例とともに指摘できる」の3つが見えていなければならないからです。僕のチームには、この人がいなくなったら仕事に行く楽しさが半減してしまう、というくらい素晴らしい人が一人おり、この人は異を唱えるのが非っ常にうまい。伝え方もマイルドで、相手は自分の議論の傷口がふさがっていくような感覚を覚える。それはおそらく上に挙げた具体例の出し方によるものだと思う。反論の開始点になる具体例が納得のいくものであれば、聞く側もおのずと耳を傾ける。

反対意見を述べるときに具体例を出すというのは非常に難しく、どれだけ難しいか身近な例でいえば Amazon のレビューなどがいい例。思わず相槌をうってしまう☆ひとつの低レビューはなかなかお目にかかれない。人間、低レビューを書くときは気分が悪いまま感情的に筆を走らせるので(曲がダメ、演出がダメ、デザインは前のほうが良かった etc.)、なぜそう思うのかに対する具体例が書かれていない。最近だとこのようなエントリーも目にとまりました。

あなたの周りに思わず感謝してしまうような反対意見を述べる人、異を唱える人がいたとしたら、その人を大切にしてください。自分ひとりでは到達できなかった領域へと導いてくれるはずです。

2014年6月29日日曜日

雑記:とりあえず更新 その2

今月はエンジンのバグ潰しが難航してて、ブログで書くネタを考えていませんでした。

高校時代バイオリンをたしなんでいた友人が、運動系の部活で忙しくバイオリンを弾く時間がとれなかったときでも、バイオリンをケースから出してしまうことだけは欠かさなかったらしいので、それを見習って更新。

追記:
チームで C++ の Type Deduction を見たのでシェアします


これだけの type deduction ルールに慣れるのに手間を感じて auto を使うのは若干ためらうけれど、これに関する Hurb Sutter の記事をこれから読む予定でそれ次第で姿勢は変わるかも。現場ではC++11のフィーチャーはまだ未使用だが、一応オンラインでも試すことは可能。

2014年5月27日火曜日

Google Mock

使っております。これのおかげでテストを書くのがなかなか楽しくなってます。
どういうことか適当なコードスニペットを使って説明しますと
enum EnergyBlastType //気功波のタイプ
{
    EnergyDiskRazor, //気円斬
    Kamehameha, //かめはめ派
    TriBeam //気功砲
};

class IZwarrior
{
  public:
    virtual EnergyBlastType ShootEnergyBlast() const = 0;
    virtual ~IZwarrior() {};
};
ドラゴンボールのZ戦士を表すインターフェースがあるとして、ナッパにZ戦士の技を受けてもらいます。
std::string Nappa::React(IZwarrior const & zwarrior) const
{
    EnergyBlastType blastType = zwarrior.ShootEnergyBlast();
    switch (blastType)
    {
      case EnergyDiskRazor:
        return "くだらん技だ!";

      case Kamehameha:
        return "オレの最高の技だぞ・・・・・・!!!押しのけやがった・・・!!";

      default:
        assert(blastType == TriBeam);
        return "おどかしやがって・・・!";
    }   
}
switch 文全体のコードカバレッジを満たすために、それぞれのブランチをテストします。テストコードから本物のZ戦士に不要な依存関係を作らないため、あるいはテスト環境で本物のZ戦士を用意するのが困難ため、テスト環境下では偽Z戦士に登場してもらいます。昔SFCソフトのドラゴンボールZ超サイヤ伝説でZ戦士に化けるコピーマンという敵がいましたがそんな感じです。

Google Mock 使用前
class KuririnTestDouble : public IZwarrior
{
  public:
    virtual EnergyBlastType ShootEnergyBlast() const
    {
       return EnergyDiskRazor;
    }
};

class GokuTestDouble : public IZwarrior
{
  public:
    virtual EnergyBlastType ShootEnergyBlast() const
    {
       return Kamehameha;
    }
};

class TenShinhanTestDouble : public IZwarrior
{
  public:
    virtual EnergyBlastType ShootEnergyBlast() const
    {
       return TriBeam;
    }
};


#include <gtest/gtest.h>

TEST(NappaTest, ReactsToEnergyBlast) // Google Test
{
    Nappa nappa;
    
    KuririnTestDouble kuririn;
    EXPECT_STREQ("くだらん技だ!", nappa.React(kuririn));

    GokuTestDouble goku;
    EXPECT_STREQ("オレの最高の技だぞ・・・・・・!!!押しのけやがった・・・!!",
        nappa.React(goku));

    TenShinhanTestDouble tenshinhan;
    EXPECT_STREQ("おどかしやがって・・・!", nappa.React(tenshinhan));
}
クリリンのコピーマン、悟空のコピーマン、天津飯のコピーマンに登場してもらいましたが、どのコピーマンも一種類の気功波しか打てないため、ナッパの全ての反応を見るために三体のコピーマンを用意しないといけない。もしも実世界のソフトウェア製品のコードのテストでこのようなアプローチをとることになった場合、コピーマンのようなテストのセットアップのためだけの test double の量が膨れ上がります。

Google Mock 使用後
#include <gtest/gtest.h>
#include <gmock/gmock.h>

class GmockZwarrior : public IZwarrior
{
  public:
    MOCK_CONST_METHOD0(ShootEnergyBlast, EnergyBlastType());
};

TEST(NappaTest, ReactsToEnergyBlast) // Google Test
{
    Nappa nappa;
    GmockZwarrior mockZwarrior;
  
    EXPECT_CALL(mockZwarrior, ShootEnergyBlast).
        WillOnce(Return(EnergyDiskRazor));

    EXPECT_STREQ("くだらん技だ!", nappa.React(mockZwarrior));


    EXPECT_CALL(mockZwarrior, ShootEnergyBlast).
        WillOnce(Return(Kamehameha));

    EXPECT_STREQ("オレの最高の技だぞ・・・・・・!!!押しのけやがった・・・!!",
        nappa.React(mockZwarrior));

    
    EXPECT_CALL(mockZwarrior, ShootEnergyBlast).
        WillOnce(Return(TriBeam));

    EXPECT_STREQ("おどかしやがって・・・!", nappa.React(mockZwarrior));
}
Google Mock のルールに従ってコピーマンを一体作れば、テスト内でEXPECT_CALL を使ってなんとそのコピーマンの動きをコントロールできてしまいます。これでクリリンのコピーマン、悟空のコピーマン、天津飯のコピーマンを用意する必要がなくなりました。

このように Google Mock を使えばテストの前段階に必要な test double の量を軽減することができるのですが、それ以上に Google Mock を使ってみて分かった最大の利点は

テストコードの理解度が向上する

という点です。Google Mock 使用前は、わざわざクリリンのコピーマン、悟空のコピーマン、天津飯のコピーマンの振る舞いが定義されている場所まで行ってその動作を確認しなければならなかったのに対して、Google Mock 使用後は、テストの関数の中で EXPECT_CALL を見れば、その場でコピーマンの動きが把握できます。あくまで主観ですがテストコードは局所的であるべきです。その箇所だけを読んでテストの内容を理解できるというのが理想的です。Google Mock は便利だなあと感じるのはそういう理由からきているのだと思います。

便利な日常アプリだけじゃなく、開発者にも素晴らしいフレームワークを提供してくれる Google 先生はやはりさすがです。

2014年4月30日水曜日

雑記:とりあえず更新

今月はリバースデバッガの UndoDB とか テストを書くときに使っている Google Mock のお話をしようと思いましたが、まとまっていないのでまたいずれお話しします。

去る4月22日、マー君の対レッドソックス戦の初登板を見てきました。この日だけ密かにヤンキースを応援してたのは内緒。

イチローもスタメン!

二打者連続で本塁打を浴びるも総じて安定したピッチング

イチロー、儀式のポーズ

2014年3月4日火曜日

裏方の仕事に目をむける

日本に帰国していたときせっかくの機会だったので、「半沢直樹」とアニメ「進撃の巨人」をそれぞれ全話視聴しました。どちらも二転三転するストーリーや役者の演技に圧倒され、ただただ映像に見入るばかりだったのですが、各話のエンドクレジットが流れたときに映画館で何度も味わったこの感覚に再び襲われました
「一つの作品を作り上げるのに、一体どれだけの人が製作に関わっているんだ」と。

映画館に行ったことのある人なら、エンドクレジットが流れきる前に席を立って劇場を出る、ということを一度は体験しているはず。最後まで待つのが退屈になるほど大勢の裏方の人が製作に関わっているという事実を逆に考えて、もしもその裏方の人達が一部でもいなかったらはたしてどういう作品に仕上がっていたのかと思うわけです。裏方の人の個人的な定義をしておくと、
「エンドロールで名前を見て、作品のどの部分にその人の仕事が反映されているか思い浮かぶかどうか」

先の例で言えば、堺雅人さんは半沢直樹役で作品を通して出演しているので、堺さんの名前を見れば作中における彼の仕事ぶりをすぐに思い浮かべることができる、そういう意味で堺さんは裏方の人間ではない、という解釈です。同様の理由で音楽担当の服部さんも裏方の人ではないと考えます。

華々しく見える表舞台の人間だけで作品が成り立つのかというととんでもない。「進撃の巨人」で考えてみても、原画、効果音、カメラワーク、構図、背景の着色、脚本・構成、動画チェック、コンセプチュアルアートなど挙げるとキリがありません。これら各々の担当がどれだけ重要かを示すため、仮に背景の着色の裏方がいなかったとしましょう。色彩感覚に乏しい人間が着色をするため、遠景の山も近景の山と同じ濃度で着色したり、光源をまるで無視したような明暗にしたりする、ということになりかねない。すると作品としてどうなるか。音楽やストーリー、声の演技は素晴らしいのに、背景の塗りだけ違和感が残り、それが前面に押し出されて視聴者には絶妙の気持ち悪さだけが残るという状態に陥ります。

人間の脳というのは不思議なもので、違和感の全くない完成品であればあるほど、脳を素通りするように出来ているものです。例えば、一流のプレゼンを見ているときは時間の経過を忘れるようですよね。一流のクラシックを聞いているときは完成された音が脳を通り抜けて頭が癒される気がしますよね。一流のフランス料理を味わうときは完成された味が自然に喉を通り抜けていきますよね。
完成品は素通りさせる一方で、人間の脳は違和感を探知するときは一瞬です。このプレゼン全然練られてないなとか、なんだこの不協和音はとか、なんだこの妙な味付けはとか、異物に気づくときは驚くほど速いものです。

つまり、映像作品であれ何であれ、この作品は真に素晴らしいと感じたら表舞台の華やかさだけに捕らわれて脳内を素通りさせずに、そういう時こそ、この華やかさを生み出している土台のひとつひとつは何なのかと裏方の仕事に目をむけるべきなのです。人間の脳に違和感を与えないということがどれだけ大変なことか、何かを作ったことがある人であれば痛いほどよく分かるはず。そして裏方の仕事に目をむけられる人であれば、ぱっとしないような創作物であっても、その背景にあるひたむきな努力に共感し、それを簡単に馬鹿にするようなことはできないと思います。

帰国したときについでに鑑賞した、昔からのお気に入りのドラマ「王様のレストラン」の第二話の後半部分でオーナーと千石さんの間でこんなやりとりあります:

オーナー「不思議な感じです。裏でどんなことがあったか全然知らないで、あの人たちは食べてる。あんなに美味しそうに。いい気なもんですよね」

千石さん「それでいいんです。それがレストランです」

いい言葉です・・・作り手は、受け取り手に違和感を感じてもらいたくない、まさにいい気なもんになってもらうために細部に神を宿らせる。そしてこれには個人的な続きがあって、受け取り手は受け取るだけで終わるなら、いい気なもんになったままでいればいいと思います。しかし、受け取り手であると同時に作り手でもあるのなら、裏でどんなことがあったか想像をめぐらせることを忘れてはいけないと思います。

2014年2月22日土曜日

グリーンカード

今の会社で働き始めて、もう4年経とうとしてます。今年で H1B の最初の3年が切れるので、今度日本に帰るときはまた赤坂の米国大使館に行って H1B の後半3年分のビザを取ってこないといけない。H1B が完全に切れたあとも今のところで働きたいとなると、グリーンカードが常套手段になるわけですが、うちの会社の非米国人は H1B->グリーンカードという流れが多く、僕もそのカテゴリに入っています。現状の詳細は伏せますが、グリーンカードに移行しようと思えばそちらにスイッチできるような制度があるとだけ言っておきます。

ただグリーンカードを手にしたとしても、どのくらい長くアメリカに残るかはあまり深く考えていません。今の自分には現状維持のための許可証くらいにしか思えなくて、仮に現状が崩壊しかつ日本に帰る理由ができたらそのときは普通にスポーンと帰国してしまおうと思ってます。そうなったときは日本で仕事が見つかるかどうかですね。毎年帰省するたびに思いますが、日本はスゴく住みやすいですし。

となんか本帰国モードを漂わせていますが、いまのところそういう予定はありません。

2014年1月31日金曜日

会社創立30周年旅行

で、サンディエゴに行ってきました。西海岸は4年前に Salesforce のインタビューで行って以来、2度目。天気の良さだけで転職してしまうという西海岸の素晴らしい気候に直に触れてきました。

ホテル Sheraton Marina Tower に滞在

会社のイベント自体は、毎年この時期にボストンで行われるものと大差ありませんでしたが、特筆すべきは夜のサンディエゴ・シーワールドを貸切にしたり、

会社のロゴ入りのシャチショー

移民はおろか、米国市民でも容易に立ち入ることは許されないであろう、トム・クルーズ主演の映画「トップガン」で舞台となったミラマー海軍航空基地に足を踏み入れる機会があったりしたことです。

現役の戦闘機が横一線!ミリタリーマニア垂涎必至

オスプレイの操縦席にも

生まれて初めてのサンディエゴだったので、見るもの感じるものが新鮮でとても楽しい週末でした。一年を通じて温暖な気候が続くのも捨てがたいですが、四季があるのも想像以上に魅力的なことだと改めて感じました。僕は後者を取る派なので、当分西海岸に行くことはないでしょう。

というわけで今週からまた、氷点下の世界でカリカリコードを書いて頑張ってます。