人はなぜプログラミングに挫折するのか① C言語の「printf(“Hello World”);」を例に 

みなさん、こんにちは。
埼玉県さいたま市浦和区にあるロボット・プログラミング教室「ロボ団北浦和校」です。

暑さ寒さも彼岸まで、というのは、今は昔~の世界の言葉に感じる毎日ですね。
ここさいたま市でも連日35℃近い気温が続いていますので熱中症に気をつけていただければと思います。

さて今回のテーマは「人はなぜプログラミングに挫折するのか①」です。

プログラミングというのは学校での必修化もあいまって人気の習い事のひとつになりつつあります。
けれど、なかなかとっつきくさもあります。

たとえば親戚の子供たちに夏休みの宿題を見てあげるとき通常の教科(算数、国語、理科、社会、英語)であればさほど悩まず教えることができると思います。ですが、それがプログラムの問題ですとそれが一変してしまう人もいるかもしれませんね。プログラミングを学ぶことに興味はある半面で挫折しやすいのも確かだからです。

一説には業務として使えるレベルでのプログラミングの習得率は1割(挫折率9割)なんてびっくりするような数字が人口に膾炙していたりもします。この数字がどこまで確かなのかわかりませんが、学習時に落とし穴がアチコチにあるのは確かでしょう。

そんなわけで今日は「なぜ人はプログラミングに挫折するのか」ついてに考えてみたいと思います。


今回、取りあげるのは言葉の問題です。もっと言うと翻訳に関する問題です。

では、まず例題から。

printf(“Hello World”);

いきなりワケのわからない文章が出てきました。
でも安心してください。
今回プログラミングのコードが使われるのはこの文だけですから――。

さて、これはC言語というプログラミングでは一番有名な言語で、画面に「Hello World」と表示させる命令(関数)です。読み方としては「プリントエフ ハローワールド」とか「プリンティフ ハローワールド」と読んでいることが多いです。

そしてこの文は、俗にK&R(*1)と呼ばれる古典的教本に一番最初の例と使われていました。そのこともあり、以後のプログラムの教本で「プログラミングのイロハ」の「イ」として何か文字を表示するのが定番になったほど有名な一文でもあります。

では、まずこの文の意味を考えてみましょう。
ごく簡単な英単語が分かれば、なんとなくですが理解できると思います。

ふむふむ……「printf」は印刷や表示を意味する英語のprint(プリント)と似ているので「何か表示しろ」という命令なのだろうし、丸カッコの中は表示する何かだろう。そして「”(ダブルクォーテーション)」や「;(セミコロン)」は日本語で言うカギカッコや「。(句点)」のようなものだろうなぁ……と、こんな感じでしょうか?

しかし、みなさんの中にはおぼろげながらに疑問を感じた人もいるかもしれません。

『そもそも「printf(“Hello World”);」の「printf」の「f」とは何なのだろうか?』 と――。


日本でのプログラミング教育の場合、この「エフ」についての意味を教えることはあまりありません。そして場合によっては教える側の先生も「printf」の「f」の意味を知らなかったりします。たいていの場合、それはおまじないのようなものだから気にしなくてよろしい、と言わんばかりに半ば強引に次のステップに進んでしまいます。

まあエフはエフでしかないのは確かです。もし仮にあなたが歴史なり世界線がねじまがった世界に紛れ込み、そこで「printf」が「printA」や「printX」はたまた「ぷりんと何か」や「〇△□!?」に変わってしまっていても、結局のところ画面に表示されるのは「Hello World」なのですから――。先生が飛ばしてしまう気持ちもわかります。

しかし、そこにこそ人がプログラミングに挫折する理由の一つが隠されています。
それは私の考えでは「翻訳性難化」と呼んでいる、翻訳することで意味もなく概念が難しくなってしまう現象なのです。

たとえば「可塑性(かそせい)」という言葉があります。

これは英語ではplasticityという言葉なのですが、最初のplastic(プラスチック)の部分が示すようにその類語です。ですから、わかりやすく言うとplasticityは「プラスチックみたいな性質」とも言える意味です。プラスチックというのは熱を加えるとドロドロとしてきて形がぐにゃぐにゃに自由に変えられるのですが、その一方で熱が冷めてくると固まってしまいます。こうした性質のことを英語圏の人々はplasticityと呼んだわけです。つまり「プラスチックみたいな性質」です。しかしなぜか日本の偉い先生に翻訳された結果「可塑性」といういかめしい言葉になってしまい小学生や中学生がちょっとやそっとがんばっても理解できない言葉となってしまったわけです。こんな感じの言葉を使われると何かすごいことを言われている感じがするので、とにかく「ははぁーっ」と平身低頭しなくては……という気分にさせられてしまいます。使い方としては「子供の脳は可塑性が高いので早期の英語教育が有効だ。であるから~うんぬんかんぬん~」などですね。こうした事例はコンピューターの分野に限らずたくさんあるわけです。そしてその一例がこの「printf(“Hello world”);」なのです。


そして先に答えを言ってしまえば、「printf」の「f」の解釈はどうも複数あるようです(*2)。

一つ目。それは「printf」の「f」は「function」の頭文字の「f」です。functionは日本語では「機能」であったり数学やコンピューターの分野では「関数」という言葉があてられていますが、つまり「printf」を日本語で言えばシステム上の「表示機能」を使うという意味なわけです。そしてもう一つ。それは「printf」の「f」は「formatting」の頭文字の「f」です。formattingがフォーマットの類語でここでは書式を意味します。なので、この場合は書式を設定した文字を表示するという意味です。いずれにしても「f」にはしっかりと意味があったわけです。

もちろんprintf(“Hello World”); くらいであれば「f」の意味など分からなくてもなんとかわかります。気合と根性で。

