なんでもできるとおもわれがちな人ができないこと

はじめに

以下記事の続きです。実例編といってもいいかもしれません。

satoru-takeuchi.hatenablog.com

完璧超人とまではいかないでしょうが、わたしも次の理由によりSNSなどでは「いろいろできるすごい人」「低レイヤに詳しい人」と思われがちです。

  • Linuxカーネルに詳しい。カーネルに詳しい人は無条件でなんでもわかっていると誤解されることが多々ある
  • 自分あるいは自分が所属している組織の成果をよく宣伝する。このため、そういうことを好まない人に比べて「何かできる人」という印象がつきやすい
  • twitter上でそれなりに認知されている、かつ、twitter上で様々なすごい人とよく話している。「すごい人と話しているとすごい」と思われがち。

本記事の趣旨は、その私が世の中で想像されるほどいろいろできるわけではない、できることは限られているということを書いてみようということです。自分の弱みをわざわざさらけ出すと商品価値を下げることになりはしないかとも思いましたが、できないことをできると思われても困るので試しにやってみることにしました。

あまり多くの分野について話してしまうと焦点がボケるので、わたしが主戦場としているいわゆる低レイヤ技術について、さらにその中の独断と偏見で選んだ数個のものに絞って話します。

OSカーネルについて

Linuxカーネルについては、プロセススケジューラはだいたいわかる、ブロックデバイス、一部ファイルシステムについてはそこそこわかる、といったところです。このあたりは過去に開発、サポート経験がたくさんありますので、upstreamのLinuxカーネルの開発をゴリゴリやることもできますし、トラブルが起きても半分以上は一日以内で解決できる自信があります。それ以外の部分についてはかなりの濃淡がありますが詳細は省きます。

明確に苦手というところについても書いておきます。たとえばTCP/IPなどのネットワークに関するところは、そもそもカーネルどうこう言う前にネットワーク技術に関する経験が浅いので、よくわかりません。ハードウェアに近いところについても明るくないです。デバイスドライバについてはまともに書いたことがないです。

Linux以外のOSのカーネルについてはOSSであれば参考に見ることはありますが、これらのコードを読み解いてupstreamに取り込まれるコードを書けるレベルではまったくないです。

自作OSについて

過去にOSカーネルは二回実装したことがありますが、どれもオモチャといっていいレベルです。カーネルの上にUNIXライクなシステムを載せられるような本格的なものを作ったことは無いです。あくまでハードウェアおよびOSカーネルについての最低限の知識を得るための手段としてやっただけです。

OS自作を趣味としてやっている人を横目に見て凄いな、楽しそうだなと思う一方で、わたし個人としては特別な思い入れはないです。

バイナリアンかどうか

バイナリを直接扱う能力は持ち合わせていません。ここでは16進ダンプを見て必要な情報を見つけ出す、いわゆる目grepの能力について述べます。目grepについては次の2つの記事が詳しいので、知らない人は一読ください。

satoru-takeuchi.hatenablog.com

note.com

2つ目の自分で書いた記事にも書いていますが、わたしはこの手のことが息をするようにできるわけではありません。訓練によって一部についてはできることがある、という程度です。

コンパイラが書けるかどうか

まともなコンパイラは書いたことがないです。最近興味が出てきたので、以下ruiさん本で勉強中です。

www.sigbus.info

構文解析や字句解析については上記ruiさん本や、UNIXプログラミング環境に記載のhocの章に書いてあること以上の知識は持ち合わせていません。

アセンブリ言語が扱えるかどうか

読むほうはx86_64ならば簡単なものなら読めます。しかしカーネル内に出てこない浮動小数点演算についてのコードはマニュアルを見ながらでないと読めないです。最近のCPUに追加されたようなかっこいい命令は全然わかりません。書くほうについては必要に迫られて書くことは稀にありますが、苦手、かつ、遅いです。「アセンブリ言語が苦手なのにLinuxカーネル屋さん?」と思われるかもしれませんが、LinuxカーネルのほとんどはC言語で書かれている、かつ、わたしが得意とするのはハードウェアから遠い部分なので、さほど困らないのです。

好き嫌いの話をすると、あんまり好きではありません。コード量が多くなりがちなことと、および、実現したいロジックだけではないCPUの実装の都合によって追加で考えなくてはいけないパズル的要素が多いのがその理由です。

おわりに

本記事を読むことによって、わたしはできるところはすごくできるけれども、それ以外は別にそうでないことがある程度わかっていただけたのではないかと思います。とくに、いままで私を過大評価をしてくださっていたかたにこれを読んでいただいて、「なんでもできると思っていた人が実はそうではないんだ」や「低レイヤですごいっていうのは雑なくくりだった」などと認識をあらたにしていただければ嬉しい限りです。それとともに、完璧超人と戦って疲弊している人の心を少しでも軽くできれば、とも思います。