from __future__ import katryo

カリフォルニア州マウンテンビュー在住のソフトウェアエンジニアがいろいろ書きます。

はてなとサイバーエージェントのインターンシップに落ちてVOYAGE GROUPに行ったこと

IMG_1942

これまでのあらすじ

 の3つと、あと他にいくつかインターンシップ応募しました。で、VOYAGE GROUPにだけ合格したので2012年の夏、3週間のインターンシップ(Treasure2012)に参加してきました。


 最初の1週間は環境構築、Git、UXデザイン、プロジェクトマネジメント、コーディング、セキュリティなどの講義がずっと続きます。社員のかたがたが講師になり、朝10時から夕方5時までの授業です。残りの2週間は最終課題のグループワーク。4人チームでWebアプリケーションを作ります。


 報酬は交通費含めての12万円。3週間だから日給にして8000円。
 リア充で有名なサイバーエージェントのTECH CAMPは2週間で10万円です。日給1万円。如実に姿を現した格差社会。
 あ、脱線しますがサイバーエージェントの面接が記憶に残っているので書きます。

サイバーエージェントの面接

 サイバーエージェントの面接官が放つリア充オーラはすさまじく、街中で出会ったら10メートル以内には近づきたくないような人でした。
 技術的なことは聞かれませんでした。大学生活で打ち込んだことやリーダーシップを発揮したことを質問されました。就活みたいだなとぼんやり思ってました。
 で、落ちました。
 面接でコミュ貧なことを主張したのがまずかったのかなーと想像してます。
 リア充企業に面接に行く人は、コミュ貧アピールは避けることをおすすめします。
 あるいは大阪と京都、2つ応募したのがまずかったのかもしれません。

 面接官に
「それじゃクイックソート書いてくれる? 君の好きな言語でいいからさ」
 と言われたときのために、Rubyでのクイックソート練習してたのに、結局意味がなかった。残念。
 あ、クイックソートはGistに書いときました。 https://gist.github.com/3674920

プログラムの比較

 あとでTECH CAMPに参加してた人に聞いたところ、少なくとも京大(京大生限定のTECH CAMPがあった)のiOSアプリコースは講義らしい講義はなく、ほぼ自力でアプリ開発し続けるという内容だったそうです。
 ほむほむ。
「とすると、VOYAGE GROUPのほうに来てよかったんじゃないかな」
 と自分に言い聞かせざるを得ませんね。
 id:brtRiver さんを初めとする技術あるエンジニア、デザイナーたちが準備した体系だったレクチャーを1週間のあいだ受けられたし。人件費とその他コストのことを考えたら、VOYAGE GROUPの投資のほうがサイバーより大きいはず。たぶん。

インターンシップの環境

 オフィス内装はこのページ見たらだいたいわかるんじゃないですかね。
http://blog.kushii.net/archives/1675844.html
 リア充ぽい。
 でも社員の人たちは写真ほどリア充ぽくありませんでした。よかった。

学んだこと一覧

  • セキュリティ
  • コーディング
  • Git
  • UXデザイン
  • プロジェクトマネジメント

 を学びました。

セキュリティ

 重要です。趣味で作るWebアプリならともかく、企業がリリースするものなら万全を期さねばなりません。
 PHPは作ってしまいやすい穴がけっこうあるので、気をつける必要があります。逆に言えば、十分に気をつければ大丈夫です。
 PHPはダメな子じゃない。ぷるぷる、PHPわるい言語じゃないよ! 誤解されやすいだけだよ!


 PHPは初心者でも始めやすいという長所があります。しかしです。
 公式マニュアルくらいにしか載っていない罠がとてもたくさんあるので、そこらへんの技術ブログをコピペするのは危険です。僕も罠にはまりました。
 たとえばPHPにはhtmlspecialcharsという長い名前の関数があります。
 HTMLにおける特殊文字をエスケープする機能を持ちます。
 しかしこの関数、オプションでの文字コード指定が必須です。デフォルトではISO-8859-1になります。日本語には非対応。

 _人人 人人_
 > 突然の罠 <
  ̄Y^Y^Y^Y ̄

 なので、htmlspecialcharsに限らず、初めて使う関数を書くときには公式マニュアルを見ましょう。PHPの公式マニュアルは異常なほどよくできていて、これさえ読めば技術ブログがほとんど不要です。
 PHPに限らず、Webアプリにはセキュリティ問題がついて回るので、徳丸本を読むとよいそうです。

 気が向いたら読んどこう。


 最初Webアプリ作成にPHPを使うと聞いたときは

( ^o^)PHPなんて使いたくない

 と反発するくらい、言語そのものを嫌っていたのですが、今では

( ˘⊖˘)。o(待てよ、俺はなんでPHPを使わないんだ?) 

 と冷静に考えられるようになりました。

コーディング

 PHPでWebアプリを作りました。
 ただし、コーディングの講座は1日しかなく、セキュリティとあわせてのレクチャーとなりました。初心者向けのチュートリアルはなし。
 PHPマニュアルとTreasureコーディング講師のid:brtRiver さんが用意したヒントWikiを見て試行錯誤してました。
 PHPを書くのは初めてで戸惑いました。がなんとかなりました。

