blog.hamadu.net

2018/04/22 - 僕の20代を支えた本たち

Tags: poem

とうとう特に何も実績がないまま、30代になろうとしている。 そこで、20代を振り返り、自分のプログラマ人生を形作るのにお世話になった本たちをまとめてみた。順番は適当。

1. リーダブルコード

「良いコード」とは何か、という問い。この本を指針として、実践を繰り返すことで自分なりの答えを得たように思う。

  • 変数・関数名の名前付けに気を使え
  • 関心事を分離せよ

当たり前のことしか書いてない、読破して終わり、ではない。読み終わってからがスタートラインで、あとは実践あるのみ。

2. 誰のためのデザイン?

Webサービスに限らず、プロダクトを誰かに使ってもらうにはユーザ目線が欠かせない。「ヒューマンエラーは、人間のせいではなくデザインの失敗」という主張をしていて、当時大学生だった僕には衝撃的だった。

今は 改訂版 が出ているのでそちらを買うのがいいだろう。

3. 暗号技術入門: 秘密の国のアリス

暗号の成り立ちから各構成技術を平易に解説した本。この手の本としてサイモン・シン「暗号解読」 があるが、こちらはより実践向き。

4. 詳解UNIXプログラミング

性能の良いアプリを書くためには、その裏方として動いているUNIX系OSに対する理解は必須だろう。この本はUNIX系OSにおける初等的なAPI、

  • ファイルI/O
  • ユーザ・権限周り
  • プロセスとスレッド

などについて細かく解説してある。パラ読みしておくと特に高級なプログラミング言語のAPIコールの裏側で起こっている処理が想像できるようになる。 この本の内容のうち、特に I/O に絞った解説を 社内勉強会で発表した。

5. Linux Kernel Development

少し古いバージョン(2.6)が対象だが、Linuxカーネルの中身が解説してある。

  • プロセススケジューラの仕組み
  • インタラプトの仕組み

などが分かる。実際にカーネルのコードと照らし合わせて読むのがおすすめ。

6. プログラミングコンテストチャレンジブック

プログラミングコンテストで出題されるアルゴリズムを解説した本。当時大学生だった僕にプログラミングコンテストの奥深い世界を教えてくれた。僕は今でも 趣味として競技プログラミングに取り組んでいる。20代のみでなく、僕の今後の人生を豊かにした本とも言えるだろう。

7. 代数系入門

数学における代数構造、群・環・体について解説した本。大学数学だが、必要な前提知識は少なく高校生でも読める。2年ほどで読破した。

この本の他にも同シリーズの 線形代数入門 解析入門 をやった。集合・位相入門 は今手を付けている途中だ。社会人になってから、空いた時間で数学を学ぶ習慣がついたのは精神衛生上良かった。研究者になるわけではないのだから、学んだ内容が直接役立つことは少ないだろうが、何もしないよりかは有意義だろう。

8. エレガントな問題解決

そもそも「(数理的な)問題を解く」にはどのようなアプローチが有効なのか。 一般的な方法論の本として「いかにして問題をとくか」 が有名だが、この本はより実践的な考え方を例題とともに解説している。 例えば、

  • 与えられたものの最小/最大の値に着目する
  • 不変量に着目する
  • モノの関係をグラフに変換してみる

など。題材は数学だが、考え方は競技プログラミングの問題にも流用できる。