プログラミングを教えることであなたはより良いプログラマーになりますか


40

私自身は中級のPythonプログラマーであり、初心者のPythonプログラミングクラスのトレーナーになる機会を提供されています。

これでプログラミングのレパートリーが本当に広がるのではないかと思っていました。人々のグループのトレーニングに成功した後、誰かが啓発的な経験をしたことがありますか?

それはそれらの人々にも依存していますか?彼らがプログラマーであろうとnoobの学生であろうと?(私の場合、彼らは中級の.NETおよびJavaプログラマーです)

彼らに何を期待すべきですか?

私の恐怖の1つは、彼らの1人がもつれた質問をしたときに詰まったらどうなるかです。これは正常ですか?


答えが分からないことを心配しないでください。生徒がなじみのない領域を指摘することで、来年の生徒に教えるために何を学ぶ必要があるかを知ることができます。
マーティンヨーク

ありがとう。しかし、トレーニングは大学では行われません。これは、2、3の小さなWeb開発会社の一部のJava / .NET従業員をトレーニングする1回の機会です。
ツリーコーダー

34
何かを教えることで、あなたがより良いでしょう、それ指導力はあなたが徹底的に理解しているので、それを。さらに、あなたは教えいるときに本質的にそれを再研究しいます。
ジェイクバーガー

2
あなたの自然な自己になり、知識を表現してください。学生とは、クラスルームであなたの話を聞くことから学ぶつもりのあなたや私のような人々です。生徒が高い点数を獲得したり、指導のために彼らの問題に対するすばらしい解決策を考え出すと、それが表示されます。あなたがそれから得るかもしれない満足は、表現を簡単に無視するかもしれません。
vpit3833

2
私が今までインタビューしたトレーナー全員。開発者の地位のためのインタビューに失敗しました。プログラミングは単なる理論ではありません。優れたプログラマーになるには、実際のアプリを作成して「そして」練習する必要があります。
ムハンマドハサンカーン

回答:


37

私の経験では、プログラミングを教えることは私を良くしました。それは、私が以前に受け入れた、あるいは当然のこととして受け止めた概念のより良い理解を得ることを余儀なくされました。私にとっては古く、学生にとっては新しいアイデアをいくつかの異なる方法で表現しなければならなかったとき(誰もが同じ例から同じ方法で学ぶわけではないため)、最終的には私にとって資料の理解が深まりました。

そして、はい、学生は時々あなたが答えを知らない質問をします。大丈夫です。知らないことを伝え、考えられる説明を考え出し、次のクラスの前に調べることを約束します。


1
@greengit言語を比較することをお勧めしますが、一部の学生は意見が合わず、有効な反論を持っている可能性があるため、ある言語が別の言語よりも優れていると言うときは、あなたが話していることを本当に知っていることを確認してください。それらを比較し、PythonがさまざまなタスクをJava / .NETより簡単にする方法を示すことは、概念を提示するのに役立つ素晴らしい方法です。
ライアンマシューズ

2
最小限に比較して、Pythonで物事を行う方法に焦点を当てると言います。変数の割り当て、ループ/イテレーション、関数、再帰、制御フロー構造などの基本的な構造にすでに慣れていると思います。 。
FrustratedWithFormsDesigner

3
@greengitあなたが知らないことを知っているふりをしないでください。比較するのに十分な知識がない場合は、それを学習ポイントとして使用し、学生にJava / .NETでの動作を説明してもらい、一緒に比較してみてください。
-Davy8

2
@greengit主題に関するすべてを知る必要があるという仮定に入らないことが役立つと思います。それは、あなたが参照を検索する能力なしに仕事をすることを期待しているようなものです。すべての回答を取得できるわけではありませんが、生徒に回答を導くことができます。おそらく彼らにGoogleに重要な言葉を与えてください。
-Davy8

1
答えがわからないときに認めた場合は+1。あまりにも多くのインストラクターが、すべてを知らないことを認めるのではなく、その場で何かを作り上げるだけです。また、機会として使用して、生徒に答えを見つけさせ、物事を調べる方法を教える優れたインストラクターもいました。人々が質問することを思いとどまらせないように、慎重に行う必要があります。
ジムC

30

テキサス大学の古い研究では、次の発見がありました。

保持する人々:

  • 読んだものの10%

  • 彼らが聞くものの20%

  • 彼らが見るものの30パーセント

  • 視聴者の50%

  • 彼らがすることの70%

  • 彼らが教えることの90パーセント

