04 Aug 2009

知識のポートフォリオ / 達人プログラマー

1章5節より。

プログラマーの知識の学習方法には、金融工学のポートフォリオの理論を応用できる。

  • 定期的に投資を行う。継続的に学習を続け、新しい知識を取り入れる。
  • 多角化。特定の技術だけでなく、幅広く学ぶ。そうすることで、変化への対応力がつく。
  • リスク管理。分散投資のように、ハイリスク・ハイリターン(エッジだが、廃れるかもしれない技術)、ローリスク・ローリターン(普遍的だが、誰もが知っている技術)の両方の知識に、適切なバランスで取り組む。
  • 安く買い、高く売る。今後伸びそうな技術を、先取りして学んでおく。目利きが難しい。
  • 見直しと再配分。学んでいる技術を見直し、業界の変化に対応する。

具体的な行動

  • 毎年少なくとも一つの言語を学習する。
  • 毎四半期ごとに技術書を読む。
  • 技術書以外の書籍を読む。
  • 講習を受講する。
  • ローカル・ユーザ・グループに参加する。
  • 異なった環境に慣れ親しんでみる。(makeとemacs -> IDE など)
  • 最先端にとどまり続ける。(情報収集の話)
  • インターネットを使う。

XSのデバッガ, Binary Hacks

XSをうまくデバッグする方法ってないのかな。perlのレイヤーはperlのデバッガでできるんだけど、cのコードのを呼び出す部分以降は当然追えない。普段はperlのデバッガを使い、cのレイヤーに差しかかったら自動的にgdbを起動する、みたいなことができればいんだけど。

とりあえず今は、cのコードで直接printfする原始的printfデバッグと、動作を見たい関数にピンポイントでバックトレースを表示するコードを差し込んでいます。バックトレースはこちらを参考にしました。

普通のやつらの下を行け: C でバックトレース表示 - bkブログ

すごい参考になります。まだあんまり理解してないんですが、stdlib.h, execinfo.h, signal.hをインクルードして以下の3行を追加すればそれっぽく動きます。あとでちゃんと読んでおこう。

void *trace[128];
int n = backtrace(trace, sizeof(trace) / sizeof(trace[0]));
backtrace_symbols_fd(trace, n, 1);

こんな感じで表示されます。

0   libxapian-1.1.1.dylib               0x010857bf _ZN11FlintCursorC1EP10FlintTable + 45903
1   libxapian-1.1.1.dylib               0x01033b0d _ZN6Xapian8revisionEv + 6685
2   libxapian-1.1.1.dylib               0x0107bc08 _ZN11FlintCursorC1EP10FlintTable + 6040
3   libxapian-1.1.1.dylib               0x0100788b _ZN6Xapian16WritableDatabase12setmetadataERKSsS2 + 1099
4   libxapian-1.1.1.dylib               0x0100308c _ZN6Xapian8DatabaseD2Ev + 60
5   libxapian-1.1.1.dylib               0x010030e5 _ZN6Xapian16WritableDatabaseD0Ev + 37
6   Xapian.bundle                       0x0050186b _Z43XS_SearchXapianWritableDatabase_DESTROYP11interpreterP2cv + 747
7   libperl.dylib                       0x001c784d Perl_pp_entersub + 925
8   libperl.dylib                       0x0014a98b Perl_call_sv + 1883
9   libperl.dylib                       0x001cdaf4 Perl_sv_clear + 132
10  libperl.dylib                       0x001ce6ee Perl_sv_free + 126
11  libperl.dylib                       0x001f998f Perl_leave_scope + 3263
12  libperl.dylib                       0x001be902 Perl_pp_unstack + 82
13  libperl.dylib                       0x001be2a9 Perl_runops_standard + 25
14  libperl.dylib                       0x0014b200 perl_run + 768
15  perl                                0x0000204e _mh_execute_header + 4174
16  perl                                0x00001ee6 _mh_execute_header + 3814

話はそれますが、「普通のやつらの下を行け」って、すんごいかっこいいフレーズですね。今回の話も面白かったし、あと普通に役に立ちそうだし、バイナリハックス買おうかな…

Binary Hacks ―ハッカー秘伝のテクニック100選

Binary Hacks ―ハッカー秘伝のテクニック100選

      <li><span class="hatena-asin-detail-label">作者:</span> <a href="http://d.hatena.ne.jp/keyword/%B9%E2%CE%D3%C5%AF" class="keyword">高林哲</a>,<a href="http://d.hatena.ne.jp/keyword/%B1%AD%BB%F4%CA%B8%C9%D2" class="keyword">鵜飼文敏</a>,<a href="http://d.hatena.ne.jp/keyword/%BA%B4%C6%A3%CD%B4%B2%F0" class="keyword">佐藤祐介</a>,<a href="http://d.hatena.ne.jp/keyword/%C9%CD%C3%CF%BF%B5%B0%EC%CF%BA" class="keyword">浜地慎一郎</a>,<a href="http://d.hatena.ne.jp/keyword/%BC%F3%C6%A3%B0%EC%B9%AC" class="keyword">首藤一幸</a></li>
    
      <li><span class="hatena-asin-detail-label">出版社/メーカー:</span> <a href="http://d.hatena.ne.jp/keyword/%A5%AA%A5%E9%A5%A4%A5%EA%A1%BC%A1%A6%A5%B8%A5%E3%A5%D1%A5%F3" class="keyword">オライリー・ジャパン</a></li>
    
      <li><span class="hatena-asin-detail-label">発売日:</span> 2006/11/14</li>
                                                      <li><span class="hatena-asin-detail-label">メディア:</span> 単行本(ソフトカバー)</li>
      <li><span class="hatena-asin-detail-label">購入</span>: 23人 <span class="hatena-asin-detail-label">クリック</span>: 383回</li>
      <li><a href="http://d.hatena.ne.jp/asin/4873112885" target="_blank">この商品を含むブログ (221件) を見る</a></li>
    </ul>
    

ちなみに元ネタはPaul Grahamのエッセイです。確かハッカーと画家にもこのエッセイは入っていて、僕はそっちで読みました。こちらも当然面白いです。

Beating the Averages