教授编程会不会使您成为更好的程序员?


40

我认为自己是中级Python程序员,并且有机会成为初学者Python编程课程的培训师。

我想知道这是否真的会扩大我的编程范围。在成功地训练了一群人之后,有人有启发性的经历吗?

它是否还取决于这些人-他们是程序员还是菜鸟生?(就我而言,他们是中级的.NET和Java程序员)

我对他们有什么期望?

我的恐惧之一是-如果其中一个问一个纠结的问题时我cho住了怎么办?这正常吗?


不必担心(令人窒息的)不知道答案。通过让学生指出您不熟悉的领域,您可以知道在教明年的学生时需要学习的知识。
马丁·约克

谢谢。但是培训不是在大学里进行的-这是一次培训一些小型Web开发公司的Java / .NET员工的机会。
treecoder

34
教学东西会让你更善于,因为师资力量你彻底了解。另外,您在教学时实际上是在重新研究
杰克·伯格

2
做你自然的自我并表达知识。学生是像你我这样的人,他们打算在教室里听你的话,以学习。当您的学生因您的教学而获得高分或提出出色的解决方案时,它就会显示出来。您可能会从中获得满足,这很容易违抗表达。
vpit3833 2011年

2
我曾经采访过的所有培训师;开发人员职位面试失败。编程不仅仅是理论。要成为一名更好的程序员,您必须通过制作实际应用来学习“实践”。
穆罕默德·哈桑·汗

Answers:


37

以我的经验,教授编程确实使我变得更好。它迫使我对以前刚刚接受或视为理所当然的概念有了更好的理解。当我不得不以多种不同的方式表达对我而言古老而又对学生而言新颖的观点时(因为并非每个人都从相同的示例中学习相同的方式),最终使我对材料有了更深刻的理解。

是的,有时学生会问您不知道答案的问题。可以,您可以告诉他们您不知道的情况,提出可能的解释,并保证在下一节课之前进行研究。


1
@greengit我建议您比较这两种语言,但是当说一种语言比另一种语言更好时,请确保您真的知道自己在说什么,因为有些学生可能会不同意并具有有效的反论点。比较它们并显示python使Java / .NET中的不同任务比Java / .NET更容易的方法是一种很好的方式来展示这些概念。
瑞安·马修斯

2
我要说的是保持比较最少,并专注于在Python中做事。我认为他们已经熟悉基本的构造,例如变量分配,循环/迭代,函数,递归,控制流结构等。这可能有助于设计他们在课程中构建的项目(如果足够长的话) 。
FrustratedWithFormsDesigner

3
@greengit不要假装知道您不知道的东西。如果您不足够进行比较,请将其用作学习要点,并要求您的学生解释一下它在Java / .NET中的工作原理,并尝试一起进行比较。
戴维

2
@greengit我认为不应该假设您需要了解有关该主题的所有知识会有所帮助。这就像期望您在没有参考能力的情况下完成工作。您不会得到所有答案就可以了,但是您可以帮助您的学生找到答案。也许给他们关键条款给谷歌。
戴维8年

1
如果您不知道答案,则+1。我看到太多的教练只是在现场做出一些事情,而不是承认他们并不了解所有事情。我也有一些优秀的指导老师,他们将以此为契机,让学生找到答案,教他们如何查找事物。这需要仔细地完成,以免引起其他人的提问。
Jim C

30

德克萨斯大学的一项旧研究得出以下发现。

人们保留:

  • 他们阅读内容的10%

  • 他们听到的内容的20%

  • 他们看到的东西的30%

  • 他们所见所闻的50%

  • 他们工作的70%

  • 他们教的课程的 90%

遵循这种逻辑,学习和保留所学知识的最佳方法是尽最大努力将其教给其他人。

即使我在学校通过Comp Sci 101培训,我还是从事C ++的补习工作,实际上直到我被迫向挣扎中的学生授课之前,我才真正学习C ++。当我帮助非CS毕业生完成他们的作业时,这就像是一场灯泡狂欢般的狂欢。


2
+1。已达到我的投票限制:(请给我指向该链接(如果有
。– treecoder

22
也许您应该停止引用该表。willatworklearning.com/2006/05/people_remember.html
肖恩

5
@ShawnD。我想了那么多...因为您知道他们所说的,所以84%的统计数字都是虚构的。我认为更重要的是,应该将其用于更大的信息。我所教的内容比阅读的要多得多。这是我对自己的自然观察。这就是我要提出的重点。
maple_shaft

3
统计数据不错,+ 1。我的经历大致相同。我们在这里有一句俗语:那些有能力的人。那些做不到的人,教书。那些不会教书的人会教体育。开玩笑的是:)
猎鹰

2
@Falcon,不同版本的最后一句是“谁不能教,管理” ;-)
彼得Török

