あなたの熱い想い、アイビスで一緒に実現していきましょう。
絵を描く楽しさを共有したいという世界中のユーザの夢を実現するために開発されたibisPaint(アイビスペイント)。ibisPaint開発チームの業務は、モバイルペイントアプリ「ibisPaint」のアプリケーション開発全般です。
「自分の技術で世界を変えていきたい」「新しいことにチャレンジしていきたい」エンジニアとして、きっとそんな想いを持っているのではないでしょうか?
私たちアイビスには、その想いを叶えられる自信があります。そしてそれを一緒に実現していける熱い仲間を求めています。
ibisPaint開発チームに向いているのは3つの想いを持つ人
ibisPaint開発チームに向いているのは、次の3つの想いを持っている人だと考えています。
①コンシューマ向けのアプリ開発をしたい
モバイルペイントアプリ「ibisPaint」はコンシューマ向けの製品です。そのため、自分が書いたプログラムが多くのユーザに使われ、喜ばれているということをダイレクトに実感することができます。自分の携わったアプリが一般消費者にどう影響を与えているのか、その反応を肌で感じたいという人には、やりがいを感じられる仕事です。
②ライブラリを書きたい
ibisPaintは、OSのAPIの抽象化、UIフレームワーク、グラフィックエンジンの抽象化、メモリ管理などを行う自社製のライブラリに基づいて実装されています。
私たちは、アプリケーションの実装よりライブラリの実装作業にこそ、プログラミングの醍醐味、面白さがあるのではないかと考えています。
高レベル層の実装者にとって使いやすいAPIを検討したり、低レベル層の動作をよりよく抽象化する方法について考えたりすることが好き、そんな人にはぜひ挑戦してもらいたいです。
③美しいコードを書きたい
私たちは「コードの美しさ」にこだわっているチームです。「美しいコード」にはいろいろな意味がありますが、ここでは「可読性・保守性・拡張性・再利用性が高い」「メモリ効率がよく、高速に動作する」の2つを意味しています。
ibisPaintは、既に軌道に乗った製品です。これから長期間に渡って開発・運用・保守していくこと、またより速く製品を進化させるためにチームが大規模化していくことが予想されます。この先の開発を円滑に進めていくためには、可読性・保守性・拡張性・再利用性が高いコードを書くことは欠かせません。
また、弊社の代表がプログラムの性能に強くこだわるエンジニアであることから、ibisPaint開発チームには「性能を意識する文化」が根付いています。メモリ効率が悪ければアプリは正常に動作しませんし、正常に動作していても高速に動作しなければ、ユーザに快適なお絵描き体験を提供することはできません。メモリ効率がよく、高速に動作するコードは、多くのユーザに支持・信頼される商品であり続けるために必要な要素です。
ibisPaintの開発における作業の多くには納期がないため、コードレビューやリファクタリング、性能テストに十分な時間をかけることができます。「納期優先の中途半端なものではなく、納得のいく質の高いコードをリリースしたい」「プログラミングが好きで美しいコードを書きたい」と思っている人にとって、理想的な環境が整えられています。
求める能力はコミュニケーション能力と学習能力
ibisPaint開発チームの人材採用では、コミュニケーション能力と学習能力の2つのスキルを重視しています。
●コミュニケーション能力
チーム開発をするうえで、コミュニケーション能力は必須です。ここでのコミュニケーション能力とは、場の雰囲気を良くする、楽しく会話するといった能力だけではなく、文の読み書きなどの能力、すなわち「言語能力」を含む能力のことです。
私たちはチームで仕事をしているため、メンバー間でのコミュニケーションが業務効率に大きく影響します。例えば、先輩に質問する際に自分がどういう問題に直面しているか、それに関連したどういう類のヒントが欲しいのかについて、適切な質問をしなければなりません。また、良いドキュメント・コメントを書く、可読性の高いコードを書く(読み手の視点に立つ)、使う側の意図通りに動作するAPIを設計する(呼び出し側の視点に立つ)など、チームでのソフトウェア開発には、メンバーや将来の自分自身を相手とした(広義の)コミュニケーション能力が重要となる作業が多く含まれます。
この観点から、面接では、質疑で適切な応答ができる方、自己アピールや研究内容の紹介でしっかりと話せる方、作文能力の高い方を評価しております。
●学習能力
ibisPaint開発チームのエンジニアには、新しい技術に初めて触れる機会や可能性が多くあるため、学習能力と学習意欲の高さはとても重要です。
現在、主に使用している技術はC++, Objective-C, Java, OpenGL, TypeScript, MySQL等です。もちろん、入社時点でこれらの技術すべてに習熟していることを求めているわけではありませんが、業務において必要な技術を短期間で習得するための学習能力の高さは重要であると考えています。
また、将来的に使用技術の変更・追加が発生する可能性もあります。その際には誰かが先陣を切って新技術を学習し、チームにノウハウを流通させなければなりません。
いずれこうした役割を担ってもらえるような、新技術の概要を手際よく把握し活用する力のある人材を求めています。
専門性と広い知見、バランスを持った成長ができる
当社は特に教育に力を入れている会社です。ibisPaint開発チームでキャリアを積むことで、特定分野について深いスキルを得るスペシャリスト、そして幅広い分野の知識と経験を持つジェネラリストとして大きく成長することができます。
一見相反する両方のスキルを同時に養っていけることがibisPaint開発チームの強みだと考えています。
●スペシャリストとして専門性を高める
業務では、C++言語やハードウェア(CPUとGPU)、OpenGLや画像処理アルゴリズム、AI、データベース(MySQL)等について、高度な知識が必要とされる場合も少なくありません。
先輩のメンターにヒントをもらいながら、こうした高度な業務をクリアしていくことで特定分野についての深いスキルを身につけることができます。
●ジェネラリストとしての広い知見を養う
ibisPaint開発チームの業務は、アプリケーションの開発とテスト、アプリを支えるライブラリの開発、Webのフロントエンドとバックエンドの開発、サーバ構築と運用、新機能の設計などであり、そのジャンルは多岐に渡ります。チームに参加して初めのうちは、特定分野の業務に集中する機会が多いですが、本人の学習能力を考慮のうえ、徐々に様々な分野の業務を経験してもらうようにしています。この経験を通して広範なスキルを持つフルスタックエンジニアとして成長することができるでしょう。
常にスキルアップしたい、プロフェッショナルを目指したいなど、より高みを目指した職場環境を望む人が十分成長できる環境が整っています。
<ibisPaint開発チームの推薦図書>
今後、ibisPaint開発チームのメンバーになるにあたって読んでほしい推薦図書を紹介します。
リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック
Dustin Boswell (著), Trevor Foucher (著), 須藤 功平 (解説), 角 征典 (翻訳)
推薦の理由:
チームでの開発を円滑に進めるにあたって、可読性の高いコードを書くスキルは必須のものです。この本では「可読性の高い/低いコードとは何か」「どうやって可読性の高いコードを書くか」について多数のサンプルコードを用いて解説がなされています。チームでの開発をしたことがない新入社員の方にはぜひ読んでほしいと思います。推薦者が当社に内定してから入社までに読んだ本の一冊です。
Effective Modern C++ ―C++11/14プログラムを進化させる42項目
Scott Meyers (著), 千住 治郎 (翻訳)
推薦の理由:
ibisPaintの開発ではC++を使用します。C++はその長い歴史の中でほぼ後方互換性を保ち続けている言語であるため、C言語のような古いスタイルでコードを書くこともできる一方、ラムダやスマートポインタなどを駆使した現代的なスタイルでコードを書くこともできます。
この本ではC++の現代的な機能について詳細に解説されており、他の書籍やWeb上の解説にはない情報が多数含まれている、非常に価値のある本です。
この本で得られた知見は当社のC++コーディングルールにも反映されているため、C++コーディングルールの意図を理解する際にも役に立つでしょう。
C++の基本的な部分については理解できている方におすすめです。
コンピュータシステムの理論と実装 ―モダンなコンピュータの作り方
Noam Nisan (著), Shimon Schocken (著), 斎藤 康毅 (翻訳)
推薦の理由:
電気素子を組み合わせて、加算器、CPU、OS、コンパイラ、そしてテトリスのようなアプリケーションがどのように実装されているかを解説する、という意欲的な本です。
新入社員にこの本をおすすめする理由は、「NANDゲートをどのように組み合わせれば加算機を作れるのか」が学べるためではなく、「抽象化」や「インターフェース」といった考え方を実例を通して学ぶことができるという点にあります。
単に「電気素子を組み合わせてテトリスを作れ」と言われると大変な作業に感じるかもしれません。
しかし、実装したいシステム(テトリス)をいくつものレイヤーに分解し、それらをインターフェースでつなぐという方針を採ることで、整然としたバグの少ない実装が可能になるのと同時に、再利用性の高い部品が得られます。
例えば、OSやプログラミング言語を再利用し、テトリスとは別のゲームを実装することは容易にできます。本書を通してこのようなソフトウェア工学の手法を体感しておくことは、日々の業務においても非常に有効に働くことでしょう。
私たちと一緒にアイビスの未来を築いていきたい、そんな熱い想いを持った仲間と一緒に働けることを心待ちにしています。