アウトプットする目的は2つある - プログラミング学習の話

むらやまです。お世話になります。

プログラミング学習界隈でお仕事をしているとアウトプットという言葉をよく聞きます。「アウトプットが大事」「Qiitaにアウトプットしよう!」「アウトプットしか勝たん」どこもかしこもアウトプットです。

たしかにプログラミングの勉強において、アウトプットはとても大事というのは同意なのですが、それでもアウトプットというビッグワードに雰囲気で乗っかってるケースも多いように思います。インプットの勉強も大事なんじゃないの、って思ってしまいます。

今日はプログラミング学習でなぜアウトプットが大事なのか、という点を少し掘り下げてみようと思います。先に結論の一歩前を書いておくとアウトプットする目的は2種類あるんじゃない?というお話です。

スキルを習得するための3つの勉強

これは自分の経験ベースな話になるのですが、プログラミングのような、いわゆる「スキル」を習得するための学習には3つの勉強が必要だと考えています。

①知るための勉強
②理解するための勉強
③できるようになるための勉強

まず①がインプットな学習で、さいごの③がアウトプットな学習という具合です。真ん中の②はインプットとアウトプットが混在するようなイメージです。

①知るための勉強

①知るための勉強はインプットの勉強です。講義を聴いたり、本を読んだり、あるいは動画を観たり、ネットで記事を読んだり。いろんな方法でインプットして知識(知っている状態)を増やすことが目的です。

プログラミングの学習も①知るための勉強からスタートします。たとえばプログラミングを習い始めの頃は「ソースコード」とか「コンパイル」とか「プログラムの構文」などなど専門用語やルールを覚えないといけません。

ここでのポイントはインプットしたばかりの知識は、理解が曖昧であったり、誤りが含まれているという点です。これから知識を磨いて、曖昧な状態から理解している状態に昇華しないといけません。

②理解するための勉強

次に②理解するための勉強です。

①知るための勉強②理解するための勉強の違いって、境い目が曖昧でわかりにくいかもしれません。わたしは単純に「自分の言葉で説明できること」だと捉えています。勉強したことを自分の言葉で説明できるなら理解できています。

②理解するための勉強では習ったことを「自分の言葉」にしてアウトプットします。ここでのアウトプットとは話す・書く(コードでも文章でも)が中心の勉強です

やっとでてきましたアウトプットの勉強です。

最近は「勉強はアウトプットが大事!」みたいに言われることが多いように感じますが、そもそもアウトプットすることの目的って何なのでしょうか。「アウトプット=練習」みたいに思っている人も多そうですが、それだけでは50点だと考えています。←これが言いたい

アウトプットする目的のもう半分は何なのか。

文字数ももったいないのでズバリいうと「フィードバックを得ること」だと考えています。学習したことをアウトプットすることで対象を客観的に評価できます。プログラミングの場合は、実際にやってみると期待どおりに動かないことがほとんどなので、「書き間違い」や「誤った理解」「よくわかっていない点」に気づきます。

やってみないとわからないことは多い、ってやつです。

アウトプットにはこのようなセルフレビューというか、自己的なフィードバックというメリットもありますが、自分以外の有識者からもえらえるフィードバックの方が大事です理由は簡単で「自分では気づけていないことに気づくことができるから」です。

勉強の本質って、間違いに気づいて訂正すること、だと思うんです。

本を読んだだけ(インプットしただけ)では間違いに気づくことはできないので、実際にやってみて、まずは失敗してみる(間違える)ことが大事だと思っています。

だから②理解するための勉強のアウトプット(話す、書く)は誰かに聞いてもらって(見てもらって)、フィードバックをもらうことが理想です。この段階で先生や勉強仲間と対話することで対象への理解を深めます。

アウトプットすることであらたなインプット(フィードバック)を得る。それが②理解するための勉強だと考えています。

独学も勉強法を使い分けるべき

ところで独学の場合、質問する相手がそもそもいません。だからアウトプットしても有識者からの客観的なフィードバックが得られず、自己的なフィードバックしかありません。そうするとアウトプットする目的である「フィードバックを得ること」の効果が小さくなります。

このような場合は、そもそも独学にこだわらわずに②理解するための勉強は、積極的に対話する機会を増やした方がよいのでは?というのがわたしの意見です。①知るための勉強は独学でばんばんやって、②理解するための勉強は先生や勉強仲間を見つける。勉強会やコミュニティ、あるいはSNSのようなツールを上手く使うことも学習のコツのように考えています。(SNSでのプログラミング学習についてはまだ発展途上な感じもしますけど)