この論理に従って何かを学び、学んだことを保持する最良の方法は、他の人にそれを教えることに最善を尽くすことです。

学校でComp Sci 101を駆け抜けたとしても、私はC ++の個人指導の仕事に就き、苦労している学生に教えることを余儀なくされるまで実際にC ++を学びませんでした。私は、CSを持たない卒業生の割り当てを手伝ってくれたので、電球の乱交が頭の中で消えていくようでした。


2
+1。私の投票制限に達しました:(もしあればリンクを指してください
。-ツリーコーダー

22
たぶん、あなたはそのテーブルへの参照をやめるべきです。willatworklearning.com/2006/05/people_remember.html
ショーンD.

5
@ShawnD。私は同じように考えました...あなたが彼らの言うことを知っているので、統計の84%が構成されています。もっと重要なことは、より大きなメッセージのためにとるべきだと思います。私が読んだものよりも、私が教えるものの多くを保持しています。これは、私自身の自然な観察として私に与えられています。それが私がやろうとしているポイントでした。
maple_shaft

3
素敵な統計、+ 1。私の経験はほとんど同じです。ここにsayingがあります:できる人、やれ。できない人は教えてください。教えることができない人、スポーツを教える。冗談です:)
ファルコン

2
@Falcon、最後の文の別のバージョンは「教えること、管理することができない人」です ;-)
ペテル・トレック

10

私は自分でプログラミングを体系的に教えたわけではなく、ある程度の部外者に概念や問題を説明しようとしただけです。それは常に興味深い経験であり、毎回何かを学びました。

実際、ヤンコメニウスは、数百年前にすでに、何かを本当に深く理解する最良の方法は、それを他の人に説明することだと指摘しました

だからそれのために行く-それはあなたにとって価値のある、豊かな経験になります。あなたは確かに難しい質問や驚くべき質問を受け取るでしょう-それで構いません。あなたがすべてを知っているふりをしようとしないでください-正直に言って、「わからないが、答えを返してあげます」のようなことを伝えてください。彼らは正直であることに対してあなたをよりよく尊敬するだけです。


5

他の答えが言及していることに加えて、教えいる間、あなたがそれについて心を開いているなら、あなたはあなたの学生から学ぶこともできることを忘れないでください。

コメントで、「Java / .NETの知識はゼロに近い」と述べました。それは生徒から学ぶ絶好の機会です。 教えることは一方向のプロセスではありません。

質問に対する答えがわからない場合は、その事実を隠そうとしないでください。 教師が生徒にできる最大の障害は、生徒が知らないことを知っているふりをすることです。せいぜい、あなたが何を話しているのかわからないことがわかったとき、あなたは信頼を失い、さらに悪いことに、あなたは彼らを誤解させ、情報がないより悪い悪い情報を伝えます。


+1「あなたがそれについて心を開いているなら、あなたはあなたの学生から学ぶこともできます」私は何年も前に、いくつかの夜のクラスを教えたときにこれを経験しました。
DevSolo

4

はい、あなたはより深い理解を得るでしょう。ここで得た他の答えと同様の経験をしました。

私は追加の経験をしました。エラー分析の方が早くなりました。あなたは人々を教えるので、彼らは間違いを犯します、あなたは決して考えませんでした。あなたが彼らを助けるとき、あなたは問題のあるコードに目を向けます(少なくとも、私はそうしました)。

私の恐怖の1つは、彼らの1人がもつれた質問をしたときに詰まったらどうなるかです。これは正常ですか?

普通だと思う。そして、私が正直だったとき(そして後で答えを提供した)、私の学者は問題がなかった。反対に、彼らは誰もすべてを知ってはならないことを見ました。最も重要なことは、情報を取得する方法を知ることです。私の最高のレッスンの1つは、答えがわからず、マニュアルを一緒に見て答えを得たときでした。その後、彼らはマニュアルの読み方を知った。


4

私は高等専門学校レベルのクラスを教えました(しかし、ソフトウェア開発ではありません)。私の見解は次のとおりです。

それはあなたをより良いプログラマにしますか?

1:1ではありません。プログラムを書くのと同じ経験は得られませんが、それは決して悪いことではありません(続きを読む)。

プログラミングのレパートリーが広がりますか?

