エンジニアの学び方─効率的に知識を得て、成果に結び付ける

第1章効率的に学ぶには―知識の3つの軸と学びの3つのフェーズ

新社会人のみなさん、こんにちは。本特集は、新しいものを学ぶ際に出会う問題について解決するための糸口を提供するために書きました。

みなさんは、⁠IT業界は変化が激しいので学び続けることが必要だ」と聞いたことがあるのではないかと思います。そしてそのことに異論はないはずです。だからこそ今、本サイトを読んで何かを学ぼうとしているわけですよね。それはとても良いことです。

一方で、⁠学びたいけど時間がない」⁠何を学んだらよいかがわからない」⁠社会人として成果を出していける自信がない」などの悩みを抱えている方も多いです。筆者はこの悩みを解決したいです。

限られた文字数では、みなさんの個別の問題を解決することはできません。そこで、みなさん自身で問題を解決していくための糸口を提供します。まず本章では、第2章以降でより具体的な問題について説明するための材料となる、ちょっと抽象的な話をします。

知識には3つの軸がある

「何を学ぶか」を議論するうえで、まず知識を3つの軸(方向性)に分けてみましょう。⁠広い視野」軸、⁠深い理解」軸、⁠応用対象」軸の3つです。この3種類は、情報の入手方法や習得方法に違いがあります。たとえば、広い視野を得るための知識は勉強会で入手しやすいですが、応用対象の知識は入手が困難です。あなたが知識を有効活用して成果につなげるのは、この3つの軸それぞれの習得が必要です。

「IT業界で学び続けるうえでは、勉強会に参加することが大事だ」という意見を聞いたことがあるかと思います。一方で「勉強会になんか参加しても勉強できない」という意見もあります。このように意見が別れる場合、大前提が食い違っていて、矢印の始点が共通でないことがよくあります。勉強会は、参加することで視野が広がります。一方で、勉強会ばかりに力を入れて、仕事をないがしろにしたのでは本末転倒でしょう。何ごともバランスが大事です図1⁠。

図1 上:Xかnot Xかで意見が分かれているように見えるが……
下:実は始点に食い違いがあるだけで両方「中庸」を主張している
図1 上:Xかnot Xかで意見が分かれているように見えるが…… 下:実は始点に食い違いがあるだけで両方「中庸」を主張している

それでは「広い視野」軸、⁠深い理解」軸、⁠応用対象」軸のそれぞれについて詳しく見ていくことにしましょう。

「広い視野」

広い視野は、⁠学ぶべき対象」を見つけるために必要です。この軸の学びが足りていないと、新しいものに気付けません。その結果、自分の知っているものに固執するようになってしまいます。

「広い視野」軸は勉強会で学びやすいです。勉強会ではいろんなツールの紹介、言語の紹介、テクニックの紹介を見ることができるでしょう。そこに聴衆として参加するだけで学べます。また、ブログ記事やニュース記事を読むことでも学べるでしょう。自分の知らない情報が流れる場所を見つけ、それを見続けるだけでよいので簡単です。

しかし、いっぱい情報を集めればそれで十分でしょうか? いいえ、そうではありません。⁠広い視野」軸の学びで得られる知識は、具体的な、特定の状況に密結合なものが多いです。そしてその種の知識は、状況が変わればあっという間に価値が下がってしまいます。

広い視野を持つことは「時間をかけて学ぶべき対象」を見つけるための最初の一歩です。最初の一歩で立ち止まらず、先に進むことが必要です。

「深い理解」

深い理解は、学びの効率化と応用のために必要です。

自分の都合にあわせて変更できる抽象的な知識

この軸の学びが足りていないと、取り入れた知識をオウム返しのようにそのままの形で出力することしかできません。たとえば先輩が、history | cut-d' ' -f 4 | sort | uniq -c | sort -nrってやれば使う頻度の高いコマンドがわかるよ」と教えてくれたとしましょう。この知識をそのまま使うのには理解は必要ありません。しかし、それでは自分の都合に合わせて変更することはできません[1]⁠。

具体的にどういう知識が必要でしょうか? たとえば「この縦棒は何だ? これはパイプだ」⁠パイプってなんだ? 左のプロセスの標準出力を右のプロセスの標準入力につなぐしくみだ」⁠じゃあ標準出力って何だ?」……などの知識が必要です。これは具体的な問題を解決する方法(ハウツー)ではありません。もっと抽象化された知識です。

抽象化された知識がどのように役立つか

抽象化された知識を持つと、新しい知識を得る速度が上がります。たとえば、プログラミングを未経験のAさん、C言語の経験があるBさんがRubyを学ぶとします。何が違うでしょうか。Bさんはたとえばこんなことを考えながら学びます。

「ああ、代入はC言語とほぼ同じね」⁠ループは独特な書き方をするんだなぁ」⁠C言語と違って型宣言がないけど型ってどうなってるんだろう」

などなど。

ここに出てきた「代入」⁠ループ」⁠型宣言」は、特定の言語だけの知識ではありません。いくつもの言語に通用する、抽象度の高い知識です。このような知識を持つことで、新しい知識を得る速度が上がります[2]⁠。

