私がある卒業生と話していたときのことですが、彼が、自身のキャリアの選択を後悔しているベテランプログラマが書いた記事について話し始めました。このプログラマは、コーディングに専念するために管理職への昇進を拒否しましたが、その結果、完全にみじめな立場に置かれることになったそうです。彼は、マネジメントのアンチパターンに次ぐアンチパターンについて書いていますが、これにより社内では給料泥棒のような扱いになってしまったようなのです。

そのような悲惨なキャリアについて話を聞くのは憂鬱でした。本当に憂鬱な話だったので、それまで非常に熱心なプログラマだった私の生徒の1人まで不機嫌になってしまいました。ですが、誰が彼を責められるでしょうか？ 彼が期待に胸を膨らませるはずだった将来のビジョンは、他人の意思決定スキルの乏しさが招いた悲惨な問題でいっぱいになってしまったのです。標準以下の管理職があなたの生活すべてに口出ししてくるのだと知ってしまうことは、そうした管理職と折り合いをつけることと同じように、精神的に大変な苦痛を感じるものです。さらに悪いことに、最近、彼のチームはランチタイムに将来のキャリアプランについてじっくり話し合っていましたが、チームの誰もプログラマのままでいようと考えている者はいませんでした。できるならすぐにでも管理職に昇進したいと思っており、先に紹介した”最大の後悔”をしているプログラマのようになるのは避けたいということだったのです。

私は、プログラミングの世界で暮らし、食べ、生きている多くの人と話をしてきました。彼らがチェックしている最新のライブラリやツール、また、彼らがビルドするものがいかに素晴らしく、あらゆるものに対しいかに大きな革命をもたらすか（あるいは役に立たないか。でも、ニューラルネットワークはクールですよね？！）について聞かずして、彼らと並んで話をするのはなかなか大変です。そんな彼らのほとんど全員が先ほどの意見に同意して、プログラミングという専門職は自分たち向きではないと感じたようです。

どういうわけでこんなことになるのでしょうか？ 多くの人は、高い給料や特権を求めてやりたいことができる能力があれば、昇進したいという気持ちになるのでしょうか？ 実は、これはすべて以下に帰着します。

人は決定されたことを実行するより、むしろ自分が決定することを望むものだ

科学的にもこれが正しいということが判明しています。人には自主的に行動したいという欲求があり、ゆえに力を欲するというのです。いつの時代もそうですが、人は給料やより良い肩書、あるいは重役向けのトイレの鍵（そういうのって今もあるんでしょうか？）が欲しいから昇進したいと望んできたわけではありません。自分の人生については、もっと自分自身で決められるようになりたいという欲求が常にあるからです。これには心理学者のDaniel Pink氏が同意しています。Pink氏は、職場の満足度と全体の生産性に最も寄与する3つの重要なことは自主性、成長、目的であると言っています。

私の中にも、「管理＝自主性」というバグが潜んでいました。私はもともと、プログラマとしてレベルアップし、最終的には自分が自身のスタートアップの社長になること、つまり自主的に行動するということの究極（と、私は思っているのですが）をキャリアプランの目標としていました。そのため、それぞれの仕事ではこの目的に合致する内容の仕事を慎重に選んできました。それが功を奏し、最終的にはリーダー的なポジションを獲得しました（結局のところ、その会社が倒産するまでのことでしたが、それはまた別の話です）。

最後の就職活動中、私には2つの素敵な選択肢がありました。

リーダーであり、いくつかの制約がある

リーダーではなく、自主性を大いに発揮できる

まさにこれでした！ 私は以前の経験を生かすことができましたが、結局…それはプログラムではありませんでした。ここで、何かが違っていると感じました。私は最終的に何がしたかったのでしょうか？ 結局その質問に行き着いてみると、私はコードを書きたかったのだと分かりました。私はものを構築することが大好きで、それを続けたかったのです。確かに、スタートアップというと全体のうちほんの少しを行うだけです。しかし、全員で取り組むことによる成功例といえば、あなたがお気に入りのIDEへのショートカットすべてを忘れてしまうぐらい、あなたの作業はすべてアウトソーシングにできるということです。私は後者の、私に最大の自主性を与えてくれるその仕事を選びました。