絶対に。あなたは新しい挑戦をするでしょう、そしてあなたが何年も知らなかったか、忘れていなかったいくつかのことを(再)学ぶ必要があります。そのうちのいくつかは将来役に立つでしょう。それはあなたに多くの新しい挑戦と概念を提示します。新しい視点から技術的な問題に取り組む必要があります。その視点を取り、それらの問題を解決することで多くのことを学ぶことができます。技術的な問題を理解するために必要なことを誰かに効果的に教えることができれば、多くの場合、主題に関する知識が向上し、知識領域が広がります。同様に、彼らはすでに別の言語を知っていると言いますが、改善するための最良の方法の1つは新しい言語を学ぶことだと言う人もいます。

それはそれらの人々にも依存していますか?

近くのドメインの専門家と協力することで、構造が劇的に変わります。彼らはすでに、コンピューターと通信し、プログラムを書く方法を知っています。構文とロジックはすぐに習得できます。彼らは最初の週にやりがいのある質問をします。

彼らに何を期待すべきですか?

コースのコンテンツを既に慣れ親しんでいる言語に関連付けることができれば、最も有益になると思います。「はい、これらの点主題はJavaに似ていますが、これらの理由で異なります」。私は彼らが学ぶペースが非常に速いことを期待しているので、準備のためにクラスの外でかなりの時間を投資することを期待する必要があります(繰り返しますが、学ぶことはたくさんありますが、トピックはほとんどの開発者の興味を引くでしょう)

もつれた質問をされたときに窒息したらどうなるでしょう。これは正常ですか?

まあ、彼らはあなたと同じくらい経験がありますが、別の分野で(関連しているけれども)説明は難しい場合があり、すべてを知っていることや、それらすべてと同じ専門分野(組み合わせ)を持つことは期待できません。「わからない」と言う能力は、教師にとって良い品質です。経験豊富な場合は、短い議論で答えを得ることができます(「ああ、このテクニックを使っその問題を解決します」)。それが失敗した場合、次のセッションまでに(あなたと彼らのために)答えを見つける必要があります。


3

プログラミングの有無に関係なく、他の人に何かをうまく教えることができれば、それを本当に理解できます。他の人に間違いなく何かを教えることができると、スキルも向上します。学生は、あなたを驚かせる質問をし、あなたは主題について異なって考えさせます。複数の方法で資料を提示するスキルを身に付けることで、主題をよりよく理解することができます。

他の人を教えることができるということは、私が何かを本当に理解しているかどうかについての私のリトマス試験でした。


3

間違いなく違いを生むと思います。私の個人的な経験から、私は次の理由でこれを擁護します:-

  • 読んでいる間、心は怠detailsになり、詳細を無視したり、関係するトップを理解するために徹底的に読んだりすることなく物事を引き受けるようになることがあります。それが、あなた自身を読んでいる間に不完全な知識を得る特別な理由です。

  • 教育の場合、それはすべて一緒に異なる物語です。ここでは、仮定ではなく事実を提供することができるため、教育のために徹底的な読書が行われます。また、教師は、完全で正しい知識を提供することは彼の責任であると感じており、これはさらに校正を促すものです。


3

はいぜったいに。ティーチングは、資料の知識を磨き、プレゼンテーション層を強化するためのプラットフォームを提供します。

さらに、他の開発者との絆を築くのに役立ち、後で効果的な開発チームの関係に変換できます。


2

コースの資料を書いている場合は、他の全員がリストしたもの(「資料をよく知っている必要があります」など)に加えて、文書を書くことをお勧めします。産業界でも知識を移転する。

しかし、あなたが業界にいるとき、ドキュメントはあなたが会ったことのない人と会わない人のためのものであることが多いので、利害関係者/読者が知る必要のあることではなく、あなたがしたことを文書化するというtrapに陥りやすいです。

クラスの生徒のために書いているときは、利害関係者/読者の近くにいるので、有用な文書化の考え方を実践し、開発するのが簡単です。地獄、もしあなたが本当に幸運なら、生徒が手を空中に置いてあなたのノートを吸うと言って、それからあなたはあなたが改善できることを学んだ。


2

はい。私はしばしば、他の誰かに説明しようとするまで、何かを本当によく理解していなかったことにしばしば気づきました。特に、最初の人(教師として、またはメンター)、またはオンラインで質問に答えることもできます(スタックオーバーフローについてはこちら)。

