技術力の定義を探る

湯前慶大氏(以下、湯前):「EM.FM」は、「エンジニアリングマネジメントをもっと楽しく、もっとわかりやすく」をコンセプトにお届けするポッドキャストです。「ゆのん」です。お相手は……。

広木大地氏(以下、広木):広木です。よろしくお願いします。

佐藤将高氏(以下、佐藤):佐藤です。よろしくお願いします。

湯前:EM.FMでは、毎回ちょっとためになる情報を紹介していきたいということで、1つのテーマを掘り下げて学んでいこうと思っています。今回のプレゼンターは、広木さんです。

広木:はい、よろしくお願いします。

湯前:さて、今回話していただくテーマは、何でしょう?

広木:「『技術力』って何?」というテーマです。

湯前:おぉ、なんか、深い……(笑)。

広木:これをちょっとみなさんと話したいなって(笑)。

湯前:深いですね。

広木:もう、ある程度年を取ってきてしまったので、若手の人からキャリアの話とかいろいろ相談を受ける中で、「技術力をつけたいな」とか、みなさんも周りでよく聞くんじゃないですかね。

湯前:聞きますね。

広木:その時に、「技術力って何なんだろう?」と思ったりして、考えてもパッとちょっとよくわからないなと。なんとなくはわかるのですが、なんとなくしかわからなくて、「これっていったい何なんだろうな?」と考えることが多いです。

その時に、「技術力をつけたいので、新しいフレームワークを触ってみたい」とか、「勉強する時間を増やしたい」とか、そういった話を聞きます。

「キャリアを考えていくと、もう少し技術力をつけていきたい」とか、そんなことを言われるのですが、それは、「新しいフレームワークの使い方を勉強したくて『Get started』をやりました」みたいな話は、技術力かと言われるとどうなのかなと思います。

技術力の本質とは

広木:なにか勉強するとか、あるいは技術力という言葉が使われる時に、この概念はちょっとぴんと来ないなと思っていて、いったいこれは何なんだろうなと。

まず、「技術力的なものがあったらいったい何ができるのかな?」と考えると、エンジニアは、会社としてビジネスマンとして成果を残さなければいけなくて、成果を残すことに対して、まず必要な能力が、技術的な側面であったら力なんだろうなと思っています。

では、それは何かというと、良い問題を解決できるということですよね。これは、すなわち、たくさん仕事をするということではなくて、より良い問題をより良く解決していくことだから、量がたくさんこなせることとか、仕事がテキパキとたくさんのものが運べるみたいな力とは違って、いい問題を見つけて、良い問題を解決していく力なんだろうなと思います。

そう考えると、課題を設定する。つまりどんな問題なのかということ。何が問題なのか、どの問題を解決すべきなのかという課題を設定する力と、その設定した課題を解決する力に二分されるのかなと思っています。

その課題の解決力のほうは、技術的な知識とそれを運用する思考力や、必要に応じてその領域を深くスタディ、研究していって、そのものについて解き明かしていったり、問題解決をより深くしていくような思考の持続力に近いのかなと思っています。

その思考の持続力を実現するようなエンジニアリングの原理原則に基づいた所作というか立ち振る舞いの洗練がされてくると、課題解決はうまくしていけるようになっていくかなと思います。

そういった部分に関しては、やはり思考を深く持続させていく力のほうが重要で、表層的に学習するために新しいフレームワークを舐めることよりかは、このフレームワークがどんな課題解決を目的として生まれていて、どういう動作原理で動いていて、どんな原理原則というか知恵が詰まっているのかを深く知っていくみたいなことが必要です。

「使い方だけ表面的になぞっていくこと」を増やしていっても得られるものではないような気がします。

その中で、やはり物事について突き詰めて、同じものをインプットしても、「なんでだろう?」と考えたり、それを、「どうして車はこのように動いているんだろう?」と理解していく探究心というか、深く知っていく力が必要です。

これが、新しいものに追い立てられれば追い立てられるほど、表面的に役に立つ知識を得ようとするがあまり、それを置いてけぼりになりがちです。

本当はもう少し、時代に引っ張られすぎない汎用的な探究心みたいなもののほうが、この課題解決力を滋養していくようなものなのかなと思っています。

「なぜ」を深く問う重要性

広木:最近、「Quora」かなにかの質問のところに、「CPUのキャッシュメモリってなんで速いんですか? なぜ速いんですか?」という問いがあって、これに対してエンジニアの人々がいろいろ大喜利的に答えていくというか、解を示していくようなことがあって、これを読みながら、いろいろなことを考えていました。

その時に、「なぜ?」という問いには、いろいろな答え方があるよなと思って、それに一番類する話としては、生物学や進化の用語なのですが、「ティンバーゲンの4つのなぜ」というものがあります。

これは、生き物の、例えばキリンの首が長いことについて、「なぜキリンの首は長いんですか?」という質問にはいろいろな答え方があるよねという分類です。それに倣いながら、この「キャッシュはなぜ速いのか?」という問いに答えていくみたいなことを考えます。

