苦手を捨てる決断により広がった世界 - 限られたリソースしか持たないエンジニアの戦い方

サムネイルは筆者が住むイスラエルの写真。

はじめまして、Sukuda Peppei(@knqyf263) と申します。現在はイスラエルに住んでいて、セキュリティ企業でソフトウェアエンジニア(以下エンジニア)をしています。もともとコンテナイメージの既知の脆弱性を簡単に検知できるOSSを趣味で開発していたのですが、今の会社から買収の申し出を受けたため、そのまま自分も入社しフルタイムでOSSの開発を続けています。過去に個人ブログでも説明しているため、詳細が気になる方はご確認ください。

今回キャリアについて書く機会をいただいたのですが、あまり長期的な計画というのは持たずに生きてきたため、多くの人に参考になるようなキャリア設計はお伝えできそうにありません。一方で改めて振り返ると自分の中の判断軸には気が付いたので、そのことについてお話しさせていただきます。

現在は経歴や会社の肩書を取っ払っても「こういうものを作った人間です」とある程度説明できるようになりました。ですが、昔は専門を絞らず広くやりすぎて、自分が何者なのか分からず漠然とした不安を抱えていました。そういった過去の自分と似たような悩みを抱えている人には参考になるかもしれません。

何でもできるわけではないということ

キャリアについて語る前に、まず『HUNTER×HUNTER』という漫画の説明をさせてください。『HUNTER×HUNTER』では念能力の応用スキルが6属性に分類されており、それぞれ強化系、変化系、具現化系、放出系、操作系、特質系となっています。

それぞれの念能力者はいずれかに分類されます。これらには相性があり、仮に自分が具現化系に分類されるとすると具現化系の能力は100%極められますが、念能力の六角形で遠い場所にある放出系の能力はどれだけ飲みこみが良くても40%程度が限界です。

これを現実においても感じたのが学生時代です。エンジニアリングと全く関係ありませんが、自分の人生に大きく影響を与えたのが受験勉強での体験でした。

リスニングを捨てるという選択肢

受験当時(というか今もですが)、とにかく英語ができませんでした。中でもリスニングは壊滅的で砂嵐にしか聞こえませんでした。いかに英語ができないかについては過去に個人ブログに書いています。

このままでは合格は厳しいという状況で、予備校の講師から「リスニングを捨ててはどうか?」と提案されます。というのは受験する大学では英語試験の途中で30分間リスニングが流れる形式だったため、リスニングを捨てればその間に別の筆記問題を解くことができるからです。すべて満遍なく学ぶというのが学生として当たり前だと思っていたため、受験という大きなイベントにおいて何かを捨てるという選択肢は衝撃的でした。

不得意を捨てる勇気

その結果、捨てた時間を使って他の成績を伸ばし無事大学に合格できました。得意や不得意に応じて勉強時間を変えるというのは誰でもやっていることだと思いますが、必要科目を完全に捨てる経験をした人は少ないのではないかと思います。完全に捨てるというのは強い恐怖心があり当時は非常に悩みました。周りが30分間リスニングしている中でひたすら英作文をするのは正気の沙汰ではないと感じました。

ですがこの経験から、ときには大胆に何かを捨てることで目的を達成できることもあると学びました。もちろんすべてできるに越したことはありません。再び『HUNTER×HUNTER』の話をすると、特質系の能力の一つに『絶対時間(エンペラータイム)』というものがあります。これは発動中すべての系統の能力を100%引き出せるというものなのですが、特質系は選ばれし者しか使えないため作中でも『絶対時間』を使えるのは一人です。特質系は覚えようと思って覚えられるものではなく、上図の習得率でも0%になっています。自分は受験勉強の経験から特質系ではないことが分かりました。

