挨拶
こんにちは!福神漬けです。
自分の業務の中に社内向けの育成研修というか、エンジニアのメンターをやる、みたいな業務があります。
その中で表題のことを扱ったので、ついでにテクログにしてしまおうという魂胆です。
抽象化する力と学習する力の関係
抽象と具体については知ってる人も多いかと思います。
「りんご、みかん」という具体的な物から「果物」を抽象することができますし、
「果物、野菜」から「食べ物」を抽象することができます。
もちろん答えは単一ではなく、「りんご、みかん」から「丸いもの」「自然界のもの」「形而下の存在」など抽象できます。
さてこの抽象化する力ですが、一般的に学習能力に関係していると言われます。
この根拠等を追っていくには自分は専門ではないので、「そうなんだー」くらいの信じ方にしていますが、
個人的な経験として、抽象と具体を往復する、という作業が学習に寄与するのは確かだと思います。
抽象化する力の学習の問題点
この記事を書き始めた理由にもなりますが、
こういった概念を勉強して理解するって難易度が高いですよね。
しかも抽象化ができるようになって様々な概念理解がスムーズになるので、
自力で学ぶには、抽象化を学ぶために抽象化ができる必要がある、という堂々巡りです。
そして言語化も難しいので幼少期に家庭や学校で教わることも稀で、
各自の経験から学べた人と学べてない人がいる、となっているのかなと想像してます。
コーディングで実際に「抽象と具体の往復」を体験してみよう
というわけで実際に簡単にやってみましょう!
今回題材にしたのはJavaScriptのアロー関数です。
MDNのサンプルコードを題材としていきます。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions
const materials = ["Hydrogen", "Helium", "Lithium", "Beryllium"];
console.log(materials.map((material) => material.length));まずはアロー関数の実際のコードを、つまり「具体」をちゃんとを理解します。
materials.map(
(material) => material.length //ここがアロー関数
)これを見ながらアロー関数のルール、つまり「抽象」をドキュメントと照らし合わせて理解していきます。
この段階で下記のようなことがわかってくるかなと思います。
・functionが省略されて矢印が必要になるんだな → 正しい
・波括弧を省略できるんだな → 一部正しい
・returnは?これも省略?
普通は1回の「具体」からだけでは学びたいこと全てを学ぶことはできないです。
なので、まだわからない部分を軸に別の「具体」から学びます。
例えば下記のような内容です。
・他のサンプルコードを書いてみる
・違う書き方ができないか試してみる
・実際に使われているところを確認する
この後またドキュメント見ながらルールや定義を把握して…
といったこの形が「抽象と具体の往復」になります。
終わりに
実は抽象と具体の往復という学び方は、ほとんどの人が無意識に実践してるんですよね。
そしてほとんどの経験が具体→抽象の順番です。
なので何か理解できない難しいことに直面している時、
多くの場合で具体がわからないまま、抽象を理解しようとしていることが多いです。
もしその場合は具体を探すようにすると理解が進むと思います。
何かの理解の助けになれたのであれば幸いです。
お疲れ様でした!