Eat, Play, Nap and Code

食とあそびと昼寝とプログラミング学習

Practicing Railsの良さを広めたい

はじめに

www.justinweiss.com

ちょっとずつ読んでいたPracticing Railsという本を読み終えたので、簡単な書評でも書いてみようかと思います。 日本語になっていないけど、本当にためになるよい本なのでみんな読んでほしい。

伊藤淳一 (id:JunichiIto)さん(この本の存在を教えてくれたのも伊藤さん)がいつか翻訳してくれるかもですが、その日が来るまでは英語で読んでもいいかも…👀

もくじ

Practicing Railsについて

どんな本?

Rails初学者が「楽しくRailsの学習を続ける」ためのTipsを集めた本です。 公式Docsを読め、ソースコードを読め、エラーログを読め、みたいな言説はもちろん正論なんですが、正しさだけじゃ人は学び続けられないのだ…!

誰が書いた?

Justin Weissというシアトル在住のエンジニアの方だそうです。

Ruby/Railsのカンファレンスでも多数登壇されているみたい。 詳しくはご本人のWebサイトを参考にされるとよさそうです。

どんな人におすすめ?

  • Rails始めたての人(FBCで言うとSinatraでメモアプリを作ったくらいの人)
  • rails newしたあと膨大にファイルができるのがなんか怖いと思っている人
  • 英語でなんか技術書を読んでみたいと思っている人
  • プログラミング学習のモチベーションをあげたい人

私が実際に読むのにかかった期間

1日30分くらい読んだり読まなかったりって感じで、1ヶ月くらい読んでいました。

複雑な話もなくて分量もそこまで多くないので、真面目に時間をさけば1-3日で読み切れると思います。

Practicing Railsの魅力

1. 英語が怖くない

Tests allow you to safely defer design decisions. As your design skills improve you will begin to write applications that are sprinkled with places where you know the design needs something but you don’t yet have enough information to know exactly what. These are the places where you are awaiting additional information, valiantly resisting the forces that compel you to commit to a specific design.

Sandi, Metz. Practical Object-Oriented Design (p.195). Pearson Education

www.poodr.com

↑の文章読んでみてどう思われますか? 私はめちゃくちゃこゎぃ🥺って思います。知らない単語ばかりだし文法も難しいし…

この本aka POODRは輪読会で読んでいてとてもいい本なんですが、設計についての抽象的な話が難しいということもありますが、比喩や装飾的な言い回しが多く、英語が第二言語の人にとっては認知負荷の高い本なのではないかと感じます。

その点Practicing Railsの英語はこんな感じ。↓

Testing doesn’t have to be intimidating. It turns out that with a few tips about how to write and organize your tests, testing your code isn’t so much different than writing your code. So as you build up your coding skills, you can improve your testing skills at the same time.

Justin Weiss Practicing Rails (p.118)

ワ〜簡潔で分かりやすい!終始これくらいの英語なので、ほとんどストレスを感じずに読むことができます。

著者の方が非英語圏の読者向けに書いたのかどうかは分からないのですが、少しでも読者の「怖い」「とっつきづらい」という気持ちを軽減するために平易な文章で書かれているのかなと推測しています。

余談ですが、「読みやすい英語と読みにくい英語」について面白い記事を見つけたので貼っておきます。 私は人文系出身で、言語芸術に馴染みがあるためわかりやすい言葉が全ての場面で正義だとは全く思わないですが、誰でもアクセスしやすい言葉とそうではない言葉の違いについて分析されていて面白いです。

pudding.cool

2. 無駄に写経させない

ハンズオンでアプリを作りながら学ぶ系の本ではないので、コードは文章の説明程度にしか出てきません。 ただ全く手を動かさないで一方的に教わる本というわけではなく、要件を簡潔な文章にし、そこからUIを描き出したり、そのUIから必要なモデルやコントローラーを見つけていくというエクササイズに1章が割かれています。 現実をコードに落とし込む1歩手前のモデリングの作業について、具体例を使って詳しく教えてくれている印象です。

自分の経験に当てはめて考えると、何を書いているのかもよくわかっていない時点でコードをひたすら写経してアプリを作るのは「これは単にうつしてるだけで勉強になっているのか?」という気持ちになりがちだったので、こういう段階を挟んでくれるのはありがたいと思いました。

あと写経が必須の技術書は、PCが手元にない環境で読むのがだるくなりがち(=読むハードルが上がる)なので、その点この本は寝ながらとか外出中とかにも気軽に読めるのがいいなと思いました。

3. 新しいことを学ぶこと全般について学べる

Railsを学ぶということは、Railsだけを学ぶわけではなく膨大な数の付随知識を求められることになります。

Railsに限らずプログラミングを学習していると、Aを知りたいと思っただけなのにBに関する知識を求められて、Bについて調べたら全然聞いたこともないCについて調べることになって、もともとのAになかなか辿り着けない…みたいなことってよくあると思います。

