エンジニアはどう生きるべきか?
及川卓也氏が説く、技術者の成長戦略

技術者としての成長のための技術トレンド #2/2

MANABIYA -teratail Developer Days-
に開催
2018年3月23日から24日にかけて、レバレジーズ株式会社が主催する国内最大級のエンジニア向け技術イベント「MANABIYA -teratail Developer Days-」が開催されました。同社が運営するITエンジニア向けのQ&Aフォーラム「teratail」の中で解決できない問題を解くため、一流エンジニアたちが一同に会して、プレゼンテーションやパネルディスカッションを行いました。トークセッション「技術者としての成長のための技術トレンド」では、フリーランスのエンジニアリング・プロダクトアドバイザー、及川卓也氏が登場。技術者として成長するために必要なことを語ります。

及川卓也氏:次に、エンジニアとしての成長を考えていきます。成長というのは知識を身に付けて、それを技能に発展させることだと思います。

知識にはグラデーションがあります。「知っている」、それから「使える」、「使いこなせる」。言い方はなんでもいいんですけれども、知識というだけでは、本来はプロとして使えるレベルにはなっていないことが多いです。

巷にたくさんプログラミングスクールがありますが、例えば1ヵ月かけて、毎晩通ってだとか週末を使って、Rubyの簡単なプログラムできました、という人がプロとして即戦力として活躍できるかというと当然違うわけです。それは「知っている」というレベルであり、「使える」「使いこなせる」というところまで行きついていないからです。

ですので、この知識と言われているものを、グラデーションの濃い部分、「使える」「使いこなせる」というところまで昇華させていく・発展させていくことが技能として身に付けることになり、これが成長に対して必要なことになってくる。

この知識というものを身に付けるためにやることが、学習なわけですね。学習して、知識になる。ただ、先ほどのプログラミングスクールの例じゃないですけれども、いくら勉強しても技能にはなかなか発展しないんですね。

ここに必要なのが、経験なんです。もしくは実践という言い方をしてもいいと思います。要はだから、先ほどのプログラミングスクールの例で言うと、良くないところというのは、多くの場合「Rubyを学びました」「Railsプログラム書けるようになりました」で、そのあと使わないところなんですよね。

別にどこかに転職して、そこでがっつりとプロジェクトに入らなきゃいけない、というところまではやらなかったとしても、趣味のプログラミングでも良いので、学んだことをそのあと使い続けていかない限りは忘れてしまい、ここで言う技能に発展していかないわけです。

そういう意味で、実践の意味での経験というものが必要であり、この学習し知識として身に付けたものを経験を通じてまた学習し、その知識を高めていく……という、このループを回すことで技能として発展していく、ということになります。

経験そのものには価値はない

ちょっとだけ脱線するんですが......。経験そのものというのは、実は価値がないんですね。ここで経験という言い方をしているんですけれども、経験によってなにを学ぶかが大事です。だから最終的には、すべてはスキルになると思います。

みなさんの会社でも人材の募集で、「ソフトウェアエンジニアを募集します」というときに、なにを見るかというときに「経験3年」とか経験を見るということがあると思います。

気持ちはよくわかります。でも本当に大事なのは、その経験からその人がどんなスキルを持ってるかを見極めることなんです。なぜならば、経験というのはある環境においてそのスキルが活かされるかどうか、ということなので、環境が変わればその3年分のスキル、まったく意味がないかもしれないわけですね。

なので、やはり最終的なポイントは、技能・スキルをどれだけ持ってるか、ということになります。先ほど言いましたように、経験を通じての学習でしかその知識を技能に発展させていくことができない部分があります。いわゆる座学的な学習と実践、このペアが必要であると言えます。

最初から経験で飛び込んじゃなぜダメなんだろうと思われるかもしれません。確かに、学習からループを始めるようにと先ほど説明しましたが、全部が全部そうじゃないと思います。

ただ学習していないと、知らないものに対して実践しようとふつう思わないわけですね。自信がないわけです。

