先日、昼ご飯を食べおわって何気なくTVを付けたら、たまたま以下の番組がやっていました。

「鍛えてこそ、本物になる〜刀鍛冶・吉原義人〜」 – プロフェッショナル 仕事の流儀 – NHK

(8/26 13:49まで見逃し配信しているようなので、もし良ければどうぞ。)

細かい表現は忘れてしまったのですが、この刀鍛冶の吉原さんが「プロフェッショナル」について聞かれた時に言っていたのが、

「良い仕事をするだけでなく、それを後の世代に伝えていくのがプロフェッショナル」

のような事を言っていて、自分が考えている事と似ているなぁと思いました。

私自身はこの吉原さんのような達人には到底及びませんが、それでもソフトウェア開発を生業とするプロフェッショナルの端くれとして、大事に思っていることを書いてみます。

プロフェッショナルとして重要だと思うこと

質の高い成果物を出す

1つめは、当たり前すぎることかもしれませんが、「質の高い成果物を出す」という点を挙げたいです。

成果物は、プロジェクトによっては実際に動くシステム・コードが一番大事かもしれませんし、あるときは仕様書だったり、報告書の場合もあります。

実際にお金を払って下さるお客様、あるいは実際にシステム・サービスを使うエンドユーザー様にとって価値のあるものを提供する、これが全ての基本だと思います。

再現性を高める

質の高い成果物を出せたとしても、それだけで十分ではありません。

  • たまたま運良く大きなバグも出ず、期日に成果物を納入できた
  • 誰かが疲弊するまで頑張って質を高めた

といった場合、次回はうまくいかない可能性もあります。

上手くいったとしても、そこで喜ばずに、

  • なぜ上手くいったのかを考える
  • さらに上手くやるにはどうするのかを考える

という作業を通じて、再現性を高める事が重要だと思います。「仕組み化する」というのも、この文脈での話です。

周りに技術・知識を伝えていく

3番目が冒頭に話した、「後の世代に伝えていく」という点です。

ある人が、1. 質の高い成果物を、2. 高い再現性で出せるようになったとしても、それが自分1人で終わってしまっては少し勿体ないです。その技術・知識を周りに伝えて、周りのレベルを引き上げることが出来る人が、プロフェッショナルとして重要だと思います。

周りに教える事の意義

会社視点: 全体のレベルが上がる(書くまでも無い)

私自身はエンジニアであると同時に会社を運営する立場です。各メンバーが技術・知識を周りに伝えてチーム全体のレベルを上げてくれると、チーム全体の生産性が上がり、結果として会社の利益も増えるため、会社側の視点としてありがたいというのは、細かく書くまでも無いでしょう。

個人としては意味がある?仕事が無くならない?

では、個人として他人に技術・知識を教える事にはどのような意義があるのでしょうか。他の人のレベルが上がると、自分の仕事が無くなったりしないでしょうか。

もちろん自分の給与が周りと比べて大幅に高く、かつ周りの人が自分と同じ事を出来るようになったら、仕事が無くなってしまうという事もあり得ます。ただ、そうしたケースは以下の理由により稀と考えます。

1点目ですが、そもそも1つや2つの技術・知識を周りに教えて周りに追いつかれる程度の人が、周りと比べて大幅に高い給与をもらっていることがあまりありません。

2点目ですが、ある人が周りのレベルを引き上げることが出来るのであれば、周りのレベルが追いついてきた時点でその人との契約を終了したりするより、その人を別のチームに配置換えをして、別のチームのレベルも上げてもらった方が全体として得をするので、経営層や上司がそういう判断をする場合の方が多いです。

例外としては、その人の持っている技術・知識がニッチで、組織としてそれを出来る人が1人(あるいは少人数)いればいいという場合などで、その場合は人に教える事により自分の仕事が奪われるという事もあり得ると思います。

多くの個人にとって、他人に技術・知識を教える事で仕事を奪われるといったデメリットはあまり考えなくて良いことが分かったところで、具体的なメリットを考えてみます。

個人視点1: 新しい技術・タスクにより時間を割けるようになる

1番目は、人に技術・知識を教える事により、自分が簡単にできることは他の人に任せることが出来て、自分自身は新しい技術・タスクに取りかかれることが出来るようになる、という点です。

例えば、ある人が PHP について詳しく、PHP の仕事であれば、基本的にその人に割り振られているとします。この状態のままだと、その人はずっと PHP の仕事しか出来なくなります。

一方、その人が周りに PHP について色々教えてあげて周りの人の PHP 力が上がると、周りの人が PHP のプロジェクトを担当し、その人は別の技術に時間を割けるようになります。あるいは、PHP 関連でさらに高度なことを勉強して、同じ PHP だったとしても、より難しいプロジェクトに関われるようになります。

個人視点2: 教える事により、理解が深まる

2番目は、教える事自体の利点です。人に何かを教えたことがある人なら経験したことが多いと思いますが、以下のような事は良くあります。

  • 教えている途中に、自分が上手く説明出来ない=正しく理解していない点が見つかる
    • その後、調べる・勉強する事で理解が深まる
  • ある事を分かりやすく教えようとして、抽象化・簡略化しようとするうちに、本質が理解出来る

このように、ある技術・知識を教える事によって自分自身の理解が深まるというのも利点です。

個人視点3: 教える事により、困ったときに色々教えてもらえる

3番目として、別の人が困っている時に教えてあげれば、自分が困っている時に教えてもらえる点が挙げられます。また、これは困ったときに限った話ではありません。

まとめ

ソフトウェア開発のプロフェッショナルとして重要なことは

  • 質の高い成果物を出す
  • そのプロセスの再現性を高める
  • それの基となる技術・知識を周りに伝える

という点だと私は考えています。

最後の「周りに伝える」という点ですが、人に教えるという事により、

  • 自分は別の分野、さらに上の分野に進める
  • 自分自身の理解も深まる
  • 自分が困ったときに教えてもらえる

という自分自身に対するメリットもあります。

当社で働いているメンバーは、今回説明した観点からしてもプロフェッショナルと呼べる人が多いと思いますが、今後も一層レベルを上げていけるように努力しようと考えています。