書評:情熱プログラマー

情熱プログラマー ソフトウェア開発者の幸せな生き方
情熱プログラマー ソフトウェア開発者の幸せな生き方 Chad Fowler でびあんぐる

オーム社 2010-02-26
売り上げランキング : 13414

おすすめ平均 star
star「ソフトウェア開発者の幸せな生き方」とは
star並ではあるが若手(のみに)読ませたい
star社会人のみならず、学生にも是非読んで欲しい一冊

Amazonで詳しく見る by G-Tools

オーム社のシリーズは結構持っているのだけれど、あんまり書評書いた事なかったかも。サブタイトルが、「ソフトウェア開発者の幸せな生き方」とある。自分という存在の価値観の高め方とか、天狗になってないかどうか自分を見直してみな!みたいな文章が多い。なぜ会社が自分を雇っているのか?自分の存在によって会社に利益を出させる事で貢献できているのか?など、ずっと会社にいると不意に意識しなくなってしまうところにきちんとフォーカスを当てて、価値ある存在になろうと。

価値を高めるためにやることってのは基本的には絶えず勉強しろってことに尽きる。技術職なのだから、それは当然で、ある日突然価値観がひっくり返ってもおかしくない業界なので色々と目を向けろということだろう。自分の身につけた技術にこだわりすぎず、でもスペシャリストに、万能選手に、と結構無茶なことを言ってるが、わからなくもない。ようは、ギークになれってことです。まあそれだけじゃなくて、会社に安心感をあたえる存在になれとか、そういうのもあるけど、ギークはおそらくそういう存在にもなれるし。

ギークになるためには、どのような心持ちで、どのように取り組めばいいか。それを説明してくれている。自己啓発本によくある毎日続けようみたいなのが、エンジニア向けな書き方になっているので、エンジニア魂に火をつけてくれるんじゃないかと思う。

他の本で読んで心に刻んでいる言葉に、「ライバルは昨日の自分」というのがあるんだけれど、そういうのも書いてあった。
「昨日よりよく」だ。
心の中でなんかしら言い訳をして、やるべきことを先延ばしにしたりすることって多いと思うんですが、でっかい目標をもって取り組むのではなく、今日の小さな目標を立てて、昨日よりもよくなるように、取り組む。これの繰り返しがでっかい目標達成に繋がると。これって結構ガーンときた。
いや、なるべくそのように取り組んでいるつもりなんだけれど、ことプログラムに関してはどうだろうか?と。テスト自動化とかのテストケースを1日に1つ追加するだけでもいいとか、これはたしかに繰り返せばすごい力に繋がるなぁと思った。地道に小さい改善を繰り返しているうちに、余計なものが取り除かれていき、新たな時間を生み出してくれるだろうし、気付きも生み出してくれるだろうなと。

あとは目立つことにひるんではいかんな〜とすごく思うようになった。目立つことによって、得られるものってとても多い。人からの刺激も得られるし、人脈も得られるし、知識も得られるし。正のスパイラルを回すためには目立つことがとても重要だと感じている。この本もまたオススメできる本であった。まぁオーム社のこのシリーズは、どれもいい本だと思うけどねー。


書評:小さなチーム、大きな仕事

小さなチーム、大きな仕事―37シグナルズ成功の法則 (ハヤカワ新書juice)
小さなチーム、大きな仕事―37シグナルズ成功の法則 (ハヤカワ新書juice) ジェイソン フリード デイヴィッド・ハイネマイヤー ハンソン 黒沢 健二

早川書房 2010-02-25
売り上げランキング : 1131

おすすめ平均 star
starWEB時代の会社
star起業家を目指す人でなくても読む価値あり
star目的と手段のボタンの掛け違いに気がつきます

Amazonで詳しく見る by G-Tools

業界では有名な37シグナルズの成功の法則の本。あのRuby on Railsの作者もいるチームで、少数精鋭で大きな仕事をなしているその仕事術を学びたくて購入。読んだ感想としては、勇気が湧いてきた。これに尽きる。

自分が日頃感じていた疑問に関して、見事な解が得られた気分。まぁ世の中この本の通りに全てがうまくいく訳ではないとは思うが、それでも非常に利にかなっている。小さく始めて、(システム規模を)大きくしすぎない。シンプルに保ちながら、その大きさに見合った顧客をターゲットにする。シンプルなシステムのため、お客様がシステムを使いこなせないで終わるということもない。お客様から感謝され、利益を受け取るという至って当たり前であると思われるモデルが、なかなかIT業界では起きにくい。曖昧・複雑な仕様、要求によって使いこなせないシステムを無理矢理使おうとして苦労するなど、よくある。複雑な仕様にはノーといい、そのお客様しか使わない仕様もノーという。勇気が必要だが、結果として多くの顧客を相手にすることができる。