そうすると不安があり、その仕事をふつうは受けません。その結果機会損失になってしまうこともある、ということで、1番最初のとっかかりは学習から始めることが多いのではないかと思います。

外国語習得は経済合理的でない?

こういった学習を考えるにあたり、言語学習を例にとってみようかと思います。ここで言う言語とはプログラミング言語ではなく、英語や日本語などの自然言語です。

自分の母国語以外の第2言語、第3言語がどういうときに必要になるかと言うと、外国を訪問したり外国人と仕事をしたり、外国人中心のコミュニティに入ったり、という時だと思います。

それを目的だとしたときに、手段としてなにが必要かというと、1つが外国語習得という今我々が話している学習という手段。もう1つは「通訳を雇えばいいんじゃない?」という現実的な手段があります。

ちょっと脱線しますが、経済合理性を考えると通訳雇っちゃうのは実は理にかなっていることが多いんですね。以前、Microsoftの日本法人の社長をされていた成毛眞さんが数年前に『日本人の9割に英語はいらない』という刺激的なタイトルの本を出されたんです。本の中でなにを言ってるかと言うと……。

専業主婦の方がいます。その人が1年に1度行くかどうかのハワイ旅行のために一生懸命、旅行のときに英会話できるように学びます、というのは、経済合理的に考えたらまったく理にかなっていない。その高い金を払っているぶん、わずか数日ハワイに行くときに通訳雇っちゃったほうがいいわけだと。

さらに、ここで成毛さんが言ってるのは、それよりも日本人としてもっと大事な教養があるんじゃないか、ということです。

そのとおりだと思うのですが、本で挙げられている専業主婦ではなく、我々ソフトウェア技術者という立場で考えたときには、本当にそうか、って考えないといけないかなと思います。英語を学ばなくていいかって言うとそんなことはなくて、「英語を学ばなくていい状況にいること」がリスキーだ、と考えたほうがいいんではないかと思います。我々のようなソフトウェア技術者は。

本来ならもっと英語に接しなきゃいけない、英語のドキュメントを読まなきゃいけない、英語のコミュニティに入らなきゃいけない。そこで初めてグローバルなところの最新の技術を学べる。そう考えたときに、必然的に目的が生まれてくると思います。ですので、目的、手段という順番で考えたときに、「いやべつに学ばなくてもいいんじゃない?」となった瞬間、「目的の追求が足りないんじゃないか?」って考える。そういう逆のアプローチも大事だと思います。

どのドメインを狙うか

どの言語を習得するか考えたら、「もっとも使う言語」。もう1つが汎用性で、「多くのところで使うことができる言語」の優先度を上げて考えるのがいいんじゃないかな、と思っています。例えば日本語を母国語とする我々の場合。英語を母国語以外の基軸言語として考えたら、それを使えるといろんなところで、ほかの外国人にも通じるってことがあると思います。さらにはその言語を軸にして学びやすい、というのがあるんですね。

つまりどういうことかと言うと、言語って「言語間の距離」というものがあると言われています。

よく知られている話なので、日本語と韓国語が非常に近い、って話を聞いたことがあると思います。機械翻訳するときに、日本語と韓国語や英語とドイツ語だと比較的精度が高い、という話があります。

これらは「言語間の距離」が近い言語であり、そのように言語間の近いものをこの「同一のドメイン」と考えていくことができます。英語を基軸にした場合、英語に距離が近い言語と言われているところは比較的学びやすい、というような。こういった言語間の距離というものを、ドメインを別にして考えていくことがいいんじゃないかと。

じゃあもし複数の言語を学ぶならば、どの言語を軸にしていくか、どのドメインを狙っていくか、というところに戦略を持つということが大事じゃないかなと思います。ですので、ここまでの振り返りで言うと、技術習得のために経験を含めた学習ループを回して、知識を技能へと高めていく必要があり、あとは今申し上げたとおり、戦略というものが成長に関しては必要ということです。