しかしプログラムを構成する文はこれだけではありません。無数にあります。そしてこうした文が数百行、数千行のソースコードとなったときに無理が現れ始めます。わからないところをそのまま放置してきたのですから当然の結果でもあります。それはいわば空白になったジグソーパズルの部分が加速度的に増え、穴だらけになってしまった状況とも言えます。

 その一方で先生や先輩は意外と体育会系で決して優しく教えてくれません。とにかく「書いて覚えろ」、「習うより慣れよ」と突き放し、一種のシゴキがはじまります(心理学やゲーム理論的には、もしかしたらそのほうが指導者の地位を無意識に守ることができるというメカニズムが働いているのかもしれません)。そしてそのシゴキに耐えきった勇者(?)だけが新たにシゴく側として残ります。かくしてそこから零れ落ちてしまった人たちはなんとなくわかったつもりの曖昧な作り笑顔をしながら、そっとプログラミング挫折者への道を歩みはじめてしまうわけです。


一連の「習うより慣れろ」式の教授法は一種の文化に近いものです。日本の場合、九九などに見られるように音読文化や暗唱文化とも関連がありそうです。かつてどこでも教えられていた論語の暗唱もそうですし、かなり前ですが『声に出して読みたい日本語(著:齋藤 孝)』という本がベストセラーになったことからもうかがえます。古くから伝わる伝統的なものですので音読や暗唱にも裏づけや高い効果はあります。ただ決して万能ではありません。なぜなら、とかく「その意味を考える」ことを放棄しがちな態度を培ってしまうからです。これがプログラミング教育の場合マイナスになることもあるわけです。実際に思考の内容が言語化、記号化されるかどうかはそのフェーズによりますが、少なくとも人の頭の中では考えることなしにはプログラミングはできないからです。つまり算数のドリルのように反復練習やパターン練習だけでは不十分とも言えるわけです(もちろんプログラミングにおいてもそれらも必要なのですが)。そして基本的にプログラムはたとえそれがどんなに稚拙であったとしても自ら考えたロジックで動くものだからです。

プログラミング教育において「習うより慣れろ」式の考えがうまくいくかどうかはいくつか条件がありそうです。第一にすぐそばに教えてくれる人やコミュニティや資料があること、第二に生きた教科書とも言える無数の優れたソースコードが共有されていること、そして最後にそれらのソースコードがその人にとって意味のあるものとして理解できる高い可読性を維持しているかどうかです。基本的には英語母語話者の場合、この条件があてはまる傾向があり、そうでない場合ほど条件から外れていくように思えます。それは多くのプログラム言語が英語ベースであるからではないかと思われます。またこれまで説明したように、私たち日本人はプログラミングのイロハのイである「printf(“Hello World”);」の意味すら完全には理解していないことを見ても垣間見ることができます。せんじつめれば母語やこれまでの経緯によってプログラミングが独習しやすいか否かの環境の違いとも言えるのかもしれません。


さて、問題はここからです。
こうした問題を抱えたままだと何が起きるのでしょうか?
考えてほしい点はここです。

おそらく学習の場においては例題のサンプルコードを形だけなぞるだけで終了します。そして実践の場で学校なり独学で学んだこととのギャップに苦しむことになります。よしんばそれを乗り越えたとしても、実践の場では使われている生きたコードの意味を理解する学習を続けることができなければ、結局は既存の雛形を人海戦術で再生産するのが精いっぱいになります。かくして多くの人々がプログラミングに挫折し、その一方で業務の現場では独創性やらイノベーションという言葉はどこか隅に押しやられてしまうことになるわけです。

プログラミングに限らないと思いますが、たとえその意味を理解させないまま教え込んでも、表面的なスコアや結果が残りやすいのも確かです。ただ一方でどうしても落とし穴が見過ごされ、それがそのまま見えない時限爆弾となりがちです。そのためロボ団北浦和校ではできる限りその意味が理解できるように教えていきたいと考えています。

ほら昔の偉い人も言っていますね。
「学びて思わざれば則ち罔し(くらし)、思いて学ばざれば則ち殆し(あやうし)」と――。
良い言葉です。できるなら声に出して暗唱できるようになりましょう。それは間違いなく良いことであり教養と呼べるものです。ただ大人になったときにフレーズを淀みなくそらんじるだけでなく、その意味を理解し、何より体現できる人になってほしいとも思います。私たちはTwitterなどで見かけるbotではないのですから――。

ということで今日はこれまで。
それではまた次回にお会いしましょう。


*1 原題:The C Programming Language;著者はブライアン・カーニハン (Brian W. Kernighan) とデニス・リッチー(Dennis M. Ritchie)

*2 このあたりはかつてC言語にはたくさんの方言があり一つのものに統一されたという歴史も関係しているのかもしれません。またJavaなど他の言語の影響(たとえばSystem.out.printとSystem.out.printf)もありそうです。

体験会、実施中です!

JAXAと共同開発した体験会もまだまだ実施しております!
JAXA体験会の詳しい内容はこちら

体験会チラシ(さいたま市のプログラミング教室ロボ団北浦和校)

ロボ団 北浦和校は北浦和駅から徒歩で約5分程度のところにあります。
京浜東北線の各駅にアクセスできる方や、大宮、さいたま新都心、与野、浦和付近にいらっしゃる方は比較的、簡単にお越しいただけるかと思います。
講師一同、楽しみにお待ちしております!

ロボ団北浦和 付近のマップはこちらから

体験会のお申込みはこちらクリック
以下のQRコードからもお申込みできます

体験会申し込みリンクQRコード(ロボ団北浦和校)

お問合せはこちらをクリック