「難しい?」のこたえは「難しい」
実はもう4冊ほど紹介したい書籍があるが,そろそろこの記事を終わらせないといけない。以下では,本稿の一人称を「私」から「筆者」に戻す。
Rubyプログラミング入門というテーマで3冊の書籍を見てきた。この手の書籍をだれかに紹介するとき,筆者がよく聞かれる言葉は「難しい?」である。より正確に書けば「これから読んで学ぼうとする私にとって難しい?」という質問である。
ここで挙げた3冊を難易度順に並べれば,簡単なほうから
- Ruby (1) はじめてのプログラミング
- たのしいRuby
- 初めてのRuby
プログラミングとは,コンピュータに,コンピュータと人間の両方が理解できるプログラミング言語で,何かを伝える作業である。非常に知的な作業だ。近いのは通訳や翻訳だろう。前提とする知識が大量にあり,個々の小さな判断でも最適解に近づくために大量の知識が要求される。
なんらかのミス,あるいは知識不足によって判断を誤ったとき,その被害はへたをすると予想もできないほど大きくなってしまう。だからこそ,網羅された,正確な知識を備える必要がある。学習コストが高くても,だ。大量の知識で支えないと,おのおのの局面で正確な判断ができないところにプログラミングの難しさの多くがある。
その大量の知識を,構造化した状態でどのように脳内に格納するのか。その道のりは個人ごとに異なる。プログラミングに必要な知識の大半は,説明可能なものではある。しかしその説明の品質は,説明者のスキルや考えた量だけでは決まらない。その説明が難しいかどうかは,受け手とその環境,そしてそのタイミングに大きく左右される。ある説明の難易度を決める要素は,書き手の想像を超えて多様であることが多いと筆者は考えている。
本はプログラム,もしくは旅
筆者はこれまで,本はプログラムに似ていると思っていた。著者がプログラマで,書籍がプログラム,それを実行する処理系が読者---というたとえである。著者はプログラミング言語の代わりに,自然言語でプログラムを記述する。これまでの仕事で筆者が迷ったとき,このたとえはよく機能してきた。
でも最近は,本は旅のようなものではないかとも考えるようになった。著者が旅の企画者,またはツアーコンダクターで,読者は旅人である。読者は本を読む間,著者の案内のもと,知的な刺激を受ける旅をする。著者の思い通りの旅を終えることができたとき,読者のなかで何かが変わる。
ときどき読者が著者の思いからはずれ,旅から脱落したり,勝手に個人旅行を始めたりするところも似ている。であれば,様々なテーマで,様々な企画者やツアーコンダクターが,様々な旅を作ってもらいたい。
さらにここで思うことがある。長いプログラムは旅に似ていることだ。かつてMozillaのソースコードを読んだとき,あるいは最近JavaVMのソースコードを読んだとき,ある処理をたどりながら,予期せぬすぐれた処理や,様々な配慮に触れた。まつもと氏の記事「オープンソース/C言語に学ぶ『ソースコードの読み方』」でも触れられている「深さ優先探索方式(ひらメソッド)」で読んでいるとき,とくにそう思う。次の関数やクラスに触れるたびに,場面は変わり,その場面に応じた様々な感情が発生する。
これらすべてのたとえに共通するのは,書く人が,読む人やコンピュータを想い,それを言語の形で表現していることである。筆者の想いが表現されたなにか---書籍や記事,プログラム---を受け取る。そして,それが機能するさまを想像する。これができたとき,筆者は幸せな気持ちになる。
筆者は編集者である。編集者の仕事は究極的には一つ。著者と読者を幸せにすることだ。二つに分ければ,一つは著者の能力を引き出すよい相棒になり,もう一つは著者が発した素晴らしい何かを読者に余さず届くようにすること。それが他人の仕事の結果生まれた書籍であっても,あるいは別の旅であっても,さらには自分が使わないプログラムであっても,そこに幸せを感じるのは当然のことのように思う。
願わくば,こんな幸せが,いつまでも続きますように。
最後に謝辞を。この記事を私が書いたきっかけは,高橋征義氏によるTwitterというWebサービスへの書き込み(http://twitter.com/takahashim/status/1166367153など)である。思考と執筆のきっかけを与えてくれた高橋氏に感謝したい。そして,“つぶやき”にしては長い文章にお付き合いいただいた読者のみなさまにもありがとうを言いたい。