専門性とカバレッジ

そして、成長戦略なんですが「T型人間になりましょう」という話はよく言われます。広く浅くの基礎教養の部分を持ちましょうと。そのうえで1つ自分のスペシャリティ、専門性を高める、ってことを言います。

Tをどう発展させ進化させていけばいいかと言うと、(スライドを指して)1番上に書いてあるものが、専門外にさらに領域を作っていくというかたちになります。この領域を増やしていくと、Tの横棒のところが厚くなってくる。基礎教養の部分が厚くなり、エンジニアで言うと「フルスタック」というのはこういった人になっていくと思います。

もう1つが、専門性を深めていくというやり方。さらには専門性を広げていく。これも広げていくと結果的にフルスタック化していくってこともあると思います。

あとπ字型といって、専門を増やしていくというやり方もあります。

これらの選択肢の中で、どういった進化を遂げていくかを考える必要があります。基本は軸を増やしていく・広げていく、というところになっていくことが多いかなと思います。

そしてこの軸。

これが軸となる技術だとしたときに、2軸目をここの黄色で×してあるところにしたならば、さっき言った言語間で言うと、「言語間の距離」が近いやつですね。そうすると強みが発揮できない。自分のカバレッジが広くならないんですね。

なのでできるだけ、角度が高い、ベクトルが違う方向のものを選択すると。もし3個目で、3次元で考えるならば、これも同じくできるだけベクトルが違うものを選んでいくことがいいんじゃないかと。

100万分の1の人間になる

これをとてもうまく説明されている方がいます。リクルートに昔いらっしゃって、今は文教のほうにいらっしゃる方です藤原和博さんという方で、最初は杉並区の和田中学の校長先生になられ、本をたくさん出されているし、講演もされている方です。

YouTubeやログミーに講演の内容が出ています。『年収1000万〜1億円を目指す人生戦略』という……。ちょっとお金と書いてあるとやらしい感じになるんですけれども。

藤原さんは、「自分をレアカード化する」って言い方をしています。希少化する。私は「差別化する」という言い方をよくしますが、非常におもしろい話なので、短くコンパクトにお話します。

「人は1万時間かければ、100人のうちの1人の人材になれる」と言っています。これは例えば毎日仕事したあとに、3時間使ったとしたら10年かかるんです。

だいたい10年、余暇だけでやったとしても、100人に1人の人材になれます。もう10年かけて、もしくは1万時間かけたら、100分の1×100分の1なので、1万分の1の人材になれると。

さらに1万時間かけたなら、100万分の1の人材になれます、って話をしています。そのくらいの努力をしましょう、と。もちろん仕事をしながら学べるなら1万時間ってもっともっと早く終わりますから、10年もかからないわけですね。

もう1つ言ってたのが、そのときになにを学ぶか、というところです。藤原さんは自分自身の経験を話されていて。リクルートのトップ営業マンになります。これで営業という軸を持った。次にマネジメントという軸を持たれた。ただ、この2つはほかにもたくさんいるんですね。

次に、文教に出たと。公募されていた杉並区の校長先生に「私なります!」って言った瞬間に、おそらく当時、日本では1人の人になったわけですね。

そのようにまったく違うベクトルを組み合わせることにより、ポケモンカードのレアカードにあなたはなれますよ、レアキャラのカードになりますよ、というのを子どもにもわかることばで話された。

ちょうど私がこの1個前の図で言った、n次元の空間において幾何学的空間の容積を最大化しましょう、というのと同じお話だと思います。

AIから学び方を学ぶ

先ほどの言語のお話と同じですが「どのドメインを選ぶか」が非常に大事です。自分の能力を希少化していくときには、距離が遠い別ドメインのものを選んでいく、というのが戦略的には正しい選択になります。

また、もちろん同じドメインのものは、先ほどの言語の例じゃないですが習得が楽なので。本当に仕事が必要なときに、それを学ぶことができます。

