Ruby Journey - 動的言語への誘い

転職してRubyを触るようになったので、言語的にキャッチアップするために行ったことを残しておこうと思います。

 

Java, Javascript(ほんのちょっと), Swift, Objective-C, C++が主に触れてきた言語ですが、大半は静的型付け言語です。いわゆるコンパイルというプロセスを通して、プログラムを生成するタイプのものですね。(厳密には型の保証性から静的型付けにも強いと弱いがある)

 

弘法筆を選ばず、とはいいます。しかし、その本質はどの筆でも同じことができるだけではなく、その筆の特性を生かしたアウトプットができることだと思います。

 

大きく分けて4つのプロセスを経てRubyに慣れていきました。

1. 動的言語との向き合い方を考える

2. Rubyの使われ方を理解する

3. Rubyの特性を理解する

4. Rubyとの付き合い方を知る

 

1. 動的言語との向き合い方を考える

静的言語を中心に触ってきた自分はコンパイラを信じることを盲目的に正しいと思ってました。オブジェクト指向パラダイムでは、相手のことを必要以上に知る必要がなく正しく機能するプログラムこそ、オブジェクト指向的だと言われてます。

動的言語ならではの設計と、オブジェクト指向の考え方を与えてくれた本が

こちら。

 

ダックタイピングの特性の話と、静的言語だったらかっちり作ってたものを柔軟に、そしてコンパイルなしで、うまく設計していく道筋について気づきを与えてくれました。

とても読みやすくスーッと読みきれました。「コンパイルの保証してくれることは実は何もない」という話があるなど、静的言語使用者にはなかなか刺激的な(?)内容となっております。 

2. Rubyの使われ方を理解する

現場で使える Ruby on Rails 5速習実践ガイド

現場で使える Ruby on Rails 5速習実践ガイド

 

Rails使ってる人の間では有名みたいです。Railsでのアプリケーション開発フロー、

リファクタリング、バグ対応、テスト、フロント、チーム開発、なんでも取り扱ってます。かなりフルスタックな内容となっているので結構時間かかりましたが、とてもよい予習になったと思います。おすすめです。

 

3. Rubyの特性を理解する

 Rubyでも書けるから、Rubyでなくてはいけない作りへとレベルアップさせる礎になるのが、言語特性をよく知ることです。

RubyにおけるClassを定義することの本質はなにか、Newした時に一体何が行われているのか。この辺りを説明した上で、Rubyの持つ特性の一つである、メタプログラミングへの世界へ案内してくれる本も読みました。

メタプログラミングRuby 第2版

メタプログラミングRuby 第2版

 

話としてはGenericsであったり、Template Programmingの話に近いです。

柔軟な言語の上で柔軟性を保ったプログラムを作る上では必要な機能です。

メタプログラミングは、Gem(Rubyのライブラリ管理システムで取り扱われるライブラリ群)の裏側では当たり前のように使われています。RailsActiveRecordも使ってます。

動的言語メタプログラミングで生産性が飛躍することを思い知らされます。

4. Rubyとの付き合い方を知る

Effective Ruby

Effective Ruby

 

裏側を知り、一般的な使い方を知ったらあとは「やってはいけないこと」と「やるべきこと」を繰り返すことです。 現場でたくさん経験してきた人にとってのRubyとうまく付き合うために避ける書き方や使うべき機能についてたくさん知れる本でした。

メタプログラミングとEffectiveはしばらくは繰り返し読むと思います。

 

根底には、C++やSwift、過去の言語経験があってこその移行プロセスかもしれませんが、基本的には新しい言語への適応手順は同じようになると思います。

 

困っていたら読んでみてください。