はてなインターン2017に参加しました
はてなインターン応募してくれ!!!というレポート記事です
来るまで
以前
2年前くらいから某社で動いてるプロダクトのScala(PlayとかLiftとか)に触り始めた感じの人間で,
あとは動いてるものだとこのbotがあって,それ以外にやってきたことはいろんな言語の機能見たりとか,コードのレビューなんかも複数の所でやってたりしてた
はてなインターン自体の応募理由としてははてなブックマーク等は使っていたし,Twitterで前々からフォローしてた人多数がめっちゃ行ってたので行きたいと思ってた
とはいえ今年になるまで応募していなかったのは自身のレベルが足りないと思っていたからで,そんなときに去年に行われた夜の合同説明会に参加して次は応募しようと思った
— こはる (@cohalz) 2016年11月18日
事前課題
そんなこんなで受かったあとはコースごとに指定された事前課題を解いて提出するよう指示が来る
MackerelチームではScalaとJavaScriptが指定されて,どちらもLTSV形式をパースして集計を行うことや,JavaScriptだとDOM操作も使ってテーブル表示・検索などの機能を実装するという課題
これらの実装の他にテストを書くのも課題として含まれていて,言語機能やその言語でのテスト環境を事前に把握することができる課題になっている
JavaScript課題では検索機能の課題は自由に作成してよいという指示が入っていて,好きだったり最新のフレームワークを使うのも可能
なので余裕があればただの課題と思わずに色々工夫までできると良かったと後で気付いた
京都
前半過程
11時から13時まで毎日入れ替わりで社員の方が講義をして,昼休憩が終わった14時から課題を進めるという形式
14時から退社時間の19時まで5時間もあるし課題なんてすぐ終わるだろうと思っていたけれど,満足の行く実装を終えるには時間が足りないくらいだった
何故かと言うと課題は毎日関連があるようにできており,下手な設計・実装をすると次に影響が出てしまうからである
以下講師の方と内容紹介
id:stefafafan Scalaによるプログラミングの基礎
OptionやEither,forやimplicitなど実用で使う部分が中心id:Windymelt Scala によるデータベースプログラミング
ScalaでDBを扱う際のライブラリの紹介やDB設計,レイヤ化アーキテクチャなどid:motemen ScalaによるWebアプリケーション開発
Scalatraを用いてURL設計,View,Controller,それに対するテスト追加id:masawada はてな教科書JavaScript編
ES6中心の言語仕様,DOM,非同期,Ajax,jQuery,フロントエンド設計,NodeJSid:syou6162 Web開発におけるコンピュータサイエンス - 機械学習編
何故Web開発で機械学習を導入するのか,簡単な例,難しい例でどのように特徴量を決めていくのかid:takuwolog id:akawakami デザイン講義
課題解決の手順の話やより良く伝えるためにどのような考えをするべきかid:masayoshi インフラ講義
「インフラ」という大きな括りではなく部分に分けて,何故このサービスはこんな構成/実装になっているのか等AWS講義・ハンズオン
AWSのサービス紹介と前半過程の初週で作ったWebサービスをAWSを使ってデプロイするまでid:chira_rhythm55 サービス企画
様々な方法で問題を洗い出し,考えた企画を周りにアピールするためにどのようにやっていくか
というような講義を受けてそれに対応する課題を実装し翌日にレビューを貰う形
課題自体は機械学習で一旦終わり,2週目は提出した課題の直しをする余裕があるようになっている
前半過程の最終日には,今までの課題で作ったWebサービスをさらに拡張し新しく何か機能を追加したものを発表するというイベントがあり,自分はWeb Speech APIを使って音声入力をできるようにした
他の人がレベル高いものを作っている中で5位と言う結果に
上位の人はほんとうにすごい機能追加をしていて,自分ももっと事前に構成を練って設計をしておくと良かったなぁと後悔
後半過程
後半に入ってからはid:ktr_0731と2人でMackerelチームに配属され,
id:itchynyさんがメンターとなって開発を進めていった
2人ペアでチーム配属というのは本当にいいシステムで,二人でAPI設計をした後にサーバサイドとフロントエンドに分かれて機能開発をしたり,
こっちはControllerのテスト書いてるからそっちはModelのテスト書いてほしいみたいなことがどんどんできる
2週間で新しく開発した機能は6つ
- メタデータの一覧API
- アラートを閉じた時の通知の強化
- 最後に共有したチャンネルを保存してセット
- アラートを監視の種類で絞りこめる
- アラートで通知したチャンネルを表示
- グラフ共有でメトリックを指定
リリースブログ記事はこちら mackerel.io mackerel.io
と,個人的にはかなり爆速で機能を開発して,手応えはあったものの最終成果発表は4位と悔しい結果に
他のチームを見てみると
- ブログチームは画像を選択順に貼り付け,横並び貼り付け,キャプション追加 staff.hatenablog.com
- 大規模チームは次世代サーバ監視システムとその可視化 developer.hatenastaff.com
- iOSアプリはクイックブックマーク機能とその後のあわせて読みたい機能の実装 bookmark.hatenastaff.com
とめちゃくちゃ便利になっていて完敗
とはいえ社内でもMackerelを触っている人から「めちゃくちゃ便利になった!」との声を頂いて,めちゃくちゃ嬉しかった
自分で書いた便利機能が実際にリリースされてユーザから感謝されるっていう体験は本当にいい体験で,本当にあっという間に2週間が過ぎてしまった
期間中の出来事いろいろ
インターン初日の出来事 SW-4140-6001-6462
突然ですがSwitch買いました pic.twitter.com/qk1ikep34N
— こはる (@cohalz) 2017年8月14日指摘されるまでずっと11人って言ってた
今年のインターン Vim: 11人 Emacs: 0人 Atom: 1人
— hakobe (@hakobe) 2017年8月14日昔のid:motemenさんに似ているらしいid:makenowjustの仕業
— こはる (@cohalz) 2017年8月25日
ステッカーも沢山もらった
趣味はマリンスポーツですステッカー pic.twitter.com/WZ9SEt8D2L
— こはる (@cohalz) 2017年8月23日Tシャツも沢山
サバを読んでいくぞ! pic.twitter.com/0mhFfLyTXu
— こはる (@cohalz) 2017年8月28日京都の風景 ↓画像の貼り付けにこれらの機能を使っています↓ staff.hatenablog.com staff.hatenablog.com staff.hatenablog.com
毎日の話
- ホテルはオフィスから徒歩2分ほどのハートンホテル京都
- ホテルは一人部屋で洋食バイキングと和食が朝食
- 10時30分までにオフィスに来て11時から開始
- 13時からまかないランチの時間で,社員の方と話しながら食べてその後時間までソファのある場所で一緒にイカしたり等
- オフィスには本やボドゲもいっぱいあって色々できる
- 定時が19時で前半過程は21時まではメンターも残っているのでその時間までは作業が可能
- 後半過程では19時過ぎて作業を続けるということはほとんどなくて,ゆっくりしてから夕食食べに行っても21時くらいにはホテルに着いてるような感じ
- 夕食はオフィスにピザや寿司が届いたり,すき焼きや寿司や焼肉に連れてってもらえる会があったり
- その他にはチームの人にお店に連れて行ってもらったりで一度も財布を出していない日の方が多いんじゃないかという感じで詳しくは以下のアルバム photos.app.goo.gl
まとめ
来る前と比べてどう変わったか
経験があった部分はより確かな知識へ
前半過程では講義と課題のフィードバックによって,よりレベルの上がったコードが書けるようになった
後半過程でもDB設計やMVC,テストを実際のプロダクトを見ながら実装できたことは大きな力になったWebサービスの上から下まで見通せるようになった
末端の部分であるインフラやデザインの部分を知ったことで,インフラエンジニアやデザイナと話す際の共通言語を増やすことができた
プロダクトにおいてなぜこんな構成になっているのか,なぜこんなデザインなのかをより意識できるようになった
参加を考えている人へ
応募はしよう
応募しないと受からない
Perl書いてないからとか知識足りなさそうだから応募しないという理由はまったくなくて,前半過程ではWebサービス開発のために特定の言語を選んでいるだけでそこは本質ではない
事前課題では3週間くらいは余裕があるし事前に良書の紹介もあったりSlackにも入れるので質問ができる
逆にはてなインターンのためにPerlとかScalaやろうかなと思っている人がいたら注意したいのは,カリキュラムは毎年変わるので来年もその言語がある保証はないということ
インターンに行く前のスキルで特に役に立ったのは,Webサービスがどのように動いているかという知識と,規模の大きいコードを読む・書くという経験の2つ
あとは応募開始したら早めに応募をすることで早めに面談,合否がわかることもあるので複数インターンに応募したい人は特に早めに,それに締め切りギリギリの応募も印象良くない
課題や発表は全力で!!!
毎日の課題で講評があり,他のインターン生のコードを見ることができる
同じインターン生のコードを見るというのは刺激的で
- 事前課題のJavaScript課題
- JavaScript課題のマウスストーカー作成
- 機械学習でよりよい特徴量を抽出しF値で競うコンペ
- 前半過程の自由課題
- 後半過程の最終成果発表
などなどいくつも機会がある
この機会のお陰で自分の実力を発揮して良いものを作るチャンスになるし,他の人を見て参考にしたり高めていく気持ちになる
なので体調を崩さない程度に全力でやっていくといいと思う
おわり
という感じで何もかもが最高の環境で最高の夏を過ごすことのできるはてなインターン是非応募してくれ!!!