インプリメンタ、ソルバ、ファインダ

私たちは、プログラマとしてのキャリアの積み方を全く勘違いしているかもしれません。肩書に付くジュニア、レギュラー、シニアの3つの線引きは非常に簡単に動いてしまいます（1年しか業界での実績がなかったころの私に対して、勘違いしたある会社が私にシニアレベルの仕事にオファーをしてきました）。目的に賛同できなければ、その言葉には意味がありません。”肩書相対論”とは、会社によって肩書の付け方に違いがあるという意味です。例えば、”シニア・UIエンジニア”と”Javascriptアーキテクト”では、どっちのほうが上位の肩書に聞こえますか？

すばらしいオタクなプログラマでも3年以内に自分たちを見つめ直すことはできません。そんな状況を打開するには、私たちが使っている言葉を現実世界のものと統一させる必要があります。ジュニアやシニア（もうすでに経験を積んだアンチパターンの匂いがしますね）などの無意味な言葉を使わずに、仕事ごとにどんなことをするものなのか話し合おうじゃありませんか。日常行っている仕事にどれだけ自主性があるかを考えると、あなたの肩書も分かってきます。

もしあなたが、多くの時間を単なるチケット消化に費やしていて、チームメンバーがあなたのインプットについてあまり気にしてないのでしたら、あなたの肩書はソリューション・インプリメンタです。

もしあなたが、一般的な問題を扱い、その解決法をあなた自身のデバイスに任せていたり、ブレインストーミングする際にチームメンバーがあなたのインプットを気にかけていたりするようであれば、あなたはプロブレム･ソルバです。

もしあなたが、自分の仕事をほとんど自主的に選べて、自分の上司に「それは面白いアイデアですが、私は別の仕事をしますので」と言える（それでもクビにならない）立場であれば、あなたはプロブレム･ファインダです。

先に紹介した投稿をしたかわいそうな私たちの同僚は、ほとんどの時間をインプリメンタとして過ごしています。多くの人々（特に技術者ではない人々）は、フィードバックももらえず、改善なども行わずに特定の仕事を続けています。投稿者の話に全て共通している問題は、自主性がないことです。

私は別に、ソリューション・インプリメンタの人たちにすぐに仕事を辞めろとも、インプリメンタとして働くことが、無能なプログラマであると言っているわけではありません。まだ基本のコンセプトを学んでいるような段階の初心者のプログラマの中には、インプリメンタとして才能が開花する可能性もあります。ただし、渡された解決法を、周りが喜んで賛同するような難しいレベルでマッチさせることができる能力があれば、です。インプリメントの仕事で、勉強になるような貴重な機会がめぐってくることはまれです（実践を通して学んだことでしか本当の理解は得られないと私は思っています）。それに、どんな技能に関しても、初心者の段階で、手に負えないほどの大きすぎる問題を急にやれと言われたら、必ず迷子になってしまうでしょう。

永遠に初心者でいることはできません。このようなインプリメンタの人たちにもレベルアップをする道を作ってあげるべきです。会社として、私たちには駆け出しのプログラマに対しての共通の方針や、だんだんと難しい仕事を与えていってあげるというような仕組みはありません。レベルアップする一般的な方法は、今の仕事を辞めて、次のレベルの仕事ができる別の会社か社内の別の業務に就くことしかないように思えます。プログラマ初心者への私からのアドバイスは、6カ月後には新しい仕事を探せ、です（できれば同じ会社内で）。