ですので、自分の希少化ということと、もう1つはいろんな異なるドメインのところに基軸を持っていたなら、仕事で必要になったときに、おそらくそこで必要になるものは自分が既にそのドメイン内においては習得している技術の発展形、というところで習得が可能になるということが言えるわけです。

今AIが第3次ブームで普及・発展しているわけです。人間の行動や脳の動きというものを機械に置き換えている、例えばRPAやAIみたいなものから、逆に人間がどう行動するか考えてみるとおもしろい、いうのを私はたまに癖でやるんですね。例えば、機械学習を見てみましょう。

機械学習の中に1つ、強化学習というものがあります。

これは報酬を与えることによって、教師なしの学習パターンであったとしてもきちっと目標、評価関数のターゲットに到達できるようなやり方をする。これって考えてみると、学習のときには動機が報酬である。人間で考えたら動機が必要だよね、ということになります。

人間の学習における動機って2つあり、1つが外発的動機づけと言われるものです。簡単に言うと、「これをやったら給料が上がります」「この資格を持っていたなら資格手当で毎月5万円プラスになります」「これ持ってたら昇給・昇進します」、それでがんばろう、となるのが外発的動機づけです。

内発的動機づけというのは、自ら興味を持ち「これを学びたい」と思う、本当に内部から出てくるような、そういった動機が内発的動機づけです。この2つを組み合わせることが大事なんです。

もう1つAIから学びたいのは転移学習です。

これは先ほど話したのと同じ内容です。特定のドメインで学習されたモデルを別ドメインにする手法が、GoogleのCloud AutoMLとかでも使われてるんですけれども、この転移学習というものになります。ですので、覚えてるものというのは、ほかのものでもそれを活用することによって覚えやすくなると。

学べばあとで役に立つ

要は技術においても類似性というのは非常に高いんです。先ほど私の経歴をお話しするなかで「トレンドが外れることがある」ってお話をしました。

トレンドが当たる・当たらないということが大事なのではなくて、そのトレンドにおいて学んだものが大事。実は10年、20年、30年という歴史で見たときに、繰り返し起きているものというのはたくさんあります。そのときの習得に役立つんですね。

ですので、先ほども言語のところでお話したとおりで、「どのドメインを選ぶか」というところが非常に大事になってきます。

例えばプログラミング言語というのもわかりやすい例で、いろんなプログラミングのパラダイムってあるわけですね。その全部にできるだけ、自分として習得して基軸を設けておくというのもそうですし、自分的にここの部分、というふうに掘り下げていく、ってやり方もとれるかなと思います。

私の例で言うと……。全然専門家ではないので詳細は聞かないで欲しいんですけど、ブロックチェーンに最近非常に興味を持っていまして。

ブロックチェーンを理解するときにも、実は2000年代前半に流行りかけていたP2Pというのを……IPv6の絡みで私、かなり入ってたんですけれども、その知識や、やっぱりセキュリティだとかPKIの知識があることによって、理解が早いということは当然あるわけです。

あとはブラウザって、今どんどんOS化してるわけですね。ですのでブラウザの中に、いわゆるHTML5という機能で「入れたい」って思ってるものは、実は私がWindowsのところで作ってたものとほぼ同じもの。それをブラウザの中でどういうふうに実装しようか、というところなので、非常に理解が早かったりするところもあると。

なので、ここまでの話をまとめると、転移学習というのがあるように、その学習した内容自体がその後の自分の学習に役立つことがたくさんあると思います。学習には動機づけが必要、ということと、ベクトルの異なるドメインの領域のものの習得をしてみることがいいのではないか、というお話です。

何をやるかをどう決めるか

本題の技術トレンドとエンジニアとしての成長。要は今までお話してきたところの総括をさせていただきたいと思います。ずっとお話ししてるのは、動機づけとドメイン、領域というところの話になります。

