はてなインターンという人生最高の夏

mackerel.io

はてなインターン2017に参加しました

はてなインターン応募してくれ!!!というレポート記事です

来るまで

以前

id:cohalz

2年前くらいから某社で動いてるプロダクトのScala(PlayとかLiftとか)に触り始めた感じの人間で,

あとは動いてるものだとこのbotがあって,それ以外にやってきたことはいろんな言語の機能見たりとか,コードのレビューなんかも複数の所でやってたりしてた

はてなインターン自体の応募理由としてははてなブックマーク等は使っていたし,Twitterで前々からフォローしてた人多数がめっちゃ行ってたので行きたいと思ってた

とはいえ今年になるまで応募していなかったのは自身のレベルが足りないと思っていたからで,そんなときに去年に行われた夜の合同説明会に参加して次は応募しようと思った

cdgh.connpass.com

事前課題

そんなこんなで受かったあとはコースごとに指定された事前課題を解いて提出するよう指示が来る

MackerelチームではScalaJavaScriptが指定されて,どちらも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,非同期,AjaxjQuery,フロントエンド設計,NodeJS

  • id: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位と悔しい結果に

他のチームを見てみると

とめちゃくちゃ便利になっていて完敗

とはいえ社内でもMackerelを触っている人から「めちゃくちゃ便利になった!」との声を頂いて,めちゃくちゃ嬉しかった

自分で書いた便利機能が実際にリリースされてユーザから感謝されるっていう体験は本当にいい体験で,本当にあっという間に2週間が過ぎてしまった

期間中の出来事いろいろ

毎日の話

  • ホテルはオフィスから徒歩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値で競うコンペ
  • 前半過程の自由課題
  • 後半過程の最終成果発表

などなどいくつも機会がある

この機会のお陰で自分の実力を発揮して良いものを作るチャンスになるし,他の人を見て参考にしたり高めていく気持ちになる

なので体調を崩さない程度に全力でやっていくといいと思う

おわり

という感じで何もかもが最高の環境で最高の夏を過ごすことのできるはてなインターン是非応募してくれ!!!

あわせて読みたい

syfm.hatenablog.com

hogashi.hatenablog.com

ishikawa-pro.hatenablog.com

snowman-mh.hatenablog.com

k3ntaroo.hatenablog.com

anatofuz.hatenablog.com

bookmark.hatenastaff.com