sima(mu)*雑記

print(f"{雑多なこと}")

FIXSTARS のインターンに参加してきました

f:id:awaawa4423:20191108234931p:plain

10/7 ~ 11/8 の計5週間(ゼミとかの兼ね合いで正味19日)でFIXSTARS さんのインターンに行ってきました.
ので忘れてしまわないうちにその参加記を書いてみようかなって思ったので書く.

読むのがめんどくさい人向けに最初に要約を書いておくと

  • 楽しい
  • 勉強になる
  • お金が貰える

で大満足のインターンでした.本当に全学生競プロerに行って欲しい

これは何

  • 自分の備忘録という部分が大きいです
  • なのであまり技術的な話よりも感想とか主観多めの日記です(業務内容は言ったらまずそうなこともあるので
  • FIXSTARS のインターン参加記たくさんあるし別にいらなくないですか お世話になったしめっちゃ楽しかったので書きたかった

お前は誰

  • 東京にある工業な大学の †環境社会理工学院 土木環境工学系† のB4
    • 研究室は構造系(特に振動分野)で,微動を使って固有振動解析をして構造物の同定とかをしたりしてなかったりする
    • 最近機械学習に足を突っ込み始めたらしい
  • AtCoder のレートが 1970 (11/8 現在)
  • 主に Pythonを書いていて, C(++) はまあググれる環境があれば Python の 5~INF倍くらいの時間を費やして書けなくもないくらい

行くまで

申し込んだ背景

  • 某土某通省の本省(霞が関)を今年の春受けてたんですが,採用担当があまりにも嫌いすぎて無理だった
    • 採用担当が嫌いだったので,まあその採用担当が選んだ人が集まるところって考えると無理だよねって
    • これはどうでもいいけど国家総合職の選択科目の情報(ソフトウェア)は競プロ死ぬほど役に立つのでお勧め.
  • で,まあ落ちたんですが土木に対する熱が完全に冷めてしまったので,競プロ楽しいし情報系もいいかなーと思って
  • しかし自分にとってプログラミング≒競プロのため実務経験が皆無
  • なのでどれくらい通用するか,逆にどういうところが足りないかっていうのを知りたくて,AtCoderJobs経由で応募しました

FIXSTARS を選んだ理由

  • 結構競プロ界隈ではインターン参加記とか多くて元から知ってたし評判もよさげだなって思ってた
  • 通年募集してた
  • 時給が良い(前述した某省の試験勉強とか某人間コンテストとかで全然バイトしてなくて財政難だったので)
  • 業務内容が結構競プロに近そうで楽しそう

面接

  • 担当の方(インターンではメンターをしていただいた)が分野は違うけど土木出身でめちゃくちゃビビった
    • そのためか,わりとちゃんと研究内容のことを話したし結構深掘りされた気がします.
  • コーディング試験はまあ書いたら怒られそうなので割愛.
    • 現職エンジニアの方に見られながら書くのは結構緊張します
    • これは公開情報だった気がするので言っても大丈夫だと思うのですが,試験はC,C++ 限定なので普段書かない人は簡単な書き方くらいは勉強していこうね.
    • 私は入出力できなくて3分くらい一人で???ってやってました
  • まあなんやかんやで無事に通ってインターンに参加させていただくことに
  • 某省の選考の後申し込んだので当然夏はもう締め切られてて,10月に行くことに.

業務内容

何個か提案を頂いて,その中から一番面白そうだったDSP向けのソースコードの高速化をやりました. ちなみにこれは実際のお客様のコードで,本当に実際の業務でやっていることに近いことをやらさせて頂きました.

SIMD

これめちゃくちゃわかりやすくて感動したので載せさせて頂きます

DSP 向けということで結構特殊な環境下だったのですが,SIMD命令が使えたので主にSIMDを使うことで高速化をした.
で,これが普通に楽しかった.具体的には書けないのですが

  • 今あるものと動作自体は変えずに SIMD で書き直す
    • SIMD で使える命令は限られてるのでうまく使う必要がある
    • でも結構特殊なのもあって 4つ単位で sum をとるとか, (A*B+C*D+E)>>F を一発でやるとか
    • こういうのをうまく組み合わせて,やりたいことを実現させる方法を考えるのが楽しかった.
  • SIMD 命令は基本 256bit 単位で演算処理が行われる.
    • つまり整数値でも可能な限り小さいサイズに抑えられると嬉しい
    • なので #define int long long じゃなくて型のサイズとかうまく小さい値で扱うように工夫したりとかする

まじで競プロみたいな(?)パズルって感じなのでやっててめっちゃ楽しかったです.

メモリ削減

これも面白かった.外部メモリへのアクセスコストが高いので,チップ内部の速いメモリから変数を確保したい. けどその内部メモリがちっちゃいので無駄な変数を削除したり次元を減らしたりしようねという話で何個かやりました.
これも具体的には書けないけど

  • 計算順序をうまく工夫して同時に持つ必要がないデータを削減する
  • 適当なデータ構造を使って,計算領域に使うメモリを減らす

とかしてました.メモリの削減っていう視点はあまり持ったことが無かったので新鮮で楽しかったです.

報告会

最終日一日前にここまでやったことをまとめて発表するという機会がありました.
自分が学んだものを改めて見返してまとめるっていうのがわりと自分の身になったのと, 報告会は緩い感じかと思ったら結構人が多くてわりと技術的な質問が飛んできたりして辛かった勉強になりました.
(実際自分が今回やったことをまとめて,それに対して足りないこととか,改善できることとかを色んな人から指摘頂ける貴重な機会だったし色んな視点を学べたのでありがたかったです)

学んだこと

  • 複数人での開発作業
    • やらないのでね,複数人でやって初めてgit/gitlabがどれだけ偉大か理解しました
    • コミュニケーションの取り方とか,作業内容だけじゃなくて目的自体もちゃんと意識するとか(まあこれは何に対しても言えると思うのですが)
  • SIMD
    • 知らなかったので
    • でも最近のコンパイラは賢くて勝手にvector演算してくれたりするらしい
  • 高速化についての基本的な概念
    • レイテンシとかパイプラインとかその辺全く知りませんでした
    • 機械語に近い部分もちゃんと学びたいなって思った
  • C言語
    • これも今回初めてがっつり書いた.
    • まずポインタを理解してなかったレベルだったので…完全理解とまではいかないけど結構慣れた
    • 整数除算が0方向に丸められる(負数だと切り上げになる)の罠過ぎませんか
  • わかりやすいコードの書き方
    • 一過性が高い && 自分しか読まない みたいなコードし書かないので,普段全く意識しないけど大事
    • 最初のコードレビューは酷いものでMRのコメントが3桁のるくらいまで行ってたけど,その分色々学べました.

感想

  • 純粋に業務内容がめちゃくちゃ楽しかった.
    • これはお世辞とかじゃなくて本当に純粋な感想
    • 8時間/日を週4かーって最初思ってたのですが,やってて楽しいので全然時間の進みが早く感じる
    • 最終日は19時退社を徹底してくださいって言われてたのに18:57くらいまでコード書いて push したりしてた.それくらい楽しい

  • 勉強になった
    • これは自論なのですが,学ぶために学ぶっていうのがうまくできなくて,何かやりたいことがあってそれを実現するためにツールを学んでいくっていう方法だと自然に身につく.
    • 今回はインターンっていう機会を頂けたのでC言語とか git とか高速化に関する知識とか本当に色々学べました.
    • C は独学しようとしてポインタで挫折した経験が二回くらいあるので (特に理由なく勉強しようと思っても Python で書けるしなあとか思っちゃう)
  • 貴重な経験になった.
    • 今進路にどの分野に進むかレベルで迷ってるので,IT分野の会社の実務に携われたっていう経験が有難いです.
    • 当初の目的であった自分の実力で通用するのか,何が足りないのかっていうのもなんとなく掴めた気がしたので良かった
  • 同時期のインターン生が全然いなかった.
    • これをメリットと取るかデメリット取るか人に依るかもしれないけど
    • 夏はmax3週間で,同時に2~30人くらい来るらしくてメンターの方も手が回らなかったりするので,こういう時期の方が手厚い待遇で長くできる.
    • 実際4週目くらいから作業環境に慣れてきて,業務に専念できるようになってきた気がするので
    • でもやっぱりインターン一人はちょっと寂しいかなとも思いました.
    • まあ申し込んだ時期が遅くて長期休みからずれたせいなので私が100悪いですごめんなさい

あとがき

ということで,本当に大満足なインターンでした. 楽しくコード書いて,勉強にもなって,お金までもらってしまって良いんですか?ってなる.(貰えるものはありがたく貰う)
今回のインターンでお世話になった FIXSTARS さんと,そのきっかけになった AtCoder さんには本当に感謝しています.この場を借りてお礼をさせて頂きます.

本気でお勧めできるとこなので全学生競プロer に行って欲しい

あ,これはどうでもいいのですがインターン期間中に(直接の原因かはわからないけど)背中の筋肉(?)を痛めた. やっぱりデスクワークを仕事にするなら運動しなきゃなって思ったので最近リングなフィットのアドベンチャーを買いました.結構楽しいのでお勧めです.