|VOYAGE GROUP| ┗(☋` )┓三
( ◠‿◠ )☛Slimを使ってもらう
▂▅▇█▓▒░(’ω’)░▒▓█▇▅▂うわああああああ便利

 Slim( http://www.slimframework.com/ )というマイクロフレームワークを使って、ログイン機能、テキスト投稿機能などを作りました。
 Slimはルーティングだけやってくれるフレームワークです。Railsでいうroutes.rbとcontrollerだけを用意するシンプルなもので、O/Rマッパもバリデーション機能もなし。
 ViewはTwig( http://twig.sensiolabs.org/ )というテンプレートエンジンが用意されていました。ユーザー名を表示するような機能において発現する、PHP特有のセキュリティの穴も、Twigを使えばいくつかふさげます。htmlspecialcharsなんていらんかったんや!


 デザインパターンのDAO、Factoryなど色々手探りで学びました。直接SQL文なんて書いたのいつぶりだろ。院試以来だから半年ぶり?
 get, postでコントローラを指定する、似た働きのコードは近い場所に置いて再利用しやすくする、などWebアプリの作りかたを学びました。Railsばかりやってると、たとえばルーティングはresoucesで指定してるだけになりがちです。「どうしてWebアプリケーションが動くか?」といった根本的な部分を理解していなかったことに気づかされました。

Git

 バージョン管理にはGitを使いました。去年のTreasureプログラムではSubversionを使ってたらしいです。
 今年来られてよかった。
 去年の参加者はいまもSubversionを使ってるんでしょうか?


 add, commit, push, branch, merge, pull, rebaseあたりの基本的なコマンドを覚えました。後で行った最終課題では、4人で同じソースコードを書いてはpushし、pullしては衝突し、修正してpushするとまた衝突するような混乱を体験しました。
 手に負えなくなって、講師の id:brtRiver さんに歴史改変をお願いしたなー。
 コードを書くよりGitで悩む時間のほうが長かった気がします。

UXデザイン

 本職デザイナーの講師にUXデザインを教わりました。UXデザインはボタンの位置や大きさでなく、そもそも誰のためのアプリなのか、どう使うのか、といった根本的な部分を考え、設計することです。
 詳しくはググれ。

プロジェクトマネジメント


 マスター・センセイの熱心な弟子となってプロジェクトマネジメントを学びました。
 詳しくは本読め。

最終課題

 2週間をかけて1つのWebアプリを4人チームで開発する。それがTreasureの最終課題です。学んだことは本当に多くあるのですが、中でも印象に残ったものとして

  • 最小限の機能だけでリリースする

 があります。
 僕たちのチームは、位置情報に写真投稿を組み合わせたアプリを作りました。
 当初は色々な機能を搭載した、万能型のアプリを想定していました。写真投稿ができるのは当然として、友達とのつながりもできる、知らない人と出会える、旅行したときスマートフォンから見られる、など。
IMG_1944

 だめでした。
 それらはほとんど不必要。コードを書くだけ時間の無駄。
 必須機能から開発しましょう。ログインもいらない。コメントもいらない。ランキングも検索もいらない。僕らが最初の提供するのは画像アップロード機能のみ。画像アップロードさえできれば……一応は、エレベーターピッチで描いた目的は果たせます。
 ユーザーにとって必要最小限の機能が完成したら、もうリリースしちゃいましょう。
 機能追加、改善はそれからでいい。
 このやり方は、開発モチベーションを大きく引き上げます。
 始めるまえは想像がつかなかったのですが、本番環境で動かせていることが心理的な落ち着きになり、追加機能と機能強化の優先順位を明確に決定しやすくなります。


 ちなみに、完成したWebアプリは最終審査によってランクづけされました。僕たちのチームは4位でした。5チーム中4位。悔しいけれど、自分たちの力ではこうなるのもの仕方なかった。とりあえずフロントエンド側強化のためCoffeeScript勉強することを心に決めました。

イベント

IMG_1978
 Shibuya.rbが社内バーAJITOで開催されてました。勉強会がよくここで開催されるみたいです。

fcf5a5c6e6cc11e1b52912313820446d_7
 参加していた id:joker1007 さんから株式会社ウサギィステッカーもらいました。カワイイヤッター!


 あと、インターンの仲間に誘われて行ったのですが、もうすぐ就職するエンジニアの人たちの飲み会に参加しました。
 気楽にお酒を飲むだけだと思ってたら、意識高いイベントでした。アイエエエ!?
 逆求人とかいうのやってる会社の人らが主催してたらしいです。ここです。 http://www.gstylus.co.jp/service/gf.asp
 京大生を誘ってね! とか言われたのですけどいちいち個人に伝えるのめんどいのでこの記事を書くことで借りは返したことにします。借り=飲み会の料金 ≒ 4000円くらい


 飲み会でGREEの住宅手当の話を聞いたりしました。5万円までくれるそうです( http://www.gree.co.jp/recruit/charm/system.html )。利益だしてる会社はすごいなーと思いました。ちなみにあとで聞いたら、VOYAGE GROUPも似たようなのを出してるらしいです。会社から2km以内に住むと5万円まで手当がおりるのだとか( http://voyagegroup.com/crew/recruit/fresh/ )。

感想

 Web系に興味ある人なら行ってみるといいです。おすすめ。
 参加者の基準は毎年変えていて、今年はある程度技術を持ってWebアプリケーションが作れる人を採用したらしいです。
 でもその割に、プログラミングを初めて3ヶ月の人が参加していたり、コーディング能力はけっこうばらばら。実のところ、技術力はそれほど重要視していないんじゃないかなと思います。あればいいけれど、少なくても問題ない、くらいの感覚で。
 むしろグループ開発に必要な、協調性を重点的に見ていたんじゃないかな。
 コース内容からしても、VOYAGE GROUPが求めているのはグループ開発できるエンジニアなんだろうなと推測できます。技術があり、プロジェクトマネージャにもなれる人材。そういう人が足りてないから、インターンシップで人を集めて、教育している。ここで育てた人が業務に使えるほど技術力を持ったとき、VOYAGE GROUPに来る可能性を高める。加えて、Web業界自体を活発化する。そういった目的でインターンシップをやってるだろうな、と想像したわけです。