英語は自分にとっての放出系であり、最大でも40%程度までしか習得できず習得速度も遅いです。ちなみに『絶対時間』は強すぎるため発動中一秒につき一時間寿命が縮むという大きな制約があるのですが、周りにはその制約すらなく常時『絶対時間』を発動しているような人もいて「いやいや待て待て...」と思ったこともあります。だんだん何が言いたいのか分からなくなりましたが、どんな分野でもあっという間に吸収して物にしてしまう化け物のような人は恐らく皆さんの周りにも一人はいたと思います。

そういう特質系の人は細かい戦略は不要なので全系統100%の力で殴っていけば良いですが、自分のように具現化系近辺の能力しか習得できない人間がどう戦うかということが本記事の趣旨です。

英語を捨てる決断

大学では第二外国語として中国語を選んだのですが、試験前必死に勉強したにもかかわらず期末試験ではリスニングが0点でした。留年はかろうじて免れましたが翌年一年生に混じって再履修しました。ここでも能力の習得率について再度意識させられました。

そして、今後の人生においてすべてをバランス良く学んでいくのは非効率なのではないか?と考えるようになりました。冒頭でも述べたように将来のキャリアパスなど真面目に考えたことはなかったのですが、「自分自身は特に有名になりたくはないが、自分のしたことや作ったものは世界的に知られるようになってほしい」という漠然とした気持ちはありました。

その観点から、「英語や中国語がそこそこ話せてプログラムもそこそこ書ける人」よりも「英語や中国語は全然話せないがプログラムは結構書ける人」のほうが広くチャンスを得られるのではないかと考えました。これが正しいかどうかは分かりません。少なくとも当時の自分はそう考えました。そして英語を諦めるという決断をしました。大学時代は周りがTOEICやTOEFLなどを受ける中、自分は一度も受けていません。

誤解のないように強調しておきますが、基本的には何でも広く学ぶほうが良いです。自分には関係ないと最初から切り捨てたり、少しやってみてすぐ諦めたりするというのはもったいないです。実際には、習得にかけた時間が短いせいで身につかないことがほとんどだと思います。自分も中国語をもっと勉強していたら、今頃ペラペラになっていたかもしれません。

ですが、「全部学んでおいたほうが良いよ」と気軽に言ってくる人には気を付けてください。全系統を容易に100%引き出せる特質系能力者の可能性があります。彼らとは系統が異なるので、自分に合った戦略を練る必要があります。同じく『HUNTER×HUNTER』内のとある能力者は、自身の系統と相性の悪い能力を修行してしまい、修得が困難すぎて他の能力を覚える余裕がなくなってしまいました。その結果、「容量(メモリ)のムダ使い」と言われ敗北します。漫画内の話にはなりますが、自分に合った作戦を練らず全てを追い求めて全てが中途半端になる良い例かと思います。

時間は有限です。もし辿り着きたい場所があってそれが現状の方法では簡単には届かないのであれば、ときには「選択と集中」が必要になるかもしれません。

学生時代のデスクの写真。真面目なキャリアの話に漫画の例えをねじ込んでしまうほどに情熱を傾けている。

好きな分野における取捨選択

ようやくソフトウェアの話に入るわけですが、集中してコンピュータ科学やソフトウェア工学を学ぶようになると、そこで別の問題に直面します。

知らないことへの恐怖心

大学の最初の2年間は教養学部だったのですが、早く現場でプログラムを書きたかったためアルバイトを始めます。初めてアルバイトとして働いた会社ではCとC++を書いていたのですが、独学で得た知識と会社で働く際に必要な知識には大きな乖離があり、毎日こんなことも分からないのかと怒られていました。毎晩風呂の中で落ちこんでいたのをよく覚えています。

そういった経験から、知らないことは悪であるという考えが刷りこまれました。ましてや他の分野の学習時間を減らしてまでリソースを割り振っているため、コンピュータの分野ですべてを知らなければならないと思いこんでいました。