読んでいる最中に周囲がいう常識について「よく考えてごらん?本当にそうか?」と話しかけられるように感じることすらあった。自分たちの正しさ、自分たちの方針にフォーカスを当て、周囲に振り回されない仕事術として、大変勉強になった。これはわがままになれという意味ではない。おかしいと思ったことは、やっぱりおかしくなるよということに自信を持てと。

「失敗から学ぶのではなく、成功から学べ」というのはすごく刺激的であった。普通は逆だ。しかしながら、成功したら成功パターンが見えるようになるから、次も成功しやすいのだという。失敗したら次は成功しやすくなるかと言われたらそういうことは特にないようだ。たしかにそれもそうだなぁと思った。しなくてもよい失敗はしないほうがいいに決まってる。問題は致命的な失敗はしないようにということなんだろう。あとは、小さな成功体験を積み重ねて波に乗る。充実した気持ちになって仕事に取り組められれば自然と生産性も増す。正のスパイラルを生み出すプロセス作りこそが、成功の素であるなぁと思った。

文庫本サイズのこの本に、ものすごい量のエッセンスが凝縮されている。エンジニアでない方にもオススメの本であるとは思うけれど、やはりエンジニアにこそ読んでもらいたい一冊である。


xrea: phpがセーフモードだったためのバグ

xreaで運用している「自転車でヒルクライムしようぜ」に関してバグ報告があった。コース画像がアップできないんだそうな。うーむ、今までできていたはずなんだがなぁと思って調査したら、確かに…。

そういえば、ずっと前にサーバを引っ越してから、ディレクトリのパーミッションが変わったままだったかもしれないと思って変更して、これでビンゴだろ?ふふん!と安心していたら、それでも直らず、正直焦った。

ひょっとしてレンタルサーバのphpがセーフモードだからかっ!と思って調べてみたら、やっぱりその通りでした。mkdirしたディレクトリの持ち主がapacheのため、その中にはファイルは置かせないぜっ!ということのようです。ちなみに所有者apacheのままでパーミッションを777にしてもダメでした(x_x)

悩みに悩んだ挙句、簡単に実現できる方法は、事前にディレクトリを作っておくという方法だったので、そうしときました。Windows側で、PowerShell使ってディレクトリ500個作ってアップしときました。コースが500個登録されるということは当分ないと思うので、大丈夫だろうと思います。ダメな場合はサーバを変えるしかないなぁ、もう。CGI版PHPでの運用も考えたけど、セッションの引継ぎがうまくいかないという情報があったのでやめておきました。


Android: BatteryCrystalをリリースしました。

1×1のバッテリーウィジェットのBatteryCrystalをリリースしました。

バッテリー残量によってクリスタルの色が変わるようになってます。
中央にはバッテリー残量が半透明の文字で表示されるので、
何気にちょっとおしゃれ感を出してます。
まぁ素材自体は本を見ながら作ったまんまなんですが…。
(グラデーションとかいじっただけ…)

例によってリリースしたのでサポートページ作っとりますので、
そちらをご確認ください。

サイドバーのプロフィールのところにリンク付けてます(うわ、超手抜き…


Android: SoundPoolクラスで sample 1 not READY 対応

AndroidSDK開発のレシピのレシピ61「音声ファイルを再生する」を読みながら、Androidでボタンが押されたタイミングで音を出そうとプログラムしたところ、出ない…。SoundPoolクラスを使ってoggファイルで音を出そうとしました。

// HogeというActivity内
btn.setOnClickListener(new OnClickListener(){
    public void onClick(View v){
        int[] sounds = new int[5];
        SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
        sounds[0] = soundPool.load(Hoge.this, R.raw.switch, 1);
        soundPool.play(sounds[0], 1.0f, 1.0f, 0, 0. 1.0f);
        soundPool.release();
    }
});

DDMSでログを見たところ、WARN sample 1 not READYというメッセージが。準備できてへんと。sample 1 not READYでググったら、英語のサイトで「初期化するのに時間がかかるからちょっと時間を置け」って書かれてた。どうやって…?

ボタンを押したタイミングで鳴ればいいわけだから、onResumeのタイミングでロードしておき、onPauseのタイミングでリリースするようにしておけばいいのかなと思ってやってみたらビンゴでした。

// HogeというActivity内
private SoundPool mSoundPool;
private int[] mSounds = new int[5];

protected void onCreate(Bundle savedInstanceState) {
    // ... ゴニョゴニョと処理をしとく
    btn.setOnClickListener(new OnClickListener(){
        public void onClick(View v){
            mSoundPool.play(mSounds[0], 1.0f, 1.0f, 0, 0. 1.0f);
        }
    });
}

protected void onResume(){
    // 音をロードしておく
    mSoundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
    mSounds[0] = mSoundPool.load(this, R.raw.switch, 1);    
}

protected void onPause(){
    // 音をリリース
    mSoundPool.release();
}

以上、備忘録でしたー!