プログラミングコミュニティとして、freeCodeCampは多くの人々がコードに関する質問を持っているときに助けています。学習者に単に答えを提供して次に進むのは非常に魅力的ですが、それは実際には学習プロセスに有害です。理由は以下の通りです:

誰かに答えを与えると、その「アハ体験」を奪ってしまいます。彼らが自分自身の考えを通じて結論に達する方法を学ぶ機会を取り去り、代わりに最小限の労力や考えで進むことを許してしまいます。

では、コードについて誰かをどのように最も効果的に助けることができるでしょうか?

ソクラテスの方法とは何ですか?

ギリシャの哲学者プラトンは、別の哲学者であるソクラテスの学生でした。プラトンの作品では、彼はしばしばソクラテスが同僚や学生と交わす討論について書いています。

ソクラテスはこれらの議論を、一般的な信念を提起し、それらを他の信念と比較してその互換性を問い、人々が真実に到達するよう導くことで始めていました。

しかし、それがデジタル時代の現代のやり取りにどのように翻訳されるのでしょうか?

私たちのコミュニティの実際の例を考えてみましょう:

このようなコード例を直接答えとして与える誘惑に駆られるかもしれません:

const sum = nums.reduce((acc, el) => acc + el, 0);

しかし、そうすることで、学習者の代わりに論理的推論を行ってしまいます。

代わりに、彼らを答えに導くために、的確な質問をすることに集中するべきです。例えば、次のように質問を始めることができます:

❓ コードを使わずに、ペンと紙を使って数のリストの合計をどのように見つけますか?

学習者にコードから離れるような質問をするのは直感に反するように思えるかもしれませんが、実際には彼らの質問の背後にある基本的な論理を指摘しているのです。

学習者が次のように返答すると仮定しましょう:

「私は各数字を一つずつ見て、それを前の数字の合計に加えます。」

学習者があなたの質問に答え始めると、対話はこの呼びかけと応答の形式で進んでいくべきです。あなたの質問は、学習者の解決策への進行に伴い、ますます狭く、具体的になっていくべきです。

例えば、一連の質問は次のようになるかもしれません:

講師:「素晴らしい、では、数の配列とは何ですか?」
学生:「リストですか?」
講師:「良いですね!そのリストをどのように反復処理しますか?」
学生:「forループを使います。」
講師:「そして、各反復でループは何をする必要がありますか?」
学生:「現在の数字を合計に加えます。」
講師:「合計はどこに見つけられますか?」
学生:「ループの外に変数として置いておけます。」
講師:「素晴らしい、さあ、コードを書いてみる準備ができました。」
—この記事のために書かれた元の例

この時点で、学習者は点と点を結びつけ、最終的な解決策に達する可能性が高いです。

現代文化におけるソクラテス

ソクラテス式対話法を学ぶのは難しいです。実際、多くの人は大学の学びに到達するまでそれに出会うことはありません。しかし、現代のポップカルチャーには、ソクラテス式対話法がどのように機能するかを理解するのに役立つ例があります。

テレビ番組「ハウス M.D.」には多くの例があります。「三つの物語」というエピソードからのこのやり取りを見てみましょう:

ハウス: 「腎結石は何を引き起こす?」
学生: 「尿に血が混じる。」
ハウス: 「お前の尿は何色だ?」
学生: 「黄色。」
ハウス: 「お前の血は何色だ?」
学生: 「赤。」
ハウス: 「俺は何色を使った?」
学生: 「赤、黄色、そして茶色。」
ハウス: 「そして茶色。何が茶色を引き起こす?」
学生: 「廃棄物。」
— (Frapier, 2008)¹

このやり取りがどのように行われたかに注目してください。ハウスの目的は、学習者に答えを「与える」ことではなく、推論的な質問をして学習者が自ら答えにたどり着くように「導く」ことでした。

人気映画「マトリックス」を考えてみてください:

