さて、勉強を始めたのはいいものの、当時はパソコンそのものについても初心者だったから、「プログラムを書けばどんなことができるのか」ということもよくわからない状態だった。そのため、学ぶことの一つひとつが新鮮で面白かった。学んだことというのは、例えば
・変数や定数の考え方、使い方
・if による場合分け
・for によるループ(さらに多重ループ)
・サブルーチン呼び出し(さらに再帰呼び出し)
・文字列の扱い方
・図形描画の仕方
といったものだ。私はこれらの一つひとつを具体的なテーマ(つまりはパソコン画面上に表示したいもの)に当たりながら使ってみることで確実に学んでいった。達成感の助けもあり、比較的短期間のうちに BASIC の大半を習得し、駒場のパソコン仲間からは「BASIC を究めた男」という名誉ある渾名を頂戴したりもした。
さて、それから2年くらいして今度はC言語を学びはじめた。
定石どおり、まずは入門書を読んだ。C言語も BASIC と同様「手続き型言語」と呼ばれるものだから、基本的な考え方の多くは共通している。おかげでC言語の入門書に書かれている内容を理解するのにほとんど支障はなかった。ポインタや構造体のように BASIC には存在しない概念もいくつか出てきたが、数学的な思考が比較的得意な私にとっては特に問題とはならなかった。
そのおかげでC言語の習得は非常にスムーズに進んだ……と言いたいところだが、ところがどっこい(←死語?)これが全然そうではなかった。なぜか?
上にも書いたように、私がBASIC を学んだときには、「プログラムを書けばどんなことができるのか」もよくわからない段階からスタートした。しかし、Cではその部分はあまり問題にならなかったがゆえに、「実際にC言語で表現する能力」とのギャップが大きくなったのだ。
C言語で書かれたサンプルプログラムを理解することはできた。しかし、同じようなものを自力で書くためには、理解できているだけでは足りず、具体的に何をどう書くのか(←ここ大事)を覚えておかなくてはいけない(それもある程度スムーズに出てこなくてはやる気がそがれる)。
つまり、理解力と表現力との間に大きなギャップがあったことが障害になったわけだ。これは当時の私にとって予想以上に大きな問題だったらしく、結局C言語はマスターしないまま放置することになった。(C言語でなければ書けないような具体的な課題を持っていなかったということも大きな要因であろうと今になって思う。)
この「理解力と表現力との間」のギャップの問題、何かに似てないだろうか。そう、母語と外国語の関係にそっくりなのだ。私が BASIC で経験したことは通常の日本人が日本語を学ぶ過程で経験することであり、私がC言語で経験したことは多くの日本人が英語学習で経験することだ。
そんなこともあって私は教育学部の卒論(91年1月に提出)の1項目として「母語の習得と思考力の発展」という文章を認(したた)めておいた。
そういった経験が生きたのか、卒論後10年くらいたって JavaScript を学んだ際にはこの問題はうまくクリアすることができた。おかげで、JavaScript は趣味と仕事の双方で大きく役立ってくれている(英文構造図もその一つ)。しかし、立ち戻る機会がないC言語については、いまだに習得できないままになっている。さて、どうしたものか。
「立ち戻る機会がない」というのはつまり「C言語を使って実現したい具体的なテーマを見つけていない」と言い換えてもよいかもしれない。こういう「実現したい!」と思えるテーマに出会えるかどうかはプログラミング言語の習得にはとても大切で、JavaScript の学習ではこのあたりをうまくコントロールすることができたように思う。これと同様のことは外国語学習についても言えるのではないだろうか。