プログラミングスキルの獲得について考えてみた(初級編)2016-01-18 19:00

資料を見ても、そのうち書いた本人もわからなくなりそうなので整理してみる。

「プログラミングができる」とは、「プログラミング言語の文法」がわかり、適切な「データ構造とアルゴリズム」を選択しコーディング可能なこと。
FizzBuzz問題は、データ構造は考慮する必要がない初級の問題です。この問題が難なく解ける位プログラミングができる人は、ひとまずおいて、FizzBuzzまでの関門は何かを考えてみた。

FizzBuzzの平凡な解答は、ループ処理と条件分岐から成る。人の頭で答えを出す時にはあまり悩むことはなくても、プログラムのコードで表現するには優先順位を考慮する必要があります。
このFizzBuzz問題が解けない人は、ループ処理や条件分岐の構文を理解していないか応用することができていないのでしょう。

「上手な教え方の教科書」によると、プログラミングのような認知機能の学習がうまくいかない理由として5つの問題が挙げられています。

  1. バグ修正の問題(間違った認識を正すことが難しい)
  2. 領域固有化の問題(知識を応用することが難しい)
  3. 不良構造化問題(複雑な問題を解決することが難しい)
  4. メタ認知の問題(自分が理解していることしていないことがわからず、学習を進めることが難しい)
  5. 熟達化の問題(的確に技能を発揮するには一定時間の訓練が必要)

人に教える場合だけでなく、独習するとしてもこれらの問題点を確認することで克服しやすくなります。

「熟達化の問題」はいまひとつ説得力がないので、自分のレベルに合った問題を解くのが良いよと誘導するのに都合がいい理論を持ってきてみたりして(第二言語習得の理論のインプット仮説)。
とにかく、他の認知機能をそつなく学習できるような人はプログラミングにも同様の手法で学習が行えるはず。
プログラミングには論理力が特に重要とされていて、無ければ苦労するがプログラミングを学習することで鍛えることもできるのではないか。
コンピュータの操作方法やプログラミングの構文でつまずいてしまう人でも、コンピュータサイエンスを学ぶことで得られることはあるんじゃないかな。

TIS-100を紹介したかっただけなのに中級に続くかな。