言語は爆発する……らしい
わたしは専門学校で FORTRAN を習って、就職してからも2年間くらいはずっと FORTRAN をやってました(たまに BASIC もやってましたけど)。
で、FORTRAN の仕事がなくなってきたから、という理由で C 言語を勉強するように言われたんですが、これがかなり苦労しました。カチカチした FORTRAN になじんでいたわたしには、C がとてもアバウトというかフリーダムすぎる言語に思えたんです。
なぜ = と == で意味が違う! とか、なぜ *(アスタリスク)をこんなに使いまわしてる! とか、なんかもう腹が立ってしかたありませんでした(苦笑)。なによりも頭を悩ませたのは、御多分に漏れずポインタでしたが。
当時はパソコン1台を複数人数で使うのが普通でしたので、お金を稼げないわたしはほとんどマシンに触らせてもらえず、本を片手に、先輩から出されたお題に頭を悩ませ、「これでどーだっ!」と手書きのコードを見せては、「まだわかってない」と先輩に一蹴されて放置、という方式でC言語を勉強しました。
間違っているコードでも、実際に動かしてみて、どういうふうに動いているかを確認できるのなら、どう間違っているのかもわかりやすいんですが、そんな要求は叶えられず、「あのパターンはダメだった。このパターンもダメだった。だとするとこうかっ?」という、トライ&エラーというよりは当たって砕けろ的な教育でしたね。
そんな状態の中、意地になってコードを書き続けていたら、ある日、1つの問題が解けた時に、「あれ?」と思いました。
それまでまったくかみあわなかったたくさんの知識が、突然、1つにまとまって、どうしようもなく分からなかったことがするっと理解できるようになったということを、はっきりと自覚できたんですよ。
なんだか、1つのピースが正しい場所にはめこまれた瞬間に、他のピースまできれいにならんじゃった感じでした。
「そうか、そういうことだったのか」と思って、思わず「うわっ」って声に出しちゃいましたよ。
「うわっ、うわっ、うわっ。今、何があったの? 何したの? 自分」みたいな。
そしたら今度は、そんな単純なことを理解できなかった自分が、理解できなくなっちゃったりして(苦笑)。
FORTRAN を覚えた時は、学んだところが学校だったこともあって、実にのんびりと習っていて、そんな電撃的なことなんてなにもなく、英語の授業のように単語と文法を黙々と覚えて、なんとなくコードが書けるようになりました。
いちいち頭の中で、これはこういうことだからこう書くんだ、とそれこそ英語の試験の答案を書くような感じでいつもプログラムを考えていたんですね。
でも、C言語が「わかる」状態になってからは、ほとんど考えなくてもコードが書けるようになりました。日本語からC言語に翻訳していたものが、ダイレクトにC言語で考られるようになったイメージです。それ以降は、ロジックを考えることに集中できるようになったので、ものすごく楽になりました。
ちなみに、C/C++やVisual Basicに関してはダイレクトですけど、JavaはC++をJavaに翻訳しているイメージだったりします。だから、いまだにJavaがへたです。
といった話をIT業界とは無関係な友人にしたところ「言語爆発みたいなことかな?」と言われました。
「えっ? そんな言葉があるの?」
「ネイティブでない言語を習得する時にそんな現象が発生するって、どっかできいたことがあるような……。あやふやだけど」
「ああ、プログラミング言語も、一応は言語だもんね。同じような現象が発生しても不思議じゃないよね。それにしても爆発って表現がおもしろいなあ」
「頭の中でビッグバンが発生する感じ?」
「ああ、なにかがものすごい勢いで広がっていく感じはあった。うん」
とかいった会話で盛り上がりまして、ためしに「言語爆発」という言葉を調べてみたところ、断片的に単語を口にすることしかできなかった子供が、突然、猛烈な勢いで言葉をしゃべり始める時期が「言語爆発期」と呼ばれていることが分かりました。
うまくしゃべれない子供でも、周囲の言葉はきちんとインプットされていて、それがある日、突然、アウトプットを始めるらしいんです。
それを自分の経験に当てはめてみると、ものすごく似た現象であるように思えます。
日本語を理解した時の自分なんて覚えていないけれど、もしかしたら、同じ経験をしていたのかもしれないなあ、と思うとニマニマしてしまいます。
いろんな情報をひたすら詰め込んで、でもそれがうまくつながらなくって、一歩も進んでないように思えても、実は脳内では「言語爆発」の準備が着々とすすんでいたりするんですよ、きっと。
そんなことを知って以来、わたしは「分からなくても分からなくても詰め込み続けろ! そして考え続けろ! いつか脳内で爆発が起きるから!」と自分に言い聞かせるようになりました。
まあ、詰め込むものの選び方とか詰め込み方にはいろいろと工夫が必要だと思いますが。
たまに周囲のプログラマにそういう体験があるか訊いてみたりするんですけど、「あるある!」って言ってくれる人は結構いますね。
やっぱり普通に発生する現象なんだと思って安心する気持ちもありますし、そんな特別なことじゃないんだとがっかりする気持ちもあって、いろいろ微妙です(苦笑)。
最初ほどのインパクトはないものの、その後も小規模な「爆発」を繰り返し、今の自分があります。ずっとずっとプログラミングを続けていったら、いつかとんでもない「爆発」が起きないかなあ、と思います。
楽しみにしてるんですけどねえ。まだまだ詰め込みが足りないんですね。きっと。
ところで、「言語爆発」という言葉の正確なところは、わたしはきちんと調べていません。わたしの解釈が正しいのかどうかもわからないので、ご興味のある方は独自に調べてみてください。ググって危険があるかどうかはわかりません(笑)。
コメント
インドリ
言語爆発みたいな経験私にもあります。
あれを体験すると、日本語=プログラミング言語=思考になるんですよね♪
それをさらに超えると、考えをまとめるためにプログラミングをするようになります(笑)
新人時代は多分、考える→変換→プログラミングだったけど、
今はプログラミング→自分の考えに気付くという事が多々あります。
ひでみ
こんばんわです。ひでみです。
インドリさん。
プログラミング→自分の考えに気づく、ということは私もありますね。
このコラムを書いていて「ああ、そういうことだったのか」と、自分の書いた文章に自分で納得しちゃうことがあるんですが、プログラミングでも同じ現象が発生します。
一度、自分の外に出すことによって、客観視できるようになるんでしょうね、きっと。書くことでなんらかの刺激が発生するという可能性もありそうな……。
職人仕事はどれもそうだろうけど、「定石」ができちゃうじゃないですか。
んでもってその定石の多くは手が覚えていて、さほどに意識しなくともするするーっと書けてしまう。
やってることはいくつかの定石を糊で貼り合せているよな、そんな感じ。
考えているとすると「アレとコレをどうやって貼り合せるか」がほとんどみたいな。
そこが「自分の考えに気付く」てことなのかなーとか思うです。
インドリ
おはようございます。ひでみさん。
>プログラミング→自分の考えに気づく、ということは私もありますね。
やはり、そうでしたか。
同じプログラミング好きとして、「これはあるよね」と思って書きました。
私の中では別人格が並列処理してくれている感じです。
お客様と会話しているときに、複数の人格が並列動作して勝手に分析・設計・実装・運用シュミレーションをしてくれます。
英語が得意な人も別人格のような感じだといいますので、多分それと同じなのでしょう。
こういう現象はプログラミングが好きでない人に言っても伝わらないから、同じプログラミング好きの方と「こういうことってあるよね」とお話しするのが楽しいです。
これからも、プログラミング好きとしてのこういった「あるある」話題を待っています。
oumi
「言語爆発」いいなぁ、言いえて妙ですね。
「ある日突然全ての知識が1つに結びついて、何も言わずとも理解できる日が来る!」みたいな言い方をしていましたが、「言語爆発」これだ!
「言語爆発」に至るまでは「言語暴発」しまくりなんつって(^^;
失礼しました。
ヴァン
こんにちは。
>先輩から出されたお題に頭を悩ませ、「これでどーだっ!」と手書きのコードを見せては、「まだわかってない」と先輩に一蹴されて放置、という方式でC言語を勉強しました。
良く解ります。
自分の場合、これでアセンブラを覚えました。
アセンブラさえ覚えてしまえば後の言語はなんて楽なんだろうって感じでした。
ひでみ
こんばんわです。ひでみです。
επιστημηさん。
> 考えているとすると「アレとコレをどうやって貼り合せるか」がほとんどみたいな。
> そこが「自分の考えに気付く」てことなのかなーとか思うです。
ああ、なるほど。そういう考え方もありますね。
ある程度までは自動生成っぽくなっているというか。芋づる式というか。
「定石」を増やすのはよいことですが、それにとらわれないようにしないといかんなあ、と思います。
インドリさん。
> こういう現象はプログラミングが好きでない人に言っても伝わらないから、
> 同じプログラミング好きの方と「こういうことってあるよね」とお話しするのが楽しいです。
> これからも、プログラミング好きとしてのこういった「あるある」話題を待っています。
プログラマ「あるある」ネタだと思って話を振って、「えっ、それはないだろ」と言われることもよくありますが(苦笑)。
oumiさん。
> 「ある日突然全ての知識が1つに結びついて、何も言わずとも理解できる日が来る!」
> みたいな言い方をしていましたが、「言語爆発」これだ!
私も友人に「言語爆発」と言われる前までは、似たような表現をしていました。
後輩はたいてい不安そうな顔をしていました(苦笑)。
ヴァンさん。
あの教育方法を今の新人にやらせたら非難ごうごうになりそうな気がします。
検索サイト使わせないだけじゃあきたらず、マシンに触らせることすら許さないなんてっ!
まあ、マシンを使えるのなら、その方が説明しやすくていいんですけどね。
仲澤@失業者
自分は、アセンブラ、BASIC、Pascal、C言語では「爆発」らしきものは
経験しませんでした。
しかし、C++言語を使い始めてしばらくたったとき、非常に奇妙な感覚に
陥りました。それは、コードが頭の中で擬人化されていく過程で、
クラスはある「組織」メンバは「登場人物」メンバ関数は「ミッション」
派生関係は「進化」等に読めてくるのです。
今では、コードのポリシーによって物語風や進化樹形図など、
それに合わせて読みかたを変えてます。
すると、変な進化が割とたやすく発見できるようになり、
コードの理解スピードがまさに「爆発」的に早くなりました。
例えばMFCを読むと・・・
始めに「ビルヒム」ありて、「ランタイムクラス」の丘に立ち、
CObjectを創造していわく「シリアル化あれ」と。
すなわちMFCのはじまりである。
「ビルヒム」はCCmdTarget、CFile、CDCなどのものどもを、
すなわちCObjectの子孫として創造した。
そして、あわれなCAsyncSocketもこのとき生まれてしまった
・・・つづく(うそです)。
guest
SQLに、なかなか言語爆発が起きない件。
AWK
ひでみさん、初めまして。
私も同じような経験があります。PL/I(古い)の言語解説書を読んでいたとき、どうしてもポインタの概念が理解できなかったのが、ある日突然、「あ、そうか」とわかったことがあります。
似た話で、十何年も前に林晴比古さんが雑誌の記事で、プログラムを何度も眺めていると、いつか内容がはっきりわかり、より良いプログラムに直せるときがくる、それを「内破」と呼んでいる。という話を書いたのを見たことがあります。文章の詳細はうろ覚えですが、「内破」という言葉が印象に残っています。「言語爆発」のプログラム版と言ったところなのですかね。
今は関数型言語の本を読んでいますが、「言語爆発」は起こるのかな?
インドリ
言語爆発が起きた後、それが進化して思考が独立することを「小人さんがやっている状態」と私は表現するのだけども、ひでみさんはいかがですか?
小人さんはプログラマの中で有名なたとえですよね?
ひでみ
こんばんわです。ひでみです。
仲澤@失業者さん。
コードが物語風に読める、というのは経験がないですねえ。いいなあ、楽しそうでうらやましいです。
AWKさん。はじめまして。
「内破」という言葉は初めてききました。
卵の中の雛が殻を打ち破って飛び出してくる、みたいなイメージの言葉ですね。
かっこいいんでどこかで使ってみたいです。
インドリさん。
> 進化して思考が独立することを「小人さんがやっている状態」と
> 私は表現するのだけども、ひでみさんはいかがですか?
私は「スレッドを走らせてる」と表現しています。
> 小人さんはプログラマの中で有名なたとえですよね?
私の周囲では時折「小人さんがやってくれる」=「ひでみさんがやってくれる」という意味だったりします(←それは私がアリージョだから)。
laphroaig
ひでみさん、はじめまして
プログラマなんかで終わりたいにひっかかり、やってきました
40代後半男で組み込み系のプログラムやってます
言語爆発とは違うと思いますが・・
子供のころに読んだマイコン入門書の最後についていたニーモニック表が理解できず(何の説明もなく唐突に表が付いていただけなので、理解できる方がどうかしてますが)
数年後、ワンボードマイコン(古いなあ)や初期のパソコンを触ったり、雑誌を読んだり、ロジック回路を組んだりしていた時、突然ニーモニック表が頭にうかび
全てつながった(気がして)表の意味がわかりマシン語が理解できたことがありました
畑違いな話で失礼しますが、なんとなく似ているかなと思います
マシン語が理解できていると、C言語のポインタは楽勝なので、ほとんど苦労しませんでしたが、CPUのアーキテクチャを理解せずにポインタを理解するのは大変だと思います
ちょびちょび
やっと週末になりました。
ちょびちょびにもありましたとも。パズルのピースがピタっとハマるような、今まで無関係に存在していた知識に秩序が生まれるような瞬間が。「未経験歓迎」という、昨今では考えられない、アバウトで有難い時代だったので、鵜呑みにして応募したら、本当に未経験だったのはごく少数でした。分厚い英語のマニュアルは鎖付きで、読みたいときは書棚の前で不自然な姿勢を強いられましたっけ。マシンなんて勉強のためになんか触らせてもらえません。電話の応対はイヤ。立ち仕事はイヤ。苦情処理はイヤ。などというふざけた志望動機で飛び込んだ業界だったので、毎日「明日は辞めよう」と思いながら通勤してました。それが、あるとき「分かっちゃったかも!」という瞬間があり、以後、分からないことでも多少は落ち着いて対処できるようになりました。
情報処理とは縁もゆかりもない学部出の新人さんたちと作業をするとき、多少は励みになるかなー、と体験談を語ってみたりするのですが、下手な慰めと解釈されることが多いかな。そろそろ遭遇するかもしれない平成生まれの新人さんが苦労してたら、このコラムを紹介しようっと。
##メガばあ。分かりますとも。原因不明で体調不良のサーバーに手を焼き、
##「電脳オフダでも買いに行こうかな……」というのはちょびちょびお得意の
##逃避フレーズです。
ひでみ
こんばんわです。ひでみです。
laphroaigさん。はじめまして。
コメントいただいた件は、知識が突然つながるという意味で、まったく同じ現象のような気がします。
マシン語はFORTRANをやっていた時代に先輩に見せてもらったことがあったんですが、何がなんだかっ。
あの時、興味を持ってもっとちゃんと話をきいてればよかったなあ、と今頃になって思います。おもしろい話がいろいろと訊けたかもしれなかったのに。
ちょびちょびさん。いつもありがとうございます。
勉強のためになんかマシンを使わせてもらえなかったのは私だけじゃなかったんですね! よかった……。
「言語爆発」を一度、体験すると、それ以降「大丈夫。あの時だってあんなにわからなかったのに、ちゃんとわかるようになったじゃないか!」と自分を励ますのが楽になるという、すばらしい特典がついてきます。
私もよく後輩に「そのうちちゃんとわかるから、とにかく勉強するしかないんだよ」と言うんですが、やっぱり通じないというか、信じてもらえないというか……。
でも、これだけいろいろな方からコメントいただけたら、まだ「爆発」できないで不安がってる新人さんたちも、ちょっとはこの現象を信じてくれそうな気がします。
うちのコラムなんか、利用できると思ったら、ガンガン利用しちゃってください!
そうしていただけるとめっちゃうれしいです。
せり
こんばんは。古い記事へのコメント失礼いたします。
訳あって、一度IT業界から離れたのですが、またPG/SEとして復帰しようと考えている者です。
当時から、ひでみ様のコラムを拝見し、いつも勉強になるなと思い参考にいたしておりました。
新卒入社時にはC#をやっていたのですが、途中からHTML等のマークアップ系言語メインで行ってましたので、ブランクを取り戻せるよう、目指せ言語爆発!の気持ちで頑張っていきたいと思います。