僕はiPhoneアプリの開発してるんだけど、Taxnoteという、確定申告の帳簿入力アプリに自動同期機能を付けて欲しいという要望が前から多かったんです。

なので、去年の9月ぐらいにParseという、自分みたいなサーバサイドできない人のためのサービスを作ってペチペチ3ヶ月ぐらい作っていたのだが、残念ながら、ザッカーバーグが育休から戻って来たと同時にサービス停止を決めてしまった。

ザッカーバーグは育児にちょっと疲れて、その勢いで僕の三ヶ月の努力を潰そうと決断したに違いない。

とまあ、そういうわけで、今年に入ってからRuby on Railsでバックエンドを作ろうと、久々に新しい言語というか、フレームワークを勉強してました。僕はあんまり勉強とかするのが好きではないので、どうやったら少ない時間で目的が達成できるか考えて、試したところ、すごく自分には効果があった方法が見つかったので、それについて書きたい。

厳密にはペアプロではないけど、ペアプロ風味な勉強方法でした。

突然、大海原に放り出される瞬間

前々から思ってたんだが、プログラミング学習というのは、最初の最初の教材やらチュートリアルやらは揃っているが、その後に、さあ、こういうサービス作りたいぞと思った瞬間に、突然難易度が跳ね上がってみんな途方にくれると思う。

僕の場合、まずドットインストールという素晴らしいサイトのRailsチュートリアルを最初にやった。Ruby言語の勉強はすっ飛ばした。Rubyの文法は必要に応じてググればよいので。

iPhoneアプリもそうだけど、言語の文法なんて検索したらすぐわかるけど、一番時間かかるのはCocoaとかRailsとかフレームワークの使い方の部分だからです。

そして、田口さんが作った素晴らしいサイトのおかげでRailsって、こんなんか、なるほど、CakePHPを5年前ぐらいにやったけど、それと似ているな、ちょっと懐かしいわと思って、なんかできそうな気配がしてきた。

しかし、さて、iPhoneのCoreDataの同期のためのAPIを作ろうとなった時、いきなりわからなくなる。Rails + iOSとかいう本とか、RailsでAPI作成動画みたいなのをtreehouseとかいう学習サイトで見てみたけど、どうもよくわからない。

よくわからないというのは、自分がなにをわかってないかがまずわからないという状況だ。未知の未知というやつです。ユーザ認証するにはどれがベストプラクティスなのか、この本にはこう書いてるけど、これは古いやり方なのか。

そもそも、俺が今進んでいる方向は合ってるのか、誰か助けてください、お願いしますといった具合です。

というわけで、お友達のKさんに教えてもらったCodeMentorというサービスでまず聞こうということにした。その話はこちら。

プログラミングでハマったら有料相談できるCodementorを使ってみた

しかし、上のリンク読めばわかるけど、このサービスは高い。高すぎる。スポットで使うにはいいんだけど、今自分に必要なのは、2時間ぐらいマンツーで方向性を示してくれる家庭教師である。CodeMentorとか使ってたら、2時間で3万ぐらい飛ぶ。

というわけで、Upworkというサービスで募集することにした。ちなみにUpworkというサービスは合体を繰り返しているので、ほんと名前がころころ変わる。

Upworkで先生を募集したら候補者がいっぱい

さて、Upworkで先生を募集するわけなんだけど、募集する時は出来る限りこちらの状況、やって欲しいことを詳しく書いたほうが応募もしやすいだろうと思い、徹底的に詳しく書いた。

これは、ITの求人とかを読んだ時、本当に知りたい事が全然書かれてない場合ばっかりで、こんなんじゃ効率悪いだろと常々思ってたので、その思いをぶつけたのもある。

まず、Taxnoteのリンク貼って、このアプリのデータ同期のAPIを作りたいから、その勉強してる旨、今の自分はチュートリアルを2つぐらいやって、本1冊読んだ程度。でも、iPhoneアプリでプログラミングは4年ほどやってるなどなど。

なおかつ、今途中までやったRailsのプロジェクトをアップして、今の疑問はこのデータベース設計が正しいかとか悩んでるとか、認証はどのGem使えばいいかわからんとか、

やって欲しいのは、スカイプで動画共有して、自分がやりたい事や質問をこっちで見ながら話すから、それを実際にコード書きながら説明して欲しい、ようはペアプロの相手になって欲しいということを書いた。

Upworkの時給のレンジを書く欄があったので、中ぐらいの、20ドル~40ドルのレンジで選んだ。時間帯は、日本時間の朝9時から夕方5時ぐらいまでの間ならいつでもできまっせと書いておいたけど、できれば頭の冴えてる午前中で、夕方とかにやりたくないなとは思っていました。

すると、インドとか、北欧とか、ロシアの方面からの応募者がいっぱいきました。全部で12人ぐらい。テンプレメッセージで応募してる人もいれば、僕の要項を読んだ上でメッセージしてくれる人もいた。

そして、自分のスキルを書く欄には、各々の経験が書かれていて、時給15ドルで応募してきてるインドの人から、時給45ドルで応募してきてるクロアチアの人まで様々である。

ペアプロで教えてもらってみた

まあ、最初は安い時給の人にやってもらおうかなと思い、時給20ドルぐらいだったインドの人と時間を決めてスカイプでやってみた。時間は昼の12時ぐらい。

