TreasureっていうWeb系インターンに行ってきた話

TL;DR

  • Web系インターンのTreasure2019に参加してきました
  • Treasureはイイぞ
  • 強い人が多い環境も最高ダゾ
  • ロボット開発とWeb開発は開発方法に根本的な違いがあるという気付き

f:id:kitchen_py:20190901222907j:plain

まずここで衝撃

 

どんなこと書いてるのか

他の人がインターンで何をやったかというところにフォーカスしていたので、自分は学生活動とチームのWeb開発の違いというところにフォーカスして書いていきました。

denden-seven.hatenablog.com

shinya-ml.hatenablog.com

Treasureってなんぞや

TreasureはVoyageGroupさんのWeb系インターンの名称です。

 

学生の参加人数は30人ほどで、みんなそれぞれに実務経験者だったりNIPSに論文出してたり、それぞれの必殺技みたいな強みがあって結構おもしろかったです。

f:id:kitchen_py:20190901223040j:plain

え、なにこれ

f:id:kitchen_py:20190901223130j:plain

おしゃん

f:id:kitchen_py:20190901223125j:plain

おしゃしゃん



期間としては3週間あって、その中で前半は講義形式でインプットを行って後半に学んだことを使ってプロダクトをチームで開発するという形式でした。

この前半の講義ではフロントからバックエンドとデータベースを扱っていて、1つのプロダクトを作るために必要な知識を限りのある時間に詰め込みましたっていう感じ。

この講師陣がまた物凄くて、みんなのGoで有名なすずけんさんを始めとした技術的にめちゃくちゃ強い方々が毎日交代でそれぞれの担当分野を教えてくれるんですが、 これまた講義の内容が濃すぎて毎日シェアハウスのメンバーと日が変わるまで復習したりしてました。

f:id:kitchen_py:20190901223510j:plain

LTの様子

あと、vimmerを増やしたりしました。

f:id:kitchen_py:20190901223544j:plain

f:id:kitchen_py:20190901223543p:plain

チーム開発の話

後半のチーム開発では5人ほどのチームを組んで約1週間の間にプロダクトを考えてデプロイするところまでやるというものでした。

問題を解決するためにプロダクトを作るのでハードウェアを絡ませても面白かったと思うのですが、このインターンではたぶんウェブサービスを作ることを想定してそうだったりしたで、流石に自重しました。

 

チーム開発する上でなにかと判断を迫られることが多そうだったので、とりあえず個人的な優先度決め。

  1. 自分にとって新しいことができるようになる。
  2. チームへの貢献

ただ、優先度1の技術獲得については別にフロントやってもサーバやっても新しいことを学ぶことになるので、フロントとかサーバとか考えずにチームが上手く回るように足りない部分を補うような動きをすることにしました。(チームはサーバサイドをやりたそうな人が多かったので、結果的にフロントをやることになりました。)

 

具体的に自分がやったこととしては、Preact使ったフロント開発、Makefileのバグとりとか、自分が見つけた不具合をDBレベルでバリデーションかけたりといったことでした。

f:id:kitchen_py:20190901224348p:plain

最高にかっちょいいトップ画面。 かっちょよくない???

8,9割はフロント触っていたのでMaterialDesignのドキュメントを読みながらえっちらおっちら任意の実装を行うっていうことができるようになった(と思う)のですが、今振り返ってみるともう少しサーバ・DB周りを触る選択肢もあったと思います。

もちろん当初の自分のスキルセットと開発期間ということや、フロントも余裕があるわけではなかったという結構大変な状況でしたし、難しい選択であったと言えるでしょう。

でもそもそもTreasureにはWebに挑戦するために来たわけですし、メンターの方には相当な負担をかけることになりますが「技術獲得のためにOJT形式でサーバに1つAPIを生やしたいです!!!終電までお付き合いお願いします!!!!」とか言ってみるぐらいの挑戦はあってよかったと思います。(←ここ反省ポイント)

f:id:kitchen_py:20190901223257j:plain

お世話になったメンターさんと進捗の権化タワー

ロボットコンペティションとWeb開発の違い

実は、このチーム開発が始まるまでは「ロボット開発はチームで結構やってきたし、まあなんとかなるやろ」程度に考えてました。

ただこれが全く違うものだったんですよね。

 

特に違いを感じた点

  • 最適化するべきこと
  • コードレビューの文化
  • ソフトウェアをメンテナンスする文化
1. 最適化するべきことの違い

ロボットコンペティションの場合は技術獲得や政治を考えなければ、最適化するべきは大会の点数っていうことが明確になってるんですね。

ソフトウェアはハードウェアと違って人件費以外ほぼかからないし、ロボカップやワールドロボットサミットのような知能ロボットの分野ではニューラルネットワークの実行時間が長いことが知られているから実行時間については数十秒程度でもいいよとか、Webと比べるとかなり緩く設定されてることがほとんどです。

 

それに対して、Web開発はUX向上やサービスのコンセプトなど最適化するべき項目が多いように見えました。


