プログラミングを学ぶより,数学を学んで抽象概念に親しんでおいたほうがいいと思う.
※この記事で述べることは100%本音であり,また,極力フラットな事実に基づいて書くが,数学専門の人間が「数学を学ぶべき」と主張しているため,少なからずポジショントークになってしまうことを断っておく.
プログラミングを学んでも仕事にならない
プログラミング教育の必要性が叫ばれて久しい.プログラミングの勉強をする意義は,様々論じられているが,「プログラミングができる人材は将来職に困らない」という要因が挙げられることも少なくない.
この点において僕は以前より懐疑的な意見を持っていたが,2022年,これが明確に的外れなものであることが分かった.
AI技術の急激な進歩・普及により,中途半端なプログラミングスキルは,近い将来(あるいは既に)AIに代替される.
2022年末に話題になった対話型AIツールでは,「○○のコードを書いて」とAIに言うだけで,AIがコードを記述してくれる.
僕はプログラミングについてもAIについても専門的なことは知らないので,現状のAIが書けるコードがどの程度のレベルのものなのかは判断できない.
しかし,少なくとも将来的には「義務教育で習う程度のコードはAIが書いてくれる」くらいにはなるはずである.
もちろん,「だから学校でプログラミングを勉強する意義はない」とは言わない.
しかし,「将来職に困らないため」という主張はもはや通じなくなることは間違いない.
義務教育でプログラミングを学ぶ意義
では,義務教育でプログラミングを学ぶ意義はなんだろうか.
これはよく言われることで,論理的思考力を身につけるためである.プログラミングスキルそのものが役に立たなくなれば,もはやこの点に尽きると言えるだろう.
今後のソフト開発現場で求められる能力
一方で,今後,すなわちある程度簡単なコードはAIが書くようになったとき,ソフト開発現場ではどのような能力が求められるだろうか.
それは,プログラミングでできることを理解し,ビジョンを描く能力だろう.(あとは,AIに適切に指示を出す能力.)
ビジョンというのは,例えば「このようなソフトを開発したい」や「こんな機能を実装したい」などのことである.
数学教育の可能性
さて,ここまでの話を踏まえ,数学教育の可能性を考えてみる.
結論から言えば,「プログラミングを学ぶ意義も,今後の開発現場で求められる能力も,数学教育で(ほぼ)十分である」ということが,数学教育の可能性である.
まず,論理的思考力に関しては言うまでもないだろう.
次に,「プログラミングでできることを理解し,ビジョンを描く能力」について.
そもそもプログラミングは,入力に対し,ある規則に従って出力を行う“関数”である.
数学を学んでいる人は,関数の扱いに関しては慣れている.
中学生の頃に習う関数としては,例えば一次関数がある.
例えば一次関数$${y=2x+1}$$では,入力$${x=3}$$に対して出力$${y=7}$$が得られる.
数学を学んでいくと,高校では三角関数,指数関数,対数関数などを習う.
さらに大学へ進むと,線形写像を習うのだが,これが高校までで習う関数とは一線を画する.(“写像”は,ここでは“関数”と同じ意味だと思っていただいてよいが,“線形関数”とは普通言わないため“線形写像”と言うことにする.)
一次関数では,入力に対して出力を得る計算過程が解りやすい.(掛け算と足し算をすればよい)
しかし,線形写像では計算過程が解らない.より厳密には,特定の計算過程を前提としない.
というのも,線形写像とは,線形性と呼ばれる性質を持つ写像(関数)の総称だからである.(一次関数も線形写像の一つである)
線形性という性質さえ持っていれば,どんな関数であっても(どんな計算過程であっても)全てまとめて表すのが“線形写像”という言葉である.
ゆえに,特定の計算過程を前提とすることは不可能なのである.
計算過程が解らないことで扱いづらくなるという側面もある一方で,計算過程が理解できないような関数でも,線形性を満たすことさえ分かれば扱えるようになるという側面ある.
しかし,やはり扱う難易度が上がっているのは事実なので,このような抽象概念を扱う訓練が必要になる.
しかし,ひとたび抽象概念の扱いに慣れれば,その能力は強力な武器になる.
具体的には,実際のコードは書けないようなプログラミングで何ができるかが考えられるようになる.
この記事が参加している募集
サポートしていただけますと,インプットに充てる時間とお金が増えてとても助かります!