プログラミングは難しいと思う人達がいる。いや、実際に難しい所もあるし易しい所もある。初心者が始めに躓くのは用語や概念の難解さだ。やれ、変数だ、引数だ、関数だ、と言われても何を意味しているのかがなかなか掴めない場合がある。それこそ、オブジェクト指向とは何かと言われると、もっとよくわからない。そもそも、曖昧な概念の場合は、正解が無い場合だってある。
世の中で初心者向けと自称する記事の中で、それらの用語や概念を不正確に解説している物がある。それらに対して間違っていると指摘にしても、彼らは「初心者向けだから正確さよりも分かりやすさを重視した」と言う。それで本当にいいのだろうか?
私は、teratailとスタック・オーバーフロー1でそこそこの回答をしている回答者だ。なので、それなりに、初心者であろう質問者を見てきたつもりだ。そんな初心者の中で一番回答に困るのが、話が噛み合わない人達だ。なぜ話が噛み合わないかというと、こちらが言っている意味と相手が言っている意味が異なるからだ。つまりは、その人が覚えている用語、概念、機能、動作、方法等の何かが根本から間違っていたということだった。そして、それが問題の本質であったりもする。
人は初めに覚えたことを強く信じる。とある「A」を学んでいるとき、「AはBである」と初めに教えられたとしよう。その後「AはBではなくCである」と言われたとき、人は反発する。人は自分が信じていることと異なることを信じないからだ。なぜなら、自分が信じていることの否定は自分の否定と捉えるからだ。勘違いしないで欲しいのは「知っている」のではなく「信じている」と言うことだ。それが真実であるという確証が実際の所は何もないのに、ただ「信じている」だけに過ぎないのに、人は自分が「知っている」事を真実であるかのように決めつける。そのまま時が経てば常識であるとすら思い込む。
初心者であればあるほど、初心者向けや入門と言ったタイトルやタグが付いた記事を探し、簡単や分かりやすいと評価されているものを読もうとする。しかし、もし、そこに間違った知識が書いてあったらどうだろうか?その間違いが顕在化したとき、その人は果たして混乱せずにいられるだろうか?とんできたマサカリを素直に受け止めることができるだろうか?周りに反発し、殻に閉じこもり、間違いを認めず、そのままそこで立ち止まって、終わってしまうような気がしてならない。いや、実際にそうなってしまった人達を私は何人か見たことがある。
さて、一つ言っておかなければならない事がある。この文章は初心者向けではない。初心者向けを書く人向けに書かれている。初心者のために文章を書こうという気概があるあなたは、きっと、優秀なエンジニアなのだろう。だが、分かりやすさという言葉を言い訳にして、正確さを軽視した文章を書いていないだろうか?それは本当に誤解を生まない文章なのだろうか?間違った知識を植え付けるものになっていないだろうか?そして、その間違いが、その初心者の人生を狂わす原因になるかもしれない…そんな懸念を抱くことはないのだろうか?
私に言わせれば、分かりやすくするために正確さを犠牲にすることは甘えである。初心者向けを自称するのであれば、正解、かつ、分かりやすい文章を目指すべきだ。どちらかを捨てるなんてできない、どちらも重要なのだ。より深く考察し、より慎重に検討し、言葉を紡ぐべきだろう。それができないのであれば、あなたはまだ初心者向けの文章を書く技術や知識が劣っている。できれば、そのような人に初心者向けなどと言う文章は書かないで欲しい。初心者のためにもだ。
技術的な文章において、初心者向けというのが一番難しい。私も初心者向けの文章として回答をした事がある2が、一番神経を使うし、かなりの時間を掛けて書いている。時には初心者向けに書くことは諦めて、「少し難しいので、知識を得てから後で読み返してください」と注意書き付きで回答したことが何度もある。ましてや、Qiitaでは初心者向けの解説と言ったものはほとんど書いていない。そう、初心者向けの文章を十全に書くためには、私には技術や知識がまだまだ足りないのだ。だが、努力はしているつもりだし、いつか、そういった文章をすらすらと書けるようになりたいとは思っている。
私自身ができていないことを押しつけるのは烏滸がましい限りであるが、もし、あなたがこれから初心者向けを書こうとしているのであれば、本当に初心者のためを思うなら、この記事に書いている内容を少しでも考慮して欲しい。正しい知識こそが上達への近道であると言うことを、あなたは知っているはずなのだから。