こんにちはゲストさん(ログインはこちら) | 読書ログ - 読書ファンが集まる読書レビューサイト →会員登録(無料)


滝沢徹

著者情報
著者名:滝沢徹
たきざわとおる
タキザワトオル

この著者の本を読んでいる会員ランキング

このランキングは1日1回更新されます。
      ハッカーのたのしみ 本物のプログラマはいかにして問題を解くか
      カテゴリー:情報科学
      5.0
      いいね!
      • ハッキングのテクニックを紹介しているようなネガティブなイメージをもたれがちのタイトルですが、著者はIBMで40年以上コンパイラやスーパーコンピュータの開発に携わった最上級プログラマ。

        メモリやCPUの命令数を最小にするためのノウハウが詰まっており。衝撃を受けました。

        ただ、普通のプログラマ・SEがプログラムの勉強をするためにはお勧めできません。
        職業プログラマでは速度よりも理解しやすさ・メンテナンスのしやすさの方を選択する場面が圧倒的に多いため、OS開発、ライブラリ開発、コンパイラ開発、信号処理プログラミング等、絶対的な速度を求められるドメインでなければ、本著のテクニックをつかったコーディングをしていたらコードレビューで書き直されること請け合い。
        また最低でもアセンブラが読めること。RISCアーキテクチャの基本を理解していることなどが前提。

        仕事抜きでプログラムが楽しいと感じる人・情熱を持っている人にはお勧め。
        日常の業務で使わなくても、本著の内容を理解しておけば自分のプログラムがどのような命令数(アセンブラ)に置き換えられるかレジスタ・スタックを使うかの想像力が鍛えられます。

        どんな内容か一例を紹介・・・
        変数のビットが立っている数をカウントするプログラム。
        ------------
        // 一般的なプログラマ
        int bitCount(int i) {
         int count=0;
         int mask;
         for( mask=1; mask!=0 ; mask=mask<<1 ){
          if(i&mask) count++;
         }
         return count;
        }
        ------------
        // 本著
        int bitCount(int i) {
         i = (i & 0x55555555) + (i >> 1 & 0x55555555);
         i = (i & 0x33333333) + (i >> 2 & 0x33333333);
         i = (i & 0x0f0f0f0f) + (i >> 4 & 0x0f0f0f0f);
         i = (i & 0x00ff00ff) + (i >> 8 & 0x00ff00ff);
         return (i & 0x0000ffff) + (i >>16 & 0x0000ffff);
        }
        ------------
        loop、条件分岐を除外してますが、同じ結果が得られます。もちろん圧倒的に速い。
        ちなみにJavaのInteger.bitCount()もほぼ同様の実装になっているらしい。
        >> 続きを読む

        2012/06/04 by ybook

      • コメント 2件
    • 1人が本棚登録しています

【滝沢徹】(タキザワトオル) | 読書ログ - 読書ファンが集まる読書レビューサイト(著者,作家,作者)

会員登録(無料)

今月の課題図書
読書ログってこんなサービス
映画ログはこちら
読書ログさんの本棚