2. レビュー文化とコードをメンテナンスする文化の違い

ロボットコンペティションだと基本的にそれぞれの担当箇所のソースコードを書いてもレビューは無いし、書いたコードは1つの大会で使ったらもうそれ以降使われないことも多いんですよね。

 

これらの理由としては、ROSの存在が大きいと思います(個人的な意見です)。

Web業界の方に向けてROSについて少し話しておきましょう。

ROSというのはロボット開発のためのミドルウェアのことです。

簡単に言えば、ソフトウェアをレゴブロックのようにソフトウェア同士の通信の部分を規格化することができます(だいぶ噛み砕いてるけどマサカリ飛ばさないでね)。

例えばROSに対応した画像認識のプログラムがあったとして、そのプログラムを全く読んでいない人でも、レゴブロックをつなぎ合わせるように自分のプログラムを繋げることができるようになります。

Foo!!ROS最高!!

こういったROSの特性から、一度書かれたコードは使おうと思えばブラックボックスとして利用可能になります。

もちろん使うソフトウェアの理論は調べて使いますが、知能ロボットコンペティションにおいては例えば人間の認識、物体の三次元位置推定、音声認識自然言語処理、自己位置推定、さらにはハードウェア制御などなどと最低限実装するべきことが山ほどありますしこれを片手で数えられる程度の人数で2,3ヶ月で実装するとかはまあよくあります。

既存の動くことが確認されているソフトウェアをソースコードのレベルで理解しようとする人は非常に少ないと思います。

f:id:kitchen_py:20190901224024j:plain

文脈を無視した寿司

VoyageGroupの感想

  • 技術的なネタが通じるのが嬉しい
    ドアをノックして「GET /open」とか言ったら「200 OK」とか返してくれそうな会社で、技術的に熱い話ができる人が多いような印象でした。 これを自分の研究室でやったなら、たぶんタイムアウトするでしょう。
  • 技術的に強い人が多い
    N数が10ぐらいの自分の観測によると強い人が多かったです。
  • 燻製やってる人が多い
    この情報いるか??
  • 自作キーボード勢多い
    この情報いるか???

    f:id:kitchen_py:20190901224224j:plain

    そして文脈を無視して現れる寿司


強くあるための環境についての話

インターンではWebが初めてだったということもあって技術的なインプットをたくさんもらいました。

ただ、それよりもこのインターンではエンジニアとして強くなるために必要なことを教えてもらった気がします。

 

 

先輩エンジニアの方のライブインタビューで、こんな解答がありました。

(脳内再現)

質問者の方「仕事をするチームの大きさは?」

先輩エンジニア「2人ぐらい、わざとチョイ足りないぐらいにしてる

 

これには衝撃を受けました。

実は自分、前年度は10ヶ月の間に3つのロボットコンペと共同研究と卒業研究を行うという謎の多忙具合だったんですよね。

新しいことに挑戦したい気持ちで手を上げ続けていたらどんどんタスクが増えていって、特に機械学習分野の基礎的な理解を十分に固めることができなくなっていたわけです。

 

それを受けて、今年はじっくり機械学習の基礎であったり修論サーベイを着実にやっていこうと思ってロボットコンペティションとかやってなかったんですよね。

基礎から学び直すことは自分にとって必要なことだったし後悔はしていません。

 

ただ、成長度合いとしてはやはり去年のほうが劇的でした。

かなり厳しい道になると思いますが、この秋はコンフォートゾーンの外側にいくために研究と並行して大会にもチャレンジしていきたいと思います。

どんどん成長できる環境に自分を追い込んでいきましょう。

 

最後に

Web系が初めてということもあって、本当に怒涛の日々でした。

VG社での濃密な講義が終わってシェアハウスに戻っても、常に開発したり技術のことを話したり燻製したりと本当に技術漬けの3週間だったと思います。

 

ふとインターンが終わった今の自分を見てみると普通に人の形を保ってるし、もっと頑張れたんじゃないかとも考えられるんですが、毎日普通に2時ぐらいまで開発とか自習とかやってたし、それに加えてなんか風邪ひいていたりしたしで、「あれ?なんか結構自分、頑張れてたんちゃう?」って思う自分もいて、なんかもう分からんくなってきました。

ただ少し真面目なことを喋っておくと、メタ的な視点で常に自分がやっている作業がどんな位置づけで優先度はどの程度なのかということを考え続ける必要性を感じたりと、今後の課題が多く見えてきたので今後はそれをクリアしていきたいと思います。

 

最後に、Voyageで丁寧に教えてくれた講師やメンターの方々、充電器忘れたアホな自分をフォローしてくれた人事の方々、チームのみんな、一緒に3週間過ごしてくれたTreasureのみんな、燻製をうまいといってくれた方々、燻製鍋を保管してくれたAUさん、本当にありがとうございました!!!

f:id:kitchen_py:20190901223933j:plain

我がメガネサワーズ