新卒で入社したヤフーには大きなデータサイエンスの部門があり、 僕は入社時の面接時にはその手の話しかしていなかったので、てっきりデータサイエンス系の部署に配属されるものだと思っていたのだけど、 気づいたらヤフーショッピングというサービス部門の検索チームに配属されていた。 希望の配属先ではなかったのだけれど、振り返ってみるとここでサービス開発に関われたのは良かったと思う。
当時は、検索APIの機能追加や検索エンジン自体の運用が主な業務だった。 コードベースが大きくて歴史もあったため、まずはそのコードを読み、理解することから始めた。
それまでソフトウェアの設計本などで語られる内容について、イマイチピンときてない部分も多かったのだけど、 実際に大きなシステムを見ることで、なるほどこういう複雑なシステムに対処する話だったんだな、というのがわかった。
また、社内で使われていた技術の多くは、外部のOSSよりも性能が高くて驚いた。 たとえば、今はOSSになっている全文検索エンジンのVespaや NoSQLのmdbmなどは、かなり高性能だった。 OSSで人気のものが性能面でベストだと思っていたけれど、実際は内部のツールの方が優れていたことを知った。
あとは、チーム単位でAPI、サブシステムを管理していたので、 機能開発にはチーム同士の連携が必要だった。
最近は多くても2~3人のチームで、調整などの仕事はほとんど発生しないのだけど、 当時は、新機能開発時やAPIのクローズ時に他のチームお願いしに行くことがよくあった。 こうした組織的な開発は、プログラマとしての社会人経験として結構大事かもしれない。
また、当時、開発だけでなく運用も担当していたことは結構重要な経験だったように思う。
開発と運用が分離していると、それぞれの都合の押し付け合いみたいになってしまうし、 バランスを取るにはどちらも担当するのがベストだと思うようになった。
仕事で思い出に残ってるのは、年に1度のセールの日を迎える前に、 リクエスト数の予測、サーバー台数の調整、負荷試験の実施など、色々対策を行うのだけど、 こういう経験は、大規模なサービスならではだったなと思う。
最近は小規模なサービス開発が多いので、こういうことはあまりやってないけれど、 いつかこの経験が役に立ちそうに思う。
会社に入ってからはJetBrainsのIntelliJ IDEAを使うようになった。 大学時代はEmacsを使っていたが、大学の後半ではVimをメインで使っていた。 しかし、実務で対応すべき言語が増えるにつれ、だんだん状況が変わった。
業務では、PHP、Perl、Java、Go、Pythonなど、多くの言語を使う必要があり、 セットアップが不要で幅広い言語に対応できるIDEを好むようになった。
業務外の時間では、ハイパフォーマンスなシステムに興味があり、 C++や効率的なプログラミングに関する技術を学んでいた。 特に、将来的にC++を使うようなプロジェクトに関わりたいという思いがあったので、 当時は業務とは別に自作プログラミング言語やインタプリタを作ってみたりしていた。
結局当時仕事でC++を使うことはなかったのだけれど、 最近ではファームウェアの開発でC++をガッツリ使っているので、この学びが意外にも役に立っている。