开发人员如何转行去做教师
最近有个朋友问我:
我最近在考虑像你那样在大学或中学教一门编程课。你能指点一下我怎么去更深入了解这些机会吗?要教大学的课的话,我是不是需要先拿个硕士学位呢?你当时是怎么去接触学校谈教学的?
对于业界的程序员码农去教计算机科学课程的想法我是非常赞成的。有实际经验的人能给课堂带去实际工作的视角和酷感,这些是专职教员们模仿不了的。而在教学过程中对主题的深入探索也会让码农从业者们提高学术严谨方面的素养,子曰:“能教,方为知也。” (译者注:可能有人要问了:“这是哪个子说的?”,对这种问题我的答案都是:“老子说的!”)
我给朋友答复的整理后版本如下:
如果我计划去教大学课程,是否需要先拿个硕士学位?
(211 工程的)大学都要求教授拥有博士学位。一般来说他们的博士学位都是从更牛的大学获得的,很少有本校博士留校任教的情况。不过,也有一些全职或非全职的教学岗位不需要博士学位,这种岗位叫讲师(在英国,讲师的意思又不同了)。例如宾大(宾夕法尼亚大学)就总是有一些讲师的空缺。
(985 工程的)研究性大学可能会更希望讲师有博士学位,但是作为要求的只是硕士学位就可以了。没有博士学位,你会碰到困难( glass ceiling),例如不能引入新的本科生必修课,不过如果你的点子够正,也不是完全不可能。很多大学特别是那些只招收本科生的,或者是大部分毕业生都去业界工作的,会允许讲师只有学士学位,尤其是当它们有丰富业界经验的情况下。
(译注:the glass ceiling effect 意思是天花板效应。这是一种比喻,指的是设置一种无形的、人为的困难,以阻碍某些有资格的人(尤其是女性)在组织中上升到一定的职位。)
所以,硕士学位不是教学必须的,但它能增加你的选择面,并有助于你形成学术圈的人脉网络。
你当时是怎么去接触学校谈教学的?
我没去。我当时很幸运。我去宾大的时候认识了一堆人,特别是 Joe Kider,他们鼓励我去申请教 GPU 课程。
当然也不可能总是这么简单,不过有一些办法…
在本地的某个大学做一次演讲(talk)
这有两种方法:
找到相关课程的教员,毛遂自荐做一期嘉宾讲座。基本上所有的计算机科学系会列出它们当前的课程表。另外,教员都有个人网页,上面有他的邮件地址。比如,有一个宾大的教员。你可以给他写封简洁的邮件,说明你的工作地点,想讲解的主题,以及该主题和该课程的关联。如果能拿到他上课的 PPT 会更有用,不过我个人从来没看到过。
总的来说,教员很喜欢嘉宾讲座,特别是对于研究生和研讨会类型的课程。实际上,我就花了很多时间去找嘉宾来做讲座。因为我教的是 GPU 课程,我特别希望有来自 GPU 厂商、游戏工作室、研究实验室等机构的人来做讲座。即使我来自业界,嘉宾往往会带来其他的视角。实际上,要是有合适的讲座嘉宾来,我宁愿取消我的一次课程。这些讲座是一学期里的亮点。
确保找到合适的时机。例如,不要在学期只剩两周的时候给教员写邮件问能不能加个讲座。很难说什么时间点是最好的,因为教员要做的准备工作因人而异。我通常会在学期开始时或开始前一个月就敲定嘉宾讲座。给你个警告:课程的第一周往往会很疯狂。
还可以找到你感兴趣的领域的一位教员并毛遂自荐给全系做一个讲座。这也很好,因为你会遇到更多的人,而且有时教员也不愿意把课堂时间让给你。大部分系都会有一系列研讨会,让学术界或业界的来访者介绍他们在做的工作。例如,这里是宾大的研讨会。很多时候是关注研究的,但也不一定,尤其是在小一点的大学。
当年我做硕士论文答辩的时候,我请了本地大学的图形学教员参加答辩会。他们一个都没来,但结果我被邀请去参加了 Villanova 大学的研讨会。我的工作不完全是研究性质。它在一两个地方有点创新,但它更像是说“这是对某个领域的调研,一个很酷的项目实现,配上仔细的总结分析。”我觉得大部分的业界人士都能准备出一套这样的讲座内容。
有一些做讲座的动机如下
你对某个想和其他人交流的主题很有热情。如果不是这样,教学工作就不适合你。
做讲座和教学不一样,但也是很好的经历和相关的经验。
这对发展人脉网络有利,即使目前在该大学还没有空缺职位。
Give a talk at a conference 在会议上做专题演讲
在会议上做演讲有很多好处是和在大学做讲座一样的。它有利于分享知识,增进经验,发展人脉网络,特别是在很多学术界人士参与的情况下。
得到在学术会议上做演讲的机会有可能很难,取决于会议的具体情况。我曾被拒过很多次。别担心,每个人都或多或少地被拒过。
像 SIGGRAPH 这样的大型学术会议的讲座竞争激烈,但比较可行的是加入某个已有的专题,或者和别人合伙成立新的专题或小组,或在非正式讨论会(BOF)上发言,甚至组织你自己的非正式讨论会。在学术界人士眼里,非正式讨论会这样的形式可信度不高,但它还是会很有意思,也是很好的经验和人脉网络形式。
大型会议并不是唯一的选项。你所在公司的用户大会就是一个更简单的机会。还有当地的一些聚会也行。更小型的或者业界的会议也是不错的机会。
你还可以在公司做演讲来增加经验。大部分地方有自备午餐的嘉宾讲座活动。这种场合有助于你结识某些能邀请你的人。例如,我曾经通过以前在 IBM 工作时的朋友帮忙,在麻省理工大学的林肯实验室办了一个关于我们的 WebGL 引擎 Cesium 的讲座。
在本地的中学办讲座
现在大部分中学都有计算机科学甚至高级计算机科学课程。教师们都喜欢有业界的人来给他们的学生做讲座。这能弥合上学生在教室里看到的知识和他们在现实世界中能做的事情之间的鸿沟。
I 我有一阵子回到我毕业的中学。有一次我写了一小段 Java 框架来玩五子棋。在多态性的一节课上,学生们可以把他们的人工智能算法实现到一个类里,然后他们的人工智能算法可以互相玩五子棋。我甚至找了一些朋友也实现了他们的人工智能算法,这样学生们还可以和高手们 PK。
教师们也会欢迎你去讲述你是如何做开发工作,你每天都做什么,以及你对学生们有什么忠告。这样的一个讲座准备起来也是很快的。
其他想法
对于在 Udacity 这样的在线课程网站,虽然我除了给他们做过审稿人之外没有什么经验,但我还是觉得教这些课程也是个机会。在这里和学生的互动形式挺不一样的,但是它也还是有回报的,你也可以通过它结识很多人。