yaotti's diary

Software is Eating the World

はてなインターンの1ヶ月は精神と時の部屋状態だった件

8/3から始まったはてなでのインターンシップが終わりました.まだ8月の1週目が終わったぐらいの感覚なんですが,もう夏の終わり…
この1ヶ月は過去最高の夏休みだったと断言できるほど多くの学び,刺激があったので,はてなのことや自分のことについてまとめておく.
結構長いので[あとで読む]タグ推奨.


IMG_0594

はてなインターンで出した成果

後半過程は僕とid:nyanpはてなブックマークチームに入り,マイブックマーク全文検索の機能拡張に携わりました.
はてなブックマークプラス:マイブックマーク全文検索機能に、スコア順検索機能などを追加しました - はてなブックマーク日記 - 機能変更、お知らせなど
はてなブックマークプラス:マイブックマーク全文検索機能に、お気に入りユーザの表示機能を追加しました - はてなブックマーク日記 - 機能変更、お知らせなど
はてなブックマークプラスユーザー限定の機能ですが,ブックマークの検索がスコアリングされることで過去のブクマが埋もれる心配がなくなります.「とりあえずブクマしておけばいい,検索すれば見つかる」というのは安心感があってなかなか良いので,プラスユーザーになってみるといいと思います!Google検索時にブクマ検索結果を出してくれるなど,色々べんり!!!!
はてなブックマークプラス
htmlで検索した時,html拡張子のサイトではなくきちんとhtmlの仕様やリファレンスが上位に来たり,macで検索してもemacsエントリで埋まったりはせずmac情報を出してくれたりと,結構いい感じに出来ていると思います(・∀・)
まあ宣伝はこれぐらいにしておいて,インターンシップの様子について.

インターン前半2週間

IMG_0597
前半の1日の流れははてなインターン1週間経過 - (programmer? yaotti)に書いた通り,課題に追われる日々でした.
良かった点を簡単にまとめると

  • ただ濃いだけでなく,広く学べる
    • 密度が尋常じゃない上に幅まで広い.あれほどのプログラミングカリキュラムはそうそうないはず
    • 1日1フレームワークを学び,それを使って動く物を作る.なかなか激しい
  • インプットした後すぐにアウトプット→フィードバックがある
    • どれだけ身に付けられているのか,またどこが理解できていないのかがすぐにわかる
    • 点数を付けられることで,主観ではない判断基準のもと弱点を見つけられる
  • コードを見られ,点数を付けられるというプレッシャー
    • 自分しか見ないような趣味プログラミングと違って,妥協できない開発
      • 「できた(つもり)」「(よくわかんないけどとりあえず)動く」はダメ,ゼッタイ

「学んでいる」ではなく「身に付けていっている」という感覚はとても心地良いものでした.
なかなか酷いコード(最初の方は特に…)をきっちりと採点+フィードバックしてくださったはてなの方々,ありがとうございました.

インターン後半2週間

IMG_0651
後半ではチームに配属され,その中で特定のテーマについてがしがし開発を進めていきます.僕はid:nyanpとほぼ常にペアプロで進めるという形を取り,このおかげで順調に進められました.
ペアプロは今回が初めてだったのですが,自分1人だと気付けない良い書き方や発想,固定概念を指摘してもらえるので僕らのような開発に十分慣れていない人にはとても良い開発手法でした.
後半は基本的にパートナーと開発を進めるのですが,手が止まってしまった時などに社員さんに聞くとあっさり解決法を提示され,知識の厚さ,経験の違いを感じました…id:secondlifeさん, id:r_kurainさん,id:nagayamaさんにはとてもお世話になりました.

全体を通して

前半は毎日自分の書いたコードに点数が付けられ,点数が悪いと後半に進めないというプレッシャー.
後半は自分の書いたコードがはてなの大規模サービスに組み込まれ,たくさんのユーザーに使われるというプレッシャー.
1ヶ月というそれなりに長い期間でしたが,ずっとダレることなく全力で集中して開発を進められたのはこれらのプレッシャーがあったおかげだと思います.インターン生の集中力を最大限引き出す良いカリキュラム.
また最後に技術面,コミュニケーション面について,id:jkondo, id:naoya, id:stanakaに囲まれるという恐怖のありがたい面接+フィードバックがあります.*1採点の切り口が良く,自分に足りない点を知ることができたので今後に生かせそうです.


働く場所としてのはてなについて

快適だ,というのはあちらこちらで言われていると思うので,具体的にどう良いのか僕視点で挙げてみようと思います.

オフィスランチのおいしさ

御飯の大切さを,身をもって知りました.id:macanaiにて見た目はわかると思いますが,味は食べてみないとわからないものです…ここまで毎回おいしい御飯を出してもらえるなんて!
2週目以降は月水金が楽しみになりました.*2オフィスランチは確実に,はてなの競争力を支える大きな柱の1つだと思います.

開発の環境

