個人ブログ

インフラ、アプリケーションまわり

「理解する」ということについて考えてみる

背景

プログラミング研修をずっと行なっている。Webのオンライン教材を使ったりしながら、学習を進めている。その中で1つ困ったことがあった。

分かったつもりになっていても、実際には理解できていない、ということだ。

知らない言語を学ぶから、初見では意味が理解できない。ひとまず写経。動作が確認できて「なんとなく」ロジックが分かったら次に進む。時間的制約もあり、細かい部分の理解はおざなりにしていた。ただ、このような形で学習を進めていると、その日はよくても翌日になると、

  • 昨日分かった箇所が、分からなくなっている
  • 結局理解できていない

ということが続いていた。

忘れても良いけど、理解は必要

前記事にも書いたが、記憶しているかどうかは重要ではない。 ttkoni.hatenablog.com

忘れても、検索して使える状態になっていればそれで良い。だけど理解ができていないと、そもそも調べることができない。「何がわからないか分からない」という、非常にどうしようもない状況に陥ってしまうのだ。

知識を使える状態にするには、一度理解するというプロセスが必要だ。内容を飲み込んで、疑問点が残らないように消化していく。この過程を通して、使える技術が増えていくんだと思う。というわけで、理解するということについて考えてみた。

理解するために必要なこと1:自分の言葉で置き換える

書かれてあるコードを読んで「ふんふん、なるほど」と読み飛ばしてはいけない。その瞬間は理解したつもりになっていても、それは錯覚。ただ文字を追っていくだけでは、内容に踊らされてしまう。そこで必要になるのが「自分の言葉で置き換える」という作業だ。

まず内容をざっと読む。ある程度まとまったブロックごとに読んでいくのが良い。次に、内容を自分の言葉で置き換えていく。ここで重要なのが、論理的つながりを意識すること。「これはこうだから、こう」という風に、流れに落とし込んでいく。

なぜ流れに落とし込んでいくのか。それは「ロジックは一度可視化しないと見えない」からだ。もちろん、書かれてある文章(特に教材)はたいていの場合、論理的だ。だけど、その論理を目で追うだけだと、せっかくの内容も意味のない文字列と化してしまう。どういう論理なのか、文章の流れを「見える化」することで、文字列はロジックへと変わり、理解も進んでいく。

理解するために必要なこと2:疑問点を言語化、それを解消する

「よく分からないけど、まあだいたい理解できたし先に進もう」

ではなく、まずは疑問点を言語化すること。分からないことを放ったらかしにした先に、未来はない。最初は、何となく分からずモヤモヤした状態だと思う。ここで逃げずに、モヤモヤを言葉に置き換えること。すると、何が分からないのか、なぜ分からないかが見えてくる。

何が分からないのかを把握した上で、分かるために必要な情報を収集する。ネット検索したり、分からなければ人に聞いても良い。ただし、人に聞く= 他人の時間を奪うことだから、その点には注意が必要。聞きたいことを端的に整理した上で、何が疑問なのか伝わるように質問する。

ここで得た情報・知識は、自分で動いて獲りにいった情報だ。能動的に獲得した知識と、受動的に獲得した知識では、定着度が圧倒的に異なる。理解を深めるためには、このアクティブラーニングの機会を増やすことが超重要だ。その意味で、疑問点は能動的に学ぶチャンスだともいえる。だからむしろ、疑問点は自分から積極的に作りにいく姿勢が大切だ。

まとめ:手を動かすこと

上の両者に共通する点。それは手を動かすということ。やっぱり、アクティブラーニングは超重要だ。疑問点を調べることもそうだし、プログラミングだったら、自分でサービスを作ったり、読んだコードを自分なりに書き換えてみることなど。手を動かして、そして情報は自分で獲得する。

すると「何のためにこの情報が必要か」が見えてくる。これは、理解をより速く・深くする上でめちゃくちゃ大切だ。自分が今学習している情報は、どこにつながるのか。なぜ自分はこの情報が欲しいのか。その根っこの部分は常に見えていないといけないし、それは手を動かすことでしか見えてこない領域なのだ。