Cookpadインターンシップに行ってきた(前半)

Cookpadのサマーインターンシップに行ってきました. recruit.cookpad.com
(追記 2015/09/02)機械学習の公開資料URLを追加しました
(追記 2015/09/11)公式に講義資料が公開されたので個々のURLを消してそちらを貼ります

techlife.cookpad.com

経緯と流れ

実は2年前にもインターンに応募していて(その時はあえなく落選でしたが),2年ぶりのリベンジ応募でした.

事前に過去のインターン記事を漁ってみてはいたのですが,今まで開催されていたのはこちらの5日間サービス開発のコースのみで 今回僕が参加することになったインターンとはまた異なる内容だったようです. recruit.cookpad.com

というわけで来年も行われるかどうかはわかりませんが,新しく始まった技術職インターンシップ体験記を書いていきます. 外部に公開されていた一部の講義資料も載せましたので,今後のご参考にどうぞ.

内容

インターンは前後半に別れていて,前半の講義形式の中で資格アリと見出された者のみが後半に進める構成. オリエンテーションやセットアップを行った後,順次日程にそって講義が行われます. 前半で学ぶ内容は以下の通り.

  1. TDD / Rails
  2. Android開発
  3. iOS開発
  4. サービス開発 / 機械学習
  5. プログラミングパラダイム

TDD

Rspecを使ってテスト駆動開発の基本を学びます. プロコンの問題のようなお題が出て,ソレに対してテストを書き,実装するというサイクルを繰り返します. 「TDD知ってる人ー」で皆手を挙げて,「TDDやってる人ー」でパタリと手が下がったのを覚えています. 個人的にはプロコンやってるみたいで楽しかったです. テストケースをあんなに簡単に書ける仕組みがあるならもっとやってくべきだなと思いました. ただ,今回はお題が非常にわかりやすく,テストケースが書きやすかったのですが, 「これのテストって一体何を書いたらいいんだ……?」的なケースに陥った時,本当のテスト力が試される気がします.

Rails

ちょっと昔にMVCをかじったことがある程度でした. その時はerb書きづらいなぁとしか思わなかったです.今回はhaml使いました. URLで指定した画像をタイトルと一緒に投稿するWebアプリを作りました.コメント機能もあります. JSONで叩けるAPIを用意してHerokuにデプロイすることで以降のAndroidiOS開発にも使いました.

Android開発

Railsで作ったAPIを利用してアプリ開発をしました. モバイルアプリ開発は全くの初めてだったので若干の不安もありました. 実際に作ってみてだんだんとコツを掴んでくると,HTMLとJavaScriptのノリでいける気がする〜とか思う程度になりました. 休日に会ったAndroid開発ガチ勢にそう言ったら鼻で笑われました. contextは未だにわからない.というかいくら説明を聞いても上手く飲み込めない感じがします.

iOS開発

対してAndroidと変わらないだろう,むしろAppleのことだからAndroidよりも作りやすいだろう,とか思っていました. AutoLayoutやばかったですね.レイアウトで詰まる人が多かったように思います. かといって,じゃあAndroidみたいにソースで書いたほうが速いのかというとそんなことありえなかったので慣れるしかなさそうです. 処理の詳しいことまではあまり頭が回りませんでしたが,レイアウトさえ慣れればむしろAndroidよりラクなのかもしれません. 1日ではまだその域まで達することができませんでした.

サービス開発

唯一PCを使わない講義,という触れ込みの講義. 冒頭の通り「cookpad インターン」で過去のインターンを調べると,大体5日間の開発インターンシップが出てくると思います. (というかそのコースしかこれまでやってなかったハズ)
その中でよく出てくる,価値仮説シート.これ周りの話でした. 新しくサービスを開発するにあたって何に気をつけるのか. スタートアップに興味がある人には既に見知った内容だったのかもしれないです. 開発において必要な手法,知識を学んだ後,最後は実践ということで, 架空のインタビューを元に簡単なサービスのプロトタイプを作成しました. 今まで知識として聞いてはいたものの,いざやってみると勝手がわからなくて苦労しました.

機械学習

機械学習自然言語処理に関するチュートリアルの説明を受けた後, 講師の方が用意してくださったword2vecスクリプトを使って色々遊んでいました. 本当は前処理とか学習とか出力整形とか面倒くさそうなことが大量にあるはずなのに, そこら辺をすべてすっ飛ばしていきなりword2vecするという接待感を感じながら遊んでました. wikipediacookpadそれぞれの辞書から作ったモデルで色々試そう,という内容. 他のインターン生があれこれしている中,僕は熱心に日本酒に合うつまみを探していました.
痛風,怖いですからね.
結果としてビールにおける餃子の役割を果たす日本酒に合う料理は焼売ということでした. 皆さんいいですか.これからはビールに餃子なんて不健康かつオッサンな組み合わせはNGです. これからのへるしーぷろぐらまーは日本酒に焼売,これです.

プログラミングパラダイム

Cookpadの人も聞きたがる内容,との前評判でどんな講義なのか気になってました. 講義の最初はホントにプログラミング言語の話をしていたかと思いきや, 即座にCPUアーキテクチャの話に移り(もうわからない)さらにコンパイラの話が始まりました.
あらかた簡単な座学を行った後,演習タイム.
SpiderMonkeyの機能を一部流用してオリジナルのJavaScriptコンパイラ(のコードジェネレーター)を作ろう,という内容でした.
「"エグくする"と言ったけど,ごめん,ぜんぜんマゾくならなかった.ちょっとヌルすぎたかも」との談.
nullくなかったです.
後半若干泣きが入りそうになってひいひい言いながら実装していました. この日一日で最も理解したことは言語処理系の実装するマン頭ヤベえということです.

まとめ

さすがcookpadインターンシップ,内容も来る学生も凄かったです. どの日もガッツリ演習しました. 何度「はいはいはい!わからないです教えてください!」ってやったか覚えてないです. そんな中で颯爽と課題を全て終わらせて自主的に発展課題を解いてる人達はカッコ良かったですね. 僕も彼らのようになりたいなと思いながら懇親会でビール飲んでました.

同時期に総合職のインターンも行われていたらしく,ラウンジでワイワイやってる様子を見ました. 薄暗くて男しか居ないむさ苦しい部屋で必死にカタカタMacでアプリを作っている一方で, 総合職は男女和気あいあいと日の当たるラウンジでやっていたようです. 住む世界が違うと割りきっていたのであまり羨ましくはなかったのですが,どうにも対照的だったと思います.

講義する側に立って考えれば1日ないし半日で初心者から上級者まで全てをカバーしつつ 演習も行う必要があるというこの無茶ぶり.どんな内容にするか大変苦労したと思います. ありがとうございました.

さてタイトルの通り本記事はまだ半分です. 既に内容の項目で触れた通り,インターンは前後半にわかれています. 2015年のインターンシップは2015年8月18日(火)から9月9日 (水)までで, 最初の7日間が前半で,後の10日間が後半です. これを書いている今日は2015年の8月31日です.日付からお分かりの通り現在後半戦まっただ中です. こちらは実務なのでひょっとしたらほとんど書くことができないかもしれませんが, 前半との違いとか書けることは書こうと思います.

はい,というわけで後半戦頑張ってきます.