Cばかり書いていてWebサイトも作ったことがないのはまずいとPerlでWebサイトを作るアルバイトをしたり、Android開発のアルバイトをしたり、DBを扱う長期インターンに行ったり、自宅でサーバ運用をしたり、簡単なOSやコンパイラを作ってみたり、ネットワーク系の研究室で徹夜でイベントのネットワーク構築をして怒られたり、DNSルートサーバのビッグデータを使ってHadoopで機械学習したり、クラウド環境を構築したり、脆弱性診断したり、とキャリア設計も何もなく手当たり次第学ぶ道を歩んできました。

ネットを漁っていて詳しくない分野が出てきたら今度はそちらを学び、周りが何か知らないことをやっていたら今度はそちらを学び、のくり返しです。ソフトウェア工学関連はわりと何でも好きだったので好奇心でやっていた部分ももちろんありますが、知らないことがあってはならないという恐怖心もありました。しかし学べば学ぶほど終わりがないということに気付きます。コンピュータ科学・ソフトウェア工学の世界は一人の人間が一生で学ぶには広すぎます。それどころかセキュリティという分野に絞ってもなお広すぎて、すべてに詳しくなるのは困難です。

知らないことがあっても良いということ

右往左往していたときの知識は大いに役立っていますし、自分が特に興味があるものを見つける上では必要な時間だったと思います。しかし、「脆弱性が好きそうだ」とか「ただし自分で探すのではなく自動化により世の中をセキュアにすることにやりがいを感じるようだ」などと興味の方向性が分かったあとでも、恐怖心から色々なものに手を出すことをやめられませんでした。SNSがある今の時代は周りが凄そうなことや面白そうなことをやっているとすぐ情報が入ってきますし、好奇心や恐怖心からついそちらに時間を使ってしまいます。

その結果、自分は何者なのか?という疑問を抱いてしまう人は少なくないと思います。そういう人は「色々できるけれど何もできない」といった感覚に陥ります。自分も同じでした。しかし働く中で、スキルや知識が凄い人でもすべてを知っているわけではないという当たり前のことに気付きました。それどころか、そうした凄い人たちは年齢や上下関係など気にせず「教えてほしい」と素直に質問してくることもあります。"知らないことへの恐怖"に囚われていた自分にとって、知らないことをさらけ出すというのは衝撃的でした。

自分にとっての当たり前の知識は他人にとっての当たり前ではないかもしれません。だからといってその当たり前のことを知らない人は駄目かというとそんなことはなく、別の分野で尖っているかもしれません。それは逆も同じです。自分のものさしで他人を測ることや、他人のものさしで自分を測ることは意味のないことだと気付き、大分楽になりました。この技術を知らないなんてありえない、などと自分のものさしを強制する人もいますが、そういう人は「随分と狭い世界で生きているな」と無視してかまいません。

選択と集中

上で述べたようにすべてに詳しくなる必要はありません。自分自身も脆弱性について詳しくなりたいと思ってからは、攻撃方法や対応方法を学び、脆弱性はそもそもどのようにして世の中に公開されるのか、そしてどうすればもっと安全になるのかを突き詰めました。その間、世間で流行っている知識を更新することはできませんが、そこは仕方ないと割り切りました。そうやって脆弱性という領域を突き詰めていく中で新たなアイディアやこだわりが生まれ、それをOSSとして形にしました。どういうこだわりを持っていたかについてはブログにまとめているので省略しますが、一点集中したからこそ生まれたものだと思っています。

もちろん好奇心で前向きに幅広くやっている分には良いと思いますし、ジェネラリストを目指すのであれば広く学ぶべきです。ただ何かのスペシャリストになりたいという気持ちがあり、自分の名刺代わりとなる何かがほしいと思っているのであれば、焦りや恐怖心など後ろ向きな気持ちで広く手を出すよりも、勇気を持って特定領域に集中したほうが良いということです。そうして何かの分野で詳しくなると面白いことが転がりこんでくるかもしれません。

取捨選択の結果

