開発者の間で人気のアイデアとして、コードの問題に直面したときにはラバーダックを取り出して、コードがどのように動作するはずだったかを詳しく説明するというものがあります。1行ずつ、何を期待していたか、代わりに何を見たかなどを説明します。この方法を試した開発者によると、無生物の物体に問題を詳しく説明するという行為自体が、解決策を見つけるのに役立つことが多いそうです。
これは、プログラミングの問題を自分で解決するための多くのコツの1つです。もう1つのコツは 分割統治デバッグです。1000行のコードを調べて1つのバグを見つけることはできません。しかし、それらを半分に分割し、問題が前半と後半のどちらで発生しているかを素早く特定できます。これを5〜6回繰り返せば、問題のあるコードの1行を特定できます。
このような観点から、Jon Skeetの完璧な質問を書くためのチェックリストを読むのは興味深いことです。Jonが尋ねる質問の1つは、「文脈を何も知らない人が読んでも意味が分かり、十分な情報が含まれていることを確認するために、質問全体を自分自身に注意深く読み返しましたか?」というものです。これは本質的にラバーダックテストです。もう1つの質問は、「質問にコードが含まれている場合、それを短いが完全なプログラムとして書きましたか?」というものです。強調されているのは短くという点で、これは分割統治を試みたかどうかのテストに相当します。
Jonのチェックリストが最善の形で機能すれば、経験豊富なプログラマーがすでに試したことを、人々が助けを求める前に試すのに役立つでしょう。
残念ながら、誰もが彼のチェックリストを見つけるわけではありません。見つけたとしても気にしない人もいます。彼らはコードに関する緊急の問題を抱えていて、Stack Overflowが助けてくれると聞いただけで、助けを求めるための複雑なプロトコルを読み込む時間はありません。
Stack Overflowに関する頻繁な議論の1つは、プログラミングの初心者からの質問をサイトで受け入れる必要があるかどうかです。
Jeffと私がStack Overflowの初期設計について話し合っていたとき、私は1980年代のC言語に関する人気のUsenetグループについて彼に話しました。それはcomp.lang.cと呼ばれていました。
Cはシンプルで限定的なプログラミング言語です。100Kに収まるCコンパイラを手に入れることができます。そのため、Cについての議論グループを作ると、すぐに話題が尽きてしまいます。
また、1990年代にはCはプログラミングを学ぶ大学生にとって一般的な言語でした。実際、これらの大学生はCで非常に基本的な問題を抱えていて、comp.lang.cに質問をしに来るかもしれません。
そしてcomp.lang.cの古参メンバーは退屈していました。とても退屈でした。毎年9月に現れる大学生が、なぜローカルのchar配列を関数から返せないのかなどを尋ねてくることに退屈していました。毎回9月になると同じことでした。
古参メンバーはFAQの概念を発明しました。彼らは「Usenetの歴史上、以前に尋ねられたことのある質問はしないでください」と言いましたが、正直なところ、彼らが本当に見たいと思ったのは、非常に奇妙で難解な質問だけで、働くCプログラマーの99%にとって本当に退屈なものでした。ニュースグループは10年間そこにいた少数の人々だけに対応したため、衰退しました。
Jeffと私はこのことについて話し合いました。初心者の質問についてどう思うか?
私たちは、初心者を歓迎しなければならないと決めました。Stack Overflowで合理的な質問として「初心者すぎる」ということはない……ただし、質問をする前に何らかの下調べをするという条件付きです。
これにより、より上級の人々が重複した簡単な質問に退屈して去ってしまうかもしれないことは理解していました。私たちはそれでいいと思いました。Stack Overflowは生涯のコミットメントである必要はありません。初心者がローカルのchar配列を返せない理由(「でも私の環境では動くよ!」)を尋ね続けていて、人生の残りの短い年月をレコードアルバムを整理するようなより生産的なことに費やしたいと思うなら、退屈して去るのは自由です。
単にあなたが初心者であるという事実だけでは、あなたの質問がStack Overflowに属さないということにはなりません。この点を証明するために、私は「Logoでタートルをどう動かすか」と質問して、サイトの設計者が絶対的な初心者を歓迎したいと考えていたという証拠を残そうとしました。
意図しない結果の法則により、これは大騒動を引き起こしましたが、質問が簡単すぎたからではありません。実際の問題は、私が悪意を持って質問していたことでした。Jeff Atwoodは説明しました。「簡単なのは問題ありません。努力と調査をしていないことが問題です。」(こちらも参照。)
初心者にとって、Stack Overflowで初めて質問する際に伴う長い官僚的な手続きは、完全に不要に感じられるか、単に奇妙に感じられるでしょう。これはまるでバーニングマンです。砂漠で素敵なキラキラしたダンスパーティーに行きたいだけなのに、バーニングマン参加者たちは彼らの10の原則や「過激な自己表現」などについて延々と話し続け、したがって食器を洗った後は汚れた食器水を大切な遺物のように注意深く保存し、すべての滴をPlayaから持ち出し、必要に応じて手荷物として持ち帰らなければなりません。どのコミュニティにも多くのルールがあり、コミュニティに参加すると、それらは奇妙で楽しいものに感じられるか、またはコードを動かそうと必死になっている場合は奇妙で苛立たせるものに感じられます。
バーニングマンを成功させるために重要なルールの多くは、一見すると恣意的に見えますが、それでも必要です。バーニングマンに砂漠を提供する米国土地管理局は、汚染された水を地面に捨ててはならないと要求しています。なぜなら粘土質の土は水をあまり吸収せず、さまざまな病気を引き起こす可能性があるからです。しかし、バーニングマンは参加者が使用済みの水を持ち出さなければ存続できません。
Stack Overflowも同様です。私たちは、例えば広すぎる質問(「プログラムの作り方を教えてください」)を許可していません。私たちの一般的なルールは、正しい回答の長さが本1冊分になる場合は、求めすぎです。これらの質問は、医療ウェブサイトに現れて「腎臓が痛いと思います。どうやって取り除けばいいですか?」と言うようなものです。これは非常識で、 incidentally、10年間の訓練を受けて外科医になるために学んだ人々への侮辱でもあります。
次世代の開発者を教育し、特にその新しい世代における多様性と包括性を高めようとする中で、私が非常に懸念していることの1つは、人々がプログラミングを学ぼうとする際にどのような障害を設けているかということです。多くの点で、Stack Overflowの許可されるものとされないものの具体的なルールは障害ですが、さらに大きな問題は、新規参入者がしばしば目にする無礼さ、皮肉、または見下した態度です。
私はこのことを非常に気にかけています。開発者になることは、未来の脚本を書くという比類のない機会を与えてくれます。Stack Overflowが開発者を目指す新人たちに浴びせる非難はすべて、人々、社会、そしてStack Overflow自体にとって積極的に有害であり、将来の貢献者となる可能性のある人々を遠ざけています。そしてプログラミングはすでに十分に難しいのです。私たちはそれをより簡単にすることを使命とすべきです。
来年に向けて、この分野で多くの作業を計画しています。私たちはすべての人を変えることはできず、人々に親切になるよう強制することもできません。しかし、Stack Overflowのユーザーインターフェースのいくつかの側面を改善してより良い行動を促すことはできると思います。例えば、「質問する」ページで提供するプロンプトを改善したり、皮肉が野放しになっているコメントのコミュニティモデレーションのためのより多くのツールを提供したりできます。
また、質問を自分のチーム内のプライベートで小さなグループの人々に直接向けることができる新しい機能も開発中です。これにより、Stack Overflowという大都市にフレンドリーな近所のような感覚をもたらすかもしれません。
Stack Overflowをよりフレンドリーにするよう努める一方で、Stack Overflowの主な考慮事項は、ソフトウェア開発者にとって世界最高のリソースを構築することです。世界中の平均的なプログラマーはStack Overflowに340回助けられています。それが本当の最終目標です。プログラミングを学んだり助けを得たりするための他のリソースはありますが、世界で開発者がこれほどまでに信頼しているサイトは他に1つしかなく、それは保存する価値があります。プログラミングにおけるアメリカ議会図書館に相当するものです。



0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.