モーフィアス: 「ネオ、現実だと確信している夢を見たことはあるか?」
ネオ: 「これはありえない…」
モーフィアス: 「何がありえない?現実だと?」
モーフィアス: 「もしその夢から目覚められなかったら、ネオ?夢の世界と現実の世界の違いをどうやって知る?」
— (Wachowski & Wachowski, 1999)²

このシーンでは、モーフィアスがソクラテス式の方法を用いてネオに現実の認識を問い直させようとしています。これはかなり劇的な例ですが、前提は同じです:学習者に考え方を教えるのではなく、自らの意志で結論に達するように導くのです。

最後に、「合法的にブロンド」からの例を見てみましょう:

エル: 「お父さんはシャワーを浴びている間に撃たれたの?」

チャトニー: 「はい。髪を洗っていました。」
エル: 「ウィンダムさん、その日の早い時間に何をしていたか教えてくれますか?」
チャトニー: 「起きて、スターバックスに行って、ジムに行って、パーマをかけて、帰ってきました。」
エル: 「その後シャワーを浴びたんですね。」
チャトニー: 「はい。」

エル: 「…ウィンダムさん、トレーシー・マルチンコのカールが水をかけられたときに台無しになった理由は何ですか?」
チャトニー: 「濡れたからです。」
エル: 「その通りです。パーマのメンテナンスの第一の大原則は、パーマをかけた後、アモニウムチグリコレートが無効になるリスクを避けるために、少なくとも24時間は髪を濡らしてはいけないということですよね?そして、人生で30回もパーマをかけたことがある人が、このルールをよく知っていないはずがありませんよね?もしあなたが実際には髪を洗っていなかったのなら、私が疑っているように、あなたのカールがまだ intact なので、銃声を聞かなかったはずがないのでは?」
—(ルケティック, 2001)³

ソクラテス式の方法は法律においてよく見られ、この例は素晴らしいものです。このやり取りを通じて、エルはチャトニーを結論に導こうとしているのではなく、むしろ 観客(この場合は陪審員)を導こうとしています。これは私たちのようなコミュニティにとって重要な区別です: 一人のメンバーとのソクラテス式の議論に参加することが、あなたの会話を観察したり再訪したりする現在および将来のメンバーに実際に利益をもたらすことがあるのです。

ソクラテス式の方法の目的

ソクラテス式メソッドの目標は、単に情報を迅速に交換することではないことを認識することが重要です。代わりに、最初に学習者に、自分が思っているよりも知識が少ないことを気づかせ、その後、特定の思考プロセスを引き出す質問を通じて答えへ導くことが目的です。⁴

プログラミングの学習にこれを適用する際には、「自分の仮定に挑戦する」というフレーズを思い出すことが重要です。私たちはしばしば、書いたコードが何をしているのかを知っていると仮定しますので、動作しないときの最初のステップは、その仮定を検証することです。

学習者をデバッグのプロセスに導く際には、同様の質問をすることが望ましいです。あなたのレパートリーに含めるべき一般的な質問は「このコードの行は何をしますか?」です。学習者が不正確な情報で答えた場合は、コードの小さな要素に掘り下げる質問で応じてください – 問題を部分に分割するのです。

この例を考えてみてください:

学習者:「でも、多分それはうまくいかないだろう、なぜなら本を見つける必要があるからで、本のIDではない」
インストラクター:「正解です。さて、良いニュースは、その機能が一見それを行うはずだということです。悪いニュースは、その機能はそれを行わないということです。その機能は代わりに何をしますか?」
学習者:「bookIdを返します」
— 私たちのDiscordコミュニティからの情報⁵

「その関数は代わりに何をするのか?」という質問をすることで、インストラクターは特定の情報を提供することなく、学習者が正しい結論に達するための方向性を示しました。学習者はすでにその関数が期待通りに機能していないことを知っており、インストラクターは学習者のその関数が 機能している という仮定に挑戦するために質問をしました。

別の例を見てみましょう:

インストラクター:「これはチャレンジの例です( sic)。彼らが示した例を理解しましたか?」
学習者:「はい、でも for-in ループが理解できませんでした。「(const food in refrigerator)」は、const または let で文字列プロパティ名を指定するのが混乱しました(今はもう混乱していません)」
インストラクター:「では、チャレンジの完全な解決策の代わりにここから始めましょう」
インストラクター:「そのコードを実行すると何が起こりますか?」

