思考と現場の間で

「いいサービスづくり」のために、組織づくりやソフトウェア設計など、考えていることを書きます

プログラマとしてレベルを上げるために必要な4つの要素

最近、プログラマの成長について考えることが多くなりました。自分自身についても仲間についても。成長しているメンバーが集まらないといいモノは作れません。個人としても、エンジニアは常に成長していかないと仕事にならなくなる瞬間がやってきます。簡単にできるものではありませんが、やらざるを得ない状況でもあり、これまでの経験からプログラマとしてレベルを上げるために必要な要素を整理してみました。

1)基礎
コンピュータサイエンスプログラミング言語です。まずは基本が無いとしっかりとしてものを作ることができません。
2)師匠
ノウハウというものは言語化できるものばかりではありません。ちょっとしたコツや考え方は、出来る人と一緒に仕事をすることが一番です。教えてもらい見て盗む。また、一緒にやることで自分自身が感じられる世界を広げることもできます。
3)実践
実際のプロジェクトです。やり方ばかりを学んでも、実践し自分で考えて作る場がないと成長できません。プロジェクトは何のために行われるのか、そのために何が必要か。また、プロジェクトはチームでやるもの。他の仲間との関係性やコミュニケーションの取り方、進め方を実践から学んでいきます。

f:id:tsuyok:20131205005822p:plain

これらが相互的に重なり合ってレベルが上がっていきます。順番があるわけでもなく、どれか一つができれば卒業ということもありません。そして、3つの要素のベースとなるものが

「センス」

です。言葉にしなくても感じるセンス、少ない説明で理解できるセンス、すぐにアウトプットに繋げられるセンス。すべての係数に掛け算として関わってきます。つまり、残酷ですがいくら上記3つを時間をかけても、センスが無いと成長角度は小さいままです。その場合、長い人生を考えると、早いうちに諦めたほうが得策です。

これが私なりに整理した結果ですが、特にプログラミングを行ったことが無く、マネジメントに従事している方々は、経験と違うと思われるかもしれません。Excelの設計書さえあればプログラミングは誰でもできる、という考え方をよく聞くためです。なかなか伝わりにくいのは事実です。

プログラミングは、ソフトウェアは動けばいいという考え方もあり、とりあえずソフトウェアが動いてしまうとそこで貢献したプログラマが誰なのかが可視化しにくいのです。つまり、職場の人たちの仕事ぶりを遠くから見ていたとしても、誰が優れているのかいないのかはまったくわかりません。本当の個人のレベルは、一緒に仕事をした人しかわかりません。一緒に仕事をしていないのにわかったことにしてしまうと、教育をすれば誰でも伸びるのではないかという誤解や、正当ではない個人の評価が蔓延ります。

クラシック演奏家をベースに考えてみた

実は、これは元ネタがあります。私はオーケストラで打楽器をやっているのですが、楽器で成長するための実感です。ということで、上記の3点をクラシックの演奏家に当てはめてみたいと思います。

1)基礎
音階練習のような基礎練習です。また、楽典やソルフェージュなど、音楽の基礎もあります。個人の努力の積み重ねと、知識は音楽教室音楽学校で習うことができます。
2)師匠
優れた音楽家につくことで、直接教えてもらったり、演奏を見たりし、自分の引き出しを増やしていきます。演奏の仕方だけでなく、作曲家の特徴や、音楽とはなにか、プロとしてどのような姿勢でいる必要があるのかなど色々なことを学びます。
3)実践
オーケストラやアンサンブルでの演奏です。合奏は複数人でやるものです。アンサンブルは一人では練習できません。複数の人とのアンサンブルを重ねることにより、そのコツを掴んでいきます。また、聴衆とのふれあいやフィードバックから学ぶことも多くあります。

プログラマと同様に、それぞれの掛け算で「センス」が必要です。もうこれが無いとアマチュアでいたほうがいいです。努力ではどうにもなりません。私もプロになろうとは一度も思ったことはありませんでしたが、なにか間違ってプロになろうと思わなくて良かったと思っています。

つまり、私の実感として、プログラミングというのは、音楽家と極めて近いもでした。ダメな人は本当にダメです。逆に出来る人は勝手に信じられないスピードで伸びていきます。教育は絶対に必要ですが、教育だけでも何ともなりません。

現状は、例えば未経験でもセンスを見ずに学歴とコミュニケーション能力がアレば…云々で採用してしまい、どうしようもないソフトウェアが量産されていくということがあるようです。そして、一部の下請けの下請けくらいのある程度競争を勝ち残ってきた人材がプロジェクトの鍵をにぎるということが起こります。さらに、なぜかその人の給料が一番低いという悲劇が…。

プログラミングだけじゃないかも

今回はプログラミングの話としてみましたが、プログラミングだけでなくマネジメントもその他も実は近いものがあるのではないでしょうか。そしてそういう仕事こそセンスが高い人が努力を重ね、レベルが上がれば大きな価値を生む。もし、センスがゼロでも努力だけでなんとかなるような仕事は、簡単に変えがきいてしまうので、価値も生みにくいですし、個人のキャリアとしてもリスクが有るということではないでしょうか。

ちゃんと見れる人が、人を見て採用し、人を見て評価し、人を見て役割を決める。自分自身の成長も、採用も、現場での評価や給料体系も、この考え方をベースにできないかなーと毎日悩んでおります。