はてなのサマーインターンに参加しました

精神と時の部屋で有名な 株式会社はてなのサマーインターンに参加しました。

6週間という長きにわたるインターンのなかで何をして、何をみて、何を得たのか。
そして2013年のインターンへの応募を考えている方へのアドバイスを綴ります。

参加のきっかけとなった過年度インターンの方のエントリはこちら

0.はじめに

かなり長めの内容になってしまったので、伝えたいことを3つに区切りました。

  1. はてなのインターンってこんな感じ
  2. インターンに参加して得た3つのこと
  3. 悔しさのなかで見たもの

興味のある部分を選択して読んでいただければと思います。もっとてっとり早く知りたければ、id:uiureoさんの書いたはてなインターン前半まとめが分かりやすくてよいです。

1.はてなのインターンってこんな感じ

はてなのインターンってどんな事するの?
ということで、基礎課程1週目・基礎課程2週目・実践過程 期間中の活動を振り返ります.

■基礎課程1週目

一日の過ごし方を見てみましょう。

11:00 Webアプリケーション開発に必要な基礎知識の講義

10:30に出社して、午前はインプットの時間。
Webアプリケーションを開発する上で必要な知識や、はてなのサービスを支えるフレームワーク、インフラ、デザインに関する講義が行われます。講義項目は以下のとおり。

  • Perlによるオブジェクト指向プログラミング
  • ORMによるデータベース操作
  • WAFによるウェブアプリケーション開発
  • JavaScriptによるイベントドリブン
  • Webサービス企画/設計ワークショップ
  • はてなのデザイン
  • はてなのサーバー/ミドルウェア構成
  • はてなのビジネス
  • スマートフォンアプリ開発

・14:00 昼食

14:00から1時間は昼休憩です。お昼ははてな自慢のまかないランチをいただきます。とても美味しい!!それにメニューは日替わりなので全く飽きません。まかない日記にてレシピも公開中。毎日写真を撮りました。

はてなインターンのランチ

自分の食べたい分だけよそうのでその日の体調に合わせて量を決められるのがいいですね。id:catatsuyさんは毎日僕の2倍くらい食べてました。

頭がプログラミングモードから開放される至福の時間です。

・15:00 実習

午後からはアウトプットの時間です。 午前の講義をもとにした課題が出されるので、午後からはその課題をこなすフェイズにうつります。課題提出の締切は翌日の朝10時。皆黙々と作業を進めます。参加者2名に対し1名のメンターの方にスタンバイしていただいており、躓いた時はすぐにアドバイスを頂くことができます。id:nobuokaさん 最後まで付き合ってくださり本当にありがとうございました。

インターン実行委員長のid:r_kurainさんが初日におっしゃった「期間中、君たちには悩むような時間の余裕はないので分からないことがあるときはすぐに質問してください」という言葉が今でも印象に残っています。

・19:00 定時

インターンシップの定時は19時ですが、課題制作が間に合わなかったりもっと機能を実装したいと思うひとはオフィスに残って作業を続けます。会議室奥には通称「畳部屋」と呼ばれるリラックススペースがあります。ここではメンバーが黙々とコードを書いていると思えば、互いに教え合ったり、ときに脆弱性を攻撃しあったり… 和気藹々とプログラミングすることができました。

写真は自分のサイトにスクリプトを埋め込まれたid:funnelbitさんの図。

・22:00 完全退社

夜遅くまで残っていたメンバーも22時で完全退社。
メンターの方々も夜遅くまで残ってくださって、とてもとてもお世話になりました。

それでもまだ物足りない!と思うひとはオフィスを離れてからもコードを書きます。自分の場合は周りのメンバーに比べて圧倒的に技術が不足していたのでPerlもORMもWAFもJavascriptもついていくのに必死。ホテルについてからもしばらくプログラミングしていました。オフィスを出てからどう過ごしていたかは人それぞれのような気がします。

・翌日 10:00 課題提出

ぎりぎりまで完成しなくて10時直前に提出した日もありました。
課題を送信してひとあんしん。また新しい一日が始まります。

基礎課程はじめの1週間はこのサイクルが繰り返されます。

■基礎課程2週目

