Binary Diary

今を一番楽しんでいこうMy Life

学習に大事なのは「どうやって」学ぶのか

どうもこたにんです。

学習に大事なのは「どうやって」学ぶのか

f:id:Kotanin0:20191119222322p:plain

エンジニア採用や育成をやっていると、仕事柄向き合うことが多い「学習」についての話題。
特に多く見受けられるのが、プログラミング未就学者や初学者に対する支援。
こんな質問をよく受けます。

「何を勉強したらいいんでしょうか?」

この質問には必ずと言っていいほど続きがあります。

「本を読む、学習サービスを使う、自作で動くものを作る、どれがいいですかね?」


こちらの記事の続編。

www.kotanin0.work

「どうやって」学ぶのかはいくらでも思い付く

「何のために」学ぶのか、というのが明確に言語化された後を考える。
次に来るステップとしては、そのために「どうやって」学ぶのか。

どうやって、というのはパッと思いつく限りでもいくつも手段はあります。

  • 技術書を読む
  • 学習サービスを使う
  • スクールに通う
  • アルバイト・副業をする
  • とりあえず動く何かを作る

いろんな手段があります。
これらはいずれも、最終的に学びが得られ、スキルが身につくとは思います。
が、体系的に学ぶのか・実践的に学ぶのか、と大きく異なります。

体系的に学ぶ

体系的に学ぶ、というのは、ある程度決まった流れで学ぶことです。
技術書を1章から進めたり、学習サービスを使ったり、スクールに通ったり。
基礎からしっかりと学んで素地をつけ、徐々に応用力を身に付けていく方法。

中学英語で、be動詞を使ったSVC型、SVO型など、基礎から叩き込むのと似ています。
体系的に学ぶことで、多少の長文でも分解して捉えることができて良いです。

しかしこの方法は、応用力や取捨選択力が身に付くのに時間がかかります。

基礎がしっかりと身に付いていたとしても、実践投入したら都合が変わります。
口語的な英語を突然話されて、どの型にも属さなくて解読できなかったり。
「I'm fine, thank you」と叩き込まれた挨拶は一度も使うことがなかったり。

英語の喩えから技術の話に戻ります。

どの言語であろうと一番最初に学ぶこと。
Hello, world! の標準出力。
printf() なんて、よっぽどのことがない限り使われることのない関数です。
(WEBエンジニアとしてのバイアスがかかってます、ご容赦ください)

ただ、ifやforやListなど、体系的に学べば活かせるものはたくさんあります。
それぞれを点で学んで理解はしているはずだけど、業務コードとなった途端、都合が変わる。
複雑なデータをいい感じのロジックでゴニョゴニョしたくても、難しい。
文法だけでなくそれを応用する力が必要になってくるわけです。
またそのときに、最初に学んだ printf() は不要であると切り捨てなければいけないわけです。

体系的に学ぶことは、基礎がしっかり理解できて分解力が身につきます。
その反面、応用力を身に付けるのには少し時間がかかる気がする。

実践的に学ぶ

実践的に学ぶとは、先と対照的です。
実際の業務ベースだったり、サービスとして成り立つアウトプットだったり。
より実践に近いものをもとに学んでいく方法です。

またまた英語に例えると、スピードラーニングだったり短期留学だったりが近いです。
ネイティブに飛び込んで口語的なもの、より利用頻度の高い語彙から身に付ける。
感覚的に養っていき、それを自分のものと会得していく。
体で覚える、みたいなイメージですね。

しかしこの方法は、基本的な部分を蔑ろにしてしまいます。

ネイティブスピーカーになってしまうと、いざ人に技能を教えるときに難儀します。
自然と身に付いてしまった英語を、いざ体系的に伝えるとなると、途端にできなくなる。
「Wuz up」と自然と口から出てくる挨拶が、どういう意味かを体系的に伝えられないのです。

英語の喩えから技術の話に戻ります。

実践的なコードに染まると、ある課題に対する解決方法がすっと引き出しから出てきます。
ただ、それが自分色に染まってしまい、いざ他の人にメンテナンスしてもらうとなると伝わらない。
自分なりのコードが、動くものではあるけど保守性が高くなかったりします。

人に伝わるような保守性の高いコードを書くには、基礎も大事です。
応用力が先行してしまうと、それがかえってメンテナンスコストを増大させてしまう。
実践的に学ぶことは、応用力や課題解決力が身に付きます。
その反面、基礎が蔑ろなので体系的に理解するには少し時間がかかる気がする。

「どうやって」学ぶのかは人それぞれ

結果、じゃあ上のどっちがいいの?と言われても、それは人それぞれ。
着実に基礎から身につける方が肌にあってる人もいれば、逆もいます。
それは学習方法やモチベーションの維持のされ方が、人によって違うので。

自分がどういう性質で、どういう学習方法が肌に合っているのか。
それは他人にアドバイスを貰う以上に、自分自身が理解しておくべきこと。
自分を分析して、強みを理解して、そこではじめて手段の選択肢を狭められる。

学習に大事なのは「どうやって」学ぶのか。
それを今一度自分自身に問うてみて、能率の高い方法を選びましょう。