考えることとしては、「仕事で必要か」「これがあると給料高くなる」「ある仕事がとれる」「おもしろそうなプロジェクトに自分から手を挙げられる」「上司から指名される」……そういう外発的動機づけというところが1つ。

あとは自分自身が興味を持てるか、心躍らされるか、という内発的動機づけ。それと、あとは戦略的に自分で学んでいくために、異なるドメインかどうかというところを判断の軸とする、というのが必要です。

異なるドメインじゃないとダメというわけではないです。異なるドメインの場合には、先ほど言ったように軸を増やしていき、今後自分が学ぶときの軸となるドメインを多く持てる、という面の意味でのプラスがあるけれど、同じドメインの中でもすでに学んだところをベースにして、すぐに習得するということがそのときに必要なこともあるので。異なるドメインじゃないとダメだというわけではないです。

フローチャート的にしてみました。

(スライドを指して)「仕事で必要か」。必要ならば、これもう有無を言わさず、やらざるを得ないので、習得しましょう。1番上の、このパターンですね。

「仕事では必要ありません」。でもトレンドとして出てきたものが異なるドメインで、心躍らされる、興味が持てる。そうしたらもう習得しましょう。

「異なるドメインだけれども、心躍らされなかったら」。これは書いてないんですが、それはもう習得しない。やらないですよね。心躍らされたらやりましょう。

もったいつけて書いたんですが、結局「気持ちが大事」ということで。興味持てたならやりましょう。

やらねばならないところに身を置く

この(スライドの)下には「仕事では不要」と書いていますが、この部分は私の今までの経験上で言うと、仕事で必要にしちゃうというのが1番良いです。

私が2000年前半に、「Microsoft技術だけでやばいぞ」ということで「インターネット技術をなにかやりたいな」と思ったとときにそれを仕事として行えたというのは、後付けなんですね。そのときにPKIとIPv6という仕事を選ぶことができたのは、実は後付けなんです。

どういうことかって言うと、最初に自分自身がもう、「インターネットのなにかをやりたい」と思ったわけです。日本でもWIDEの人たちがすごくがんばってるしと。

今もしかたら多くの人は歴史上の事柄としか知らないかもしれないですけど、90年後半~00年前半って、日本ってIPv6の実装では世界トップを行っていました。USAGIとKAMEという実装があったんですね、LinuxとBSDベースのところ。

この人たちの知識を学びたい、と思っていた。そのときに、どこまで中身を理解しているかわからないけれども、森首相が、ポロッと所信表明演説であんなこと言っちゃって、国としても実装しなくちゃいけなくなってMicrosoftにリクエストが来ました、誰か出せと。「誰か」というとき、別に私じゃなかったんですよ。そこで手を挙げて、自分がやりたいものを仕事にしてっちゃったんです。

なので、これはみんながみんなできるとは限らないんですけれども、できるだけ学びたいと思ったものを仕事にしていくことを考えていくといいんじゃないかな、と思います。

これが先ほど言った、「英語を学ばなくても通訳でいいんじゃない?」じゃなく、実は「英語を学ばなければ」という機会に自分を置くことが大事だということと同じです。

使わざるをえない状況に身を置けば身につく

英語の学習でもまったく同じことを経験しています。最初のDECという会社、外資系だったんですが、そんなに英語を使わなかったんです。もっと英語を使いたいということもあり、MicrosoftのWindows開発の部署に入りました。

そして入ったあと、一生懸命勉強するわけですね。英語学習をするわけです。「使わなきゃ」と思ったときに、自分のカウンターパートになっている本社の人間と、1週間に1度電話会議。

当時だから電話なんですけど、「電話会議持ちましょう」と入れちゃうんですね。もう、自分が使わざるをえない状況に持っていく。

例えばこれを言語学習じゃなく技術の話にするなら。ある会社の中において仕事で使っている言語とか技術がありましたと。自分が「ほかのことをやりたい」と思ったときに、プロジェクトを提案するのもよし……。転職しちゃうというのも絶対良いと思うんですね。私こんなことばっかり言っていて、けっこう「ラディカルだ」って言われるんですけど。

