エンジニアのキャリアパス
エンジニアは30歳になると転機を迎えて、どういうキャリアを歩むべきなのか不安になる、とよく言われる。ワンステップ上がってマネージャになるのか、今まで通り現場でプログラミングを行うのか。企業の体制がその2択になってるのがそもそも不幸の始まりで、GoogleやFacebookなどトップがエンジニアであることが求められる時代に、現場を離れてプログラミングから遠ざかることが正義になると、せっかくの技術スキルを埋もれさせて日本の競争力を低下させることになる。
一方のエンジニアも、マネジメントをやりたくないから、できないから、技術だけで生きていくという選択をする人もいる。予測不能で感情的な人間と対話するなんてもってのほかで、コードだけを書いていたいという気持ちも分かるけど、
”マネジメントの方へ行かないからといって「技術だけで」生きているかというと、必ずしもそうではない。設計するためには使う人が何を求めているか把握する必要があるし、効率よく問題解決する方法を考えられる必要もある。” ー まつもとゆきひろ氏が「生涯プログラマー」でやっていきたい若手に贈る3つの言葉【特集:エンジニア育成の本質】
技術だけでという言葉が、他の何かを避けるための言い訳になってるとしたら、残念だけど、逃避行としての技術職はこの世界に存在しない。技術はなにかの目的を実現するための手段だから、ゴールがないまま進めるはずもないわけで。
Javaエンジニアのコモディティ化と言われるように、オフショアで低賃金で使えるリソースが増えてくると、Javaが出来ますよというだけでは何ともならない。昔のように閉じられた世界であればよかったけど、ネットワークが発達したボーダーレス経済では同じ仕事を半分の値段でやる人間がアジアにごろごろいるので、これからの時代のエンジニアは、その上で自分が何ものであるかを位置づける必要がある。
いままでと同じ次元で考えていると、どんどんエンジニアの社会的地位は低下していく。
では、21世紀のエンジニアはどうすればいいのか。技術を追求するからこそ、技術にプラスして必要なスキルがあって、それは、人、欲望、サイエンスの3つ。どれか1つでもあればいい。
人、仲間
Googleが「ソフトウェア開発はチームスポーツだ」と言い切るように、実際のソフトウェア開発には人とのコミュニケーションが重要だし、何百万人ものユーザを喜ばせるための第一歩は目の前の人が喜ぶかどうかだ。
天才エンジニアといわれるような人、リナックスを作ったリーナス・トーバルズがやったことはUnixライクなカーネルをUsenetニュースグループ に投稿しただけだ。その最初の優れた成果のもとに大勢のエンジニアが集まり、リーナスはそれらをリードしたディレクターとしての功績が大きい。現在のlinuxカーネルでリーナスが書いたソースコードは2%に過ぎない。
相手がユーザか、エンジニアという仲間なのかの違いはあるが、優れたエンジニアというのは人のことについて考える。
欲望
それから、こういうものを作りたいという欲望が強い人も有利になる。起業家に近いかもしれない。欲望の強いエンジニアは新しい市場を作ったり、ルールを一気に変えるくらいの能力がある。
どういうものが欲しいとか、楽しいとか、不満だから解決したいとか、そういう欲望やエゴと技術的解決がセットになった瞬間にイノベーションがあるし、エンジニアの可能性ってそれくらい大きいものだと思う。
ソフトウェア開発は誰かがすぐに代われるような製造の仕事とは違って、クリエイティビティや問題解決スキルが必要になる。そういった高いスキルは、世の中の問題を解決することに使った方がいい。
マネジメントをすることに限界を感じるなら、誰かを喜ばせるとしたら何をやるか、出来なかったことが出来るようになって誰かを驚かせるにはどうしたらいいか、を「考えて創る」エンジニアになるのも選択の一つ。
”情報産業は、決められた規格の製品を大量につくるものづくりではなく、ひとつだけ作品をつくるアートに近い仕事” ー イノベーションとは何か by 池田 信夫
サイエンス
もっとサイエンス寄りなキャリアも重要になってきて、いままで実装をメインにしてきたエンジニアにはこれが向いている。JavaとかCとかプログラム言語を追求したときに、最終的ににぶちあたる壁があって、それは数学の壁。ロジックを組んでいくことは時間をかければ出来るかもしれないが、数学的なモデルを組むことはその分野の研究が必要になってくる。
例えば、遺伝的アルゴリズム(GA)というのは、生物の進化を模倣して、データ同士を交配、突然変異させて解を求めるというもので、GAそのものはシンプルなんだけど、個体がどれくらい正解に近いかを計算する必要があるので目的関数が必要になる。
コンピュータが生成する文章が村上春樹っぽくなるための適合関数を考えると、文章の結束性とか類似性を数値で出すための式を定義する。こういうことが好きな人にとっては、そこは最もヤバいところというか、エキサイティングでクリエイティブな部分だ。
「漫画カメラ」なんかも人物を認識する画像処理を使っているけど、画像処理を行うための特徴点抽出も、独自のものを認識したい場合は、数学的モデルを定義することになる。
ただ、その壁、研究職でないエンジニアにとってはかなり高い壁が、ここ数ヶ月で急激になくなろうとしている。
いま話題のディープラーニングが重要なのは、モデルを予め定義しなくてもコンピュータが自ら認識できるということが分かったからだ。それも簡単に手に入る範囲のコンピュータで。だからみんな騒いでいる。
まだ始まったばかりなので、ここを追求するエンジニアが増えることで、日本の大きな産業として発展する可能性が高い。