はてなインターン2010に参加してきました
先日、8月2日から参加していた はてなインターン2010が無事終了しました。
間違いなく、これまでのエンジニア人生で最も刺激的な20日間でした。
参加初日から既に1ヶ月は経っているのですが、まだ先週のことのように感じます。
そんな濃厚なはてなインターンの様子を、出来る限り分かりやすくレポートしようと思います。
発散しすぎて相当長くなってますので、時間のあるときにゆっくりと読んでいただけると幸いです。
はてなインターンで作ったもの
自分はid:skymountainとはてなブックマークチームに参加し、はてブのTwitter連携機能の強化を行ないました。実はつくったものは十分リリースレベルに達していて社内発表も行なったのですが、更に機能強化がねらえると判断したため現在引き続き開発を行なっている最中です。ここでまだ紹介できないのは残念ですが、Twitterユーザーの方にもそうじゃない方にも非常に面白い機能になっていると思うので、ぜひ御期待下さい。
2010/08/26
6.【リリース予告】はてなブックマークのTwitter連携をさらに強化!
現在利用者数が急増中のはてなブックマークとTwitterの連携機能をさらに強化し、リリースする予定です。こちらは現在リリース準備の最終段階に入っています。Twitterユーザーなら、絶対に便利にお使いいただける機能ですので、どうぞご期待ください!本機能は、id:r7kamura,id:skymountainの2名のインターン生が開発を担当しています。リリースを楽しみにお待ちください!
http://d.hatena.ne.jp/hatenapr/20100826/1282818681
※後日譚になりますが、2010/9/6に開発した機能がリリースされました。
2010/09/06
本日、Twitter連携機能を使用してブックマークされたURLを対象に、リツイートされた数やコメント内容がページ内に表示されるようになりました。表示箇所は、ブックマークコメントの一覧が表示される「エントリーページ」、ユーザーのブックマークページの2ヶ所です。
http://hatena.g.hatena.ne.jp/hatenabookmark/20100906/1283746029
はてなインターン概要
- 約3週間前に募集締切
- 約2週間前に採用決定
- 事前課題: 大抵の人はここでリャマ・アルパカ・サイの三聖獣と戯れることになります
- 前半10日間は講義: 午前中は1日1分野ずつ技術講義があり、午後以降は課題実装
- 前半終了後に審査: 前半10日間の課題が全て合格点に達していないと、後半過程には進めません
- 後半10日間は開発: チームに分かれて開発、実際にサービスを作ってリリース
募集も含めた全体の流れは大体こんな感じです。前半はとにかく課題に追われて必死、後半はアイデア捻出と実装とリリースと発表に追い回されて必死です。インターンはじまったら毎日レポート書くぞとか思ってた時期が僕にもありました。
今年の参加者
- 参加者14名
- 半分が関西, 半分は遠方から
- Vim派とEmacs派も半々くらい, 自作エディタ1人
- 8割くらい院生, 自分含む2割くらいは学部生
全国から集まってきた ~~猛者ども~~ 学生達は非常に個性的な面々で、普段リア充の闊歩する大学の一角で細々と生きてきた自分にとっては、非常に良い刺激になりました。id:KHCmasterの「エディタ?自作ですけど何か?」という発言は今でも記憶に新しいですね。みな共通して、技術に対して何かしらの熱い気持ちを持ってここに来ていることだけは伝わってきました。
前半10日間
前半過程では、主にはてなの開発で必要な基礎知識を講義形式で学びます。講義の内容はPerlやJavaScriptの基礎から始まり、はてなのフレームワークを利用したDB操作やWebアプリ製作、UIの基本やHTML5、データ構造とアルゴリズム、クローラでページランクの算出、機械学習でベイジアンフィルタによるカテゴリ推定、そしてはてなのインフラ技術など、とにかく盛り沢山です。講義の一部はUstreamでも配信されていたので、もしかしたらこの中に見ていた人もいるんじゃないでしょうか。いませんか。講義資料の一部は公開されているので興味があれば見ていって下さい。Ustreamに講義動画もあるよ!
- インターン講義初日「Perlによるオブジェクト指向プログラミング」
- インターン講義4日目「JavaScript で学ぶ イベントドリブン」
- インターン講義5日目「ユーザインターフェース,HTML5」
- インターン講義7日目「機械学習」
- インターン講義8日目「データ構造」
約2時間の講義後には毎回課題が出ます。それぞれ翌朝までに提出したものが採点されるのですが、全ての課題で6点以上を取らなければ後半過程に進めないため、そりゃもう必死です。中には要求された課題内容に加えて独自拡張まで実装している人もいましたが、自分の場合は課題をこなすのがやっとで、毎日ぎりぎりまで社内にいさせてもらった後も帰りの電車と自宅で朝4時まで課題やってる感じでした。8月中地下鉄烏丸線とJRの車内ではてなTシャツ*1着てひたすらカタカタやってたのは私です。
今思い出せば、この期間が相当自分を伸ばしてくれました。SEGAの平山尚さんが「クイックソートで感動するには、クイックソートが必要な状況に出会った経験が必要なのです」と言っていました*2が、自分の体験を通して改めて痛感できました。うちの学科ではクイックソートなんて初歩の初歩、いわゆる初級魔法的な感覚で教わっているはずだったのですが、実際にクイックソートに感動したのははてなの課題で実装してからのことでした。また提出した課題は社員の方が丁寧に採点してくれて、更にアドバイスをたくさんくれます。自分のコードに対して人から意見をもらえるというのは滅多とない機会なので、今までの1人よがりなコードがここでかなり矯正されます。
この課題の日々がなければ、今の自分のプログラミングスキルはありませんでした。何かに追われている時こそ人は最も成長するもんですね。id:jkondoさんが最終日にインターン生に掛けてくれた、「今プログラミングができるかどうかの差なんて全く大したことではなくて、"自分は全然ダメだ。まだまだ未熟だ"と思い続けられる人が1番大きくなる」という言葉は今でも心に響いています。
後半10日間
後半過程では2〜3人ずつに分かれ、それぞれどこかのサービス開発チームに参加して実際に開発を行います。今回は以下のようなチームがありました。
- はてなブックマーク Safari拡張
- はてなブックマーク Twitter連携強化 ←参加
- はてなキーワード フィードバック
- はてなダイアリー ブログプレゼント
- はてなココ スポット検索
- うごメモはてな シアター検索
自分の参加したはてなブックマークチームでは、毎朝10分程度で簡単にミーティングをして、その後作業に取りかかるという流れで開発を行なっていました。開発はid:skymountainと自分との2人だったので、ほぼ全ての工程をペアプログラミングで進めて行きました。 ~~熟成された~~ コードを読みつつ、実装する箇所と実装方法に大体目星を付け、その後2人であーだこーだ言いながらガリガリと開発を進めていきます。相当大きなファイルを何度も書き換えることになるので、gitでバージョン管理しているありがたみが分かります。
ペアプロで開発するのは初めてだったのですが、これは相当効率が良いと思います。なぜ良いのかとかはアジャイル的な書籍*3にお任せするとして、個人的な意見を少し。
- 学習効率が良い
- 互いの認識の誤りに気付く
- 当たり前だと思っていたことに結構齟齬がある
- 飽きがこない
- いい感じで緊張が続く
- 当然いつもより疲労度は溜まるので注意
- 互いの認識の誤りに気付く
- 開発効率が良い
- 1人よがりなコードになりにくい
- 説明責任が発生する
- 複雑な点や曖昧な点を明確にする必要があるため、正しい認識の元にコードが書ける
- プロジェクトに対して前向きな気持ちで開発が続けられる
はてなインターンを通して変わったこと
はてなインターンでの20日間はあまりにも刺激的過ぎて、いざ大学に戻ってみてそのギャップに浦島太郎を感じているところです。変わり過ぎて逆に何が変わっていないのだろうかという感じですが、技術的な部分よりも精神的な部分での変化が大きいと思います。当初の参加目的「今後エンジニアとして生きていく展望を得たい」に対しては「やっぱり私はエンジニアで間違ってなかった」という解が得られたし、エンジニアに何が必要か・何が必要でないか、ということも分かりました。何よりも大きな収穫は、やはり自信が付いたということ。こればかりはWebや本からの知識だけでは絶対に得られないことです。また、何のために技術を使うか?という意識にも変化がありました。これははてなの思想的な部分にも大きく影響を受けました。技術の先には必ず人がある、というのは素敵な考え方だと思います。
一方技術的な部分では、大きな努力不足を感じています。エンジニアとして活躍して人に喜んでもらえるようなサービスを作るには、こんな程度の努力ではまだまだ全然足りない。成功と失敗の両方の体験を持ち帰ってほしいという、はてなインターンのねらい通りですね。
未来のインターン生へ
こんなにおいしいインターンがこの先も開催されるのかどうかは分かりませんが*4、Web系のエンジニアに興味がある学生の方には是非参加されることをおすすめします。勿論参加するだけで勝手にレベルアップするような甘い環境ではなく、精神と時の部屋*5で20日間を過ごすような過酷な日々を送ることになりますが、自分にとってはこのままずっとインターン続けば良いのにと感じるほど楽しい毎日でした。*6
まぶし過ぎると感じてしまう人もいるかもしれませんが、自分自身プログラミングを始めたのは1年半ほど前のことだったし、まだ大学3回生で特に専門分野があるわけではなかったし、過去のインターン生のレポートを眺めていて自分も本当にまぶしく感じていました。学ぶ姿勢を忘れなければ、きっと実りあるインターンになると思います。参加が決まった方はしっかり準備をしておいてください。貴重なインターンの時間を、インターン以外の時にでも出来ることで費やしてしまうのは勿体ないですから。
インターンの話は以上になりますが、おまけとしてはてなの開発環境などの話を少しだけ。
はてなの開発
- コードの書き方
- Git!Git!Git!
- 仕様書よりテスト
- エンジニアはVim/Emacs
- ほとんどPerl。でもJavaScriptやRuby書ける人多い
- 内製フレームワーク多し
- Ridge, MoCo, Ten
- 自分で手を加えられるところが良い
- みんな優秀でフランク
- 質問すると絶対良い答えをくれる
- 専門分野じゃないはずなのに何故か良い答えをくれる
- 気さくに話しかけてくれる。
- 社員仲良い。仲良すぎワロタ。普段idで呼び合ってるからでしょうか
- 情報共有
- はてなグループとはてなキーワード使いこなしてる
- 用があればすぐidトラックバック。すごく気軽
- 情報公開に対して好意的な文化。
- NDA!NDA!と社内で冗談を言ってますが、技術的ノウハウやインフラ知識など積極的に教えてくれる
- 開発環境
- macbook pro 多し
- 24インチモニタたくさん
- アーロンチェアもたくさん。自分は大体バランスボールで跳ねながら作業してた
- ペアプロ中の自分達の会話が迷惑になるんじゃないかと思う程度に静かです
- フリードリンク/フリーフード
- Dr.Pepperやトマトジュースや色んな飲み物が飲み放題!お菓子も食べ放題!
- Dr.Pepper厨の俺歓喜!ヽ(´ー`)ノ*7
- はてなに来てから5kg太りました(^q^)みたいな人を何人も見てきました。はてなは恐ろしいところだ…
はてなのごはん
何度昼ごはんに元気付けられたことか。はてなおいしいです
自分のはてなでの開発ツール
- Macbook Pro 13inch
- Vim
- Macvim
- GUIエディタから簡単に移行できなくて…
- Macのエディタの標準的なキーバインドと互換性があって使いやすい
- Macvim
- Screen
- インターン終盤で使い始めたけど色々便利
- デフォルトでvi/sh/mysql/server/etcの5枚を開いてる
- VMWare Fusion + CentOS
- CentOSはインターン生用に配られたもの
- 必要なものを既に色々入れてくれていて素敵!
- クロスブラウザチェックに活躍
- MacFuse + MacFusion
- Finder上でSSH接続先をマウントできる
- VM上のCentOSに、Finder上からSSHでアクセス
- Finderで見られると色々と見やすくて素敵
- smcFanControl
- 夏はMacbookがめちゃくちゃ熱い
- ファンの回転数をコントロールして冷却。必須
- GoogleNotifier + Growl
- わりと重要なトラックバックがよく飛んでくるのでいつでも気付けるように
- Firefox
- Firebug : JavaScript開発神
- JSONView : 普通見られないJSON形式のレスポンスをブラウザで確認できる
- ツリー型Tab : Macbookの画面がワイドなので、タブはサイドバーで沢山開いてツリー形式で管理
- ResizeableTextarea : はてなダイアリーとかのフォーム画面が小さいと思うときがたまに…
- MakeLink : はてな記法を覚えさせておいて簡単に変換
- HatenaBookmark : 仕事後に読むタグ
インターンに際して読んだ本とエントリ
本
- 初めてのPerl 第5版
- 続・初めてのPerl 改訂版
- Perlベストプラクティス
- JavaScript 第5版
- JavaScript: The Good Parts
- Head Firstデザインパターン
参考サイト
- サンプルコードによるPerl入門
- Perl入門
- Perlオブジェクト指向プログラミング
- Perl の基礎知識
- Perl講座 10章 オブジェクト指向プログラミング
- 簡単!オブジェクト指向Perl
- Perlオブジェクト基礎文法最速マスター - 燈明日記
- 【Perl】オブジェクト指向 for Java使い - (・∀・)イイ!!Memo
- Perlで初めてのオブジェクト指向 - とある技術の備忘録
- perltoot - トムによるPerlオブジェクト指向チュートリアル
- perlreftut - Mark によるリファレンスに関するとても短いチュートリアル
- 特集:Happy Testing Perl|gihyo.jp … 技術評論社
- The CPAN Search Site - search.cpan.org
- Index of /docs/modules
- Perl-users.jp - 日本のPerlユーザのためのハブサイト
- Perl programming documentation - perldoc.perl.org
- アリスとボブになりきってgitをちゃんと理解したい! - ザリガニが見ていた...。
書いたエントリ
- 冷やしPerlはじめました
- Perlで初めてのオブジェクト指向
- Perlで初めてのテスト
- Perlで初めてのCPAN TemplateとDBIモジュールとか
- O’Reilly 初めてのPerl第5版 読了
- Gitおさらい
- Gitで過去に戻る
- JavaScriptのイベント伝播
長くなりましたが以上です。ここまで読んでいただいてありがとうございました。
もしよければ、過去のインターン生のレポートを下記エントリにまとめているので参考にどうぞ。
はてなインターン参加者レポートまとめ、あるいはインターン事前準備
*1:はてなでもらいました!
*2:[http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1438427284:title=プログラマ、SE、ゲームプログラマについて - Yahoo!知恵袋]
*3:[https://www.amazon.co.jp/dp/4873113954:title=アート・オブ・アジャイル デベロップメント —組織を成功に導くエクストリームプログラミング]など
*4:まあ間違いなく開催されると思います
*5:[http://d.hatena.ne.jp/yaotti/20090831/1251454253:title=はてなインターンの1ヶ月は精神と時の部屋状態だった件]
*6:まあこのまま実際続いているわけですが
*7:消費しすぎたせいか後半あまり出なくなって凹んだ