エンジニアの生産性を高めるために、モチベーションや学習効率を改善しよう エンジニアの知的生産術

「エンジニアの知的生産術」を読み終えました。感想は、一言で言えば凄く学術的な本です。記憶力を考えるために、脳の仕組み(海馬)にまで話が及びます。

内容としては、汎用的に使える知的生産術について書いた本です。どの技術の修得であっても、大丈夫です。

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB+DB PRESSプラスシリーズ)

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB+DB PRESSプラスシリーズ)

ただ、本書の内容はわりと抽象的であり、箱の積み上げで言ったら、二段目や三段目に位置するような本です。そこで、自分なりの意見や考え方を交えながら、具体的に解き明かしつつ、まとめていきたいと思います。

目次

学習のプロセス

本書では、学習のプロセスを3段階に定義しています。

  1. 情報収集
  2. モデル化・抽象化
  3. 実践・検証

情報収集

情報収集は、読んで字の如くですが、情報を集めます。ここで重要な点は、最低限必要な情報にフォーカスして、集めることです。

f:id:konosumi:20180811165104j:plain

YAGNI原則

YAGNI原則とは、もしかしたら必要になるかもしれない機能は、追加しない方が良い。すなわち、ソフトウェアにおける機能は、本当に必要になった段階で開発するべきであるという考え方です。

e-words.jp

本書は、これを学習プロセスに応用しています。つまり、最低限必要な情報に限定して、学ぶのです。技術を学ぶにしても、分厚い本の中身を、体系的に1から10まで学ぶ必要はありません。

知りたい事の目標を明確に持つ

目標は、具体的であるべきです。例えば私が、「Rubyをマスターする」という目標を掲げたとします。さて、この目標には、いくつかの問題点があります。

  • 何を持ってマスターしたと言えるのか、基準が曖昧である
  • 目標達成の基準が曖昧でであるため、どこまで学習すれば良いのか分からない

上記に代表されるように、学習系のタスクや目標は、ゴールが曖昧であるという欠点を併せ持っています。

曖昧な達成目標は、終りが見えない事によるモチベーションの低下を誘発するので、どうにかしなければなりません。

全体を俯瞰した上で具体的な目標を決めよう

Rubyの学習にも、様々な側面があります。たとえ曖昧な目標であっても、ブレークダウンすれば具体的な目標が見えてきます。

  • 基本構文の知識を学ぶために、「初めてのRuby」を読み終えることを目標にしよう
  • ファイル処理を理解するために、Rubyでファイルに書き込みが出来るコードを実装してみよう
  • ...etc

目標が具体的であれば、達成への道筋を具体的に描けるようになります。

あなたは、なぜ学ぼうとしているのか?

本来、学習することは目的ではありません。仮に、あなたはRubyを学びたいと思っているとします。

「あなたは、なぜRubyを学びたいと思ったのでしょうか?」

プログラミング言語を覚えるということは、覚えたプログラミング言語を使って、何かをやりたいです。

上記の質問を、自らに問いかけてみる必要があるでしょう。

モデル化・抽象化

抽象化とは、具体的な経験や知識を、応用が効くように汎用的な知識に落とし込むことです。例えばプログラミングの場合、言語は違えど、必要な知識や考え方は似通っています。

  • アルゴリズム
  • if、for、whileなどの基本構文
  • 変数という入れ物がある

抽象的な知識は、覚えてしまえば、様々な局面で応用する事ができます。

色々な事に足を突っ込んで見る

抽象的な知識を発見するコツは、少しだけ違う分野に足を突っ込んでみることです。

違う分野において必要だった知識と、本来自分が持っている知識を、比較してみましょう。差分があれば、それは具体的な知識です。

一方で、差分がなかった領域は、他の分野でも応用できる汎用的な知識になります。つまり、共通項は汎用スキルなのです。

検証

情報は、覚えただけでは定着しません。実際に使ってみて、初めて定着します。

アウトプットする事で、情報を咀嚼する

情報は、アウトプットする事が重要です。なぜ、アウトプットが重要かと言いますと、アウトプットする過程で情報を咀嚼するからです。

私の場合は、ブログに記事として書いてますが、アウトプットは何でも構いません。実際にプログラムを書いてみるでも、覚えた技術でサービスを構築してみるでも、何でも良いのです。

アウトプットをしてみると、違和感を感じることがあります。それこそが検証です。覚えた知識を、何もそのまま覚える必要はないのです。

ただ、黒板に書いた内容をただ書き写しただけのような、考える過程がないアウトプットは効果が薄いです。その点は注意しましょう。

やる気・モチベーションを出すには

物事を達成するには、モチベーションが非常に重要な役割を果たします。やる気は脳を刺激するので、活性化を引き出すのです。

f:id:konosumi:20180811165206j:plain

具体的な目標で達成感を味わう

やる気を引き出すコツは、具体的なゴールを持つ事です。ゴールが明確であれば、プロセスが描けます。終わりまでの過程が見えていれば、やる気も出ます。

反対に、終わりが見えないと、いつ終わるのかという不安に駆られます。これでは、やる気を出すどころの話ではありません。

大きいタスクは小さく区切る

学校の授業は、集中力が途切れないように、細かく休憩を挟む仕組みになっています。仕事や学習のタスクであっても、それは同じです。

タスクは、細かく分割されるべきです。集中力の持続も大事ですが、タスクは細かく分割することで、多くの達成感を味わえるようになります。

タスクの区切り方

タスクを区切るには、大きく分けて2つのパターンあります。

  • 成果で区切る: Rubyでファイルが書き込めるようになる
  • 数や時間で区切る: 「初めてのRuby」を10ページ読む

成果で区切るのではあれば、ぜひマイルストーンを設定してみましょう。最終的な目標達成への道のりを、細かくブレークダウンしていくのです。

考えをまとめるには

いきなり情報をまとめようとしない

考えをまとめるためのコツは、いきなり考えをまとめようとしないことです。全体像を把握していない状態では、まとめようとしても闇雲になってしまいます。

まずは全てを書き出してみる

大事なことは、情報や考えを洗い出してみることです。まずは考えを、全て洗い出してみましょう。そうすると、意外とたくさんの考えがある事に気づきます。

やり方は、ノートに書き出していくでも、テキストファイルに箇条書きでも、付箋に書きだしていくでも構いません。

洗い出すことの目的は、全体像の把握にあります。

考えをグルーピングしたり、関連性を見出しながらまとめていく

洗い出した考えには、何かしらの共通点や関連性が、必ずあります。これらをまとめていく事で、徐々に本質や根源へと近づいていきます。

ここでのポイントは、洗い出す過程と、まとめていく過程を、完全に分けて考えることです。人間は、一度に多くのことを出来るようにはなっていません。

洗い出す時はひたすら洗い出し、まとめる時はひたすらまとめましょう。

さいごに

他にも、記憶の鍛え方や、効率的な読み方といった章がありましたが、本記事では割愛します。

  • 目的を持って学ぶ
  • 具体的なゴールを設定して、やる気を引き出す
  • 抽象化する事で、色々な局面で応用できる汎用的なスキルを身につける

普段から意識しているようで、私も含め、意外と曖昧な目標を設定しがちです。そして、思っていたよりもやる気が重要である事を学びました。

今日からは「ブログを書く度にビールを一杯飲む」というご褒美を、自分に設定してみる事にしようかな(笑)。

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB+DB PRESSプラスシリーズ)

エンジニアの知的生産術 ──効率的に学び、整理し、アウトプットする (WEB+DB PRESSプラスシリーズ)