04 August 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 _ZN6Xapian16WritableDatabase12set_metadataERKSsS2_ + 1099
4   libxapian-1.1.1.dylib               0x0100308c _ZN6Xapian8DatabaseD2Ev + 60
5   libxapian-1.1.1.dylib               0x010030e5 _ZN6Xapian16WritableDatabaseD0Ev + 37
6   Xapian.bundle                       0x0050186b _Z43XS_Search__Xapian__WritableDatabase_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選

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

Beating the Averages