プログラミング初心者レベルから抜けられない理由

プログラミングが苦手だという人がいる。その人は、決して理解力が劣っているわけではない。むしろ、ループや条件分岐、関数の作り方といった、プログラミング言語の文法に関しては、普通の人より速く理解できたりする。入門書の章末に載っていような簡単な練習問題に対してはちゃんと正解を出すことができる。しかし、ある程度の規模があって複雑な処理をするプログラムを書こうとすると、どこから手を付けていいのか分からず、とたんに手が止まってしまう。プログラミングの上手な友人に聞いてみると、「問題を分割すればいいんだよ」と言われるが、じゃあその「分割」とは一体何を指しているのかが分からない。

お気付きだと思うが、これはちょっと前までの自分の状態だった。恥ずかしながら、情報系の学科に所属しているのにもかかわらず、僕はつい最近までプログラミングというものに苦手意識を持っていた。最近になって、ようやくその苦手意識が薄れてきて、以前の自分がどんなところでつまづいていたのかが分かりかけてきたので、まとめておくことにする。それは

「自分が何を分かっていないのかが分かっていない」

ということだ。言い換えると、「問題そのもの」と「その問題を解く手段」を混同しているということ。もう少し言うなら、

  1. 文法
  2. ライブラリの使い方
  3. アルゴリズム
  4. 問題そのもの
  5. 自分のやりたいこと

の5つのうち、1~3までが「問題を解く手段」で残り2つが「問題そのもの」だ。特に初心者のうちはこれらがごちゃごちゃに入りくんでいて、混乱してしまいがち。また、3番目くらいまでの情報はネットにも溢れているけど、4、5番目あたりをどう整理するかはその場その場で考えるしかない。問題そのものが分かっていないのか、あるいは問題を解く手法(ライブラリの使い方であったり、アルゴリズムであったり)を知らないだけなのか、自分の経験を振りかえってみても、また周りのプログラミングが苦手という人を見ても、これをきっちりと分けることができていないように思う。プログラミングがどうも苦手だ、という人はこれを常に意識して問題を考えるようにすると、上達速度が変わるだろう。

以上、初心者++くらいの人間の戯言でした。