最近、何かとこの問題を耳にします。それほど注目度が高いということもありますし、プログラミングという事自体への理解が日本で進んでいない実態があるのだと、私は思っています。
そこで、私も一応はソフトウェア技術者の端くれとして、日々思うことはあるわけです。
そもそもプログラミングとは何なのか
プログラミング。プログラマ?コーダー?
さて、何のことでしょう。
プログラミングを簡単に言うと、コンピュータに対して命令を書くことです。その役割を担う人を、プログラミングする人としてプログラマ。または、コードを書く(プログラミングすると同義)としてコーダーと呼ぶのです。
プログラマが不足しているのでしょう?
はい。そうですね。
プログラマは不足していると言わざる得ないでしょう。これは日本ではという話です。
私自信は外資で働いたことはありません。でも、一応は日本で一般的に定義される大企業のサラリーマンをやっています。
その中で感じるのは、大企業になればなるほどプログラマが不足しているという実態です。
どういう意味でしょう。
大企業にプログラマはいないのか
これは日本のIT業界構造の問題であると言わざる得ません。大規模なシステムは大手SIerと呼ばれるメーカーが受注を行います。(建設業界で言うゼネコンと考えると良いでしょう。)
では、大手SIerは自分で開発を行うかというとそうではありません。その子会社、またはパートナー関係(つまり下請け会社)へプログラミング作業を委託するのです。
自分たちは何を行うかというと、そのプロジェクトの運営管理を行う立場となります。
つまり、大企業で実際にプログラムを書くプログラマは、ごく少数なのです。(研究職はまた違う世界になります。)
プログラマが不足している。
それは、大手SIerから見て実開発を行ってくれる技術者が不足する、という話になるのです。
この構造の問題点は、下請けに段々に仕事が流れていくということです。
抽象的な問題を実態のある”物”に変換させる過程が、下請け会社に渡されるということです。そして、当然ながら下請けは利益を上げるために安く作業を進めなければなりません。
何が見えてくるのか
つまり、不足しているのはプログラマであり、そしてそのプログラマは賃金が安い労働者として求められているという現実です。
本来の姿のプログラマ
プログラマとして皆さんが想像するのはGoogleやMicrosoftと言った、大手IT会社の技術者でしょう。
日本という狭い世界の中で定義されるプログラマは、このような会社のプログラマとは異なります。
世界のプログラマはエンジニアとして役割が確立されている
とある案件で、アメリカの会社と合同でシステムを開発する機会がありました。彼らと仕事を行うことは私にとって大変なカルチャーショックを与えるものでした。
まず、エンジニア(技術者)とマネージャーは明確に役割が分けられています。そして、エンジニアは自分の技術スキルから考え、業務がどのくらいの工程で完了するかをマネージャーに伝えます。
マネージャーは、ある程度交渉を行うことはあるでしょうがエンジニアの条件や助言を重視します。
つまり、IT技術はエンジニアが担当し、プロジェクトの運営管理はマネージャーが担当すると明確に分けられているのです。そして、エンジニアはマネージャーからみて賃金が安い労働者として扱われてはいません。エンジニアとしての最大限の努力を払った結果、工程が守れなかった場合、工程を厳守させるマネージメント能力がなかったとして、マネージャーが責任を負うのです。
エンジニア(プログラム作業も含む)は技術の能力を発揮するのが重要な役割なのです。
そう。決して下請けとして立場の弱い存在ではないのです。
SEとプログラマの境界線がない
この点も重要なポイントです。日本ではSEとプログラマという役割が明確に別れてしまっています。
大手SIerにいるのはSE。下請け会社にいるのがプログラマという構図です。
先ほどのマネージャーとエンジニアと何が違うの?
大きく違います。
日本の場合は、エンジニアという分野をSEとプログラマとして分断してしまった点が問題です。
プロジェクト運営と技術監督をSE、プログラムを書くのがプログラマという形にしてしまったのです。
プログラマも大変な仕事ですが、SEが過酷な職業と呼ばれるのは、マネージメント&エンジニアという中途半端な立ち位置で仕事を行わなければならないからです。
つまり時間がない。身体半分はマネージメントです。そしてもう半分は技術面での監督を行います。いつプログラミングを行う時間がありますか?
ですから下請けに頼りきってしまうのです。
その結果は双方に不幸であると私は考えています。
まず大手SIerにとっては、技術を蓄積させる&エンジニアの育成が行えない。マネージメントのエキスパートを育てることも出来ない。
下請け会社にとっては、エンジニアは安い労働力とみなされている。そして、元請け会社の指示がなければ何も行えない(行おうとしない)技術者だけが育つ。
ということです。私は、これは大問題だと思っています。
だからこそ、SEとプログラマは分けるべきでない、つまりエンジニアとして扱うべきで、エンジニアを育てるべきだ!と主張するのです。
プログラミングの必修化はIT業界の問題を解決するか
結論から言うと、プログラミングを習うことが出来たからと言って、IT業界の技術者不足が解消されることはないでしょう。
それはIT業界の内包する問題の壁というものもありますし、もうひとつは”プログラミング”自体への姿勢の問題があると考えています。
プログラムとは言語である
プログラミングが出来る!ということは声を大にして威張れるほど素晴らしいことではありません。(プログラミングを勉強したり、日々技術を勉強するということが無駄だと言っているのではありません。)
何を言っているかというと、それは”英語で文章が書ける!”と言っていることと、そう変わらないからなのです。
この記事の冒頭で、プログラムとは”コンピュータへの命令”であると書きました。そうです。コンピュータへの指示をつらつらと書き表したのがプログラムなのです。
一番大事なのは、どのような”指示”を考えることなのではありませんか?
コンピュータの役割とは、人間が自分の寿命の中で到底到達し得ない計算を肩代わりさせるということなのです。
ゲームとか、お絵かきソフトとかは計算させてない?
いいえ。違います。
例えば、ゲームには当たり判定というものがありますよね?攻撃された時に、自分にそれが有効かどうかをシミュレーションさせるのです。
格闘ゲームならどうですか?パンチされれば、身体はどのように曲がりますか?パンチした方は、どのように身体をひねりますか?
そうです。リアルさを追求するために、コンピュータの中で一生懸命に膨大な物理演算がなされているのです。
お絵かきソフトはどうでしょう。
貴方のディスプレイのどこに筆を置いたら良いですか?ペン書きと筆書きでは、先の太さや見え方が異なりますね。
これも、ディスプレイの位置関係をXY座標でとらえ、筆の描画をシミュレートさせるために膨大な計算を行わせているのです。
何が言いたいのか。
それは、プログラミングが出来るようになっても、何も作品が生み出せないということです。
”指示”を考えだすためには寧ろ、数学や物理の方が圧倒的に必要なスキルなのです。
世界で言うエンジニアはコンピュータ・サイエンス技術者である
Googleの技術者採用基準は、先ずコンピュータ・サイエンスの博士であることが条件です。
日本で言うプログラマではありません。プログラムを書く人が必要ではないのです。
つまり、コンピュータの力を駆使して、問題を解決する勉強をしてきた人たちを採用しているのです。
それが、日本の義務教育の中で教えられますか?
彼らは、数学や物理学といった分野のエキスパートです。その分野の知識を、コンピュータというIT技術の中に反映しているのです。
私の結論
プログラマを育成しても、AIは産まれません。
貴方も気づいているでしょう?情報の時間として、ワードやエクセルの操作を習うだけの無駄な時間。
その授業で、貴方はMS Officeのエキスパートになれましたか?
マクロが組めるようになりましたか?
ショートカットを駆使して、何倍も効率的に文章が書けるようになりましたか?
そもそも、エキスパートの先生が教えてくれましたか?
そんな無駄な時間は必要ありません。
もっと大切な時間があります。
数学、物理・・・それだけではありません。他の全ての教科。
学問だけではないはずです。外で色々な体験をする。(小さい時の体験が、大人になって仕事の問題解決の糸口となることがあります。)
人と沢山触れ合う。
その全てがその子の糧となるはずです。
プログラミングの必修化には反対です。あまりに目標が曖昧だからです。
向かっていくビジョンが見えません。
それよりも、数学嫌いや物理嫌いの子をなくす方が、よっぽどIT技術者の育成に役立つことでしょう。