SSブログ

本当に技術職を続けたかったの? [プログラマー現役続行]

「本当は技術職を続けたかったけど、会社の制度上仕方なくマネージャになった」という人で、本当にソフトウェアエンジニアとしてソフトウェア開発を続けたかったの?と疑問符が付く人が多いです。ソフトウェア開発業界が面白い点の1つは、絶えることなく新たな考えやソフトウェアが登場することです。

したがって、会社ではマネージャ職であって直接手を動かして開発していなくても、学ぶことはたくさんありますし、自分が開発業務では経験しなかった概念や手法は書籍を通して学び続けることができます。

私自身は、直接自分で開発を行っている期間、コンサルテーションなど中心として、直接は開発していない期間を繰り返してきています。

1984年8月~1996年8月 開発していた期間
1996年9月~2003年1月 マネージャ、コンサルテーション等
2003年2月~2009年8月 開発していた期間、技術教育、マネージャ
2009年9月~        コンサルテーション、技術教育
(そろそろ開発へ戻る時期かと考えています)

自分では開発しないマネージャや管理職であっても、ソフトウェア開発が好きなのであれば、何らかの形で学び続けることはできます。しかし、実際には、マネージャになったら技術のことは学ばない人が圧倒的に多いのではないのでしょうか。その結果、部下が必要な技術を学んでいるかということにも関心が薄くなっていくのだと思います。

拙著『プログラマー”まだまだ”現役続行』の第12章「30代、40代の人たちへ」では、次のように述べています。
継続して学習する
 多くの人は、社会人となった数年は、業務をこなすために様々な学習を行います。しかし、残念ながら業務をこなせるようになってしまうと、多くの人が学習する習慣を失ってしまいます。その結果、最初の数年で習得した非常に狭い範囲の知識だけでソフトウェア開発を行うことになります。
 その状態で、マネジャーに昇進し、自分では直接開発しないとうだけの理由で学習しなくなってしまう人が多いです。そして、40代になった時に、技術的には何も若手を指導できない状態になってしまいます。
重要なことは、若い時から学習を継続することです。たとえ、自分では直接開発しなくても。管理職であっても、技術の学習を継続することで、実際に自分ではその技術を使用しなくても、若手に使用させることもできます。
 また、新たな技術などを若手から業務中に説明してもらうだけで、分かった気にならないことです。どれだけ若手がきちんと技術を理解しているかを把握するためには、自分も技術の学習を継続しておく必要があります。

レビューを行う
 ソフトウェア開発では、エンジニアの報告を聞くだけでは、きちんとしたソフトウェアを開発しているかは分かりません。実際に、書かれたコードを見ないと分からないのです。したがって、自分で直接開発しなくなっても、レビューアーとして設計レビューやコードレビューを行うことは重要です。
 レビューを行うことで、エンジニアのスキルを正しく把握することが可能となりますし、現場での問題点も見えてくるかもしれません。そして、直接開発しなくても、レビューを行うことで、自分のスキルレベルを保つことが可能となります。
 自分が長年使用してきた技術を用いたソフトウェア開発でのレビューであれば、経験を生かしてレビューすることができます。しかし、その状態は、数年と続かない可能性は高いです。なぜなら、使用される技術が長い年月の間に変わってしまうからです。そのために、継続的にレビューを行うためには、使用されている技術に関して、学習が必要となってきます。
 たとえば、ずっとC言語で開発していたが、新たなプロジェクトではJava言語を使用するとなると、様々なことを学習しなければなりません。オブジェクト指向設計から始まって、Java言語そのものの学習や、Java言語で必読書とされる書籍を読むとかです。そうしなければ、開発現場でレビューすることは不可能となります。

勉強会を開催する
 設計レビューやコードレビューに加えて、若手のエンジニアが学習を継続する習慣を身に付けさせるために、率先して勉強会を開催することが重要です。それは、業務外としての勉強会です。上司が継続して学習することを示さない限り、部下が自発的に学習をして、きちんとソフトウェアを開発してくれると期待するのは無理です。そのためには、率先して、勉強会を開催していく必要があります。
 マネジャーや管理職になった後に主催する勉強会というのは、3種類に分類されます。一つ目は、若手のエンジニアに最低限学んで欲しい事柄を選んで、それに関連した技術書を選んで開催する。二つ目は、実際に開発で使用されている技術に関する技術書を選んで開催する。その場合、自分が知らない技術であっても積極的に開催することです。三つ目は、自分が学んでみたい技術に関する技術書を選んで開催する。
 私自身、最低限これだけは学んで欲しいという意図で、勉強会をいくつか開催してきました。コンピュータの基本的な仕組みの理解のための『Introduction to Computing Systems』、基本的なデータ構造とアルゴリズムの理解のための『Practice of Programming』(『プログラミング作法』)、Linux Kernelの仕組みの理解のための『Linux Kernel Development』、デザインパターンの理解のための『Head Firstデザインパターン』、オブジェクト指向設計の原則を学ぶための『アジャイルソフトウェア開発の奥義』、良いコードを書くための『Implementation Patterns』(『実装パターン』)や『Clean Code』(クリーンコード)などです。
 自分では実際にあまり使ったことがない技術であっても、現場のエンジニアに使わせたりすることがあります。そのような場合にも、その技術をきちんと学ばせるために勉強会を開催したりもしてきました。たとえば、JRubyを用いて開発をさせていたプロジェクトでは、Ruby言語をきちんと学習させるために『プログラミングRuby 言語編』の読書会を開催しました。当然、日々開発に使用している現場の若手エンジニアの方が良く知っていたりするのですが、私が読んで疑問に思うことは、そのエンジニアに聞いて説明してもらったりもしました。 もちろん、自分が興味ある技術に関する技術書の勉強会も行ってきました。
 マネジャーや管理職に昇進して、実際に自分が開発をする比重が減ったから、勉強会が主催できないとか参加できないということはありません。非業務で始業前に行うことは、管理職という立場であっても当然できるのです。
これらすべてを行う必要はないかと思いますが、「本当は技術職を続けたかった」と言うのであれば、マネージャになってもどれか1つは続けてもらいたいものです。