プログラミングを学ぶ意義はどこにあるのか
たしかにプログラミングは受験数学や学術研究、ビジネスのフレームと近い構造を持っていますが、それだけを取り上げてアピールしてもプログラミングの真価を推し量ることはできないと思います。
そういったプログラミング以外の人間の営みとの類似性だけでは、プログラミングを学ぶ純粋な意味での重要性が見えにくいはずです。
私は、何かと見落とされがちなプログラミング独自の特性を把握するために、少しプログラミングについて考えてみることにしました。
そういった本当の意味での「プログラミングを学ぶ意義」を把握できていない状態では、結局どのような教材やカリキュラム、指導が最適なのかを判断できないまま、ひとまずそれらしく体系立てたものを手当たり次第に教えるだけ(学ぶだけ)のプログラミング学習になってしまう気がしています。
私たちはプログラミングを学ぶべきか
今日、ピアニストにならない多くの子どもがピアノを習うように、プログラマーにならない多くの子どもがプログラミングを習う時代にさしかかっているように思います。
とはいえ、プログラミング学習によって生計を立てるだけのスキルを身につけやすいこ点では、他の習い事と毛色が違っています。
現役のプログラマーがなぜ生計を立てて暮らしていけるかというと、一定水準以上で「分解し構成する力」と「粘り強さ」を持っているからだと私は考えています。
つまり、プログラミングに親しむ中で「分解し構成する力」と「粘り強さ」が向上する水準は他の学習とは一線を画しているという仮説を持っています。
「プログラマーにならないとしてもプログラミングをやる価値はある」のかどうかは丁寧に議論されるべきだと思うのです。
重要なポイントは、プログラミングを習ったにも関わらずプログラミングはそれほどできるようにならなかったが、構成力や粘り強さは身につくか否か。この一点に尽きるのではないでしょうか。
このテーマで考えを整理することで、プログラミングを学ぶこと自体の真価やプログラミング適正(その人がプログラミングを技術として身につけられるか否か)の判断基準に迫るきっかけ等が得られるのではないかと期待しています。
構成力・粘り強さ(*)とは何か これら(*)があれば①アプリケーション開発ができるのか?②受験数学の問題が解けるのか?③研究活動を高い水準で行えるのか?④ビジネスを成功させることができるのか?創造性の高い仕事ができる(★)のか?
答えは「できない」である。 構成力・粘り強さは上記の①~④そして★の複数ある要件の一つである。 ①~④にはそれぞれ別の要件(#)があることが推測される。
(★) = (*) + (#)
前置き
仮に①~④の*以外の要件#を以下のようにそれぞれ固有に仮定する。 ただし、これらは記号が違っているものの、共通する要素も含まれている可能性もある。
①:○ ②:◎ ③:◉ ④:● すると、要件が揃えば①〜④を満たすことを以下のように表現できる。
① = * + ○ ② = * + ◎ ③ = * + ◉ ④ = * + ●
このように①~④全てに*が共通するからこそ、プログラミング学習時にも「構成力や粘り強さ(*)」を身につける意識が非常に重要である。その一方で、わざわざプログラミングをやる以上は、その技術も十分な水準で獲得することが望ましいことも明らかである。それを実現するためのヒントは①の他の要件である○と他の◎◉●の違いに隠れていると考えられる。