10

我没有系统地教自己编程,只是试图向或多或少的局外人解释一些概念或问题。这总是很有趣的经历,我每次都学到一些东西。

确实,扬·科门纽斯(Jan Comenius)在几百年前就已经指出,真正深入了解某事的最好方法是向他人解释

因此,继续努力吧-对您来说,这将是宝贵的,丰富的经验。您肯定会遇到困难或令人惊讶的问题-没关系。不要假装您知道所有信息-诚实地说,告诉他们“我不知道,但我会回答您”的意思。他们只会因为诚实而更好地尊重您。


5

除了提到其他答案外,别忘了在教学时,如果您心胸开阔,也可以向学生学习。

您在评论中提到“您对Java / .NET的了解几乎为零”。这是向学生学习的绝好机会。 教学不是一个单向的过程。

如果您不知道问题的答案,请不要试图掩盖事实。 老师对学生的最大伤害是假装他们知道自己不了解的东西。最好的是,当他们发现您不知道您在说什么时,您会失去他们的信任,更糟糕的是,您会误导他们并传递虚假信息,这比没有信息还糟。


+1表示“如果您对此开放,也可以向学生学习”。几年前,当我教一些夜班时,我已经体会到了这一点。
DevSolo 2011年

4

是的,您将获得更深入的了解。与您在此获得的其他答案一样,我也取得了类似的经验。

我获得了额外的经验:我更快地进行了错误分析。您教人,让他们犯错误,而您从未想过。当您帮助他们时,您会注意到有问题的代码(至少,我做到了)。

我的恐惧之一是-如果其中一个问一个纠结的问题时我cho住了怎么办?这正常吗?

我认为这很正常。当我诚实时,我的学者们没有问题(后来我提供了答案)。相反,他们看到没有人必须知道一切。最重要的是要知道如何获取信息。我最好的课程之一是,当我不知道答案时,我们共同查看手册以获取答案。在那之后,他们知道如何阅读手册。


4

我教过大学技术课程(但不教授软件开发)。这是我的看法:

它将使您成为一个更好的程序员吗?

不是1:1。您不会获得与编写程序相同的经验-但这绝不是一件坏事(请继续阅读)。

会扩大您的编程范围吗?

绝对。您将面临新的挑战,并且需要(重新)学习一些多年来您从未了解或忘记的事情。其中一些将在将来有用。它为您提出了许多新的挑战和概念。您将需要从新的角度处理技术问题,并且可以从这个角度解决这些问题并学到很多东西。如果您可以有效地教别人他们需要了解什么技术问题,它通常会提高您对主题的知识并扩展您的知识领域。同样,您提到他们已经知道另一种语言,有人说最好的改进方法之一是学习新语言。

它也取决于那些人吗?

与附近领域的专业人员合作会极大地改变组织结构。他们已经知道如何与计算机通信,编写程序。语法和逻辑将使他们快速学习。他们将在第一周提出具有挑战性的问题。

我对他们有什么期望?

我希望如果您能够将课程的内容与他们已经熟悉的语言联系起来,他们将受益最大:“是的,主题这些方面类似于Java ,但由于这些原因而有所不同”。我希望他们学习的速度很快,这样您就应该期望在课堂外投入大量时间进行准备(再次学习很多,但是大多数开发人员会感兴趣。)

当我被问到一个纠结的问题时如果cho住了怎么办?这正常吗?

好吧,他们和您一样经验丰富,但是在另一个领域(尽管相关)。解释可能会很困难,并且您不会期望您了解所有知识或拥有与所有知识相同的专业知识(结合使用)。说“我不知道”的能力对老师来说是一种很好的素质。如果他们也有经验,您通常可以通过简短的讨论来回答(“哦,我们使用这种技术解决了这个问题”)。如果失败,则应该在下一个会话(为您和他们)之前找到答案。


3

当您可以成功地教别人一些东西时,无论是否编程,那么您就真正理解了。能够教别人最肯定的技巧也使您在技能上也有所提高。学生会问您一些问题,这些问题会让您感到惊讶,并使您对主题的看法有所不同。您将熟练地以多种方式介绍材料,这也将使您对主题有更好的理解。

