地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

「Linuxプログラミングインタフェース」読書会を開催しました(現在も進行中)

前説

adventar.org

この記事は「GMOペパボエンジニア Advent Calendar 2022」の3日目の記事です。アドカレが始まりました!もう1年が終わります!やばい!寒い!!

去年はRedisのコードリーディングを書いてましたが今年はLinuxネタです!(来週には実践Redis入門が出るらしいですね!楽しみです!)

ryuichi1208.hateblo.jp

目次

本編

会社では勉強会や読書会などがとても活発に開催されています。私も

tech.pepabo.com

tech.pepabo.com

といった読書会に運営側として参加していました。読書会で読む本の選定はチームの現状抱えている課題に寄り添うような本が選出される傾向にあり当たり前ですが自分だけが読みたい本というのは読書会には向いていません。その中で昨年プログラマーを引退する先輩から以下の本をいただきこれは読むしか無いと思いつつも読む機会がなかった。

ryuichi1208.hateblo.jp

読書会の運営にも携わっていたりしたので「Linuxプログラミングインタフェース」とかどうですかね〜というのを軽めに出してみたが他にも優先して読むべき本が多数あったので落選してしまいました(いい感じに@kurotakyさんに流されました...)。残念。読みたい本を好きなタイミングで好きにやれる読書会があればいいのに!と思って開催したのが今回の「たった一人のLinuxプログラミングインタフェース」読書会になります。(ちょっと何を言ってるのかは自分でもよくわかっていない)

どんな本なの?

6.5cm幅で2Kg以上ある本です。Linuxのソフト開発する際に手元にあれば安心の一冊になっています。本の冒頭にもあるもですがこの本は本棚にしまわれることはなく常にリファレンスとして読まれるべきだと書かれていて広く深くの内容を取り扱っている本です。「W・リチャード・スティーヴンス」の本に惹かれた人なら絶対にハマる本だなぁと思いました。(詳解TCP/IPはVol2以降読めてないので読もう...)

W・リチャード・スティーヴンス - Wikipedia

UNIXネットワークプログラミングなんて何度読んだことか。。。というよな本。そんな本の続編だと言われるような本です。Linux/Unix開発者のバイブルになりうる一冊。

何故この本を選んだのか

そこにこの本があったから。あとはLinux全然ワカラナイので自信をつけるためと一歩深い視点から普段の業務が行えるようになるかなと思い選びました。

現在の進捗

33章まで来ました。あと半分くらいです。はい。なんと読み終わっていません。

読書会の進め方

以下のような感じで進めました * 時間を決めずに空いた時間で読んでいく * 気になった部分をまとめてTwitterへ投稿(センシティブ画像になってる...本の写真)

  • 担当章の割り振り

本の構成は全部で64章で1600ページあります。それぞれ担当を以下のように割り振り読書の加速を狙いました。しかし一人しか参加してないのであまり加速できませんでした。

1章~64章 私

印象に残った章

前述では33章までと書いてますが気になった章をつまみ読みしてるので実質読破しています(してない)。中でも一番おもしろかったのは「63章 高度なI/Oモデル」です。この章では基本的なIOから発展して「select(2)、poll(2)、epoll(2)」などの説明となっています。中でも面白かったのは「レベルトリガ通知とエッジトリガ通知」の話です。レベルトリガ通知とエッジトリガ通知自体は大学の講義でプログラムとは全く違う分野(電子工学)で聞いたことはあったのですがepoll(2)を使う際にも出てくるのかと面白い気持ちになりました。

mackey-lab.hatenablog.com

ちなみに私は過去にselect(2)、poll(2)、epoll(2)なんて使い分ける必要なんであるんだ!みたいなのを書いていたのですがパフォーマンスを気にする場面でシンプルなselect(2)や移植性の話で使われているのだなと数年後しに気づけてよかったです。(epollはLinux独自のシステムコールPOSIX準拠ではないのでcurlとかいろんな場所で使われるようなプログラムから読んじゃうと移植性が低くなるよねという話。Nginxとかはそういえばこの辺はオプションで提供していた)

感想

つまみ読みして走りきっただけで読みきれてないがそれでもめちゃめちゃお腹いっぱいになる本でした。Linuxに関わるプログラミングをする際の辞書としてよいと書かれていて自分はそこまでLinuxに関わるプログラミングをしてるわけではないですがそれでも勉強になる内容は多くありました。procfsなんかが特にそうでmackerel-plugin-linux-netstatなんかはMackerelプラグインとしてLinuxカーネルのメトリクスを取ってきて〇〇するみたいなことをやっていたりします。メトリクス自体の意味についても雰囲気でやってた部分がさらに正確に深く理解できるきっかけとなっていてとても良かったです。難易度的には詳解UNIXプログラミングの次あたりかなぁと思ったりしました。

後は当たり前ですが自分ひとりで読んでるので内容についてディスカッション出来ないのは寂しさを感じました。

まとめ

引き続き読んで行きます!次は「詳解 Linuxカーネル」か「High Performance MySQL, 4th Edition」あたりを挑戦したいなと思っています!

「あとは読んで得た知見から小さめのプログラムを書いた」で止まっているのでLinuxの内部的をもう少し深く呼んだアウトプットがなにかしたいLinux スケジューラーは過去にもソースを仕事で読んでいたことがあるのでその辺からなにかやってみるとよいかも