基礎課程も2週目に入り、はてなインターンの24時間に慣れてきたところ。
ここからは1週目で制作した課題(ブログができあがった)に対して各自が独自機能を実装します。完成した作品については、基礎課程最終日にプレゼンをし、内容やコードをはてなの社員さんに審査していただいて順位がつきます。

僕は、みんなに読んで欲しい記事をスクラップして目立つところに配置できる機能を実装しました。結果はデザイン賞2位、総合得点3位、うーん悔しい。

■実践過程

前半2週間を終え、ここから4週間は実践過程となります。 実践過程ではインターン生が実際にはてなの開発チーム(はてなブログ/はてなブックマーク)に配属され、はてなのサービスの改善、機能追加を行います。僕ははてなブックマークチームのなかでid:kazy1991と共にAndroidアプリへの機能追加を行いました。

インターン期間中の成果に関しては、最終日に成果発表会という形で各々のチームがプレゼンを行い、投票によって順位がつけられました。結果は6位/6チームで残念ながら最下位。悔しい。

以上が、6週間のインターン期間中の過ごし方でした。

2.インターンに参加して得た3つのこと

では、はてなインターンの基礎課程を終えて得たことは何か。それは3つありました。

■筋の良い技術・良いWebサービスを作る方法を身につけられる

1つ目は言わずもがな、Webアプリケーションを開発する上で必要な技術と企画手法を身に付けるための入口が開けたこと。

前半過程では書いたコードが即日評価されるため、知識のインプットとアウトプットの繰り返しによってものすごい密度でのプログラミング学習を体験できます。また独学で学習しているといわゆるハマリポイントに躓いて何時間あるいは何日間も前に進めずイライラすることが日常茶飯事ですが、周りのインターン生やメンターの方に質問するとすぐに答えが返ってくるので時間を浪費することもありません。周りに頼れる人がいるのはこんなにも心強いことなのかと身にしみました。

また、後半過程の独自機能追加においても、Webサービス企画のワークショップを通じて「誰のどんな問題を解決するか」といった需要の提起からペーパープロトタイプの手法まで実際に体験することができました。企画の手法を学ぶことで、新しいサービスやアプリを開発する上でのアプローチの幅が広がりました。

こうした環境で心が折れることなくコードを書き続けられるのは、インターン生の間に競争心が働いているからではないかと僕は思います。課題をこなすなかで面白いと思ったのは、どの課題にもオプションとして「自分で考えた追加機能を実装してください」という問題がつけられていることでした。提出条件をクリアした頃に周りを見渡すと、皆黙々と便利機能や面白機能を実装しています。それを見ていると「負けられるか」という気持ちが働いて、手を止めるタイミングがありません。
「毎日課題に追われていた」というのは難易度の高さや膨大な量に埋もれていたわけではなく、実際のところはどれだけ作りこむかに没頭していたから、といった感じでした。

■エンジニアとして働くことはどういうことかを知ることができる

僕は目標とする職業を研究者かエンジニアのどちらにするか決めかねていて、「Web系の会社でエンジニアとして働くってどういうことなんだろう」という疑問に答えを見つけるべくはてなのインターンに参加しました。

実践過程が始まって最初に痛感したのは、多くの方に利用していただいてるアプリに機能を追加することの責任感でした。ただ自分にとって「作りたいもの」を作るのではなく、新機能追加にあたる背景や過程の議論、念入りにユーザテストを繰り返し、「作るべきもの」をつくる。そこに求められるのは意外性とか独特なUIではなくて、ユーザさんに本当に便利だと思っていただけるような、安定した機能なのだという考えは今までの自分には欠けていて、目が覚めたような気持ちでした。チームへ配属されたばかりの頃は自分の作りたいアプリへのこだわりと作るべきアプリとの間で葛藤などもありましたが、はてなブックマークチームのメンバー、とくにid:hakobe932さんとお話するなかでより広い視野を持つことができました。