この「ティンバーゲンの4つのなぜ」は、4象限、要は2つの軸があって、これをクロスしたかたちで、「なぜ?」を4つに分けられるんじゃないかというところです。

1つは、至近的な、現在どうしてそうなっているかということと、究極的な目的論的な意味での説明の2軸です。もう1つが、今の当時代的な、今のこの時代においてとか時期において、ある1個体がという観点と、進化なので歴史的なというか、時系列をもってどういうふうに変化していったかという観点を、縦軸・横軸にして分類する「4つのなぜ」があります。

キャッシュメモリの速さを多角的に考察する

広木:その観点でひもといていくと、「キャッシュメモリ、なぜ速いか?」といった時に、メカニズム的な「なぜ?」としては、CPUに物理的に近いところに置いてあるからキャッシュメモリは速くて、さらに、それがSRAMという回路によって作られているから物理的に速いんだという、メカニズム的な説明ができます。

では、これは「なぜ?」のその説明になるのかというとなかなか難しくて、もう少し踏み込んで、それを現在の状況に至る原理的な部分はいったいどういう……経緯としてはどうしてそうなってきたのかというところをまずたどっていきます。

まず、メモリはやはり容量が増えるほど、そのアロケーション、どこにあるかということを示さなきゃいけないから、それを転送するためのバスサイズが増えます。

バスサイズが増えると1bitあたりの面積がSRAMのほうがフリップフロップなので広いし、DRAMはキャパシタなので、もうちょっと小さいサイズでできるから、大容量にしようと思った時にDRAMのほうが都合良くて、逆に速さを求めた時にはSRAMのほうが……というのは、現状こうなっているのはこういう原理だよと説明できます。

「キャッシュメモリは、なぜ速いのか?」という問いには別の考え方もあって、「これが究極的な部分では、なぜそう進化していったのか?」というところを考えます。

そもそもプログラムには、データの局所性があって、頻繁に触りたいデータもあれば、別にちょっとしか触らなくてもいいデータも存在しています。それを高速にしようとすると、この局所性の原理に基づいて、キャッシュという速くて少ない容量のものと、2次メモリ的な遅いけど大容量なもの、もっと言うと、ハードディスクのようなものとか、もっと2次記憶、3次記憶というふうに、キャッシュを階層化させていくほうが効率的です。だからこれは、「プログラムには局所性があるからキャッシュメモリが速いのだ」という言い方もできるかもしれません。

逆にさらに、それが通時的なところを見渡して、「なぜ我々は、大容量かつ高速な1つのメモリだけで問題解決をできないのか?」ということが、もう1つの問いとしてはだかる気がしています。

それについて考えると、私たちは、大容量かつ高速なメモリが1個あればそれで問題は解決できるのですが、どうしてもそこには、なんらかの原理的なトレードオフがあった時に、経済的な選択として、この1次メモリにふさわしいもの、2次メモリにふさわしいもののように、一番経済合理性があるものを採用することにならざるを得ないから、結果的にキャッシュ機構が必要になってくるんだ、ということも説明としてはできるな、と考えています。

それを、いろいろな方々が答えているのを見ていて、「なぜ?」という問いはいくつか分類ができて、その考え方の幅の広さを、それを見ながら考えていました。

技術力を育む探究心と問いを立てる力

広木:なぜを5回を繰り返すと本当の答えにたどり着くんだよみたいな、トヨタとかでもよく言われている「なぜ5回」の話があります。

この技術的な探究心の深さの話に戻ると、このキャッシュメモリのなぜというところにも、実は発展的な広がりが存在しています。どのようにその原理を探究していくのかというものの中には、物理的な仕組みのこともあれば社会学的な仕組みのものもあったり、あるいは、プログラミングの持つ一般的な性質によるところもあったりしています。

これは、いくつかの「なぜ?」を掘っていくという知っている知識の深め方が、もしかしたらある種の技術力に転化していく要素なのかもしれないなと思っています。

これが、1つの種類の「なぜ?」しか浮かばない人は、探究できる幅も狭まってしまうんじゃないかなと思っています。このように、考えを幅広に展開しながらとか、1つのことについてさまざまな角度から理解、探究していくことによって、技術力に必要な問題解決の力の素養みたいなものが培われていくのかな、と考えていました。

もう一方で、この解決力とは別に、課題の設定力という切り口もあるなと思っていて、これを「問いを立てる力」と言い換えてもいいかなと思っています。やはりいい問題を解決しないと、いい課題解決にはならないから、どんな課題を選択するのか、見つけるのかは、アウトプットの質に非常に大きな影響があるんです。

この問いを立てるためには、やはり世の中のことや社会のことや周囲のことをよく見ていないと、良い問いには出くわせないなと思っていて、その部分については、技術力の埒外と扱われがちなところがちょっとあります。

一方で、実際に良い結果を出している人たちは、良い問いをうまく立てられて、それに対する解決が、実際に自分の培ったものでできたからこそ多くの評価を得ているのかなと思っています。

(次回につづく)