会社が、プロブレム・ソルバを求めているのか、実はインプリメントの仕事だけをする人を探しているのか、実際どちらなのかは外からは分かりにくいのが現状です。ある企業では、プロジェクト・マネジャ（もしくはプロダクト・マネジャ）になるプログラマの比率に気を配っています。私はこのワナに引っかかったことがあります。フロントエンドの責任者ができると思っていたのに、実際はJIRAでひたすら1万7,000件のissue取り扱う仕事だったことがありました。会社ごとの文化を読み取るのはとても難しいことなので、面接官に質問をすることから始めて内情を探ってみてください。

一方で、我が社のプログラマがソルバの仕事に就けたときには、彼らは基本から飛び出して、羽を広げるようになります。ここでは、彼らの意見は意味のあるものになり、直面する仕事はその時々で姿を新しく変え、責任も大きくなります。そして、今までとは全く別の技術を学ぶ必要も出てきます。今までは”JIRAのプロセスを正確にこなす”という能力があればよかったのが、急にコミュニケーション能力がより大きな武器となるのです。ソルバは自分の信じた解決法をどうプレゼンするかを学び、そして、他のアイデアを持つソルバを説き伏せる力が必要になってきます。

ソルバは、大きく成長ができる期間であり、何年もの時間をかけ、何度も失敗し、学習し、過去にない大惨事を引き起こして、最後のステップであるファインダになる準備ができるまで知識を増やしていきます。

中規模のスタートアップ（50人未満）は、ソルバにとっていい案件です。解決が必要な問題が山ほどあり、大規模の既存の企業では禁止されているような領域までソルバが踏み込んでいける場合が多いからです。スタートアップ企業が成長すると、責任も大きくなります。これが、ソルバがファインダに成長する一般的な過程です。もしくは企業側の選択としては他にも、ファインダが成長できる環境を作ってから、直接ファインダを雇うという方法もあります。

プログラマの成長の最終段階はファインダです。ファインダは、それぞれの分野で専門家として扱われます（そして他のことにも抜け目がありません）。ファインダの仕事の定義を説明するのは無意味です。私の上司は「君がこの会社で特に何をやっているかなんて言えない。だって、君の仕事は何をやるかを見つけ出すことだからね」と言っています。ファインダは、問題が発生する前に問題を予測することができます。たいていは、その問題に遭遇した経験があるからです。ファインダは基準なのです。Steve Yegge氏は「Done and get things smart（手際よく行い獲得しろ）」と言っています。共感能力がファインダにとっての重要な道具です。ファインダは、嫌な上司みたいに「私のほうが頭がいい」とか「私が言うんだからやれ」というような言葉の武器を使わずに、数多くのさまざまな人と仕事をこなさなくてはなりません。（もしこの言葉の武器を使えば見事な嫌なやつになってしまいます）。

定義によれば、ファインダは自主性を必要とします。プログラマがしていいこと、いけないことがあるような制限のある仕事はファインダには向いていません。うまく管理されていないスタートアップ企業では、いい人材を雇ったにもかかわらず、彼らに具体的に細かい指示を出してしまう傾向があります。これは、誰も得をしないやり方です。

この投稿で、新しい単語が広まることを願います。これらの3つの概念が、優秀なプログラマにとって、最高の仕事を見つける手掛かりになるはずです。企業にとっても、正直にインプリメンタを探していると言えば、ソルバやファインダの人たちが無駄に応募してくることもなく、お互いの時間の節約になります。

そして、私の一番の願いは、コードを書くことを生業にするプログラマでも自主性のある仕事ができるということを、全てのプログラマたちに知ってもらうことです。人を管理する側の仕事を面白いと思う人もいるでしょうし（私はその1人です。誘惑の言葉は消えかけていますが、まだなくなってはいません）、一方で、すごいものを自分で作りたいと思っている多くのコンピュータ・マニアたちもいます。私たちにはまだ希望があります！

あとがき：もしこの投稿に賛同し、レベルアップしたいと考えている人は、ぜひ意見を聞かせてください。今の仕事に就いた経緯は何ですか？ 何が変わりましたか？ あなたに合う仕事をどのように探していますか？

こちらから私に連絡をください。isf at rkoutnik.com.