インターンが始まった頃はインターン生も社員の方も非日常の中にいて、イベント感の溢れるはてなのオフィスというものはとても楽しいです。しかしインターン最終日に社長のid:jkondoさんが「6週間も働いていると終わりに近づいた頃にはインターン生も社員みたいなものだよね」とおっしゃっていたように、1ヶ月以上も出社勤務退社を繰り返していると、自分のなかでオフィスに通うことが当たり前のような感覚がやってきます。振り返ってみると、そんなインターン終盤の頃の方が、働き方とか会社の仕組みとかいろいろなものが見えてきて「Web系の会社でエンジニアとして働く」ことがどういったことかを知るよい機会となりました。

また社内の環境の話をすると、畳部屋と呼ばれる快適空間が存在したり、飲み物やお菓子に不自由しなかったり、毎日おいしいまかないランチをいただいたり、TGIFと呼ばれる定期的な交流会があったり、はてなオフィスは良すぎると言っても過言でないくらい快適な空間でした。

■技術的に思考的にとがった同年代のプログラマに出会える

はてなには全国から意識の高い学生からのインターン応募が寄せられ、選考を通過してオフィスに集まったメンバーは技術的に、思考的に、あるいは性格的にとがった人ばかりです。そんな人達に囲まれて2週間ないし6週間過ごすのは非常に刺激的な経験でした。

さわやかid:takanamito、JSの神id:funnelbitやスーパー高校生id:issaysa、技術力高いid:henteko07、かなり技術力高いid:uiureoや奇行に走るid:catatsuyなどなど.. id:pika_shiとはインターン後も早速別のイベントで再会したりして、この夏インターンでできた繋がりはかけがえの無いものだなぁと感じます。

3.悔しさのなかで見たもの

ここまでの内容を読んでいただくともうお分かりかもしれませんが、僕はかなりの負けず嫌いです。基礎課程の成果発表会で内心「このひとには勝ちたい!」思ったひとに負けて、実践過程の成果発表会でもかなりの票差で負けました。そこには圧倒的な技術力の差がありました。

基礎課程、実践過程共に成果発表会で最優秀賞を獲得したid:cockscombさん。
完敗でした。次に会った時には追いついていたいです。

企業のインターンシップにはインプットの場とアウトプットの場という両面の捉え方があると僕は思います。もしこの記事を読んでいるあなたが「はてなのインターン」に参加したいと考えているのであれば、あなたが求めているのはインプットの場か、アウトプットの場なのかを少し考えてみてください。

もしはてなインターンを**インプット(技術的なスキルアップ、自分の視野を広げる場)と考えるならば、なるべく若いうちに、すぐにでもエントリーするべきです。筋の良い技術を得る手法を身につけるタイミングは早ければ早いほど効果的だからです。
あるいははてなインターンを
アウトプット(インターン生や社員の方との交流、自分の実力を試す場)**と考えるならば、ある程度の実力をつけた上でのエントリーをおすすめします。その方がインターン期間中の実践的な経験を存分に吸収できるし、それに課題をこなしていくなかでもある程度余裕があるといろんな方と交流する機会がとれるからです。

はてなインターンはプログラミング初心者にとても、上級者にとっても大きなものを得られる場所であり、この貴重な経験をどう活かすかはひとそれぞれだと思います。僕の場合はもう少し実力をつけてから参加していればまた違った経験になったのかなとちょっとだけ後悔しています。

おまけ

  • 基礎課程課題発表会の前日にemacsユーザであるid:catatsuyさんのPCのcontrolに割り当てたcapsキーが壊れました。「これはVimerの仕業ではないか 」ということになりちょっとした話題になりました。それ以外には特に目立った宗教戦争が起きなくてほんとによかった。
  • 社内でははてなidでお互いを呼び合う風潮があるので、これからアカウントを取得する時は呼びやすい名前を選ぶといいです。大文字、数字、子音ばかりで構成された名前は避けましょう。(id:shkhさん結局何て呼べばよかったんだろう..)

おわりに

講師やメンターとしてお世話になったはてな社員の皆さん。
本当に楽しかったです。ありがとうございました!!

6週間を共にしたインターン実践コース・研究コースのみんな。
またどこかで会いましょう!!

新機能をリリースして多くの方に使っていただいたという成功体験と、ライバルとの間にある圧倒的技術力の差という悔しさとがほどよく得られて、実りあるインターンでした。

この夏得た成功体験と悔しさをもとにもっともっと成長できるよう頑張ります。 はてなインターンは最高に楽しかった! !