DIVE INTO CODE

2019年07月12日
  • #メンター
  • #RubyonRails

『独習Ruby on Rails』著者。メンター・小餅良介さんインタビュー 「オブジェクト指向は難しくない。常にエンジニアに求められるのは、問題を正しい方向に絞り込む力」

Aws4 request&x amz signedheaders=host&x amz signature=c5d78487432b35e16f88635e068c237bb227fac08fa45f49286d0e85eb6b6ecd

オブジェクト指向は難しくない。

著書『独習Ruby on Rails』の発刊おめでとうございます。

ありがとうございます。この企画は昨年8月に出版社に持ち込みをして、今年5月にやっと固まりました。はじめの企画は900ページほどありました。構成を検討するのにも、ずいぶん時間がかかりました。

どうして本を書こうと思われたのですか?

Ruby on Railsを広めたいと思ったというのが一番の理由です。それと、自分自身の経験も関わってきます。

小餅さん自身のご経験ですか?

はい。Rails技術者認定シルバー試験を受ける際、「これさえやれば合格!」というようなタイトルの問題集に取り組んでのぞみました。タイトルの通り「これさえやれば」一通りわかるようになるかと思えば、実際の試験にはそこに書かれていないことも多く出題されました。資格自体は無事に取得することができましたが、ギリギリだったと思うんです。そんなこともあり、それならば自分で資格取得のための本を書きたいと思ったんです。

実際書き始めると、「これだけではわかりにくい。導入の部分も丁寧に書かなければ……」などと思い始めるんです。全体をきちんと網羅できる内容にしたかったんですよね。その結果として、900ページ(苦笑)。

それで『独習』シリーズとして出版されることになったんですね。『独習』シリーズと聞くと、中級者くらいの方が取り組むイメージもあります。

はじめに「目次」とあらましを出版社の方にお見せしたのですが、この本は「初めてプログラミングを学ぶ」ということを前提にもしています。そこが既存の本との違い。これまでに出版されているRubyの本は、ある程度知識のある方がモノを作ることを前提に、その作り方を中心に書いていることが多かったと思います。けれど、僕は体系や仕組みそのものについて書きたいと思いました。 「オブジェクト指向は難しくない」という前提 です。

「オブジェクト指向は難しくない」ですか。

そうです。そこからRailsのMVC(Model, View, Controller)の構成や流れをそのまま展開していくような本としています。Railsも含め、Webアプリケーションの本というとViewから入るのが一般的で、「Modelの解説から入る参考書はなかなかなかったのでは?」と思っています。その点に対する評価が今回の出版につながったものと考えています。あと、図版を多用してわかりやすくした点もポイントですね。

Ruby on Railsをまるっと理解するための本ということですね。

そう、オブジェクト指向がわからないとRailsは難しい。だから、オブジェクト指向は難しくないという前提で、実際にまったく難しい書き方をしていない んです。具体的にお話しすると、カタカナ用語の使い方に気をつけました。多くのIT書って、カタカナ用語がたくさん出てきますよね?けれど、初めての人がカタカナ用語を聞いてもわけが分からない。だから僕はできるだけ普通に説明して、徐々に用語に繋がるように印象づけられる説明をしています。それはRailsのみならず、ネットワークを教える時も同じです。

なるほど。

自然に言葉や思考に触れ、最終的に自分のものになっている。オブジェクト指向をさらりと理解できる展開にしたかったんです。実際それがこの本に表現できたかどうかは、これから反響を見て、検証したいと思っています。

本当の良さを知るためには、広く学ぶこと。

Image from Gyazo

オブジェクト指向、初学者には実際のところ難しい気もするんです。

そうかもしれません。ですから、位置づけの工夫もしています。私たちはあらゆるオブジェクトに囲まれて生活しています。
一般的に、生活している中で見ているものはすべてオブジェクト。それはそのまま、プログラムの世界も同じだという説明をするんです。プログラムという世界の中で、登場人物の振る舞いやモノの役割を設定した上で、関係し合う世界を作っていく。それがオブジェクト指向。そう考えると「オブジェクト指向は特別なものではない」ということ分かると思います。そのことを説明するために、「小説の書き方」を題材にすることもあります。

その表現、新しいです!

小説の作り方には、2通りあると説明するんです。ストーリーが中心か、登場するものが中心か、という2パターンです。従来のプログラミングは「どんなことが起こるのか」というストーリーを中心にプログラムを記述していきます。
一方でオブジェクト指向「誰がどんな性質で、何をするか」という登場する人物のキャラクターや振る舞いを先に設定するもの。小説でいうと登場するものを設定した上で、物語を作っていくパターンになります。だから、登場人物は簡単に性格が変わったりしない。キャラクターや振る舞いの設定を変えるにはやはりそういう流れが必要です。そういう“あらかじめの設定”がされているのがオブジェクト指向の考え方であり、必要に応じてキャラクターを登場させるのもではないという風に説明します。

非常に興味深く聞かせていただきました。小餅さん自身がその思考を自分で身につけたのはいつ頃ですか?

私はもともと従来の「プログラム思考」でプログラムの世界に入りました。けれど、プログラムって人によって変わるんです。自分で書いたものを見てもなかなか分かりにくい場合もあるし、どう作るかという作り方によって分かりやすさが変わってきます。そんなことを考えているうちに、「作り方」自体に興味を持つようになったんです。作り方によるプログラムの分かりやすさや保守性(直しやすさ)。
何を作るかよりも、どう作るかに自然と興味が移っていきました。

