私は自分を中級のPythonプログラマーであると考え、初心者のためのトレーナーになる機会を提供されましたPythonプログラミングクラス。
これが私のプログラミングのレパートリーを本当に広げるかどうか疑問に思っていました。誰かがグループの訓練に成功した後、誰かが啓発的な経験をしましたか?
それは、プログラマーであろうと初心者の学生であろうと、それらの人々にも依存しますか? (私の場合、それらは中間.NETであり、Javaプログラマー)
それらから何を期待すべきですか?
私の恐れの1つは、彼らのうちの1人がもつれた質問をしたときに私が窒息した場合はどうでしょうか。これは正常ですか?
私の経験では、プログラミングを教えることは私をより良くしました。これにより、以前に受け入れた、または当然と思っていた概念をよりよく理解する必要がありました。私にとっては古いが、学生にとっては新しいアイデアをさまざまな方法で明確に説明しなければならなかったとき(誰もが同じ例から同じ方法を学ぶわけではないため)、結局、私にとって資料の理解が深まりました。
そして、はい、時々学生はあなたが答えを知らない質問をします。それは大丈夫です、あなたは彼らに知らないことを伝え、可能な説明を考え出し、次のクラスの前にそれを調べることを約束することができます。
テキサス大学の古い調査では、次のことが判明しました。
人々は保持します:
彼らが読んだものの10パーセント
彼らが聞くものの20パーセント
彼らが見るものの30パーセント
視聴者の50%
彼らがすることの70パーセント
彼らの90%教える
このロジックに従って、何かを学び、学んだことを維持するための最良の方法は、他の人に教えることに最善を尽くすことです。
学校でComp Sci 101を使っていましたが、C++の個別指導の仕事に就き、苦労している生徒に教えることを余儀なくされるまで、実際にはC++を習得しませんでした。 CSの卒業生以外の生徒の割り当てを手伝ったとき、それは私の頭の中で消える電球の乱交のようなものでした。
私は体系的に自分でプログラミングを教えたのではなく、いくつかの概念や問題を多かれ少なかれ部外者に説明しようとしただけです。いつも面白い体験で、毎回何かを学びました。
実際、Jan Comeniusは、数百年前に何かを本当に深く理解するための最良の方法は、他の人にそれを説明することであるとすでに述べています。
だからそれのために行く-それはあなたにとって貴重で豊かな経験になるでしょう。あなたはきっと難しい質問や意外な質問を受けるでしょう-それは大丈夫です。あなたがすべてを知っているふりをしようとしないでください-ただ正直に言って、「わからないが、私は答えであなたに返信します」のようなものを伝えます。彼らはあなたが正直であることをより尊重するだけです。
他の回答が述べていることに加えて、教えるときにそれを忘れないでくださいそれについて心を開いていれば、生徒から学ぶこともできます。
コメントで「Java/.NETの知識はゼロに近い」と述べました。それはあなたの学生から学ぶ絶好の機会です。 教えることは一方向のプロセスではありません。
質問への答えがわからない場合は、その事実を隠そうとしないでください。教師が生徒にできる最大の不満は、生徒が知らないことを知っているふりをすることです。 。せいぜいあなたは彼らがあなたが何について話しているのか分からないことを理解するとき彼らの信頼を失います、悪いことにあなたは彼らを誤解し、情報がないより悪い偽の情報を伝えます。
はい、あなたはより深い理解を得るでしょう。あなたがここで得た他の答えと同じような経験をしました。
追加のエクスペリエンスを作成しました。エラー分析が早くなりました。あなたは人々に教えるので、彼らは間違いを犯します。彼らを助けるとき、あなたは問題のあるコードに目を奪います(少なくとも、私はそうしました)。
私の恐れの1つは、彼らのうちの1人がもつれた質問をしたときに私が窒息した場合はどうでしょうか。これは正常ですか?
普通だと思います。そして、私が正直だったときに私の学者たちは問題がありませんでした(そして、私は後で答えを出しました)。反対に-彼らは誰もがすべてを知ってはならないことに気づきました。最も重要なことは、情報を取得する方法を知ることです。私の最高の教訓の1つは、答えがわからず、マニュアルを一緒に調べて答えを得たときでした。その後、彼らはマニュアルの読み方を知った。
私は大学の技術レベルのクラスを教えてきました(ただしソフトウェア開発については教えていません)。これが私の見解です。
1:1ではありません。プログラムを書くのと同じ経験は得られませんが、それは決して悪いことではありません(以下をお読みください)。
もちろんです。あなたは新しい挑戦をするでしょう、そしてあなたが長年にわたって知らなかったか、忘れていたいくつかのことを(再)学ぶ必要があるでしょう。そのうちのいくつかは将来役立つでしょう。それはあなたに多くの新しい挑戦と概念を提示します。あなたは新しい視点から技術的な問題に取り組む必要があり、その視点を取ってそれらの問題を解決することによって多くを学ぶことができます。技術的な問題を理解するために必要なことを誰かに効果的に教えることができれば、多くの場合、主題に関する知識が向上し、知識領域が広がります。同様に、彼らはすでに別の言語を知っているとあなたは言っています。
近くの領域の専門家と協力すると、構造が劇的に変わります。彼らはすでに、コンピューターとの通信方法、プログラムの作成方法を知っています。構文と論理は、彼らが学ぶのが早いでしょう。彼らは最初の週に挑戦的な質問をします。
コースの内容を、使い慣れている言語に関連付けることができれば、彼らに最もメリットがあると思います。「はい、件名は、Java これらの方法ですが、-これらの理由 "の場合は異なります。彼らが習得するペースは非常に速く、外にかなりの時間を費やすと期待できるはずです。準備中のクラス(繰り返しますが、学ぶことはたくさんありますが、トピックはほとんどの開発者の興味を引くでしょう。)
まあ、彼らはあなたと同じくらい経験豊富ですが、別の分野(関連していますが)です。説明は難しくなる可能性があり、すべてを理解したり、それらのすべてと同じ専門知識を持つことは期待できません(結合されます)。 「わからない」と言う能力は先生にとって上質です。彼らも経験を積んでいる場合は、短いディスカッションで回答することがよくあります(「ああ、私たちはこの手法を使用してその問題を解決します)。それが失敗した場合は、次のセッションまでに(あなたと彼らのために)答えを見つける必要があります。
それは間違いなく違いを生むと思います。私の個人的な経験から、以下の理由によりこれを擁護します:-
読んでいる間、時々心は怠惰になり、詳細を無視するか物事を推測し始めるのではなく、関係するトップを理解するために徹底的に読むのではありません。それがあなた自身を読んでいる間に不完全な知識を得ることの特定の理由です。
教える場合、それはすべて別の話です。ここでは、仮定ではなく事実を提供することはできません。そのため、教えるために徹底的に読みます。また、教師は完全で正確な知識を提供するのが彼の責任であると感じており、これもまたさらなる校正を促します。
はいぜったいに。教育は、資料の知識を磨き、プレゼンテーション層を強化するためのプラットフォームを提供します。
さらに、他の開発者との絆を築き、後で効果的な開発チームの関係に変えることができます。
プログラミングであろうとなかろうと、他の人にうまく教えることができるとき、あなたはそれを本当に理解します。他の人に何かを教えることができることは、間違いなくあなたのスキルも向上させます。学生はあなたを驚かせ、あなたに主題を別様に考えさせる質問をします。複数の方法で資料を提示することに熟練し、主題の理解を深めることができます。
他人に教えることができるということは、私が本当に何かを本当に理解しているかどうかについてのいつものリトマステストです。
コースの資料を書いている場合は、他のすべての人がリストしたもの(「資料をよく理解している必要があります」など)に加えて、ドキュメントを書くことをお勧めします。業界でも知識を伝達するため。
しかし、あなたが業界にいるとき、ドキュメントは会ったことのない人のためのものであることが多いので、利害関係者/読者が知る必要のあるものではなく、あなたがしたことを文書化するという罠に陥りがちです。
あなたがクラスの学生のために書いているとき、利害関係者/読者の近くにいるので、有用な文書化のその考え方を実践し、発展させることはより簡単です。地獄、もしあなたが本当に運が良ければ、生徒は手を上げてノートを吸うように言うでしょう、そしてあなたはあなたが改善できることを学びました。
はい。私はしばしば、他の誰か、特に開業医が何年にもわたって最初の人(教師またはメンター)、またはオンラインで質問に答えることさえできます(Stack Overflowのような!)。
さらに、学生は問題に別の洞察または(奇妙な?)方法論をもたらし、ソリューションスペースを広げます。
役立つために、教師は舌の先に答えがないかもしれませんが、「わからない」と言って、それを調べたり調べたりして、生徒が答えをより速く、より高い確率で見つけるのを助けることができます学生が自分でできるよりも。
第一原理から何かを説明せざるを得ないとき、それは間違いなくそれをよりよく理解することを強制するでしょう。私はこのアイデアをコードのバグを検索するときによく使用します。誰かをドラッグして、コードのしくみを説明しようとします。通常、バグは数分以内に見つかります。同じ考え。
私はノーだと思います。教師であることはあなたをより良くするわけではありません-学習はあなたをより良くします。あなたが教師になることを学ぶ必要があるなら、あなたはより良くなるでしょう。教えることはあなたが知っていることを維持するのに役立つだけですが、ITの世界ではすべてが毎日変化します。このため、教えるだけに頼るのではなく、...お尻...をソファから降りて学ばなければなりません。
実際の分野について無知だったIT教授に会ったことがあります。彼らには、証明書、コース、壁の紙、たくさんの「ショー」がありました。確かに彼らは話をすることができますが、あなたがこれまでに規定されたコーススケジュールから降りた場合、彼らはバタバタ、スタッター、そして失敗するでしょう。彼らは変化するものの圧力に対処できませんでした。彼らは時代と共に変化せず、彼らが知っていることを教えました、それは時代遅れでした。
それでは、これをもう一度振り返ってみましょう。驚くべき教授が何人かいます。彼らは開発者、上級開発者、主任開発者、アプリケーション開発のディレクターでしたが、その後プログラマーになりました。彼らは現実世界のシナリオを知っていて、教科書の内容の99%は人々が実際の仕事に備える準備ができていないことを知っていたので、それを変更し、最新に保ちました。
12年前、11/12年生のIT教師からオファーがありました。学校で毎年彼のセキュリティやファイアウォールなどを破ることができたとしたら、彼は私の仕事に関係なく、コースでA +(100%)をくれます。ヘック、私がジュニアとして働いている間、私は彼がコースを計画するのを手伝いました。当時の開発者。彼が私に与えたその提案は、彼を(当時は)Windows NTセキュリティの専門家にしました。私は100%取得しました。彼のUN/PWを盗んでからロックアウトしなければなりませんでした。それが結局のところ唯一の方法でした...しかし、言うまでもなく、彼は教師として、そして教育の面でITで上達しました。彼は自分のクラスではなく自分の議題で働いた。
では、どこに線を引くのですか?先生の態度で描いてください。その先生が進んで学ぶなら、彼らは良くなるでしょう。その先生が波に乗っていて、給料をもらっていて、あまり気にならなかったら-彼らは悪化するでしょう。
はい!
Louis E. Frenzel 数年前にこれについて正確に書きました:
論文や記事を書くか、学んだことを教えてください。それを書いたり教えたりするには、それを知る必要があります。他人に説明しなければならないより、自分のために学ぶより良い方法はありません。
何十もの「なぜ私のコードは動かないのですか?」プログラミングの入門コースでエクササイズセッションを指導しているときの問題は、その場でコードを理解し、頭の中でそれをシミュレートするのに非常によくなりました。
私の教師としての経験に基づいています。 [〜#〜] no [〜#〜]と言います。
なぜなら、あなたは基本をよりよく理解する一方で、子供や新人を教えることで、実際の職業に関連する改善を行っていないからです。
なぜこれが起こるのですか? -プログラミングは、人々が勉強できるよりも速く開発されているためです。新しい言語とフレームワーク、新しいツール、新しい概念、新しいハードウェアが登場します。そして、プロのプログラマーは彼のドメインを知らなければなりません。そうでなければ、誰も彼を必要としないでしょう。
-「しかしあなたはcan基本的なアルゴリズムを研究する」と言いたい-そして私はあなたに言った-'but you should haveそれらを大学で研究した'と言うかもしれない。
他のトピックは仕事のリズムです。 「教師」は遅く、実際の現実の問題をすばやく解決するために使用されていません。
最後になりましたが、教えることは与えています。あなたが教えたいとき-あなたは自分を止めることはできません;)それは内部からのただの呼び出しであり、あなたの周りの愚かさを減らすためにあなたの知識を共有するための譲れない衝動、そして最終的には、世界をより良い場所にする;)
直接関係はありませんが...
私はこれが私の孫のボーイスカウト部隊でいつも起こっているのを見ます。年配のスカウトは、後輩に教えようとするまで、何かを「知っている」と思っています。ダイナミックな変化は、年齢や経験に関係なく、それほど変化するとは思いません。
この質問に対する答えの多くは、何かを教えることはあなたが最初にそれを学ぶ必要があることを意味するので、教えることができるようになるためにはもっと良くなる必要があると指摘しています。これはほぼ正しいと言えるでしょう。
Ifあなたは責任がありますコース教材の開発、そして主題を完全に理解する必要があります。あなたがまだ知らない何かを学ぶ必要があると仮定して、このレベルに材料を学ぶことはあなたをより良くします。
一方、他の人が準備したコースの教材を読む肉の人形にすぎない場合は、主題を知らない、または理解せずに逃げることができます。これは、入門コースに特に当てはまります。あなたが初心者クラスを教える経験豊富な開発者である場合、あなたは本当に実質的なことを学ぶ必要がありますか?
教えることはプログラミングの知識やスキルを高めるだけでなく、プログラミングに関する記事やチュートリアルを書くのにも役立ちます。トピックを理解できる方法で他の人に説明できる場合、それはそのトピックも知っていて理解していることを意味します。
個人的にどれだけ上手に準備するかによると思います。私はばかに見えるように作られるのが好きではないので、教えるときは、準備をしすぎて、授業で持ちがちなことよりもずっと詳細にメモを書きます。そうすることで、ほとんどの質問に対応できるので安心です。私がクラスの準備をしているときはいつでも、それまで忘れていたか見落としていた細かいディテールを見つけました。演習の設計は、特に難しい場合があります。
すでにプログラマーである人のための準備は、全体的なレベルの余分な努力です。あなたはクラスに、彼らが学ぶように求められているのを嫌う人がいることを期待することができますPython逆に最愛のC#(または何でも)。彼らはあなたが言うすべてに挑戦します。すでにある程度の知識があり、初日に高度な質問をします。最初のケースでは、トピックを続け、クラスが敵対的に振る舞わない限り、言語間の違いについて話し合ってはいけません。資料に戻ってください。 2番目のケースでは、ほとんどすべての高度な質問をクラスの後半で参照できます(わからない場合は、答えを調べる時間を与えてください)。これにより、自信が得られるはずです。クラスを受講している人々のためのより難しい演習ですが、彼らはすでに主題に精通しています。退屈しやすいための独立した研究のようなものです(そして、彼らが行うためにこれらの高度なトピック演習を引き出したとき、彼らは驚いていますか?他の誰もが苦労している間彼らは5分でやった運動と一緒に!)
しかし、ほとんどのプログラマーは学びたいと思っており、何か有用なことを始めたいと思っています。おそらく基本を最低限に抑えることができます。この種のクラスは、Hello Worldタイプの演習を行うことによって退屈します。物事をより実用的でビジネスに役立つものにします。経験のないプログラマーよりも経験のある資料をより多くカバーするように計画できます。あなたが彼らがやる仕事の種類に固有のエクササイズを作ることができれば、それはさらに良いです。
生徒はあなたが言うことをユニークな方法で解釈する驚くべき能力を持っています。彼らの過ちは、あなたがすることは決して起こらないことかもしれません。彼らが間違いを修正する手助けをし、なぜそれらが間違いであるかを説明することはコードレビューであなたを助けるでしょう!