プログラミング的思考とは
2020年は東京オリンピックの年ですが、小学校でプログラミングの授業が始まる年でもあります。このほど文部科学省より発表がありました。(文部科学省:教育情報化の推進)
私は、学生時代からプログラムを学び、社会人になってもプログラマーとして従事してきました。
仕事としてプログラム制作を行って来た経験から、プログラミングは他の専門職同様、一朝一夕には身につかない技術ということを知っています。
しかしながら、プログラミングの授業が義務教育に取り入れられるということは、現代社会においての必要性が高まっているともとらえることができます。
文部科学省のホームページで公開されている資料を見てみると、「プログラミング的思考を学ぶ」とあり、各プログラム言語のスキルを学ぶということでは無いようです。
私自身は、プログラミングの肝はアルゴリズム(プログラムの流れを考える作業)と考えています。各言語の文法やスキルは、高水準言語を一つマスターすれば、他の言語も独学でマスターすることができます。
アルゴリズムとは、「全体を見つめる」「考える」「問題を個々に解決してゆく」「無駄を省く」「経験を積む」といったことを自分の力だけで行わなければなりません。
こういったことが、何の役に立つのか考察してみました。
突然ですが絶対無理な仕事や課題の対処の仕方
社会人になると、とても一人では対処しきれないような仕事や課題を任されることがしばしばあります。
例えですが、「今から1ヶ月以内にエベレスト山頂に登頂してください」と命令されても「無理」としか言えません。そもそもそんな課題を成功させた人はいません。
人は自分のキャパシティを大きく超える、仕事や課題に直面すると「あきらめ感」が出てしまうものです。そのまま放置すれば確実に失敗します。だけれども自分のキャパ超えているためどうにもできません。
そんな場合は以下のようにクリアします。
- 仕事・課題を分割する
- 分割した仕事の優先順位をつける
- ひとつずつクリアしてゆく
大きすぎる仕事、課題は解決できませんが、小さな仕事、課題であれば容易に解決できます。
大きすぎる仕事、課題を自分のキャパでも解決できるくらいに小さく分割し、容易にこなせる小さな仕事の回数をこなすことで結果的に大きすぎる仕事をクリアします。
いわゆる各個撃破により仕事を片づける作戦です。
エベレスト(8,848m)登頂は不可能でも、東京の高尾山(599m)の登頂であれば容易に実現できます。高尾山を15回登れば8,985m登頂したことになり、トータルでエベレスト1回登頂以上の高さに上ったことになります。
しかも、1日1回高尾山に登れば15日で達成することができ、指示された半分の日数で課題をクリアすることができます。
この考え方こそが、プログラミング的思考なのです。
問題を解決する方法を考える能力こそプログラミングの真骨頂
仕事でプログラムを制作させていただく場合に、頂戴できる情報は入力と出力だけです。
入力される情報を出力結果へと導くことがプログラミングの役割となります。
とはいえ、根拠もなくプログラムを組み始めたら必ず失敗します。
(1)仕様書を制作し、(2)出力画面等の図面を作成し、(3)データのフォーマットを考え、(4)アルゴリズムを構築する。
作業を分割し、ひとつづつクリアしてゆくことで、失敗しないプログラムを作ることができます。
学生時代から長い間プログラミングをしていたことから、自然にこのような考え方が身についていました。
ホームページ屋をさせていただいている現在、多重オーダーを一人で抱えさせていただくことが多々ございますが、若い時から培ったプログラミング的思考のおかげでこなせている側面がございます。
「あきらめる前にできる方法を考えてみる」的な思考
大人になると、断るための理由をつい考えがちです。
それは、あきらめる理由を考えているということになります。
同じ考えるならば、実現できる方法を考えるほうが前向きです。
また実現できる方法を考えるためには、「問題の本質」をとらえなければできません。
逆をいえば、実現できる方法を考える人には、「問題の本質」を見抜く力が自然に身に付きます。
スキル・技術としてのプログラミングは、人によって向き・不向きがあります。
しかしながら、「考えようとする能力」としてのプログラミングは、人の能力を育てるカリキュラムになるのではないかと、実体験から思う次第です。
余談ですが、学生時代の授業のプログラム課題に対し、自分自身で考えて提出する人と、人の作ったものを写して提出する人がおりました。単位のためにただ写している方は、のちのち脱落されてゆきました。
どうせ写すならば、その人の技術・能力そのものを自分のものにしてしまうほうが賢明です。