Subscribed unsubscribe Subscribe Subscribe

ジャバ・ザ・ハットリの日記

日本→シンガポール→ベルリンへと家族と共に流れ着き、ベルリンのスタートアップで働くソフトウェアエンジニアの日記

英語とプログラミングを同時に勉強するなら「Practical Object-Oriented Design in Ruby」の一択

短時間で効果的に英語とプログラミングを同時に勉強したい、となったらその方法として「英語でプログラミングの本を読むこと」がある。ただこれで私は何度も失敗した。失敗の原因は「本選びが悪い」に尽きるが、その主な理由として3つある。

  • 英語が難し過ぎると訳が分からず頭に入らない。単に英語の字を目で追ってるだけ状態に入る。ネイティブとか英語上級者向けの本とは区別するべき。
  • プログラミングなどの技術書は陳腐化が激しく、その本を読む価値がたった数年で激しく減少する。「今さら○○に関する技術の本読んでもな。。」という気持ちで読んでも効果無い。
  • 英語の初心者が苦労してさんざん読んだ後で「これダメだわ」となったときの労力、コスト、時間の損失がデカい。これは避けたい。

数々の失敗の末に辿り着いた結論は、英語とプログラミングを同時に勉強するなら「Practical Object-Oriented Design in Ruby」の一択、ということ。本当に今まで読んだ本の中でこれ以外にオススメできる本を私は知らない。コレだけ。良書はあっても英語が難しスギたり、特定技術のみに言及していて汎用性が無かったり。
その点、この本はパーフェクトに表題の要件を満たしている。

Practical Object-Oriented Design in Ruby: An Agile Primer (Addison-Wesley Professional Ruby)

Practical Object-Oriented Design in Ruby: An Agile Primer (Addison-Wesley Professional Ruby)

内容はオブジェクト指向とその設計デザインに関すること。一応 in RubyとなっているがRubyの本ではなくソフトウェア設計思考の本。Rubyに関する記述はカンタンな例題だけで、本のエッセンスを読み取ることに関しては他の言語のエンジニアであっても問題無い。

この本を読む前と後では同じコードを見てもその見え方がまったく変わってしまった。

オブジェクト指向デザインなんぞ無くてもコードは書けてしまう


幸か不幸かRubyは洗練された言語で基本的な書き方さえ把握すれば、設計デザインのことを考えなくても動くソフトが完成してしまう。だいたいどんな人が書いたコードでもプログラムというものはだいたい動いている。今は動いている。触らなければほぼ問題ない。

で、往々にして「ちょっと変更して」「この機能追加してね」となる。
その時の反応が「え?変更?やめて!」「変更したら動かなくなるかも。。」と少しでも思ったらそれはコードを書く技術ではなく設計思想や設計デザインに問題があると思った方がいい。なぜなら本当にオブジェクト指向に沿ってデザインされたコードであれば容易に変更が可能で、誰が見ても見通しがよく、再利用可能な状態になっているはずだから。

これと似たような「オブジェクト指向とはー」って話は何度も何度も聞いてきたがなかなか腹落ちしなかった。
そうは言っても「ナンチャラ思考かチコウか知らんが、そんなん無くても俺のコードは現に動いているゾ」が壁になって、設計思想に関して深く追求することがなかった。今となってはそれがどれほどムダな遠回りだったか分かる。

普通っぽい英語の文章なのにまるで著者と会話しているかのように錯覚する本

英語も文章も上手いというのが理由だろうが、まるで会話しているように読めるのがこの本の特徴。コードとか事例があって「むむむ」っと考えていると、次ぐらいの文章で「きっとあなたは○○○について悩んでいるのでしょう」と書かれている。

そう、そうなの!ってなること多数。この会話しているように進める本は理解をめちゃくちゃに助けれくれる。読者が悩むとこ、理解のレベルを想定して書いてあり、またそれがドンピシャだから自分が進化しているのが感じられる。

英語に関してはおそらく技術書の中では郡を抜いて分かりやすい書き方。「これを読むにはTOEIC○○点以上は必要」とかまったく思わない。どんなレベルであってもこの本から勉強すべしと言える。

これは本書にあった自転車に関するコードの例にあった説明図
f:id:tango_ruby:20150527163418p:plain
(この様な単純な事例から納得感ある説明に導かれます)

おそらく5年後もこの本は読まれ続けている

ほとんどの技術本よりGoogle検索の方が優れている、と思っている。分からないことがあればピンポイントで検索できるし、情報が新しいから。これは多くの技術者が感じていることだと思う。ただそれでも本を買って読むのは、その内容が系統的な理解を助けてくれる場合だけにしている。Google検索でヒットした個々の情報をつないでも系統的な理解にはならないので、系統的理解に関してだけは本の方が優れている。で、この本を読んで分かったのはオブジェクト指向設計デザインとはちょっとブログの記事読んで理解できるような軽い概念ではない、ということ。腹落ちするにはここまで分かりやすく説明してもらってやっと分かった、と言える内容だった。
そしてそれは何年経っても陳腐化しない、コードを書く人にとってずっと必要であり続ける概念だった。
言っておくが、私はこうした小難しい概念を「オブジェクト指向というものはだねー」と賢い学者風に解説されるのが嫌いだ。この本はそんな賢いフリをするためだけの机上の空論解説書ではない。あくまでエンジニアが日々の業務でコードを書くことを助けてくれる実践的理論だ。賢く見えるか、なんてどうでもいい。ただただクソコードで苦労したくない人のための本だ。

そしてそれはエンジニア人生において界王拳のごとく有効である。

きっとこの記事を読んでいる人はコードが書ける人だろう。私もかつては「俺はコード書ける」と考え、それなりだと思っていた。ただそれではコードの片側だけを見ていたようで、実はその反対側には「設計デザイン」があったのにごっそり抜けていた。この本に出会ってその設計デザインを補うことができて、やっと一人前とはナニかを把握した。そして今まで自分が書いてきたコードを少し恥ずかしいとも思った。

2つも買った。。。

実はあまりに気に入ってしまってkindle版と紙の本と両方を持っている。最初はKindle版だけだったが、時々見返したりするために紙の本も買ったが、使用頻度は圧倒的にKindle版の方が多い。やはりいつでもどこでもKindleペーパーホワイトで読めて、しかもコード書いてるMacBookの中にも本が入ってる状態というのが原因だと思われる。

まーとにかくオススメです。それと日本語訳を熱望。もしこの日本語版が出たら日本のエンジニアリングレベルが数段アップすると思う。
ちょっと過剰に褒めスギじゃね?と思った方、下記のアマゾンにあるレビューを参照ください。英語のレビューになるが「Amazon.com で最も参考になったカスタマーレビュー」にたくさん掲載されている。大絶賛中は私だけでないです。

Practical Object-Oriented Design in Ruby: An Agile Primer (Addison-Wesley Professional Ruby)

Practical Object-Oriented Design in Ruby: An Agile Primer (Addison-Wesley Professional Ruby)

 
 
tango-ruby.hatenablog.com

tango-ruby.hatenablog.com

tango-ruby.hatenablog.com