Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

しばやんを呼ぶ暗号 (The Blind Cache)

More than 1 year has passed since last update.

前回しばやんの研究で、しばやんさんの凄さを考察してみましたが、本人から核心にせまるこんなコメントが来た。

Shibayan.JPG

これは、しばやんさんに一歩でも近づくための大きな「暗号」かもしれない。

「仕組みを知りたい欲」を開放する

自分は、「アウトカムを出す」をことにフォーカスしてしまうので、本当は自分も持っている「仕組みを知りたい」という欲を引っ込めて、速く終わらせて結果を出したいとうずうず思ってしまう。

しかし、実際にしばやんさんと仕事をすると問題解決がスーパー速い。プログラミングに関しては前回、「理解」が重要じゃないか?と考察したけど、しばやんさんの根本が「仕組みを知りたい欲」だとすると、自分も真似してみるのがよいだろう。

私も、ブログをよく書くけど、技術ブログに関する悩みは、どうも薄く感じてしまう。そんなときに、ちょうどいい事件が起こった。

全く同じ事象に関するブログを書いてみる

しばやんさんと一緒に仕事をしているときに、しばやんさんから教わったことがあった。その事を忘れないようにブログを書こうと思った。しばやんさんがブログをペンディングするのでもうすぐPublishすると言っておられたのをてっきり忘れて、自分が先にブログを書いてしまった。すみません、、、orz

その後速攻で、しばやんさんが本家ブログを公開してくれました。

私も、しばやんさんの真似をしようと思っていたので、いつもだったら、スピード重視で、できたらいい的なノリで書くのだけど、今回は、もう一回ランスルーしてから、気になるパラメータなども見返して調べて、理解してから書いたつもりだった。しかし、2人が全く同じテーマについて書いたブログを見比べると違いが明確だ。端的に言うと

  • 牛尾: どうやったら出来るか
  • しばやん先生: 解決したい問題、ポイント、内部の挙動

といった具合だ。内部の挙動とかどうやってわかるんだろう?と感じだったので、本人に聞いてみた。

しばやん先生に直撃する

直撃してみた

shibayan2.JPG

このやり取りや前回の観察を合わせて、しばやんさんに近づくための暗号解読を試してみたい。

しばやん先生の道具箱

前回と合わせて

それぞれについて、考察してみたい。

ReSharper

ReSharperは、VisualStudioの Extension で、便利なスニペットや、強力なサジェスチョンそして、簡単な操作でデコンパイルが出来る。だからGitHubで見つからないようなコードでも、ソースコードのダウンロードに対応していないライブラリもゴリゴリにコードを見ることができる。しかし、インターフェイスのようなコードしか見えないコードもある。

.Net Source browser リファレンスソース

.Net Core リファレンスソースです。単にリファレンスソースというわけではなく、クラスやメソッドをクリックして、その詳細を見たり、ディレクトリ構造で閲覧したりといったことができます。ReShaperのデコンパイルで見れなかったコードもここだと見れるケースが多くあります。

しかし問題も、、、

自分も最近はこの2つのツールを使って、「コード」を読むことを時間をかけるようにしています。しかし、がっつり時間がかかったり、自分がたどれなかったようなクラスを見つけ出したりしばやんさんは出来ました。

先ほどのしばやんさんとの会話を見ていても、しばやんさんは、きっと、中身を知ることが楽しいのだと思います。時間がかかっても、知りたいことを、しっかり時間をかけて知ろうとされておられるのかもしれません。私も時間がかかること、最初からできないことを前提に、時間をかけてコードを読むようにしてみました。

.Net Core library

GitHub の .NetCore のソースです。.Net Framework とは実装が違う場合がありますが、リファレンスソースは、Windows ベースのソースなので、Linux で動くんかいな?というコードが出てくる場合があります。その際は、.Net Core Library のソースを見てみると問題解決することがあります。例えば、HttpClientHandler の読みたかったコードが、HttpClientHandler.Windows にあったとすると、Linux で動くんかいなと思います。

WindowsHttpClient.JPG

その場合は、GitHubを参照すると、該当ソースがあって、ちゃんと期待するコードが書いてありました。これで一安心

github.JPG

知っている人に聞く

しばやん先生はもともとアーキテクチャとか深く理解されておられますが、さすがにコードがなくてわからない部分も芝やん先生にありそうです。その時は、中の人に聞いて理解されているようです。

しかし、マイクロソフトの人はたくさんいて、自分も含めそんな人は、直接プロダクトチームに聞くことができます。そんな人より、しばやんさんのほうがよく知っているのはなんなのでしょう?中の人のほうが絶対的に優位なはずです。

おそらく、私を含めた普通の人は「中身だからわからない」でOKにしてしまったり、自分が理解していない箇所に関して鈍感なので、自分が理解していないのに気が付いてない気がします。

だから、自分が納得いかない部分があったら、徹底的に聞いて理解してみたいと思います。

ARM の値などを見てみる

ARM は Azure Resource Manager の略で、Azure のリソースをデプロイするテンプレートを送信して、リソースを作成したり、更新したりするような、REST-APIのことです。実際にデプロイをすると、JSON で構成された値が、Azure 側で値が埋められてレスポンスが返ってきます。その値を見ていると、内部でどういった管理をしているのか?どういう値を管理しているのか?ということを理解することができます。ちなみに、インフラの鬼である真壁師匠も、ARMを愛でていると、酒が飲めるという名言を残しています。

自分で検証する

上記のことをやったとしても、自分が間違えているケースがあります。上記で「理解」した内容を基に、実際にコードを書いてみて思った挙動をするのかを検証します。検証をするためのコードも書いたりします。しばやんさんもちゃんと検証してからブログを書いてるとおっしゃっておられました。

やってみた

というわけで、自分も、ブログを書くときに、時間を気にせず、理解したい部分を全部読んで、しばやんさんに質問しながら、納得いってから初めてブログを書いてみました。その効果はまだまだですが、少しづつ「コードで理解する」感覚が少しづつ慣れてきたような、、、めっちゃ遅いですが。

おわりに

今回ももちろん、自分の観察だけの内容だけど、どうやったらしばやんさんにちょっとでも近づけるかを考えてみた。中身を理解することを楽しんで、時間をぶち込む。結果として、将来スピードは上がるかもしれないけど、今はスピードは気にしない。一歩一歩。井上さんが、しばやんさんを評して、柔軟な思考というポイントも上げておられた。また、しばやんさんの研究が進んだらブログを書いてみたい。

TsuyoshiUshio@github
プログラマ。自分の学習用のブログです。内容は会社とは一切関係ありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away