こんにちは、Shinyaです
今回は文科省の掲げる「プログラミング的思考」について考察してみました
結論を言うと
プログラミング的思考は超基本だけど超大事
でした
プログラミング学習するなら、プログラミング的思考をまず身に付けちゃいましょう!必ず資産になります
プログラミング的思考って何?
(知ってる方も多いと思いますが)2020年度から学習指導要領が改訂され、小学校でプログラミング教育が始まります
「プログラミング的思考」とは文科省がプログラミング教育を通じて育成しようとしている思考法です
文科省によるとプログラミング的思考とは以下のようなものです
自分が意図する一連の活動を実現するために、どのような動きの組合せが必要であり、一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか、記号の組合せをどのように改善していけば、より意図した活動に近づくのか、といったことを論理的に考えていく力
(引用元:新しい学習指導要領の考え方|文部科学省,P13)
言いたいことは分かるけど、ブログで書き方を鍛えてほしいという感想を抱いてしまう文章ですね、(笑)
というわけでプログラミング的思考を僕なりに解釈してみました
プログラミング的思考を解釈
まず多少の語弊は恐れずに、長い言い回しを簡潔に表現しなおします
- 「自分が意図する一連の活動を実現するために」→目的達成のために
- 「どのような動きの組合せが必要であり」→目的を個々の要素に分割し
- 「一つ一つの動きに対応した記号を、どのように組み合わせたらいいのか」→個々の要素を達成する手段を洗い出し
- 「記号の組合せをどのように改善していけば、より意図した活動に近づくのか」→手段を最適化する
これらを統合するとこうなります。少し抽象度は上がりますが
プログラミング的思考とは
- 目的を定める
- 目的を個々の要素に分割する
- 個々の要素を達成する手段を洗い出す
- 手段を最適化する
この4ステップを立てて目的達成を図る考え方
プログラミング的思考を評価
簡潔に定義しなおしたプログラミング的思考ですが「めちゃくちゃ当たり前のこと言ってるけど凄い大事なんだよなあ」と思います
目的達成の基本が詰まってます
まずステップ2の「目的を個々の要素に分割する」ですが、半端ない威力を持つ作業です
例えばスキル0だけどWebサービスを作りたいとします
この場合まず、Webサービスを作るという目的を分割しないと何ができればいいのか分かりません
そこで目的を分割します
大きく分割
- 表示画面を作る
- 利用者の指示を受けて処理をする
少し細かく分割
- 表示画面を作る
- 文字
- ブロック
- 画像
- 利用者の指示を受けて処理をする
- データの取扱い
- 画面遷移
もっと分割
- 表示画面を作る
- 文字
- 色
- 大きさ
- フォント
- ブロック
- 色
- 配置
- 画像
- 大きさ
- プロポーション
- 文字
- 利用者の指示を受けて処理をする
- データの取扱い
- 保存
- 表示
- 変更
- 削除
- 画面遷移
- 場合分け
- データの取扱い
こんな感じにどんどん分割できます
分割するとタスクが小さくなるので、実行が劇的に簡単になります。何を学べばいいのか見えてきます
「困難は分割せよ」という言葉があります。名言ですね
次にステップ3の「個々の要素を達成する手段を洗い出す」です
Webサービスを作る例の場合、先ほど分割した個々の処理を実現できる言語を学ぶということになります
ただし、同じ言語でも「どこで学ぶか」または「何で学ぶか」という問題があります
教材やサービスによって分かりやすさや価格が違いますからね
また、「1日の中のいつ勉強するのか」、「毎日勉強するのか」などの問題もあります
こちらはスピードや効率に関わってきます
こういった学習手段を洗い出して並べる工程がステップ3に相当します
ステップ4ではステップ3で並べたてた手段を比較して、一番良い手段を選んで組み合わせます
このようにプログラミング的思考の4ステップを踏むと、目的達成に向けて簡単に効率よくアプローチできます
プログラミング的思考はプログラミングに限らず、どんな目的達成にも適用できる考え方です
プログラミング学習に取り組んでる人は上手く取り入れて学習を加速しちゃいましょう!
当然ながらプログラミング自体にはプログラミング的思考が必要ですしね(笑)
それでは、また