さらに、学生は問題に別の洞察や(奇妙な?)方法論をもたらし、解決策の領域を広げることがあります。

教師は有用であるために、舌の先に答えがないかもしれませんが、「わからない」と言ったり、調べたり調べたりして、生徒がより速く、より高い確率で答えを見つけるのを助けます。生徒が自分でできるよりも。


1

あなたが第一原理から何かを説明することを余儀なくされるとき、それは間違いなくあなたにそれをよりよく理解することを強制します。コードのバグを検索するときにこのアイデアをよく使用します。誰かを引きずり込み、コードがどのように機能するかを説明しようとします。私は通常、数分以内にバグを見つけます。同じ考え。


1

いいえ。先生になっても、あなたが良くなるわけではありません。学ぶことはあなたを良くします。あなたが教師になることを学ばなければならないなら、あなたは良くなるでしょう。教えることはあなたが知っていることを保持するのに役立つだけですが、ITの世界ではすべてが毎日変化します。このため、あなたはただ教えるだけに頼ることはできません。

実際の分野については無知だったIT教授に会ったことがあります。彼らは証明書、コース、壁の書類、たくさんの「ショー」を持っていました。確かに彼らは話を話すことができますが、あなたがこれまでに定められたコーススケジュールから降りると、彼らはひらひら、st音して失敗します。彼らは変化する物事の圧力に対処できませんでした。彼らは時代とともに変わりませんでした、彼らは彼らが知っていたことを教えました、それは時代遅れでした。

それで、これをもう一度振り返ってみましょう、私はいくつかの素晴らしい教授がいました。彼らは開発者、上級開発者、主任開発者、アプリケーション開発のディレクターであり、プログラマーになりました。彼らは現実の世界のシナリオを知っていて、教科書の99%が実際の仕事の準備をしていないことを知っていたので、それを変えて、最新の状態に保ちました。

12年前、11/12年生のIT教師からオファーがありました。各学年を通して学校で彼のセキュリティ/ファイアウォールなどを破ることができた場合、彼は私の仕事に関係なく、コースでA +(100%)をくれます。ヘック、私はジュニアとして働いている間、私は彼がコースを計画するのを手伝いました。当時の開発者。彼が私に与えた申し出は、彼を(当時)Windows NTセキュリティの専門家にしました。私は100%を手に入れたので、彼のUN / PWを盗んでからロックアウトしなければなりませんでした...それが最後の唯一の方法でした...彼は彼のクラスで働いた-彼自身の議題ではなかった。

では、どこで線を引きますか?教師の態度でそれを描きます。その先生が学ぶことをいとわないなら、彼らは良くなります。その先生がただ波に乗って、給料をもらって、あまり気にしないなら、彼らは悪化するでしょう。


-1まったくそう思わない。あなたが見ることができるように、あなたは本当に少数派です。あなたの意見は重要ですが、教師の回答の大半からここで何かを学ぶことができると思います。申し訳ありませんが、最後のしゃれに抵抗することができませんでした、私はちょうど再帰についての投稿を読んでいた。
ジャンキー

1

何十もの「コードが機能しない理由」を解決する必要があります。入門的なプログラミングコースでエクササイズセッションを教える際の問題により、コードをその場で理解し、頭の中でシミュレートするのが非常にうまくなりました。


1

教師としての私自身の経験に基づいています。私はノーと言うでしょう。

なぜなら、子供や初心者を教えることによって基本をよりよく理解する一方で、実際の職業に関連する改善を行っていないからです。

なぜこれが起こるのですか?-プログラミングは、人々が学習できるよりも速く発展しているためです。新しい言語とフレームワーク、新しいツール、新しい概念、新しいハードウェアが登場します。そして、プロのプログラマーは彼のドメインを知っていなければなりません。または、誰も彼を必要としないでしょう。

「基本的なアルゴリズム学ぶことはできます」と言いたいと思うかもしれません-そして私はあなたに言います-「しかしあなた大学でそれら勉強すべきだった」。

他のトピックは仕事のリズムです。「教師」は遅く、実際の現実の問題を迅速に解決するためには使用されません。

そして最後になりましたが、教育は与えています。あなたが教えたいとき-あなたは自分自身を止めることはできません;)それは内部からの単なる呼び出し、あなたの知識を共有し、あなたの周りの愚かさを減らし、最終的に世界をより良い場所にするための不屈の衝動です;)