もしどうしても独学にこだわるなら、、①知るための勉強を工夫して、いろんな人の説明を聴くというやり方もあります。読書でいうところの多読です。同じ分野の複数の本を読むことで、重複している部分は大事なところだと気づきますし、異なる説明を聴く(読む)ことで対象の輪郭もはっきりしてきます。自分もともだちが少ないのでこのパターンもよく使います。

③できるようになるための勉強

さいごに③できるようになるための勉強です。これは理解できたことを繰り返し練習することで目的を体現する、言い方を変えれば再現性を高めることが狙いです。

③できるようになるための勉強において、まず大事なのは②理解するための勉強がしっかりとできているかどうかです。なぜかというと、意味の理解とパターンの習得は別物だから、です。

繰り返し練習で習得できるのは「パターン」です。ここでいうパターンとはAがきたらBみたいな、規則性のようなものです。たとえばプログラミングだと配列ができたらその後に高い確率でfor文が出てくる、とか、SQLだとselectの後にはかなり高い確率でfromが出てくるみたいな規則性があります。何度も繰り返しコードを書いていくとこのようなパターンに気づくようになります。

パターンを習得すると、エディタの補完機能のような感じで「このコードの次はこれかな?」という感が効くようになります。コードブロック { } の書き忘れのような初歩的な ミスも減ります。

話がそれますが、こういう話をしていると機械学習も人間の学習もよく似ている、と考えてしまうのですが、人間が機械と違うのは「意味を理解できる」という点だと考えています。何度も言いますが、意味を理解するのは②理解するための勉強です。②が不足した状態で③だけやっていても「よくわかんないけど、なんとなくできる」という状態になってしまいます。
(ただし、言語化の上手な方はなんとなくできる状態から、自分で言語化してその意味を導き出すこともあります)

人間は人間らしく②と③のハイブリッドで学ぶことがプログラミングのようなスキルの習得には大事だと考えています。

そして完全に余談ですが、学生の頃にこれと同じ経験をしたことがあります。当時はバスケ部で毎日遅くまで練習していたのですがコーチがいなかったんです。みんなそれなりにはバスケはできるのですが、試合だと全然勝てなくて。今思えば理論を学ぶことやフィードバックを得る機会がなかったんだな、と思います。理論や意味を学ばずにただ練習をしていても上手くならないんです。

今の話はいらんかったかな、と思っています。

③できるようになるための勉強について、もうひとつ補足しておくと、反復練習ってあまり楽しいものではないので、やる人とやらない人、性格がでます。感覚としては、素直な人ほど反復練習が得意でスキルを習得していくのが早いです。

ただ素直な人でも注意したいのは、②理解するための勉強が不足している状態で、健気に反復練習を繰り返してしまうとよくありません。理解があいまいなまま反復練習を繰り返しても、やっぱり意味は理解できずパターンのみを学ぶことになります。つまり、機械のような学習になってしまいます。

勉強の3つのステップまとめ

①知るための勉強
 ・目的:知識(知っている状態)を増やす
 ・方法:インプットな学習、観る・聴くが中心
②理解するための勉強
 ・目的:知識を知っている状態→理解している状態にする
 ・方法:アウトプットな学習+フィードバック、
     読み書き・対話による学習(意味の理解)
③できるようになるための勉強
 ・目的:知識の利用性(再現性)を高める
 ・方法:アウトプットな学習、反復練習(パターンの習得)

以上をまとめると、アウトプットの学習には2つの目的があることに気づきます。

・フィードバックを得ること
・再現性を高めること

②理解するための勉強におけるアウトプットでは「フィードバックを得ること」が目的です。誤りを指摘してもらったり、自ら質問してアドバイスをもらったり。意味や理論を正しく深く理解して、対象への解像度を上げることが目的です。

③できるようになるための勉強におけるアウトプットは「再現性を高めること」が目的になります。ただし、意味の理解とパターンの理解は別物です。反復練習ではパターンの習得を狙います。

もしあなたが「アウトプットの学習をしているのに成果が出ない、、」と感じているなら、②理解するための勉強は正しくできているか、言い方を変えれば「アウトプットに対して適切なフィードバックはもらえているのか」について考えてもらうとヒントになるんじゃないかなぁと思っています。

お読み頂きありがとうございました。

この記事が気に入ったらサポートをしてみませんか?