どんな人と働きたいか

※これは ushironoko 個人がそう思っているという話であり、所属する企業・団体とは全く関係がありません。

人を採用する時に採用側が一番最初に考えるべきなのは、どういう人と働きたいのか?というところだ。自分がもっとも求める人物像は、自分の行動や思考プロセスをちゃんと説明できる人かつ、その説明がある程度的を射ていると感じる人だ。それ以外にもちろん最低限社会人としてちゃんとしていては欲しいし技術的なバックボーンも見るが、とにかく自分の行動を十分説明できる人物ならいいなと感じることが多い。

なぜそういった人物がいいと感じるかというと、この能力が高ければ今時点の力量ではなくポテンシャルを測ることができると考えているからだ。まず自分の行動・思考を説明できるということは、それらに何かしらの意味があるということで、意味があるというのはそれだけで価値がある。意味があれば振り返ることができるし、間違いを指摘された時に反省することができるし、良いものであれば共有することができる。行動・思考が説明できない場合それ以上何も生まれることはない。たとえ経験や知識不足が原因で間違っていたとしても、意味があれば次に繋げることができる。また説明できるということはそのアーキテクチャや理論をある程度正しく理解しているということでもある。理解できていないと本来意図した用途から拡大解釈して適用してしまったり、そもそもの使い方を間違えていたりするので理解というのは重要である。

面接でよく以下のようなことをアピールする方を見かける。

  • TypeScript で書いている/勉強している
  • ユニットテストを導入している/勉強している
  • Atomic Design を導入している
  • CI を駆使して自動化している
  • Vuex を使っている/勉強している

正直これらを言われても、それはそうという感想しか出てこない。なぜならやったほうが良いから。やったほうが良いことというのはやったという事実だけではアピールポイントになり得ない。聞きたいのは、なぜやったのか?やってどうだったか?やり直すならどうしたいか?など、その状況になったところから顛末まで自分がどう関わったのか、という部分。中にはそこまで考えていなかったけど今思うとこうだ、みたいに面接の中で振り返って答えを出してくれる人もいて、そういうところに考える力というのを感じる。やるだけなら誰にでもできるので、中身を聞きたいと思うのが採用者の常だと思う。説明を受ける中で、ちゃんと理解して考えて使っているんだな、というのを感じたい。

昨今流行っているアーキテクチャには手厚いドキュメントが用意されていることが多く、やってみるだけならドキュメントを読めば誰にでもできる。もちろん作り切る力というのもまた有用な能力ではあり、不恰好なコードでも役に立つものをどんどん生み出していけるのは才能だと思う。ただ実際多くの現場ではものを作り切れるというのは大前提として、どう作るかに焦点が当たるため質のほうが重要視される。そもそもこの考えて行動し理由を説明する力というのは別にソフトウェアエンジニアに限った話ではなくどんな職種にも求められるものだと思う。理由を説明できないものにコストを払う余裕なんて会社にはないため、必須スキルとも言える。

中にはプロダクション経験がなくこれから会社に入って経験を積みたいと思っている方も多いと思うが、そういった立ち位置の人はとにかく質の高いアプトプットを増やして説明できるようになっていると良い。先にも書いたが経験・知識不足による間違いなんて知るのが早いか遅いかの差でしかないので気にする必要はない。むしろ、自分がなぜそのコードを書いたのか(良いと思ったのか)説明できないほうに問題がある。良いコードを書こうと思っていないなら話は別だが、思っているなら説明できるはずで、良いコードがどういうものなのかまだ想像がついていないのなら指針となるポリシーを 1 つか 2 つ決めて持っておくと良い。自分の場合は「小さいコードは良さしかない」と「自分のコードを信じない」くらいしかポリシーがないが、これに従って書いていると割と良いコードが書けるのでおすすめだ。

色々書いたが、自分が一緒に働きたいと思うのは自分の思考過程や行動を説明でき、活かすことができる人だ。そういった人は自力で伸びていけるし周りへ良い影響をもたらしてくれる。現時点での技量も見るには見るが、ぶっちゃけこれができている人は技術レベルも高い傾向にある(気がする)。