能否教别人一直是我是否真正了解某件事的试金石。


3

我想肯定会有所作为。根据我的个人经验,我为以下理由辩护:-

  • 在阅读时,有时头脑变得懒惰,以至于忽略细节或开始假设事物,而不是进行详尽的阅读以理解相关的顶部。这就是在阅读过程中获得不完整知识的特殊原因。

  • 就教学而言,这完全是一个不同的故事。在这里,人们不能提供假设,而可以提供事实,因此对教学进行了透彻的阅读。此外,老师们认为,提供完整和正确的知识是他的责任,这又促使进一步的校对。


3

绝对没错。教学为您提供了一个平台,可以增强您对材料的知识以及增强表示层。

此外,它还可以帮助您与其他开发人员建立联系,以后可以转化为有效的开发团队关系。


2

如果您正在编写本课程的材料,那么在其他所有人列出的内容之外(“您必须完全了解材料”等),这是编写文档的好习惯,因为文档(无论是课程说明还是技术文档)都已编写甚至在工业中也可以传播知识。

但是,当您从事行业工作时,文档通常是为您未曾见过且不会见面的人准备的,因此很容易陷入记录您所做的事情而不是利益相关者/阅读者需要知道的事情的陷阱。

当您为班级中的学生写作时,因为您与利益相关者/阅读者非常接近,所以实践和发展有用文档的思维方式变得更加容易。天哪,如果您真的很幸运,一个学生会把手举起来,告诉您笔记很烂,那么您就会学到一些可以改进的地方。


2

是。我经常发现,直到我尝试向他人解释它之前,我才真正理解得不好,尤其是那些没有多年实践者积累的所有假设和流行语的人,无论是第一人称(作为老师还是导师),甚至在线回答问题(例如此处的Stack Overflow!)。

此外,学生可能会给问题带来不同的见解或(怪异的)方法,从而扩大了解决方案的空间。

有用的老师可能不会说出答案,但可以说“我不知道”,对其进行研究或查找,以帮助学生更快,更有可能找到答案。而不是学生自己。


1

当您被迫从基本原理中解释某些事情时,肯定会迫使您更好地理解它。在搜索代码中的错误时,我经常使用这种想法,我将某人拖入其中并尝试向他们解释代码的工作方式。我通常会在几分钟内找到该错误。相同的想法。


1

我会说不。做老师并不能使您变得更好-学习可以使您变得更好。如果您必须学习成为一名老师,那么您会变得更好。教书只会帮助您保留所学知识,但在IT领域,一切每天都在变化。因此,您不能仅仅依靠教学,您必须将...屁股...从沙发上拿下来学习。

我遇到了可能对他们的实际领域一无所知的IT教授。他们有证书,课程,墙上的文件以及许多“展示”。当然,他们可以讲这个话题,但是,如果您不遵守规定的课程表,他们会发抖,结结巴巴并失败。他们无法应对变化的压力。他们没有与时俱进,而是传授了自己所知道的过时的知识。

因此,让我们再次扭转这一局面,我有几位很棒的教授。他们是开发人员,高级开发人员,首席开发人员,应用程序开发总监,然后成为程序员。他们了解现实世界的情况,他们知道教科书中99%的内容都没有使人们为现实生活做好准备,因此他们对其进行了修改,使其保持最新。

12年前,我11/12年级的IT老师给了我一个报价。如果在每个学年中我都能在学校打破他的安全性/防火墙等,无论我做什么工作,他在课程中都会给我A +(100%)。哎呀,我在担任小班时就帮助他计划了课程。那时的开发者。他给我的提议使他(当时)成为Windows NT安全专家。我确实获得了100%的收益,我不得不偷走了他的UN / PW,然后将他拒之门外……这是最终的唯一方法。但是不用说,他的教学和IT方面由于教学而变得更好-他与班级一起工作-不在自己的议程上。

那么,您在哪里划界线?借鉴老师的态度。如果那个老师愿意学习,他们会变得更好。如果那个老师只是随波逐流,得到报酬,而又不太在意-他们会变得更糟。


-1完全不同意。如您所见,您确实是少数派。您的意见很重要,但我认为您可以从此处的大多数老师的答案中学到一些东西。抱歉,无法抗拒最后一个双关语,我只是在阅读有关递归的文章。
2012年

1

