Ruby Journey - 動的言語への誘い
転職してRubyを触るようになったので、言語的にキャッチアップするために行ったことを残しておこうと思います。
Java, Javascript(ほんのちょっと), Swift, Objective-C, C++が主に触れてきた言語ですが、大半は静的型付け言語です。いわゆるコンパイルというプロセスを通して、プログラムを生成するタイプのものですね。(厳密には型の保証性から静的型付けにも強いと弱いがある)
弘法筆を選ばず、とはいいます。しかし、その本質はどの筆でも同じことができるだけではなく、その筆の特性を生かしたアウトプットができることだと思います。
大きく分けて4つのプロセスを経てRubyに慣れていきました。
1. 動的言語との向き合い方を考える
2. Rubyの使われ方を理解する
3. Rubyの特性を理解する
4. Rubyとの付き合い方を知る
1. 動的言語との向き合い方を考える
静的言語を中心に触ってきた自分はコンパイラを信じることを盲目的に正しいと思ってました。オブジェクト指向のパラダイムでは、相手のことを必要以上に知る必要がなく正しく機能するプログラムこそ、オブジェクト指向的だと言われてます。
動的言語ならではの設計と、オブジェクト指向の考え方を与えてくれた本が
こちら。
オブジェクト指向設計実践ガイド ~Rubyでわかる 進化しつづける柔軟なアプリケーションの育て方
- 作者: Sandi Metz,?山泰基
- 出版社/メーカー: 技術評論社
- 発売日: 2016/09/02
- メディア: 大型本
- この商品を含むブログ (6件) を見る
ダックタイピングの特性の話と、静的言語だったらかっちり作ってたものを柔軟に、そしてコンパイルなしで、うまく設計していく道筋について気づきを与えてくれました。
とても読みやすくスーッと読みきれました。「コンパイルの保証してくれることは実は何もない」という話があるなど、静的言語使用者にはなかなか刺激的な(?)内容となっております。
2. Rubyの使われ方を理解する
- 作者: 大場寧子,松本拓也,櫻井達生,小田井優,大塚隆弘,依光奏江,銭神裕宜,小芝美由紀
- 出版社/メーカー: マイナビ出版
- 発売日: 2018/10/19
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Rails使ってる人の間では有名みたいです。Railsでのアプリケーション開発フロー、
リファクタリング、バグ対応、テスト、フロント、チーム開発、なんでも取り扱ってます。かなりフルスタックな内容となっているので結構時間かかりましたが、とてもよい予習になったと思います。おすすめです。
3. Rubyの特性を理解する
Rubyでも書けるから、Rubyでなくてはいけない作りへとレベルアップさせる礎になるのが、言語特性をよく知ることです。
RubyにおけるClassを定義することの本質はなにか、Newした時に一体何が行われているのか。この辺りを説明した上で、Rubyの持つ特性の一つである、メタプログラミングへの世界へ案内してくれる本も読みました。
話としてはGenericsであったり、Template Programmingの話に近いです。
柔軟な言語の上で柔軟性を保ったプログラムを作る上では必要な機能です。
メタプログラミングは、Gem(Rubyのライブラリ管理システムで取り扱われるライブラリ群)の裏側では当たり前のように使われています。RailsのActiveRecordも使ってます。
動的言語とメタプログラミングで生産性が飛躍することを思い知らされます。
4. Rubyとの付き合い方を知る
裏側を知り、一般的な使い方を知ったらあとは「やってはいけないこと」と「やるべきこと」を繰り返すことです。 現場でたくさん経験してきた人にとってのRubyとうまく付き合うために避ける書き方や使うべき機能についてたくさん知れる本でした。
メタプログラミングとEffectiveはしばらくは繰り返し読むと思います。
根底には、C++やSwift、過去の言語経験があってこその移行プロセスかもしれませんが、基本的には新しい言語への適応手順は同じようになると思います。
困っていたら読んでみてください。