IMG_0608
上の写真にあるように,透明なパーティションで区切られたエリアでチームが分かれています.今回ペアプロをしていて思いましたが,すぐにコミュニケーションを取れるというのはとても大きいと思います.
就業時間を終えると騒がしくなる日もありますが,基本的に静かに開発できるというのも良い所です*3

情報共有の上手さ

はてな内でははてなグループをとても上手に活用しており*4,情報共有は開発効率を上げる重要な要因の1つだと感じました.
今回のインターンでの使い方を挙げると,

  • 毎日の講義資料はグループキーワードとして登録される
    • あちこちにpdf, pptなどで散らばることがなく,アクセスしやすい
  • 進捗は各個人のダイアリーに書き,TAやチームディレクターにidトラックバック
    • ダイアリー形式で書く,ということで抵抗が少なく書ける
    • 何か聞きたいことがあっても新しくエントリを書き,idトラックバックを打つだけという気軽さ

idトラックバックが便利すぎる.何か伝えたいときにid:***と書くだけで良い.
チームでの活動になると情報をどううまく共有するかが問題になりますが,はてな内ではwebを活用しながらも頼りすぎない情報共有が行われており,うまく使い分けられていました.

はてなインターンを通し,学んだこと

IMG_0632

成功体験を持ち帰ることができた

今まではネットで凄い人たちを見て「自分は何もできないなー」と思いながらも具体的に動くわけでもなく,宙ぶらりんな状態だったのですが,はてなインターン日記 - コードを書いてリリースする はてな流成功体験:ITproにあるid:naoyaさんの狙い通りに成功体験と自信を得ました.
今回成功体験を得たのも,はてなが開発の楽しい部分を思い切り体験できるよう,お膳立てしてくださったおかげです.*5感謝.

アウトプットする学びの重要さ,面白さ

上でも書いた通り,はてなインターンではインプットだけということはありませんでした.常にアウトプット+フィードバックが付いて回ります.
自分にアウトプットが足りないというのは日々感じていたのですが,「アウトプット=コストのかかる物」というイメージがありどうしてもインプットに偏りがちでした.しかし今回インプットをアウトプットと組み合わせることで得られる,「自分の身に付けられているという実感+安心感」を知ることができました.これは今後の学びに良い影響として残りそうです.

来年インターンを目指す人へのアドバイス

来年もあると思うので,自分や周りが苦労していたポイントを考えつつ書いてみる.

Perlの勉強

perldocの読み方,CPANモジュールインストール方法,Emacs/vimで効率的にドキュメントを引く,perltidyでの整形方法,ぐらいは知っておいたほうが無駄な時間を使わなくて済みます.
ちなみに僕のperl関係設定@Emacsはこんな感じです.
404 · GitHub
Emacsユーザーは,id:antipopさんのダイアリをemacsで検索し,ヒットしたエントリ全てに目を通しておきましょう.ぼくはやらずに行くという失態を犯しました.行く方は気をつけましょう.
また,初めてのPerl,続初めてのperlperlベストプラクティス*6は読んでおくべきです.

JavaScriptの勉強

今回JSを書くのが初めてという人が何人かおり,かなり苦戦しているようでした.サイ本読破まではいかなくとも,DOMやイベントが何なのかぐらいは理解しておいたほうがいいかもしれません.

快適な開発環境の構築

今回の開発はVMWare上のlinuxで行なったのですが,皆完全にローカルで書くかVM上のEmacs/Vi(m)で書いているようでした.
前者にはローカルで動いたコードが環境の違いで動かないという危険があり,また後者は設定の移行が面倒なので,どちらもあまり良い方法とは言えません.
僕はssh先をマウントしてローカルのEmacsで開発していましたが,これはかなり快適,特にEmacs/Vimの設定をやり込んでいる人にとっては必須(常識?)なので試してみてください.
ssh先をマウントするといってもMacならMacfusionなどを使えばそれほど難しくはないので(windowsはどうなんだろう),あらかじめVM上で快適に開発できるような環境を構築しておくことを薦めます.課題に追われて環境構築に時間を割けるとも限りませんから…

まとめのまとめ

IMG_0662
僕は去年の夏,id:ninjinkun0×0018 till I die » はてなインターンの手引きid:suztomo9月のはてなインターンシップを終えたまとめ - suztomoの日記のようなエントリを読み,「もし来年もインターンが開催されたら応募しよう!」と決心しました.このエントリが読んでいる人にとってそういったものになれば幸いです.
今回のインターンで,僕の技術に対する姿勢,意識は変わりました.*7
1ヶ月間,ありがとうございました!

*1:デプロイの時並の緊張感

*2:オフィスランチは毎週月水金の3日間

*3:静かだからといって,質問がしづらいとかそういうことはない

*4:自社サービスを全力で活用している,というのはすばらしいです

*5:普通の人,特に学生が多くの人に使われる物を0から作るというのはかなり難しいと思う

*6:今読んでいるけど,「読んでおけばよかった!」と後悔

*7:心を決めたというかなんというか