仕事にしていっちゃうというかたちで、さっき言った外発的動機づけの部分も自分から引き込んでいく、ということをやってもいいのかなと思います。あとは、先ほどからずっと言ってる「興味を持った技術に注目する」というところが非常に大事だとも思っています。

一番大事なのは気持ち

実は技術はすごい勢いで変わっています。

前半に話したように、メインフレームという……今だとSF映画にしか出てこないようなオープンリールテープみたいなやつが保存用ストレージで、っていうマシンがあるんですけれども、そこからミニコンになりサーバーやワークステーションになり、そしてPCの時代が来てクラウドが来て、今のAI・IoTの時代、というのが来るわけですけれども。

共通して言えるのは、多くのものは登場当時は「おもちゃ」って言われていました。メインフレームから見るとミニコンはおもちゃだったし、ミニコンとかメインフレームから見ると、ワークステーションはともかくパソコンはおもちゃだったわけですね。本当に。

ビット数も「8bitかよ」「16bitかよ」「えっ、640KBしかメモリないのか」「シングルタスクか」「これでなにができるのか?」と。誰もこんなものが世間を席巻し、すべての会社や個人の机の上にそのマシンが置かれるなんて思ってなかったわけです。

Webも一緒です。クラウドも一緒です。Sun MicrosystemsやOracle、もしくはNetscapeleという会社が、2000年当時Webが出たときに、ネットワークコンピューターと言って「すべてはブラウザで完結する」というようなことを言ったけれども、結局実現できず。

「これはムリだね」「結局おもちゃだったね」となったときにAjaxが出て、Googleがそれを活用することでGoogle MapやGmailを作り、文書作成などのオフィスツールもブラウザ上で実現するようになった。

当初は「いや、Webは仕事では使えません」。もしくは使うとしても中はActiveXかJavaか必要だったり、ネットに接続されている環境でしか動かなかったものが、そうじゃないということを証明できてるわけです。

これって結局、『イノベーションのジレンマ』の破壊的イノベーションと言われるもので、すべてこの「おもちゃ」というキーワードで総称されるようなことが多かったわけです。しかしそんなことはなかったと。

本当におもちゃに終わっちゃうか、そうじゃなくそれがメインストリームになるか、ってことは、先ほど「トレンドというのはわからない」とお話ししたとおり、わからないんですね。ですけれども、自分の内なる声。要は心躍らされるか、というところを見る。

技術を追っていくときに1番大事なのは……。

なにか新しい技術が来てそれを触ってると「及川おまえ、なんか本当に子どもみたいだな」って、20代の頃よく言われたんですけれども、実はその気持ちが大事であり、それを軸にしてトレンドを追っていくかどうかを決めるのがいいんじゃないかと思います。

今日、40分ほどお話させていただきました。まず「成長戦略」という言い方をすると、偶然・必然の組み合わせや、異なるドメインを増やしていったり、そのドメインの中でどうやって習得をしていくか、ということを考えることが大事。

ただ、後半ずっとお話ししましたけれども、1番大事なのは「技術を好きだ」という気持ちであり、自分自身がやはり「心躍らされる」「興味を持つ」ところに対し、それを習得していき、必要ならそれを仕事化していく、というところではないかなと思います。

以上となります。どうもありがとうございました。

(会場拍手)

Occurred on , Published at

このログの連載記事

1 及川卓也氏が振り返る自身のキャリア エンジニアとして生き残るための「偶然と必然」とは何か
2 エンジニアはどう生きるべきか? 及川卓也氏が説く、技術者の成長戦略

スピーカー

関連タグ

人気ログ

ピックアップ

編集部のオススメ

ログミーTechをフォローして最新情報をチェックしよう!

人気ログ

ピックアップ

編集部のオススメ

そのイベント、ログしないなんて
もったいない!

苦労して企画や集客したイベント「その場限り」になっていませんか?