経験のあるプログラマと、プログラミングを習い始めたばかりの初心者の会話の例。
プログラマ : やあ、プログラミングの勉強を始めたんだって?いいじゃないか、何を勉強してるんだい?
初心者 : PHPとHTMLの基礎をやってるんです。MacでTextMateエディタを使ってます。
プログラマ : ひええ、PHPなんて間抜けな言語かよ。Ruby on Railsを覚えて、Herokuにデプロイ、Vimでコーディングした方がいいよ。TextMateなんて初心者向きじゃないか。それから、Node.jsもやった方がいいな。あれはすっっっごくいいぜ。ノンブロッキングIOだからな。ヒャッハー!
初心者 : うーん、そうですか。
こういうのを聞いたら、そのクソ野郎をすぐに殴ってやりたい。この類の言い方は、初心者のやる気をすっかりなくしてしまうからだ。この初心者には、尊敬する人が自分がやっていることを軽視し、一生懸命勉強している事は「本当のプログラミング」じゃないと思わせようとしているように聞こえるだろう。
君がプログラマなら、初心者に勉強して欲しい事を彼らが覚えていけるよう個人的に進んで膨大な時間をかけてあげるのでもない限り、彼らが今勉強しようとしている事を悪く言わないで欲しい。彼らの選んだ言語やツールが自分の使っているものと比べるといまいちだってことを、悪意に満ちた通りすがり気分でコメントするのは、彼らのモチベーションを失わせてしまうだろう。
もちろん、PHPやその他のどうしても悪口を言いたくなってしまうような言語を、機転の利いた言い方でdisってしまわないようにするのが難しいのは分かる。特に、言語、フレームワーク、ライブラリ、エディタ、ホスティング環境、エルゴノミックキーボード、スタンディングデスクなどなど自分の選んだもの達が、初心者の学ぼうとしているゴミのようなものと比べて、ハッカー魂の奥底からすっっっごく素晴らしいと分かっているが故だろう。でも、我慢して欲しい。
彼らには、プログラミングのとりこになるのにかけて、まずは何かを(何でもいいんだ!)学ばせて挙げよう。それから、彼らに現実を見せてあげればいいのだ。もし彼らが学んでいるものが本当にひどいものなら、うまく行かずにハマってしまい、もっと簡単な方法がないか泣きついてくるだろう。そんな場面になった時だけ、純粋な関数プログラミングやら健全なマクロやらに関する君の知識を披露してあげればいいのだ。
もちろん君は、彼ら初心者が話しかけた唯一のプログラマというわけではないかもしれない。多くのプログラマ(もちろんオンラインの掲示板とかで話す事もあり得る!)は、恐らく同じように人を傷つけてしまうようなコメントをするだろう。しかも、それぞれのお気に入りの言語、ライブラリ、フレームワーク、エディタ、ホスティング環境がマジでサイコーーーーーーーーと口々に言うだろう。それこそ、初心者が完全に混乱してしまうもとだ。彼らは、その時点ではちゃんと動いているように見えているのに、選んだツールがとにかくひどいものだと繰り返し言われる事になる。しかも自称専門家達は、それぞれ違うツールを学ぶように薦めてくるのだから手に負えない。本当に正しいのは誰なの!?次は何をすればいいんだ!?この手の果てしない欲求不満の詳細は、私自身の、プログラミングを学習する際の教訓(いかにしてバランスの取れていたはずの個人が道を踏み外しかけたか)を読んで欲しい。
OK、冒頭の会話のより建設的なバージョンはこうなる。
プログラマ : やあ、プログラミングの勉強を始めたんだって?いいじゃないか、何を勉強してるんだい?
初心者 : PHPとHTMLの基礎をやってるんです。MacでTextMateエディタを使ってます。
プログラマ : いいじゃないか、最初のPHPアプリケーションを動かせたら、カッコいいの見せてくれよ!基本的なWebプログラミングがある程度出来るようになったら、俺の好きなフレームワークのRuby on Railsを教えてあげるよ。そうすれば、PHPとRuby on Railsの同じところ、違うところが比較できるね。
初心者 : 激励の言葉どうもありがとうございます!勉強が進んだらまた連絡しますね。
追記 : この記事に対する違った見方を取り上げた、Mark Guzdial氏へのCS Educational Zooのインタビューの抜粋も見てみるといい。自動再生されなければ、14:16までスキップしよう。