プログラミング的思考#1
学生の頃からITの世界に触れてますが、本格的にプログラミングを学んだのは大学2年の時です。講義の名前は忘れてしまいましたが、最初の課題が「うるう年を判別するプログラムを組みなさい」といった内容だったと記憶しています。それまでは一切プログラミングの知識はなかったので最初はかなり苦労しました。今から考えるとプログラミングの考え方(プログラミング的思考能力)やプログラミング言語といった土台がない状態で一気に詰め込んだので、なかなか理解が追いつかなかったのだと思います。
#何度もプログラミングの課題で徹夜したことは覚えています。習うより慣れろを実践できた気はします^^;
課題の理解/抽象化/分解
プログラミングには、目的を達成するための課題の理解と抽象化、分解が必要になるような側面があります。自分はこのようなことを「プログラミング的思考」と呼んでいると理解しています。
例えば「うるう年を判別する」という目的があったとして、この目的を達成するためには、そもそも「うるう年が何か」や「うるう年となる条件」が分からなければ、うるう年を判別することはできません。ヒトが今年がうるう年かを判別するには、単純に今年のカレンダーを見れば分かりますが、コンピュータがカレンダーを見ることはできないので、うるう年と判断するための条件を教えてあげる必要があります。
国立天文台のホームページでは、質問3-6)どの年がうるう年になるの?
グレゴリオ暦法では、うるう年を次のように決めています。
(1)西暦年号が4で割り切れる年をうるう年とする。
(2)(1)の例外として、西暦年号が100で割り切れて400で割り切れない年は平年とする。
という明確な条件があります。この内容をプログラミングすることができれば、うるう年の判別はできそうですね。このように「うるう年を判別する」ためには、「うるう年となる条件の特定」が必要になることが分かると思います。さらに「うるう年となる条件」が、(1)と(2)になることが具体的に分かったので、この段階でプログラムを組めるようになります。
プログラミングでは、大きな課題は小さな複数の課題に分解し、各課題をコンピュータが理解できるレベルまで落とし込んでいく必要があります。プログラムを組む上で最も難しくて重要な作業がこの部分になります。今年から必修化されるプログラミング教育もこのような思考能力を向上させることを目的としているのだと思います。この能力はIT業界だけで必要な能力ということではなく、すべての業界に応用することができます。だからこそ、プログラム教育を必修化した取り組みがスタートしたのだと考えています。