学習者:「オブジェクトの各キーが for-in ループで作成された変数 food に設定され、その後オブジェクトを反復処理して、キーとキーに割り当てられた値をログに記録しますか?」
— 私たちの Discord コミュニティからの情報⁶

再び、インストラクターが学習者を自分の推論を通じて解決策へと導くために的を絞った質問をすることに焦点を当てている様子が見られます 自らの推論を通じて

❗ それがソクラテス式メソッドの究極の目標です:学習者が自らの推論のみで論理的な結論に達するように導くこと。

ソクラテス式メソッドの長期的な利点

ソクラテス式対話法は、即時の解決策を導くためだけに有益なわけではありません。このアプローチで適用される演繹的推論プロセスは、長期的に学習者にとっても役立つものとなります。

学習者に質問を投げかけ、彼らの仮定や知識に挑戦し、解決策へと導くプロセスは、内面化されることも可能です。これは、デバッグや仮定の特定、さらには問題を明確に表現する方法を学ぶための強力なツールです。

つまり、学習者をこの呼びかけと応答の対話に導くことで、学習者は自らもこれらの質問を自問自答する能力を身につけることができます。彼らは、より狭い範囲の質問を投げかけるという同じプロセスを論理的な道筋として捉え、将来自身のコード(あるいは人生の他の側面)で問題に直面したときに、心の中でそれを実行することができるのです。

結論

学習者に直接解決策を提供することは、彼らの知的成長を妨げ、自らの論理的結論に達することから得られる充実した体験を奪ってしまいます。ソクラテス式対話法のような技術を活用することで、学習者が成長し、繁栄できるより強力で効果的な教育環境を育むことができます。

💡 もしあなたがこの文章をフォーラムの投稿、Redditのコメント、Discordのメッセージ、または他のコミュニケーションで、仲間の学習者に対して問題解決のためのコードを提供した結果として受け取ったのであれば、ぜひこの方法の利点について考慮してください。

このアプローチは煩雑で時間がかかるように見えることがありますが、時にはその通りです。問題を解決するコードを誰かに手渡す方が、はるかに迅速(そして議論の余地がありますが、容易)です。

しかし、そのアプローチは、最終的には学習者に害を及ぼすことが多いです。そして、もしこの著者の逸話を許していただけるなら、私は人々がソクラテス的アプローチの対象となったときにフラストレーションを感じたり、行き来する会話に対して忍耐を失ったりするのを見てきました。しかし、私は彼らがその最終結果、すなわち自分自身の推論を通じて問題の解決策を導き出す「アハ」モーメントに対して不満や失望を抱くのを見たことはありません

出典:

  1. ¹ Frapier, M. (2008). Being Nice is Overrated: House and Socrates on the Necessity of Conflict. In House and Philosophy (pp. 100–101). John Wiley & Sons, Inc.

  2. ² Wachowski, L., & Wachowski, L. (Directors). (1999, March 24). The Matrix (Z. Staenberg, Ed.). Warner Bros.

  3. ³ Luketic, R. (Director). (2001, July 13). Legally Blonde (A. Brandt-Burgoyne, Ed.). MGM Distribution Co.

  4. ⁴ Frapier, M. (2008). Being Nice is Overrated: House and Socrates on the Necessity of Conflict. In House and Philosophy (p. 103). John Wiley & Sons, Inc.

  5. ⁵ lightskingeneral & plamoni (2024年1月4日). [Discordの会話]. Discord. 2025年1月6日取得, https://discord.com/channels/692816967895220344/718214639669870683/1192488621043888198

  6. ⁶ lightskingeneral & jeremylt (2023年11月13日). [Discordの会話]. Discord. 2025年1月6日取得, https://discord.com/channels/692816967895220344/718214639669870683/1173733715109761065

この記事に対するアリエル・レスリーとジェレミー・LTのご協力に特別な感謝を申し上げます。