難しいアルゴリズムを理解して実装するといった話ではない。あくまでも初学者が基本的なアプリケーションやウェブシステムを実装できるレベルになるまでの話である。
ここで論理的思考力をどう捉えるかは難しいが、ここで言っているのは二重ループや参照を用いた基本的な事をいつまで経っても実装できない人の話であり、このレベルの話に御大層な「論理的思考力」と名付ける人は少ないだろう。
筆者は毎年、新人研修でプログラミング(Javaを用いたウェブシステム開発が目標)を教えている。数十人の受講者に対して毎年行っているが、概ね5~10%の人は1ヶ月経っても2ヶ月経ってもなかなか基本的な部分の習得すら危うい状態である。
こうした人が別に何らかの障害を抱えているわけではない。普通に学校教育を受けて、それなりの大学を卒業した人ばかりである。
二重ループだと、大抵は掛け算の九九やExcelのシートなんかを例にして説明する人が多い。そんなに難しい話ではない。参照やインスタンスといった話だと、クラスのインスタンスを生成して、それを「別の場所から使う」という話だけであり、これも難しい話ではない。
いつまでもプログラミングを習得できない人も、別にこれらの概念を理解できないわけではない。掛け算の九九も分かっているし、複数のクラスが登場して、一方から他方を使うという事も「頭では理解」している。
できないのは恐らく、「短期記憶能力」だと考えている。二重ループなら、少なくとも2つのループの添字に加え、ループの継続条件、ループ内で処理する変数が出てくる。これで把握しておかなければならない値は5個程度だろうか。作ったクラスをインスタンス化して、そこのメソッドを使う場合も、最低4つくらいの短期記憶が求められるだろう。
上記の個数の数え方は基準によって異なるだろうが、筆者の主観ではその程度である。一般的には人間の短期記憶は7~8個くらいまでが限界と言われるが、それに照らし合わせれば当然、無理の無い範囲である。
短期記憶能力自体に障害が無いとすれば、余計な事で短期記憶能力を使っているか、或いは短期記憶能力を使おうとしていないか、などの原因が考えられる。
ちなみに、そういった人に「ループの添字(iとかjとか)や変数を書き出してトレースしてごらん」と言ってみるが、なかなかやろうとしないという人も多いように思える。そうすると、単に面倒臭がりという性質も見えてくるが、これ自体は問題ではない。面倒臭がりの人が、作業を効率化しようとしてプログラミングを覚えるのは良い習慣であるからだ。
いずれにしても、基本的なレベルで引っかかっている人に対して、「論理的思考力が足りていない」とか「地頭が足りない」とか言っているのはどうにも筆者には疑問である。なお、関連する話題は下の関連記事にいくつか紹介している。