これが、あなたが最近、あなたが知らない新しい、関連する知識、またはあなたが考えていなかった見方拾ったかもしれないあなたの学生から学ぶことによって利益を得る理由です
ジャンキー

1

はい!

ルイ・E・フレンゼルは、数年前にまさにこれについて書いた:

論文や記事を書くか、学んだことを教えてください。あなたはそれを書いたり教えたりするためにそれを知る必要があります。他の人に説明するよりも自分で学ぶより良い方法はありません。


1

直接関係ありませんが...

私は孫のボーイスカウト部隊でこれが常に起こるのを見ます。年上のスカウトは、後輩に教えようとするまで、何かを「知っている」と考えます。どんなに古くても経験を積んでも、動的な変化はあまりないと思います。


このような相関関係が大好きです!
ジャンキー

1

この質問に対する多くの答えは、何かを教えることは、まずそれを学ぶ必要があることを意味しているので、教えることができるようになるには良くなる必要があると指摘しています。これはほぼ正しいと思います。

場合は、あなたが担当している教材を開発しその後、あなたは主題の完全な理解を得るために必要があります。あなたがまだ知らないことを学ぶ必要があると仮定すると、このレベルまで資料を学ぶことはあなたをより良くします。

一方、あなたが他の誰かが準備したコース教材を読んでいる肉人形にすぎない場合は、主題を知らないで理解することなく逃げることができるでしょう。これは特に入門コースに当てはまります。あなたが初心者のクラスを教える経験豊富な開発者である場合、あなたは本当に実質的な何かを学ぶ必要がありますか?


私はほとんど同意しますが、多くの投稿は、あなたが知っていると思う資料を準備するのではなく、特に学生から質問されたときに、教えるプロセスによって学ぶと言っていたと思います(まだ価値がありますがその中で)。
ジャンキー

0

教育はプログラミングの知識やスキルを高めるだけでなく、プログラミングの記事やチュートリアルを書くのにも役立ちます。トピックを理解できる方法で他の人に説明できる場合、それはそのトピックも知っており、理解していることを意味します。


0

それはあなたが個人的にどの程度準備するかによって決まると思います。私は馬鹿に見えるようにされるのが好きではないので、教えるとき、私は準備しすぎて、クラスで育てる傾向があるものよりもはるかに詳細にメモに書きます。そうすれば、ほとんどの質問に対処できます。クラスの準備をしているときはいつでも、それまで忘れていたり見落としていた細かい部分を見つけました。エクササイズの設計は特に難しい場合があります。

すでにプログラマーが存在している人々のために準備することは、余分な努力の全体的なレベルです。あなたは、クラスの中で、愛されているC#(またはその他)を学ぶためにPythonを習得するように求められていることを嫌う人々を期待することができます。彼らはあなたが言うすべてに挑戦します。すでにある程度の知識を持っている人がいて、初日に高度な質問をすることもあります。最初のケースでは、クラスが敵対的に振る舞わない限り、トピックを維持し、言語間の違いについて議論しないでください。カバーする資料に戻ります。2番目のケースでは、ほとんどすべての高度な質問をクラスの後半で参照できます(答えがわからない場合は、回答を検索する時間を与えてください)。私はクラスを受講している人々のために、より厳しいエクササイズを常に準備します。彼らはそうする必要があるが、彼らはすでに主題に精通しているからです。簡単に退屈のための独立した研究の並べ替え。(そして、他のみんなが5分でやったエクササイズに苦労している間に、彼らのために高度なトピックエクササイズを引き出したとき、彼らは驚いています!)

しかし、ほとんどのプログラマーは学びたいと思っており、何か役に立つことを始めたいと思っています。おそらく基本を最小限に抑えることができます。この種のクラスは、Hello Worldタイプの演習を行うことで退屈します。物事をより実用的でビジネスに役立つものにします。未経験のプログラマーよりも多くの資料を経験を積んで計画することができます。あなたが彼らがしている仕事の種類に固有の演習を行うことができれば、それはさらに良いです。

生徒は、あなたが言うことをユニークな方法で解釈する驚くべき能力を持っています。彼らの過ちは、あなたがすることは決して起こらないことかもしれません。彼らが彼らの間違いを修正するのを助け、彼らが間違いである理由を説明することは、コードレビューであなたを助けます!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.