自己紹介
SAIG(=Strategic AI Group)でアルバイトとして働いている戸北です。AtCoderJobsからアルバイトに応募して、現在6ヶ月くらい勤務しています。
記事を執筆する機会をいただいたので、アルバイト体験記と題して、この半年で行った業務やその感想、成長できたことを振り返ります。
アルバイトが始まるまで
私は、情報工学を専攻しておらず、また、実務経験がなかったので、就職を考える上で、まずは何かIT業界での経験を積んでみようと考えました。
プログラミングについては、ほぼ独学で、競技プログラミングに関連する話題に知識が偏っていて、また、GitやVSCode等をまともに使ったことがありませんでした。そのため、よくあるIT系のアルバイトに応募しても、ミスマッチが起こりそうだと考えていました。
そこで、競技プログラミングへの理解がありそうな企業で働くことを決め、フューチャーの機械学習・AI研究開発者/エンジニアアルバイトに応募し、採用されました。
採用されると、はじめに、それぞれの興味・関心に合わせたプロジェクトに割り当てられます。
私は、スケジューリングの最適化を行うエンジンを開発するプロジェクトに加わることになりました。
業務内容
私がこれまでに行ってきた業務を、大まかに3つに分けてそれぞれ説明します。
- テストの作成
- スケジューリングの最適化を行う上で、入力を受け取って、アルゴリズムを適用できる状態までデータを変形する必要があります。
- その過程がとても複雑なので、違反な入力を正しく検出できるか、意図したエラー処理ができているのか等を確認するテストを作成します。
- 他には、小さな入力を与えて、予期した出力を得られるかを確認することもあります。
- 挙動の調査
- 例えば、意図していた動作が行われているか分からないとき、あるパラメータを特定の値に設定するとエラーが出るときなどに、調査して原因を特定します
- 小規模な機能の追加
- ざっくりしているので、1つ具体例を挙げます。もともと、テストではそれぞれ、フォルダに入力に必須なファイルを10個程度入れておく必要がありました。そこで、デフォルトのファイルを設定し、それを使い回すことでファイルを削減しました。デフォルトのファイルを使っていないということが、そのファイルで特殊な入力をしていることと対応するようになるので、テストの意図が明示的になりました。
- 他には、エラーの処理を追加したことや、エラーメッセージ等を一括で管理できるようにしたことなどもあります
フューチャーのSAIGでアルバイトして良かった点
次に、業務内容の良い点と、業務を行う環境の良い点をそれぞれ挙げます。
業務内容の良い点 ~ヒューリスティックコンテストと実務のかかわりについて~
フューチャーSAIGアルバイトの特筆すべき魅力を伝えたいので、業務内容の良い点を、競技プログラミングとのかかわりという側面から書きます。
プロジェクトで扱うスケジューリングの最適化問題は、現実的な時間で最適解を求めることができないような問題のうちの1つであると知られています。ヒューリスティックコンテストは、このような問題に対して、出来るだけ良い解を求めるプログラムを書くコンテストです。
そのような問題の例として、巡回セールスマン問題を考えます。簡単に説明すると、セールスマンが、ある地点を出発し、いくつか存在する都市すべてを一度ずつ巡ってもといた地点に戻るような最短経路を求めるという問題です。
例えば、都市
ヒューリスティックコンテストに参加したことがある方なら、プログラムが完成したら、提供されたビジュアライザを使って解を可視化して、それをうっとりと眺めたことがある方も多いと思います。この業務では、それに実在する人間が動いているイメージが伴います。現実の問題を解決しているという実感が得られるのは、楽しいですし、モチベーションになります。
業務を行う環境の良い点
1つずつ列挙して説明します。
- PCが支給され、それを使ってリモートで業務を行います。移動時間が負担にならず、働く時間帯にも融通が利くので、ありがたいです
- 個人の習熟度によって、粒度や難易度の異なるタスクを行えます
- タスクを順にこなしながら、自然に知識や経験を増やして、行える作業の幅を増やせるので、モチベーションを保ちやすいです
- 定期的に上長に次に行いたいタスクの方向性や、業務を行う上での悩み等を相談できます
- タスクを行う上でのやりとりでは伝えにくい意思や感情を伝えることができます
- 業務上の質問をしやすい雰囲気が醸成されています
- 行き詰まったときや、疑問が浮かんだときに、チャットで気楽に質問できます
総じて、個々人に応じた適当なタスクを順にこなして、過剰な負担がかからずに自然に成長できるような環境が整えられていることは、アルバイトに応募する側からすると特に良い点だと思います。
身についたこと
業務に取り組む上で、最適化エンジンのプログラムを見る機会が多く、そこからいろいろなことを吸収できます。具体的には、以下のようなものがあります。
- 適切なコメント、変数の命名の仕方
- エラーの処理、適切なログやエラーのメッセージ
- 何をテストとして記述すべきか、どのようなテストケースでテストを行えばよいか
- 構造体等を使って、複雑な問題をうまく切り分ける方法
次に、それ以外のことを挙げます。
- Git や VSCode の基本的な操作
- 始めた頃はいろいろと苦戦していましたが、業務を進行する上で差し障りがない程度には覚えました
- 報告や質問等のコミュニケーション
- 始めた頃は、プログラム上の問題をどのくらい自然言語に寄せて説明するべきなのか、要領がつかめずに悩んでいた記憶があります
- 性格的に手が詰まったら何とかできないか長時間考えてしまうことが多かったですが、自分の知識、理解で解決できる問題なのかを考え直して、適当なところで見切りをつけて、現状をきちんと説明するように心がけるようになりました
まとめ
ここまでの内容を簡単にまとめます。
- 私は、スケジューリングの最適化を行うエンジンを開発するプロジェクトで、テスト作成や挙動の確認、小規模な機能の開発等を行っています
- ヒューリスティックコンテストと実務のかかわりを感じられるのは、このアルバイトの他にはない良い点だと思います
- 質問や相談をしやすい環境で、個々人に応じたタスクを順にこなして、自然に成長できるような場が整えられています
- 最適化エンジンのプログラムに触れ、業務のやりとりを行いながら、プログラミングの技術や適切なコミュニケーションなどさまざまなものを学ぶことができます
アイキャッチ画像はPerson Vectors by Vecteezyです。