一次情報にあたることの重要性

最近考えていることがありました。それは、いわゆるギークな人やハッカーは人はどんな風に勉強してきて、今その高みにいるんだろうということです。Shut the fuck up and write some code. ってつっこまれそうな内容ですね(ノ∀`)でも考えてしまうわけです。
1つに勉強している時間があると思います。それこそ10000時間。しかし、一方で、短期間でもの凄いスピードで伸びる人もいます。とても不思議に思えました。


そんな中、このエントリーに出会いました。

ただ、その際に、情報の一つ一つの重さや重層性、関連性を認識することなく、考えを進めていけば、必ず短絡的な困難に陥るはずだ。この点で問題を感じるのだ。
この辺りの短絡的でうすっぺらい表層的な論理的のみの思考をする人間は危険と言わざるを得ない。

(中略)

「一次情報を死守せよ」というのは、私の大先輩であり、師匠の一人が私にかつて授けてくれた教えの一つだが、これは実に正しく、真実にたどり着くための道の入り口であり、出口でもある。


こ、これだー!ってビビって来ました(´▽`)要するに、

  • 物事に関して自分で深く考察する
  • 一次情報にあたる

この2つが必要だったんです。2つというより、「深く考察するためには一次情報にあたる必要がある」という感じでしょうか。
プログラミングにおける一次情報は、man, リファレンスマニュアル, RFC, ソースコード等だと思います。オライリー本なんかも近いのではないでしょうか。そして、ギークな人やハッカーな人はこれらを読む習慣を持っていると思います。


自分のことを考えると、1次情報にあたるということがなかなかできてなかったと思います。大抵は、ググッて同じ様な問題について書かれているBlog とかを見て分かった気になっていました。正にうすっぺらい知識ですね。
Blog は考察の導線にするには便利ですが、正しい知識を得るには情報の質に欠ける場合があります。最終的にはより一次情報に近い情報を元に考察する必要があるってことですね。

実際にやってみた効果

せっかく良いことに気づいたので、早速今日「一次情報にあたる」ということを実践してみました。早速効果がありました。
携帯の認証について調べていて、作ろうiモードコンテンツ:iモードセンタの各種情報 | サービス・機能 | NTTドコモのページを見ていた時のことです。ここには、iモードID は「半角スペース」+「7文字の英数字」と書かれています。なので、iモードID を取得するために以下のコードを書きました。

if ENV['HTTP_X_DCMGUID'] =~ /\s([0-9a-zA-Z]{7})/
  guid = $1
end


ところが取得できません。guid の値がnil になってしました。実際には次のようにすると取得できました。

guid = ENV['HTTP_X_DCMGUID']


不思議です。上記のコードでguid には7桁の英数字が代入されていました。「半角スペースはどこ?」って疑問に思いました。ruby 自体が環境変数の値のスペースを除去しているのかと思ってしまいました。
そこで、こういう時の一次情報と言えばRFC だって思い、調べてみました。あきらめないで読むのが重要。

それぞれのヘッダフィールドは、名前、その後にコロン(":")、そしてフィールド値から成る。フィールド名は、大文字・小文字を区別しない。フィールド値には、いくつもの LWS を先行させる事ができるが、SP 一つだけが好ましい。ヘッダフィールドは、一つ以上の SP や HT をそれぞれの行頭につける事で複数行にまたがる事ができる。

(中略)

field-content は、LWS を前にも後ろにも、すなわち field-value の最初の空白以外の文字の前にも、あるいは field-value の最後の空白以外の文字の後ろにも、含まない。

    • SP = 半角スペース
    • HT = タブ
    • LWS = 先頭に0または1つの改行を含み、その後SP またはHT が1つ以上続く


これを読んで分かりました!ドコモのページにあった「半角スペース」とは、このRFC にあるフィールド値の先頭に入るSP のことで、iモードID 自体は7文字の英数字だったんですね。
また、ruby のENV['HTTP_X_DCMGUID'] に半角スペースが含まれなかったのは、ruby のENV[field-name] で得られる値はfield-value ではなく、field-content だったからということですね。


おぉぉ(゚∀゚)! なんか、すごいスッキリしました。


さらに、Live HTTP headers を使って、自分がブラウズしている時のヘッダの内容を調べてみたら、以下のようになってました。

HTTP/1.x 200 OK
Date: Wed, 04 Feb 2009 16:13:40 GMT
Server: Apache/2.2.4
Last-Modified: Fri, 11 Apr 2008 03:26:38 GMT
....

「フィールド名」+「:」と「フィールド内容」の間にきちんとSP がいます!このSP には意味があったんですね!


おぉぉ(゚∀゚)! なんか、見えない物が見えるようになった気がします!


一次情報の大切さを身をもって知ることができました(´艸`)