この方はすごく丁寧でよかったんだけど、いかんせん、英語が聞き取り難く、なおかつネット回線もそこまでよくないので、それだけでレッスンの進み具合が遅くなってしまった。

後から気づいたんだけど、UpworkというグローバルなITフリーランス業界では、英語がちゃんと喋れるというのもレジュメに結構強調してる人が多かった。綺麗な英語でコミュニケーションが取れる人はそれだけ時給も高くなるようだ。

肝心のプログラミングの知識に関しては、CodeMentorでRails先生のトップランクの人とのペアプロを経験してるだけに、これは明らかに見劣りしてしまうなというのがあった。

何が一番違うかというと、よい先生は、「ああ、こういうことしたいなら、このgemがいいよ。ああ、これは綺麗なやり方じゃないから、こうしたほうがいいよ。」という具合に、どんどんベストプラクティスを提案してくれて、それこそ自分が求めているものだった。

でも、こうやりたいと言った事は、あまり綺麗ではなさそうなやり方でとりあえず動くように書くといった感じだったので、「うーむ、他の人より安いけど、他を当たろう。」となりました。

次にお願いしたのは、時給45ドルのクロアチアの人だった。この人は、レジュメもメッセージでも、「俺は経験もあるし、ちゃんとできるぜ!」風で自信ありげである。それでも、CodeMentorより安くなるなと考えてしまうあたり、アンカリング効果とは恐ろしい。

名前はMさんとする。このMさんとは、日本時間15時に約束して、あっちは朝8時の時間にスカイプすることになった。

するとMさんはめちゃくちゃ知識豊富で、CodeMentorでRails先生のトップ評価の人に勝るとも劣らない印象を受けた。つまり、「ああ、これはこうするんだよ。これはこっちのほうが綺麗なやり方だ。」といった感じで、いろいろ綺麗なRailsの書き方を教えてくれて、ものすごく効率よく勉強できてる気がして興奮した。

しかし、それだけに、毎回のセッションの2時間はものすごい脳みそが疲れて、終わる頃にはへとへとでした。ちなみに、Railsはバリデーションとか含めて、コードをあまり書かなくても簡潔にやりたいことが出来上がっていくのにびびった。

というわけで、Mさんに教えてもらうことにし、今まで一回のつき2時間、全部で4~5回ぐらいペアプロしたと思う。

最初の段階ほど効果が高い

具体的にどういうふうにペアプロしたのかを書いてみる。

まず、自分で勉強できるところは自分で勉強したほうが早いので、とにかく、「詳しい人に聞いたほうがはやい」という部分を教えてもらうことに集中した。

例えば、Databaseモデルの設計についてアドバイスをもらったり、自分のコードを見てもらって、もっと洗練した書き方に直してもらうとか。

あと、認証はどのgem使うべきかとか、教えてもらいながら、自分の知らないデバッグツールやサービスを教えてもらうなど、自分一人ではなかなかわからない、知らないという分野を学習することに集中した。

そして、ペアプロは動画共有して、ひたすら自分は相手のコーディングを見ることに専念した。相手に指示されながら自分が作業するより、はるかに濃密な時間になるからである。でも、最初はもうあっちの操作が早すぎて、すごい疲れた。

ついでに、説明受けている途中で、後から自分で独学したほうがよさそうな部分は、リンクだけ貼ってもらって後で復習するわとして、次に進むようにした。

レッスンの終わりにコードをBitbucketのレポジトリにあげてもらって、その次の日に、自分の環境で相手がやっていたコードを読み直して復習するといった具合。

これで、チュートリアルのあと詰まっていた部分が、一気にまったく詰まらなくなり、ガンガンと進むようになって、「おお、これは最高だ。大成功だわ。」となりました。

最初のほうはまだRailsのこと全然わからないから、レッスンの後の3日後の第二回のレッスンを受けたりしてたんだけど、わかるにつれて、自分で進められる範囲が多くなるので、第三回のレッスンの後は一週間ぐらい自分で進めて、質問を貯めておくといった具合になっていった。

今は、第4回ぐらいになると、もうだいたいやりたいことができてきて、疑問に思うこともピンポイントになってきて、ここからはStackoverflowさんに質問できるようになってきた。

Stackoverflowに質問するにはもやっとしすぎている段階でこそ、ペアプロの価値が高いなと再認識。

プログラマを探す時にもいいかも

やりながら思ったけど、この、実現したい事を説明して、コード書いていくのを画面共有で見るというのは、できるプログラマな人を探すのにもすごくいい気がする。時間がちょっとかかるけど、これはいい。

なにかに詰まった時のネットでの調べ方も参考になるし、問題解決のプロセスやら、なんでそうするかの説明を聞いてるだけでもその人の実力が結構わかったりする。

なおかつ、自分も新しいやり方を覚えられるし、自分がやって欲しいことをやるわけだから、そのプロセスもそこまで無駄にはならないし。Taxnoteのアンドロイド版を作るとしたら、このやり方でまずプログラマを探して、途中からは任せるといったやり方にしようかなとか思った。

なんにせよ、Railsは前々からやりたかったけど、新しい事を覚えるのは面倒だし、億劫だし、ああ嫌だと思ってただけに、ザッカーバーグがParseをシャットダウンしたのは、結果的にRails覚えられてよかったかもしれない。結果オーライと考えようと思う。


*家計簿読み上げのアプリ作ってます。自己紹介と過去ログはこちら