「何を作るか」と「どう作るか」。それはエンジニアの中でもタイプが分かれるものなのですか?

「何を作るか」にももちろん興味はありますよ。お客様が目的とするものを作っていくのはやはり楽しいですから。けれど、何年か経つと、同じようなものを作っていることに気がつくわけです。内容も色も業務的には違うけれど、結果的には同じようなものになる。そうしているうちに、パターンを整理すれば、一部を変えればできあがるようになるんじゃないの?というふうに考え始めました。「そんなサービスができないかな?」と。汎用的に使えるようになる何かを目指し始めるんです。そこで出会ったのがRuby on Railsです。

小餅さんが惹かれたRuby on Railsについて、詳しく教えていただけますか?

エンジニアがアプリを作ろうとする際に必ず考えていかなければいけない要素がRuby on Railsには組み込まれています。だから、汎用的。開発時にはデータベースにしてもサーバーにしても、自前で揃えなければいけないことが多いと思うんです。けれどRuby on Railsには、そのメソッドも揃っている。だからシンプルに処理ができるんです。

さらにRubyはまつもとゆきひろさんという日本人が作った言語です。その一方で、日本ではJavaなどに比べるとまだまだマイナーな存在です。だから、もっと進化させて、広めたいと思いました。

「マイナー」と仰られましたが、DIVE INTO CODEは社会に出た時に即戦力になれるエンジニア育成を目指されていますよね。Ruby on Railsを教えることで、ビジョンの達成とギャップが生まれてしまうことはないのでしょうか?

ベンチャー系などで新しいシステムを開発する時にはRubyを使っているところ多くがあります。全体として見ると、「メジャー」と呼ぶには至っていないけれど、ひとつの良い考え方を理解できればそれは全てに応用できると僕は思っています。それに、プログラムをより深く理解するためには、多言語に触れたほうがいい。言語をひとつしか知らないと、それの本当の良さは本当の意味で分からないと思います。その言語の何がいいのかを、自分で学び誰かに伝えるとなっても、他を知らないとなかなか難しいことです。

DIVE INTO CODEのカリキュラムはどう思いますか?

どんどん進化を続けています。非常に細かく、いろんな方面に深い内容です。初めてプログラムに触れる方には少しきつい部分もあるかもしれませんが、逆をいえば相当な内容に触れることができる構成になっています。卒業生に対しても開かれたスクールであり、提供している情報量は他ではありえない量だと思います。

Image from Gyazo

小餅さんご自身がプログラムに触れるようになったきっかけを教えてください。

僕はそもそもコンピューターのことなんて何も知りませんでしたし、業界へ進むつもりもなかったんです(笑)。けれど、たまたま紹介されて縁があったのがコンピューターの会社。てっきり腰掛け社員かと思えば、システムエンジニアとしての役割を与えられ、そこからでしたね。なぜコードを書けば、プログラムが動くのか、その意味さえもわからないところからのスタートでした。だから、初めての受講生が味わう言葉の意味のわかりづらさが、よく分かるんです。

その頃、プログラマーやシステムエンジニアはどういう存在でしたか?

システムエンジニアは特別な存在でしたね。だから丁重に扱っていただける存在。今は環境が整った分人口も増え、給料の幅もある。どこで、どんなエンジニアになるかという選択肢を持てるようになったと思います。けれど、だからこそプログラムやコードを書けるというレベルでは足りないんです。僕は、 問題解決をできるかどうかということが変わらず求められる一番の力 だと思います。

その能力はDIVE INTO CODEでどのように養うことができますか?

決められた期間の中でかなりの量をこなすカリキュラムになりますので、問題が起きた時に、どうしてこうなっているのかをきちんと考えることだと思います。メンターはきっかけを与えることはできますが、受講生に求めたいのは自分で調べ、問題を解決しようとする意欲。ここでの経験をトリガーに、知識を深めていってもらいたいと思います。

自分で学び取っていく際、注意した方がいいことはありますか?

心に一握りの余裕を持つことです。というのも、目一杯仕事を抱え込んでしまったら他のことが何もできなくなります。自分のやりたいことも、考えたいことを考えることもできなくなって、言われるがままになってしまう。だから、まずは自分がどれだけできるかを知ることが大事だと思います。そこに一握りの余裕が持てるように自分をコントロールする。それは、ちょっとつまずいた時の余裕にもなります。

これからDIVE INTO CODEに入校したいと考えている方に向けてアドバイスをお願いします。

コードの書き方はもちろんですが、それよりももっと大切なのは課題を解決する力。そこを磨かないと、エンジニアとして長く通用する存在になれません。問題を解決していく力とは、どのように問題を絞り込んでいくかということです。それは正しい方向に推測し、ひとつひとつ検証していく地道な作業が必要になります。ここは正しい、ここは正しくない……など。的確に絞り込み、問題を明確にしてく。その力を磨くのが大事だと思います。

ありがとうございます。最後に、小餅さんご自身のDIVE INTO CODEでの仕事のやりがいを聞かせてください。

受講生から「わかった!」「初めて気づいた!」「感動した!」という言葉をもらった時です。自分が関わった相手に感動を持ってもらえるって、嬉しいことだと思いませんか? 自分自身の嬉しさや感動よりも、自分が関わった相手に喜びや感動が生まれることその瞬間に立ちあえるというのが僕は一番ハッピーだと思います。

小餅さんの著書「独習Ruby on Rails」のご紹介サイトこちら

DIVE INTO CODEのことをもっと知ってみませんか?