教是最好的学
英文原文:Teaching is the Best Way to Learn
Vlad Mihalcea 是一位软件架构师,热衷于软件集成、高可伸缩以及并发编程等主题,他感兴趣的领域主要有 Java、数据库、事务、NoSQL、OOP、重构与模式以及敏捷和 Scrum 等。近日 Vlad 撰写了一篇博文,谈到了对于程序员来说该如何学习,什么才是最好的学习方式等主题。
软件开发是一项知识密集型的劳动,时至今日,程序员需要掌握的知识量呈现出爆发式的增长。大多数时候,我们在招聘开发者时都是看他们已有的技能是否与项目的需求相匹配。项目最终会完成,然后开发者又会被分派到新的项目上,有时使用的技术与招聘时所要求的技术是完全不同的。那么有什么办法可以培训开发者呢,让他们能够尽快掌握新的技能,实现自身价值。
通常,培训与指导是被人遗忘的事情,每个程序员都按照自己的方式学习和工作,其实这么做隐藏了非常大的风险。我觉得我们应该在培训与指导上多花一些时间和精力,将其看作是一笔投资而不仅仅是开销。
培训团队有多种方式:
1. 雇佣外部顾问
如果有雇佣外部培训师的预算,那么你就可以考虑这种方式。但遗憾的是,并不是每家公司都愿意将费用花在外部培训师上,特别是在无法准确计算出投资回报率的情况下更是如此。
我曾经参加过这种培训,虽然在培训过程中我觉得我理解了讲师所讲的全部内容,不过过一阵我才发现有很多问题需要解答。但是培训已经结束了,因此只有在消化吸收了培训所讲的内容后,培训的价值才能彰显出来。
2. 让有经验的员工成为讲师
如果有员工在某个领域具备很强的背景,那么你可以让他为团队的其他成员准备并做个培训。这种方式要比聘用外部培训师成本更低,同时还有其他一些好处。培训对于学员和讲师来说都有好处,可谓是一举两得。我记得在高中的心理学课上,老师告诉我说教是记住信息的最好方式(你能记住教授的 90% 的内容)。因此,培训师也会通过这个过程得到很好的自我培训(通过准备相关的材料)。
我发现培训之后会有一个很有趣的结果。人们会过来问你问题,这将你置于一个教练的位置之上。同时,这也会有一个雪球效应,因为学员会对你所讲授的内容产生兴趣,你也会对你所掌握的知识有更深刻的理解,同时还会不断改进自己的培训技巧。
3. 分派式培训
这个想法由来已久,在上网查看资料后,我发现这种方式已经被应用到了外语教学中,那为什么不通过教来学呢?
我的想法是鼓励所有员工彼此教授对方知识,讲的东西可以是他们最擅长的,也可以是新的概念。如果没问题,你甚至可以给每个讲师一定的奖励,或是让他们利用一些工作时间来准备课程。这很有趣,特别是在每天的工作有些单调乏味时效果更佳。
如果团队要掌握某项新技术,而这项技术不那么容易掌握时(比如说 Scala)采用这种方式也是可以的。所有的团队成员都应该学习基本知识,不过每个人要专注于学习特定的一个主题(比如说 Mixins)。通过这种方式,我们将学习成本分散到了每个团队成员身上,因此是一种并行的方式,可以加快学习速度,同时还能确保更佳的学习效果。
各位 InfoQ 读者,你认为最好的学习方式是什么呢?看书、实践、看视频、讲给别人听,还是其他方式?一种方式优于其他方式的原因有哪些呢?个人习惯、时间问题,抑或团队需要?欢迎将你的想法与大家分享。