「SQL アンチパターン」を読んだ

良い評判をよく聞く本だったので読んでみた. 実際面白くてスルスルと読んでしまった.

SQLアンチパターン

SQLアンチパターン

ゴリゴリのパフォーマンスチューニングをする本ではなくて, テーブルとカラムの設計の話がメイン. スロークエリが生まれる原因とか N + 1 問題に代表されるパフォーマンス改善問題といった内容を期待している人は他の本を読んだほうが良いと思う.

全ての章で, このアンチパターンを用いるとこんな問題が発生しますよという具体的な例がいくつも提示されていたのが良かった. プログラマなら本能的にダメそうなニオイを最初から感じるだろうな, というくらいのレベルのアンチパターンもいくつも紹介されているけど, それらは実際にこのようにダメになるでしょうという根拠が示されてて説得力がある.

6 章と 8 章で出てきた「データへのメタデータの混入」「メタデータへのデータの混入」という表現がキャッチーで良いなと思った. どちらも人間が自前でデータ / メタデータを管理しようとしてしまって本来の SQL の機能を使えなくしてしまっていることが問題の要因だ, と喝破している良い言葉だと思う. 同時に従属テーブルや交差テーブルの優位性があらためてよくわかる.

13 章で出てきた NULL との比較は正直最初驚いた. しかし例えば NULL = 12345 が FALSE にならず NULL になるのは「不明な値が, ある値と等しいかどうかはわからない」からと説明されると, うーむなるほどその通りだとなって, その後に例示されている比較が全て自然な結果として受け入れられるようになり良い体験, 学びがあった.

同様に 14 章で GROUP BY に関するエラーの話が出てきて, ここも正直今までよくわかっていなかったのだけど, つまり出力される結果が全ての列で単一の値でなければならないこと (単一値の原則) を理解すれば良かったのだった.

しかし著者の Bill Karwin という人もこれだけの経験を抽象化してパターンに落とし込むのは並大抵の仕事ではない. 内容も濃く優れた書籍だと思う.

Rails チュートリアル完走した

9 月に転職して業務で Rails を使うことになり, ちまちま Rails チュートリアルを個人的に写経していたのがようやく完走した.

pione30.hatenablog.com

年内に完走するのを自分の中で目標にしていたので, なんとか達成できてよかった.

完走した感想

最初のうちは Rails の全体像がよくわからないまま書いてあるコードをうーむそんなもんですかと思いながら写経していたけど, 会社では毎日 Rails のプロダクションコードを読み書きするわけなので, 入社して 2 ヶ月くらいたった頃には業務で得られる知識のほうが Rails チュートリアルを上回っていて, それほど難しくもないなあと思いながら写経を続けていた. 14 章が終わったときも, やった終わったぞ!というよりは, あ, 終わったわ, というあっさりした感想が残った.

とはいえ一時トークンを用いた 11 章のアカウント有効化機能や 12 章のパスワードリセット機能の実装方法を勉強できたのは, ためになった.
提示されている原理やコードは一度見てしまうと簡単に思えてしまうけど, じゃあ何も見ずに 1 人で全部作れと言われたら普通の人間は絶対に何かしら抜け漏れやバグの混入を発生させるだろうという複雑さではある. そういう意味で後から辞書的に参照できる教材でもあるなあと思う.

時間確保が大変問題

Rails チュートリアルの写経は業務時間中ではなく自宅に帰ってから, 時間が確保できたときにちまちま進めていた.
もちろん業務時間内で手が空いたときにやることは会社的にも全然 OK だったと思う. ただ個人的には業務内容に対して集中して頭を使ったあと Rails チュートリアル側にコンテキストスイッチをするのがコスト高だった. あとはプライベートで勉強をする習慣を作りたいという動機もあった.

そうすると当然だけど帰宅後はご飯を食べてお風呂に入る時間と家事をする時間が必要で, ちょっと休んで気持ちを落ち着ける時間も必要で, 家族との時間も取りたくて, という感じで時間の確保が大変だった. Rails チュートリアルに割ける時間は取れても 1 日 1 ~ 2 時間といったところだった.
休日は基本的に家族や友人と過ごすことが主だったので, 1 日中 1 人でコードを書くようなことは無かった.

そんなこんなで完走に数ヶ月かかってしまって, 限られた時間の中から自分の勉強時間をどう捻出するかというのが最近の一番の課題であった.
現段階の答えとしては, やはり帰宅後の夜や休日に時間を確保するのは体力的な問題や不確定要素も多々あり限界があるので, 朝の人が少ない時間に出社して 30 分くらい自分の時間を確保するしかないかなあというところ. あと通勤電車内はコードは書けないけど本は読めるので, 本を読むのが時間の使い方として最適, という思いに至っている.

今後

そういう感じで無限に時間が無いと言いながら今後もやっていけたらと思う.

Rails チュートリアル 半分終わった

業務で Rails を使うことになったので, 暇なときに Rails チュートリアルをちまちま進めていた.

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

業務と並行してやると, そういえばこんなコードあったなみたいになって記憶に残りやすく便利.

Rails チュートリアルけっこう長くて 14 章まであって, 昨日やっと 7 章まで終わったので, 折り返し地点や! という気分でめでたいのでブログに書くことにした.

こちらは写経リポジトリの様子:
github.com

無事チュートリアル完了したらまたブログに書きたい.