私は分からないという状態にはだいぶ慣れたとは思いますが、それでも自分の無知にがっかりしたり、学ぶべきことの膨大さに疲弊してしまうことはまだよくあります。

この本で紹介されているTipsをひとことで表すと「難しいタスクは細かく分解しろ」なのですが、新しい分野を学ぶときの心構えとしてもこのTipは応用されています。 例えばRailsが分からない!と一言で言っても、ActiveRecordがわからないのか、Rubyが分からないのか、JSが分からないのかetc...によって取るべき対処は変わってきます。そして学ぶ優先順位も変わってきます。 漠然とした「Rails分からなくてつらい」も、細かく分解すればひとつひとつは乗り越えられなくはない難易度のタスクだと分かってきます。著者は本当に何でも見事なタスク分解を繰り返し例示してくれるので、「難しくてつらい」と思ったら何でもタスク分解してみようという気持ちになってきます。

また、個人的にとても好きなのが、「何かをやるということは、それ以外の別の何かをやらないことでもある。不安かもしれないけど、やらない何かはあくまで今はやらないことであって、一生やらないわけじゃないから、一旦忘れておいて今やるべきことに集中しよう」という考え方です。

今すぐにできることには限りがある一方で今進んでいる道が正解か分からないため、あれもこれも勉強しなきゃと焦ってしまいがちなので心に留めておきたいなと思っています。

4. Tipsがとにかく具体的

最近アジャイル開発の本を複数読んでいるのですが、TDDでコードを書いていない自分をダメ人間のように感じてつらいんです…。 でもTDDで書こうと思っても設計の経験が乏しすぎて手が止まってしまい、何も書き始められないことにもどかしさを感じます。

この本は初学者の気持ちに寄り添ってくれるので、最初からTDDに取り組むことは勧めていません。一方でTDDはやらなくていいとも言っていません。

TDDだって難しいタスクのひとつなのだから分割すればいい、例えば以下のような段階を踏めば少しずつ慣れることができるのでは?と提案しています。

  1. テストなしでアプリケーションのコードを書く
  2. アプリケーションのコードを読んで、コードが壊れる可能性を列挙する
  3. すでに存在するアプリケーションのコードへのテストを書いてみる
  4. TDDで一部のコードを書いてみる

1に慣れていないうちに4を目指すのは無謀なので、少しずつコンフォートゾーンを広げていき段階的に出来ることを増やしていこうとのことです。

この本はとにかく提案される解決策が現実的で具体的なので、自分でもできそうなことに今日から挑戦してみようって気持ちになれます。

Practicing Railsの不満点

1. お高い🥲

$49なので、現在の日本円だと7000円強…?

日本の技術書も本としてそこそこ高い部類だと思いますが、それでも4000円を超えることはなかなかないので、$1が100円だとしても$49はちょっとひるんじゃう価格だなと思ってしまいました。加えて言うまでもなく円安でもあるのでとってもとっても高い(つらい)。

私は著者のメルマガも定期購読しているのですが、メルマガをしばらく読んで良さそうだなと思ったら買うのもいいかもです。

2. 若干typoがある(許容範囲内)

インスタンス変数が普通の変数になっている箇所を何箇所か見かけました。

まあコードを写経して動かす本ではないのでほとんど気にならないです。

こういうこともあるんですね👀

3. 完全なRails初心者のときの自分が読んでどう思ったかは分からない

曲がりなりにもRailsで一度自分のサービスを作った現在だからこそ、「タメになる」「役に立つ」と思えている点は否めないかもとは思いました。

UIから設計を開始するみたいな考え方は、今思うと所属していたプログラミングスクールのフィヨルドブートキャンプRailsのプラクティスでも推奨されていました。しかしRailsが提供する7つのアクションについてあまり理解できていなかった当時の私は、scaffoldで出来るような1番ベーシックなUIを想像することすらとても難しく感じました。

そのため、完全なRails初心者の方が読んだら、特に最初のころの章は難しいと感じるかもしれません。

それでも「難しいタスクを細かく分割する」や「学習ルーティーンを作る」、「新しい技術情報をどうやって・どこまで追いかけるか」など、どの学習段階の方が読んでも役に立つTipsが紹介されているので気になる章だけでも読んでほしいです。

おまけ(私の読んでる時のメモ)

英語の文章はどこに何を書いてあったのかを後から探すのが大変なので、紙のノートにいいなと思ったことを書き留めながら読みました。 まあ紙である必然性は特にないので、好きなような方法でメモしながら記憶のトリガーを作っていくのがいいのかな〜と思います。

手書きメモ

おわりに

1冊英語の技術書を読み切れたって経験があると、わりとなんでも手を出せるようになる気がするので、そういう用途でもこの本はかなりおすすめです。

私の場合はFBCの輪読会で『リーダブルコード』の原著を読んだのが英語で技術書を読む自信を持てるきっかけになったので、この本も興味のある方は有志を募って読書会をやってみるのもいいんじゃないかと思います。

教えてくださった伊藤さん、著者のJustin Weissさんに感謝です!