必须解决许多“为什么我的代码不起作用?” 在入门编程课程中教授运动课时遇到的问题使我在动态理解代码并在我的脑海中进行仿真方面变得更加出色。


1

根据我自己作为老师的经验。我会说NO

因为尽管您通过教孩子和/或新手更好地了解了基础知识,但您并未进行与实际职业相关的任何改进。

为什么会这样?-因为编程的发展快于人们的学习速度。出现了新的语言和框架,新的工具,新的概念,新的硬件。专业的程序员必须知道他的领域。否则-没有人会需要他。

您可能想说-'但是您可以学习基本算法'-我对您说-'但是您应该在大学学习它们。

其他主题是工作节奏。“老师”很慢,他们不能快速解决现实世界中的实际问题。

最后但并非最不重要的一点是-教学就是付出。当您想教书时 -您无法阻止自己;)这只是内部的呼唤,坚定不移地分享您的知识,减少周围的愚蠢,最终使世界变得更美好;)


这就是为什么您可以通过向学生学习而受益的原因,这些学生可能最近才学到了您不知道的新知识,相关知识或您从未想到的
junky 2012年

1

是!

路易斯·E.弗伦泽尔恰好几年前这样的:

写一篇论文或文章或教你学到什么。您必须知道它才能编写或教它。没有比向他人解释更好的学习方法了。


1

没有直接关系,但是...

我一直在我孙子的童子军部队中看到这种情况。年长的童子军认为他们“知道”一些东西,直到他们尝试向他们的下辈教。我认为无论年龄多大或经历多久,动态变化都不会太大。


我喜欢这样的关联!
2012年

1

这个问题的许多答案都指出,教某事意味着您必须首先学习它,因此您必须变得更好才能能够教书。我会说这几乎是对的。

如果您负责编写课程材料那么您将必须对主题有透彻的了解。如果您需要学习一些未知的知识,则将材料学习到此水平将使您变得更好。

另一方面,如果您只是阅读其他人准备的课程材料的木偶,那么您可能会不了解或不了解主题而逃脱。对于入门课程尤其如此。如果您是一位经验丰富的开发人员,正在教授初学者课程,那么您真的需要学习实质性知识吗?


我大部分都同意,但是我认为很多帖子都说您是在教学过程中学习的,尤其是当您问学生问题时,而不是在准备您认为自己知道的材料时(尽管仍然有价值)在那里面)。
垃圾

0

教学不仅增加了您的编程知识或技能,而且编写编程文章和教程也很有用。如果您可以通过一种易于理解的方式向其他人解释一个主题,则意味着您也了解并理解了该主题。


0

我认为这取决于您个人决定准备的程度。我不喜欢自己看起来像个傻瓜,所以当我教书时,我过度准备,在笔记中比我在课堂上倾向于提出的更多细节。这样我就可以安全地处理大多数问题。每当我为上课做准备时,我都会发现一些精美的细节,直到那时我还是忘记了或忽略了这些细节。设计练习可能特别困难。

为已经存在的程序员做准备是整个额外努力的水平。您可以期望班上有些人讨厌他们被要求学习心爱的C#(或其他任何东西)而学习Python。他们将挑战您所说的一切。您可能会有其他人已经有一些知识,并会在第一天提出高级问题。在第一种情况下,请确保您紧跟主题,除非课堂上没有敌对行为,否则不要讨论语言之间的差异。只需返回您要覆盖的材料即可。在第二种情况下,几乎所有高级问题都可以在课堂上稍后提到(如果您不知道,可以花点时间查找答案。)因此,这应该给您带来信心。我总是为上课的人准备一些更艰苦的练习,因为他们必须这样做,但他们已经熟悉该主题。独立学习的一种,很容易无聊。(当我在其他所有人都挣扎着在五分钟内完成的练习而苦苦挣扎时,当我参加这些高级主题练习时,他们会感到惊讶!)

但是,大多数程序员喜欢学习,并渴望开始做一些有用的事情。您可能可以将基础知识降低到最低限度,这种类对您进行Hello World类型的练习很无聊。使事情变得更实用,对业务更有用。与没有经验的程序员相比,您可以计划涵盖更多有经验的材料,因此需要做更多的准备。如果您可以针对他们将要进行的工作进行练习,那就更好了。

学生具有非凡的能力,可以用独特的方式解释您所说的话。他们的错误可能是您做不到的事情。帮助他们纠正错误并解释为什么是错误,这将帮助您进行代码审查!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.