日経の今日(2016年7月17日)の議論が小学生にプログラミングを教えることについてだった。
記事は読まない。
なぜならば、
「そんなこと無意味だもん」
そもそも現在の日本のITエンジニアの大半がプログラミングできない。
できても、クズのようなコードを書く人間がとても多い。
ごくごく一部の人が本を出せるレベル、他人に教えられるレベルのコードを書く。
これね、どういうことかというと
プログラミングには才能がいる
んですよ。
30年以上、コンピューター触ってるし、プログラムも大量に書いた経験をふまえ、人に教えてみて思うことは、まともなプログラミングできる人間は限られるってこと。
近頃、私の身近でも某ベンチャーが頑張っているが、そこに巣食うエンジニアがほぼ全員ダメダメプログラマーだから、製品はいつまでたってもバグと機能不足だらけ。
経営者がプログラミングの現場を知らないから、こんな気の毒な現実が大量に起きている。
気の毒すぎてなにも言えない。人間関係壊す。
一方で、最先端のハイフリークエンシートランザクション、ビッグデータを処理するソフト、オペレーティングシステム、大規模なソフトウェアなどの分野で日本製のソフトでちっとは名がうれているものなんてどこにもない。(ほとんどがロシア人、インド人がアメリカの潤沢な資金をバックに書いている。)
それが日本のプログラミングの力と資金の力の限界を示している。
(ましてや、日本じゃプログラマーの地位はとても低い。一部上場企業ののOLより給料は安く、拘束時間は長い。すごいプログラム書いても「そんなものは誰でもできる」という根拠なき一言で潰す、一番ショックだったのはWinnyという分散処理プログラムの名作を作った金子氏を訴えてしまうこと。これが日本。
プログラムの入門のサンプルコーディング、それも自分もどこかからか剽窃してきたものに平気でコピーライトを主張する。日本人って作品の質の割に著作権にうるさい。)
何度も書くけど、プログラムは芸術なの。
ヘボが書けば、冗長、遅い、バグだらけ。
才能のある人が書けば、短く、早く、バグなんてほとんどない。
日本人も便利さを享受しているGoogle, Facebook, Pokemon Goなんていう素晴らしいプログラムはヘボを何百人集めてもいつまでたっても作れない。
楽天がAmazonのシステムに追いつくなんて、未来永劫ない。絶対にない。差は広がるばかりだよ。
そこを日本人は誤解していて、いい企画さえあればプログラムなんてカネ積んで人集めればできると思ってる。
あなたも思ってるでしょ? 大企業の人はほぼ全員そう思ってる。
某通信会社の研究所でもプロトタイプのプログラムすら、外注。もう、我が目を疑ごうた。
IPAなんていうバカな団体はそうじゃないことはわかってるんだけど、やることが情けない。
「天才プログラマー」を認定しようとする。
たいして稼げもしないプログラマーが「天才」として認定されて、内輪でだけ盛り上がっておわる。
その「天才」はゴミみたいなプログラム書くだけで、世界からは無視されている。
あげくの果てには、「俺は天才プログラマーに認定された」っていう本を書いたりする。
プログラムで語れよ。その程度の才能を「天才」とか持ち上げるな。
そのガキの人生潰しとるやん。
プログラム、プログラマーに尊敬のない国でプログラムにみんなどれだけの価値を見出すのか?
実例を出したいと思う。サーバーサイド言語でメジャーなPHPを例にとる。
学校で教えるPHPは間違いなくこんな形だろう。
<html> <head><title>output.php</title></head> <body> <?php $name = $_POST['name']; print ("次のデータを受け取りました<br />"); print ("名前:$name<br />"); ?> </body> </html>
PHPはHTMLと一緒に書くこともできる、というルーズなルールを100%活用したゴミプログラム。
それなりのプログラマーが使うPHPフレームワークの一部はこんな感じ
public function main() { /* set initial timer */ self::timer('tmvc_app_start'); /* set path_info */ $this->path_info = !empty($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : (!empty($_SERVER['ORIG_PATH_INFO']) ? $_SERVER['ORIG_PATH_INFO'] : ''); /* internal error handling */ $this->setupErrorHandling(); /* include application config */ include('config_application.php'); $this->config = $config; /* url remapping/routing */ $this->setupRouting();
同じPHPか?っていうくらい書き方も違えば、コメントの入れ方も違う。
売り物になるプログラムと初心者プログラムのレベルの差を感じてほしい。
このふたつのプログラムの間にはとってもとっても大きい知識とノウハウの差がある。
さまざまな工学部の卒論を読んでいるが、大学出てもこのレベルは無理とだけ言っておく。
そして、小学校でいやいやPHP習ったとしても興味なかったら3年経ったら忘れるよね。
もしくは英語のように嫌悪感だけが残る。
そしてプログラミング教育をネットで見ていて、1番バカな議論はプログラミング言語についての論争。
PHPだ、SCRATCHだ、って言って習得させても、そのコンピューター言語は間違いなく仕事の現場では使えない。
なぜならば、プログラミング言語は必ず流行というものがあって、今の小学生が社会人になるころには今我々の知らないプログラミング言語が主流となるのだ。
議論してる奴らはそんなことも考えないのか。
ひとつの技術に固執するってエンジニアとして恥ずかしいことだぞ。
二番目に(これが最大の疑問)、なぜ「アルゴリズムと構造化プログラミング」の話が出てこないのか?
そもそもコンピュータープログラムはどんな言語で書こうが、構造化されている。
言い換えると、
- 順次
- 順接、順構造とも言われる。プログラムに記された順に、逐次処理を行なっていく。
- 反復
- 一定の条件が満たされている間処理を繰り返す。
- 分岐
- ある条件が成立するなら処理Aを、そうでなければ処理Bを行なう。
これが基本であり、もうひとつコンピューター特有の「割り込み」という機能でプログラムは動作する。
コンピューターサイエンスの入門レベルなのに、議論すらされていないようだ。
小学生に教えるならこれだけで、もう十分だ。
世の中の動きをアルゴリズムにして、上の構造化プログラミングに当てはめる、だけでおそらく生徒の半分が脱落すると思う。
ましてや、固有のプログラミング言語だなんて。。。
私のように軽く10を超えるコンピュータ言語を経験した人間からすると、まったく意味がない。
自慢のつもりじゃなく、コンピュータ言語は時代と業務の要請に応じて覚えるものだからだ。
だから「小学生にプログラミング」って主張している人はプログラムを書けないか、ヘボプログラマーなんだよ。
言い換えるとプログラミングを舐めている。
先の入門レベルのプログラムがプログラムだと思っている。
東大に入ったことない人が東大に入る方法を語ってるのと同じ。
親も家にパソコン一人一台ももってないくせに、「プログラミング教室」なんかに子供をかよわせ無駄な時間を使い、大事なカネを捨てるな。
繰り返すが、プログラマーになっても収入増はまるで期待できない。
私がそれなりにこの業界を歩いてこれたのは「プログラムも書ける」であって、「プログラム書くだけ」じゃなかったからだ。プログラムしか書けないまま年老いた同年代は「COBOL(IBMさんが作った50年前くらいのコンパイラ)しかできません。でもCOBOLは自信あります」とか平気でいう。
勉強しないエンジニアのなれの果てだ。
そもそも少子化で、なにしてても就職はできるようになるよね。
そんなくだらんことしてる暇があれば、
英語の勉強しろよ。
日本にめぼしい技術と仕事はないんだから。
ITについて日本は後進国だということは知っておいたほうがいい。
嘘だと思うなら、日本の生産性の悪さをどう説明するのかな?
今後、海外製のクラウドサービスを利用することがベストであり、いわゆる安いシステム屋は倒産するしかない未来をどう考えるのかな?