具体的な知識・経験が必要

しかし、抽象的な理解をいきなり得ることはできません。具体的な知識・経験を持ったうえで、その上に理解を育てる必要があります。経験に基づかない抽象的な知識は、それがどう具体的な知識と対応するのかがわからず、応用できません[3]⁠。

よく「勉強会に出ても勉強にならない」という主張を耳にします。これは「広い視野」軸と「深い理解」軸で考えるとわかりやすいです。広い視野を目的とした勉強会は、予備知識なしに出ても知識を得られます。しかし、そういう場で理解を深めることは難しいです。一方、深い理解を目的とした勉強会は、予備知識を持っている人が議論を通じて理解を深める場です。そこに予備知識なしで参加しても議論についていけません。

この軸の「すでに経験して知っていることを、もっと深く理解する」という方向性はとても重要です。しかし、この軸ばかりでは、新しいものに気づくことができず、たこつぼに陥ってしまいます。バランスが重要です[4]⁠。

「応用対象」

応用対象についての知識は、自分の理解を応用して成果を出すために必要です。この種の知識は「ドメイン知識」とも呼ばれます。

「広い視野」軸で知識を集め、⁠深い理解」軸でそれを抽象化しました。しかしそれだけでは何も成果は出ていません。成果を出すためには、理解を具体的な問題に応用する必要があります。そして、そのためには問題を詳しく知る必要があります。

たとえば、あなたが会社に所属している場合を考えてみましょう。会社は基本的に、顧客の抱えている問題を解決して、対価としてお金をもらっています。そしてその問題の情報は、会社の利益の源泉であり、社外で学ぶことは難しいです。

勉強会で学ぶことができるのは、あなたが解くべき問題についての知識ではありません。ほかの会社が、その会社の解くべき問題をどうやって解いたかです。特に手法にスポットライトが当たりがちです。肝心の「問題の知識」は、汎用的でない知識なのであまり語られず、また諸般の事情から隠されやすいのです。

自分の会社の中の文脈を理解せずに、ほかの会社の文脈での解決法をコピー&ペーストしても、なかなか成功しません。まずは自分の会社をよく観察して応用対象軸の学びを得て、会社の外の知識を会社の中向けに翻訳する作業が必要です。これをないがしろにすると、⁠ほかの会社ではうまくいった方法なのに、自社ではなぜかうまくいかない」という現象が起きます。

この軸の知識が足りていないと、何かを学んで、深く理解し、応用する力を持っていたとしても、それを何に応用して成果を出せばよいのかがわかりません。一方で、この軸ばかりに偏ると、所属している会社・ビジネスと密結合になってしまいます。

学びには3つのフェーズがある

前の節では、学びの対象である「知識」には3つの軸があり、バランスが大事だと学びました。この節では、学びの「過程」を時間軸方向に3つのフェーズに分けてみましょう。

3つのフェーズの概要

物事を理解する過程には、大きく分けると3つのフェーズがあります。⁠知識収集」フェーズ、⁠抽象化」フェーズ、⁠応用」フェーズの3つです。この3つのフェーズが繰り返されることで、新しいことを学んでいます。

やる気をもとに知識を得るのが「知識収集」フェーズです。知識からモデルを作るのが「抽象化」フェーズです。そしてそのモデルを応用して成果を出すのが「応用」フェーズです。応用した結果、成功すれば成果と自信が、失敗すれば疑問が生まれます。そしてそれがやる気を生み出します図2⁠。

図2 ⁠知識収集」⁠抽象化」⁠応用」の3つのフェーズを繰り返すことが大事
図2 「知識収集」「抽象化」「応用」の3つのフェーズを繰り返すことが大事
図中の「時間」については、このあとやる気不足で解説します。

学びの効果を実感するには

逆回りに考えてみましょう。何かを学びはじめたときに「自分は学べているのか?」という不安を感じる人は多いです。その不安はどうすれば解消するのでしょうか? いくら学んでも不安はなくなりません。学んだことを応用して、それが成果につながったときに初めて不安が解消します。

成果を出すためには、答えのわからない問題に挑戦することが必要です。誰でも答えを知っていることをやっても自信にはつながりません。しかし挑戦するには、⁠自分は答えが出せる」と思えることが必要です。どうすればそう思えるのでしょうか? 自分の中にモデルがあることが必要です。たとえば数学の問題で、答えを丸暗記しただけでは新しい問題を「解ける」気がしません。しかし「解き方」という一段抽象化した理解を得ることができれば、新しい問題を「解けそう」と思うことができます。

「深い理解」軸の知識はただ収集するだけでは役に立ちません。知識収集のあと、⁠抽象化」フェーズであなたがモデルを作り出す際に手助けになります。⁠応用対象」軸の知識も集めただけでは役に立ちません。しかし「応用」フェーズを行うためには必須です。

学びの3つのフェーズの詳細

知識を得るための「知識収集」フェーズ

最初のフェーズは、知識の量を求める「知識収集」です。しかし知識を集めることは、材料を集めることにすぎません。それだけでは何も生まれません。料理にたとえると、材料を大量に買い込んでも、料理ができるわけではありません。