得手不得手や興味に応じて色々な「選択と集中」をしてきたという話をしましたが、それがどういう結果になったのかについて話します。

英語について

自分は現在日本人が一人しかいないイスラエルの会社で二年間働いています。チームの半数は欧米在住のメンバーであり、当然仕事はすべて英語です。海外カンファレンスで発表することも年に数回あります。英語を思い切って諦めた結果、逆に英語が必要になりました。

当然今になって英語がさっぱり分からず苦戦しているわけですが、それで良かったと思っています。外資系企業なのでパフォーマンスが上がらないと肩を叩かれることもときにはありますが、英語ネイティブや長年英語圏に住んでいて英語が達者な同僚でそうなってしまった人もいます。一方で自分は未だに英語がさっぱりですが、プログラムは書けるので何とかやっていけています。

もしこれが逆だったら、間違いなく今の環境に残れていないなと感じています。どれだけ頑張っても言語面でネイティブには勝てないため、非言語スキルを伸ばそうと昔に決断したのは間違っていませんでした。強みで弱みを補うことができた例だと思います。

イスラエルのテルアビブにて撮影。犬が遊べるビーチに行った時の写真。

またあとで気づいたのですが、どこかで勝てる領域があるということは精神面でも大きな利点があります。つまり、自分は英語ができないが人に使ってもらえる物は作れると内心思っておくことで自信になります。すべての領域で負けていると感じると自信を失ってしまって前向きな気持ちがなくなってしまいますが、自信さえあれば知らない領域でも積極的に学んでいけます。以前は英語を使うのも学ぶのも嫌でしたが、今はもっと改善したいという前向きな気持ちで学ぶことができています。

技術について

冒頭でも説明したとおり、現在はもともと趣味で作ったOSSを仕事として開発しています。この分野に興味があると気付いて集中して頑張っていたら、予期せず面白いことが起きました。OSSエンジニアという仕事の面白さや辛さについても以前に書いたので省きますが、毎日刺激的でやりがいも大きいです。

自分の作っているOSSをこの分野で一番にしたいと思ってやってきたのですが、甘く見ていたところがあって最初は他にも色々と好きなOSSを作ろうと考えていました。ですが、どの分野でも一番を目指すというのは簡単なことではなく、他のことをやっている余裕などないということを思い知りました。もちろん特質系の人は(以下略)。恐怖心から手広くやるぐらいなら「選択と集中」をという話をしましたが、ときには好奇心にも抗って「選択と集中」が必要になるということを学びました。

特に最近は同じチームのメンバーがeBPFでネットワークセキュリティ周りをやっていて、もともとネットワークをやっていたこともあって参加したいと強く思いましたが、そんな中途半端をしていては目標へは到底届かないことに気付いてからは今のOSS一本に集中しています。その甲斐あって何とか成果を出せましたが、これもやはり集中したおかげだと思います。

目標を達成するためにしてきたこと

自分の選択について長々と説明してきましたが、改めて振り返って重要だと感じていることを最後にまとめます。

一定期間集中する

「選択と集中」という言葉は会社経営などのビジネス用語として知られています。自社の得意とする事業分野を見極め、集中して経営資源を投下する経営戦略です。業務の効率化により特定の分野が飛躍的に伸びる可能性がある一方で、当たり外れがあるというデメリットもあります。

この言葉を広めたのは「経営の神様」と呼ばれたジャック・ウェルチ氏なのですが、実際にはフォーカスと言ったのであって「選択と集中」というのは誤訳と言われています。つまり多角化を否定するものではなかったということです。

今回何度か「選択と集中」という言葉を使いましたが、特定分野以外をすべて切り捨てるべきという意味で使っているわけではありません。リソースに限りがある以上、特定分野を伸ばすためには効率的に学習するために集中する時期が必要ということです。逆に言えば、その時期が過ぎれば別の分野に集中しても良いと思います。自分も今は開発しているOSSに集中していますが、一生それで生きていこうとは全く思っておらず、落ち着いたら別のことをやりたいと考えています。上でも述べましたが、何か一つ強みがあるというのは自信に繋がり、他の分野を新しく始める際にも頑張ればきっとやれるはずだと精神的に有利に働きます。

