████が好きな物事を書きます

████(U_Plus_2588)が好きなことや好きな物について書きます。

プログラミングとhtmlの適性に関する雑感

理数系ができる人はプログラミングに向いている、プログラミング言語といわれるだけあって言語だから外国語ができるなら向いている、理屈っぽい・論理的な人だからプログラミングに向いている、などの都市伝説を聞いたことがあるんですけど、僕の勘によると、プログラミングが軌道にのるまでの適性は抽象的なものが抽象的なままでも耐えられるかによるところが大きいのではないかと思います。勘で言ってますので話半分に受け取ってください。あと他にも、他者へ可能な限り正確かつ厳密に伝わる言葉選びをする、という性向または能力の有無もあると思っていますが、これについては省略しています。

一般的に初等教育は具体的で、高等教育は抽象的です。小学生ならば「りんごが1個」「豆電球が光る」だったのが高校生になると「i^2 = -1」「1Cの点電荷がひとつ」になるように、学習が進めば進むほど具体的で身の回りにある実体と実感を伴う存在から、より観念的、本質的で抽象的なものへとかけ離れていきます。しかしながら、抽象的なものをどれだけ扱えるかには個人差があり、具体的なイメージを頭に思い浮かべることができないものは扱えない、という人がそこそこいます。√2と言われたときに、√2とは二乗すると2になる数のことで……(現実世界で何かが√2個ある状態を想像しようとして頓挫、思考停止する)といった感じで、キャパシティを超える抽象度があるものは思考停止することで対処するということです。

では初心者がプログラミングを学習するときの流れがどうかというと、だいたいとりあえずHello Worldをやってみてから、変数、制御構文、関数を学んでいき……というところでしょうけど、これ初学にしては抽象度が高いと思います。Hello Worldが画面に表示できても、変数とは値を代入することができる箱のようなものと言われても、ifは条件分岐forはループ処理……だから何なのか、何ができるのか、何に役立つのか、何につながるのかを演繹することができなくないですか?プログラミングの学習、特に独学だと、その人なりに実感を伴う具体的なプログラムに結びつくまでの間に、多数の抽象的なルールを相互の関連性がよくわからないままそういうものとして覚えていかなくてはいけないのが壁になっていて、これに耐えられない人が引き返して去っていくのではないかと思います。

僕の体験では、プログラミングのレベルアップは階段をのぼるようにステップアップしていったというよりは垂直な壁をある日登りきったような感覚でした。15年ぐらい前の話ですが、なんとなくperlの学習を進めていたら、ある日突然学んでいたことが全てつながって、いきなり既存のシンプルな掲示スクリプトの全体性が見えるようになったのです。アクセスしたときに掲示板のhtmlを表示する処理、ログファイルを読み込み表示する処理、ログファイルへと書き込む処理の3つからできていて、htmlを表示するのはhello worldでも使ったprint関数だし、どの処理をするかの条件分岐はifだしログファイルを読み込み表示するのはopen関数やループ処理だし……というふうに、実感を伴い身近にある具体的なプログラムと、学習してきた抽象的なルールとが整頓されて結びついた瞬間がありました。そのように一度でも総体がなんとなく見えると、次以降はそこそこやっていけるようになりました。

一方htmlはプログラミングと比較すればわりと実感を伴う具体性が高いと思います。<title></title>の間に挟まれた文字列はそのままブックマークするときなどのタイトルになりますし、<br />とすれば画面上では改行に置き換わるといった感じで、少なくともプログラミングよりは学習したことが具体的に目の前に表示されているものとすぐ結びつくかと思います。

以上をまとめると、抽象度耐性という概念があって、htmlとプログラミングとを比べると軌道に乗るまでに必要な抽象度耐性は後者のほうが高くて、これが独習する初心者を弾く壁になっているのではないかということです。そして逆に言えば、初心者がその時学習していることが、思い浮かべる具体的なプログラムの中でどんな機能を果たしているのかが把握できる状態にあると独学が捗るのではないかと思います。