作者丨云昭
审校丨莫奇
很多研究表明,在工作中学习可以提高对工作满意度和组织幸福感,而这两者都有助于降低开发成本。但现实是:软件工程师要坚持在工作中学习往往是“心有余而力不足”通常很难将学习优先于繁忙的日常工作。
在国外,许多公司鼓励开发者抽出“5/10/20% 时间 ”来进行学习。这虽然有用,但高度依赖于个人动机和学习习惯。例如,只有大约 10% 的谷歌用户能做到“20% 时间”的个人学习。
对于软件工程师来说,最好的学习方式是拥有一个角色和一个项目,在那里他们可以通过日常任务学习。这就是为什么公司应该建立一种文化,让学习成为工程师工作的一部分,而不是“附加内容”。这有助于激发学习动力机,并让那些几乎没有空闲时间的人,——比如小孩的父母——继续学习。
这里有六种行之有效的方法。分享给大家:
(推荐)代码评审✦
代码评审为提供了开发者提供了一个很好的学习机会,因为在代码评审中得到的反馈是高度关联的,并且通常非常具体。当你讨论为什么一种解决方案比另一种更好时,你可以用一种其他方法很难实现的方式来培养你的专业直觉。
评审代码,是软件开发者工作中的一个重要部分,好处也不言而喻:可以发现漏洞,一个人可能会疏忽,但是不大可能所有人都疏忽。可以分享知识技能,你评审别人写的好代码,你学到了;你评审别人写得烂的代码,别人学到了;根据评审的结果讨论,大家都学到了。评审代码可以培养领导能力。如何用对方可以接受的方式提出建议,并引导别人写出更好的代码,这是领导力的体现。
结对编程✦
每人在各自独立设计、实现软件的过程中不免要犯这样那样的错误。结对编程带来的好处是显而易见的。在结对编程的过程中,会看到另一个人编写代码或听到他们讨论解决方案。这使您可以学习改进工作的实用技巧(例如,如何使用编辑器),。你还可以学习新的思考和解决问题的方法。对于开发者而言,结对编程能提供更好的设计质量和代码质量,两人合作能有更强的解决问题的能力。
结对编程的成本比大多数人想象得的要低。除了提高技术技能外,它还可以提高设计质量、减少缺陷、降低人员配置风险、改善团队沟通,通常被认为比单独工作更令人愉快。
WIP(Work in Proces在制品)✦
开发者通常不喜欢处理与他人协调的“开销”,这样他们才能感到更有效率。因此,虽然工作可以拆分为较小的任务且并行处理,但开发者通常更喜欢单独处理任务和问题。然而,这通常会导致更多的知识孤岛化和团队内的知识共享减少。
在敏捷开发中,WIP 限制决定了每种情况下的工作流中可以存续的最大工作量。限制进行中的工作数量可以更容易辨识团队工作流中的无效工作。在情况变得更糟前,一个团队在持续交付通道中的瓶颈是非常容易辨别的。
当有明确指示现有工作遇到瓶颈时,团队可以聚焦在阻塞问题上尽快地的理解、实施和解决。一旦消除阻塞,团队中的工作将再次开始流动。这些优势可以确保在最短的时间内向用户交付有价值的增量。
从根本上来讲,WIP 限制鼓励的是“完成”的文化。许多人知道在制品(WIP)限制只是作为改进工作流程的看板。但合理的 WIP 限制可以通过协作改进学习。作为额外的好处,它还带来了更好的代码审查。
编写设计文档✦
设计文档、RFC 、“文档化计划”等都是在工作中学习的好方法。良好的文档,能从产品和技术角度解释为什么选择的解决方案是最优的。而且,它还考虑了不同方法的权衡,并强调了对解决方案有贡献的最重要的非功能性需求,如可访问性、性能和用户体验。
阅读这样一个高度上下文相关的文档可以让开发者了解其他人(通常是更有经验的人)是如何看待技术决策的。不仅如此,编写设计文档的开发者还能点亮这些技能树:系统设计、沟通技术决策,以及如何激励和激励同行采用解决方案。
学习小组✦
组织学习小组是一个非常好的对等学习工具。当工作中有超过几个工程师分布在多个团队时,这一点尤其正确。可是以将书籍或课程中学到的知识应用到日常工作中并不容易,而且可能会导致人们为了学习而在代码库中“滥用知识”。当在同一环境下组织小组进行讨论,更容易发现有价值的知识。
通常,学习小组会议最好的部分是让人们分享他们自己的经验和关于这个主题的不同角度,从而超越材料。这对于涵盖高级原则的书籍 / 材料尤其如此(例如,“领域驱动设计”和“使用遗留代码”之类的书籍)
这里,提供一个可参考的大规模组织学习小组的步骤:
寻找开发者感兴趣的主题、书籍或课程。或者,从公司中找到一些可以参与的“专家成员”。选择负责组织学习小组会议的人员。
为小组安排一次 30-60 分钟的会议,每周定期日历邀请。团队越大,你需要的时间就越多。会议可以是延长的公司付费午餐。
对于每次会议,选择每个人都可以事先阅读的部分材料。例如,对于书籍,我们使用的页面不到 50 页。与会者应在会议间隙以自己的速度阅读本材料。
会议开始时,让每个人都仔细阅读他们对材料的笔记或想法,并进行讨论。
当学习小组的材料与参与者当前的项目高度相关时,他们几乎可以立即应用所学知识。从长远来看,其他材料也通常会带来不小的回报。
点对点共享✦
对学习感到兴奋的最好方法之一,是通过你周围的人。这就也是建立一种与同龄人分享所学知识的文化十分重要的原因。例如,开发者可以一起观看工程讲座,分享公司内网上有趣内容的链接,或者组织会议,让团队成员分享他们关于某个主题的知识等。
当然,不是每个人都会阅读每一篇优秀的博客文章,也不大可能会参加每一次会议,但无论何时,开发者都会学到一些有用的东西。积极的学习经历创造了一个良性循环,并激励开发者学习更多。
写在最后✦
你有没有尝试过以上这些做法?哪种方法比较有效?欢迎在评论区讨论你的经验,与我们分享您的看法与建议。我们将在评论区选择三位留言点赞最高的小伙伴,送出我们 51CTO 价值200元的独家技术图谱一份,欢迎大家踊跃参加哦~
参考链接:
https://dzone.com/articles/software-engineers-learning-at-work