辅导初级程序员的几个建议

120 阅读7分钟

作为一名资深程序员,传递知识会比自己写代码更有价值。有创新意识的公司了解并遵循这一价值观。将知识传递给新人,也是能够让整个知识体系站在前人的肩膀上持续改进的基础。

当你在这个过程中持续进行良好的沟通时,也会扩展自己的知识,以及提升对于编码的理解。因此编码能力和理解力会得到同步提升。除此之外,你还能就如何解释特定话题获得更加深入的理解。

初级开发者

作为初级开发者,他们通常会更加聚焦于某个特定的任务,在不断重复的工作中渐渐形成关于系统的完整拼图。但问题在于这个过程不会一蹴而就,所以在初级开发阶段他们的主要任务就是聚焦,聚焦于某个具体的问题,聚焦于某个具体的任务。在这个阶段,初级开发者如果未能理解某个单点与其他单点功能之间的关系,完成任务似的在不同模块之间不断横跳,这对于个人发展没有任何助益。

高级开发者

高级开发者并不一定需要在所有特定领域都非常精深,他们的价值体现在经验上。高级开发者需要考虑的是当下的决策会如何影响整个项目或者公司在未来的表现。他们并不需要对于自己没有某方面特定的专业技能而感到不安,因为需要他们做到的是能够向适合的人提出适合的问题,并且具有能够解决问题的信心。高级开发者曾经走过类似的幽深小径,尝试过拨云见日的各种手段,他们具有能够从泥潭中想尽办法走出来的能力。在过往的工作经历中,他们学习到的是如何解决造成困难的整个环境,而不仅仅是解决造成困难的特定问题。从这个角度来说,高级开发者有能力给予他人合理的建议。

新入职的初级开发者

对于新入职的初级开发者来说,开启一个全新的项目会令人心潮澎湃,同时也会紧张不安。最开始进入项目时,要让初级开发者理解整个项目的方方面面显然是不现实的。所以应该以什么样的心态开始具体的工作呢?我的建议是:只需要了解最总体的大致信息,然后将这些信息分解成自己能够理解并接受的工作内容,最后聚焦于这个工作内容即可。一定要明确在刚开始工作的时候,不需要对于整只大象都了解得面面俱到。

从小处着手:了解一下项目的技术栈,记住项目的代码仓库在哪里,目录结构是什么样的,诸如此类的信息。一个好入手的项目应该具有的特点,应该是文档触手可及;README文件中含有需要关注的特别信息;先去看看项目中那些能看懂的小issue,尝试解决它。像这些小任务会让新人更顺畅地了解代码库,然后坦然作为一个新人,阅读和编写代码、提交代码、等待review和合并。

传帮带

作为高级开发者总有一种冲动,好为人师地训诫初级开发者,急于将自己所知倾囊相授。每当碰到这种时刻,我的建议是先停下来,问问自己现在是合适的时候吗?对于新人来说,当他们需要了解某种知识的时候,恰恰是他们需要应用这种知识的时刻。要保证你传授的知识能够真正被使用,那么恰当其时就异常关键。

坦诚相待显然是沟通的关键,但我们通常忽略另外一个关键点:有效的沟通是双方交换的有效信息量的总和。假设一种场景,初级工程师碰到了某个具体的sql syntax error时向你求助,你却洋洋洒洒的论述了整个MySQL的集合实现。显然你是非常坦诚的,但对于初级工程师的帮助几乎为零。

所以我的建议是,当面对初级工程师的求助时,要观察你在传授知识时对方的表现,是否漫不经心,是否热情洋溢。须知作为输出知识的一方,对于某个特定话题没有必要把你知道的所有细节都一把梭哈出来,那样除了让接收方感到一种扑面而来的难堪其重之外,并不会对解决具体问题有什么益处。输出知识时,找到适合对方的抽象层表达非常关键。

每个个体都不一样,所以学习的路线和方法也都不尽相同。在教学相长的过程中,输出知识的一方应注意持续收集对方的反馈。大多数人在真正实践一个理论概念之前都不会完全理解它,所以要对新人使用和练习学到的新知识有适当的包容心。

教的方式也可以非常多变。除了口头告诉对方以外,让对方切身经历有时候会更加高效。当你在帮助他们debug的时候,大可以光明正大的把stackoverflow和各种调试的过程展示出来,当然要记得在这个过程中告诉他们你为什么要这么做。让初级开发者亲眼见证解决问题的全部过程大有裨益。等到他们逐渐成长之后就可以再把更具挑战性的任务交予他们。刚开始需要建立护栏以免初级开发者的改动铸成大错,然后以小的胜利作为激励;但也要时刻观察,如果碰到难以逾越的困难,就需要停下来甚至回退到简单一些的任务上。

回顾很重要

周期性的回顾可以让你将辅导的过程和结果尽收眼底,并且有机会让你改进之前的方式。

对我来说一对一的面谈是一个很好的方式。利用这个机会问问新人,看看他们觉得你的方式有什么可以改进的点,或者你还有什么其他的方面可以帮助他们。把这个环节纳入到辅导新人的流程中,构建一个完整且健康的反馈循环。

此外,代码的评审也是可供利用的重要机会。如果被辅导者此时的工作内容与你要评审的代码有相关性,不要犹豫,在评审代码时叫上被辅导者。要做好准备,解释你的代码为什么要这么编写。

底线

不要把辅导当做一项指定的工作来做。如果不是真心实意去辅导,那么这项工作一定做不好。当你在这项工作中挣扎时,其他人也是同样的感受。

日常工作中可以拿来做辅导的事项俯首皆是:关于项目中的一个issue的讨论,一篇文章的讨论。这些都是随时可以拿来讨论和共同学习的机会。

辅导他人不仅仅能够让对方成长,你在这个过程中也会以不同的视角重新学习这个知识。通过分享知识整个团队也会越来越强大。