情報は膨大です。1日に作られるすべての情報を読むことはできません。取捨選択が必要です。この話は今回は深追いしません。

知識収集フェーズの具体的な例として、たとえば「Ubuntuでlsを実行するとファイルの一覧が見れる」という知識を得たということにしましょう。

知識からモデルを作る「抽象化」フェーズ

次のフェーズは、集めた知識からモデルを作る「抽象化」です。

モデルができると、未知の状況に応用できるようになります。また、自分の中にモデルができあがることで、新しい知識に対する理解の速度も上がります。

たとえば「Ubuntuではlsでファイルの一覧が見れる」⁠OS Xでもlsでファイルの一覧が見れる」という知識から「つまり、だいたいのOSではlsでファイルの一覧が見られるんだ」と考えることが、モデルの生成です。

モデルから成果を得る「応用」フェーズ

その次のフェーズは、モデルを使って成果を得る「応用」です。

自分が理解したことを実際に使ってみることです。そこで成功すれば、⁠自分は正しく理解できている」という自信が生まれます。もし失敗したら、⁠なぜうまくいかないのだろう?」という疑問が生まれます。そして疑問を解決したいという欲求が、次の「知識収集」フェーズを始めるためのやる気になります。

成功の例

たとえば、Aさんの目の前に見たことのないOSがあるとします。Fedoraと書いてありますがAさんはそのOSのことをちっとも知りません。そしてファイルの一覧が見たいとします。抽象化のフェーズで作ったモデル「だいたいのOSではlsでファイルの一覧が見られる」を応用して、とりあえずlsを試してみます。無事、ファイルの一覧が見れました! Aさんは少し自信がつきます[5]⁠。

失敗の例

もちろん応用が失敗することもあります。目の前の見たことのないOSにはWindowsと書いてあるとします。とりあえずlsを試してみます。しかし、失敗します。そして「Windowsにはlsはない」という知識を得ます。そこでAさんは「Windowsにもlsに相当するものがあるはずだ、探そう」と考えて、⁠Windows ls」で検索をします。そして「Windowsでlsに相当するのはdirCygwinを入れるという選択肢もある……」という記述を見つけます。Aさんは無事、ファイル一覧を見ることができました。Aさんは少し自信がつきます[6]⁠。

Aさんの中のモデルは「だいたいのOSではlsでファイルの一覧が見られる」から、⁠だいたいのOSにはファイルの一覧を見るコマンドがある。だいたいのOSではlsだけど、Windowsではdirに更新されたわけです。最初から正しいモデルを習得できるとは限りません。応用フェーズが重要なのは、モデルの正しさを検証することで、より正しいモデルへと育てるきっかけを作るからです。

おわりに

本章では、筆者が「学ぶ」ということに対してどういう理解をしているか、つまり筆者の理解に関してのモデルを解説しました。モデルを解説することは「応用フェーズ」に相当します。みなさんの中には「自分のモデルとはちょっと違う」と思われた方もいらっしゃるかもしれません。その違和感は、より良いモデルを育てるきっかけになります。ぜひフィードバックをいただければ幸いです。

次章からは、次のようなより具体的な悩みについて解説していきます。

やる気不足

よくある悩みが「学ぶ時間がない」です。その人が、Twitterも見ず、漫画も読まず、ゲームもしないのであれば、筆者にできるアドバイスはありません。しかし、そうでないのなら、それは「時間がない」ではなく「やる気がない」です。時間もやる気も貴重なリソースであり、うまくコントロールしないとすぐに枯渇してしまいます。

やる気と成果は鶏と卵の関係です。何かをやって成果を出すことで、次のやる気につながります。だからとにかく最初の一歩を踏み出すことが重要なのですが、ではその一歩踏み出す「やる気」はどうすれば作れるのでしょうか。これは筆者がとても関心のある研究テーマです[7]⁠。一つの方法が「タスクを小さい単位に刻む」です。これについて第2章で詳しく説明します。

知識が浅いという不安

「いろいろ学んだけど浅い気がする」という悩みもよく聞きます。この悩みは「深い理解」軸の知識が足りないことや、⁠抽象化」フェーズがうまくできていないことが原因です。この問題の解決方法は第3章で解説します。

何を学べばよいかがわからない

「何を学べばよいかがわからない」もよくある悩みの一つです。⁠自分が作りたいものをどうやって作るか学べばいいじゃない」とアドバイスすると、⁠何を作ればよいかがわからない」という返事をされ、⁠じゃあ、まず身近な問題を見つけてそれを解決しましょう」とアドバイスすると、⁠何が解決すべき問題かわからない」という返事をされます。ここまでセットでよくあることです。

「応用対象」軸の情報収集が必要なわけです。解決すべき問題が明確でないから、⁠何のために学ぶのか?」があいまいになるのです。そして目的があいまいだから、⁠何を学ぶのか?」を決めることができなくなるのです。

「何を学ぶか」⁠問題をどうやって見つけるか」⁠社会人として成果を出していける自信がない」という問題の解決について第4章で説明します。

おすすめ記事

記事・ニュース一覧