また、人生のフェーズや家族構成の変化によって「選択と集中」が必然的に迫られる場合もあります。そういう時期にも昔のようにすべてができるはずだと思っていると、自分への期待とのずれで辛く感じてしまいます。そういった場合にも上述のような心構えでいると、今は集中のときだなと焦らずに済みます。実際に自分も子供が生まれ時間が一気になくなったのですが、先ほど述べたようにOSSに集中しなければと気付かされたあとだったので落ち着いていられました。

必要なときに必要なことをする

一定期間集中するという話をしましたが、それは必要になったタイミングで良いのではないかと考えています。例えばプログラミングを学びたての頃、英会話はあまり必要ありませんでしたが、今は学ばなくては生きていけない状況になっています。つまり今が必要なタイミングであって、今こそ集中して学ぶべきということです。英語は捨てたと言いましたが、もう一生関わらないという意味ではなく、今は必要ないので優先度の高いことに集中するということです。

とはいえ自分が何に興味があるかを最初から理解している人は少ないですし、自分の興味を知るためにがむしゃらにやる時期は必要です。必要ないと思っていても将来点と点が繋がる可能性もあります。結局のところ、幅広くやる時期と集中する時期の両方必要なのだろうと思います。それをくり返すことで幅広い領域に詳しく、かつ専門分野も持ったエンジニアになれます。もちろん、さらにそれを続けることで複数の専門分野を持てればより良いエンジニアになれるはずです。

言い換えれば、専門以外は関係ないと切り捨てること、逆にあれもこれもと手を出し続けてしまうこと、そのどちらも優れたスペシャリストになる道筋ではありません。前者にはもっと幅広く学ぶべきだとアドバイスすると思いますし、後者にはその逆になると思います。自分は後者のタイプであったため本記事はそちらにフォーカスした内容になっていますが、前者のタイプの人が書くと逆の内容になるはずですし、現在の自分に必要なことを見極める必要があります

結局どちらのアドバイスもどういう順番で登っていくかの違いに過ぎないとは思いますが、もしまだどちらでもなく恵まれたことに興味の方向性が分かっているのであれば、まずは専門を磨くことをおすすめしたいです。

すでに述べたように自信を得るというのは大きなアドバンテージであり、一度自信を持つことができれば領域を横に広げていくのは簡単だと考えているからです。特定の分野に精通しつつ幅広い分野に対しても知見を持っている人のことをT型人材と呼んだりしますが、ー型(幅広く)からT型(深く)よりはI型(深く)からT型(幅広く)が精神衛生上良いです。ただし興味が定まっていない場合は必然的に前者になると思います。しかしそれは無駄なことをしているわけではなくて、そういった模索が必要なタイミングということです。

適正なリスクを取る

他の人と同じように普通のことをしているだけでは普通のことしか起きません。自分はリスクを伴う選択をしてきたと理解していますが、それでも失敗したら人生終わりの大博打というわけではないですし、間違っていたと気付いたら舵を切り直せば済む話です。一方で、間違いをきちんと認めることは重要だと感じます。実際自分もすべてうまくいったなどということはなく、既に何度も間違っています。誤った選択をして間違った分野に集中してしまっても、また別の分野をやり直せばいいだけです。

一度きりの人生で何か目標を達成したいのであれば、限られたリソースで戦わなければならない人間は勇気を持って適正なリスクを取る必要があると思います。自分も目標に対してまだまだ道半ばですし、思い描くスペシャリスト像には程遠いですが、人生を大いに楽しんでいる自信はあるので、どのような選択をして今に至ったかということについてお話させていただきました。