头图

如何让研发新同学快速 Onboarding ?

这个问题牵涉了很多角色,除了研发新同学和 Mentor,还有团队 Leader、架构师,HR 也可能要关注这个问题,尤其是在公司技术转型的过程中。

在我司服务端入职培训过程中,新同学要面临两项挑战,一是语言关,二是项目关。为了降低新同学培训成本,让新同学更快、更好地助力团队提升交付能力,有必要对新同学进行入职培训,让 Mentor 指导新同学有条不紊地进入工作状态。本文提出了一个研发新同学和 Mentor 的协作框架, 旨在帮助新同学快速 Onboarding,如下图所示:

语言共识

一般,我们通过讨论编程语言的作用、选择、学习等几个方面,可以与新同学达成共识,即:

可以使用任意编程语言对问题求解

选择一门具有领域优势的编程语言

通过语言特性来整体把握一门编程语言

语言的作用

在《计算机系统概论》一书中,作者向我们揭示了编程语言与计算机系统的关系。概括地讲,编程语言是描述算法——可计算性问题解法的一种工具,编程语言的一端是人,另一端是机器,整个层次抽象体系围绕人机关系展开,人通过程序控制机器。

我们将算法视为思维层面的东西,是核心的;编程语言视为表达层面的东西,是非核心的——语言只是是思维的物质外壳。

如果我们工作在 N 层,我们只需要关注 N 层,至多关注 N ± 1 层。通常,我们只需要关注编程语言的应用,而不需要关注编程语言的实现。

总之,语言是实现价值的手段,而不是目的。

粗体
语言的选择

一般地,一个算法可以用任意编程语言描述。为什么选择编程语言 X 而不是 Y?又或选择一门终极编程语言 Z ?

针对编程语言选择的问题,与其说是在选择一门编程语言,毋宁说是在选择一个生态——围绕编程语言而产生的库、框架、工具等。而且,编程语言的选择超出了语言本身的考量,需要结合客户、业务、团队进行综合考量。

通常,SRE 选择 Go 或 Python ,QA 和实施选择 Python,服务端和数据端选择 Scala 或 Java ,特别地,也用 Lua、Go 和 Ruby。加上数据采集 SDK,涉及的编程语言会更多。

我们要拥有一个开放的心态,打破“一门编程语言搞定一切”的思维,选择一门最适合应用领域的编程语言。

语言的学习

在《程序设计语言原理》一书中,作者向我们介绍了主流编程语言的主要构件及特性,我们可以以此为纲,通过语言特性来把握一门编程语言。对于通用语言特性,我们可以借助已有的编程语言使用经验进行快速学习;对于特有的语言特性,我们则需要重点学习。

一种语言特性,在语法层面上有多种表述,但其思维内核是相通的,所以,我们应将语言特性的学习作为第一位,语法学习次之。

快速学习

如何快速学习?诀窍是——获取最少必要知识,即将主要精力放在最少必要知识的学习上。

接下来,我们将使用通用特性、快学标签、项目导向,划分出能够支持新同学上手一门编程语言的最少必要知识,从而给新同学制定明确的学习目标。

粗体
通用特性

掌握编程语言的通用特性,有助于学习新的编程语言。这些通用特性包括而不限于:

  • 变量和函数
  • 基本运算符(算数运算、逻辑运算、关系运算、位运算)、运算符的优先级和结合性
  • 表达式和语句
  • 控制流程
  • 类型系统、类型推导
  • 面向对象
  • 函数式
  • 并发、异步

这就要求新同学对通用语言特性有一定的认知。

快学标签

Scala 的创始人 Martin Odersky 对应用程序开发工程师和类库设计人员所需的专业知识技能的层级进行了定义,如下图所示:

《快学 Scala》根据上述经验层级,对 Scala 语言知识进行了标记,让学习者能够有选择地阅读和复习,我称之为快学标签 。

我们通过快学标签,来引导新同学学习的方向及内容,一般是 A1 -> A2 -> L1 -> ...的顺序。

项目导向

在实践过程中,我们发现项目中使用的关键语言特性并没有包含在合适的快学标签中,由此,在 A 标签 和 L 标签的基础上,我们引入 P 标签,根据新同学上手项目使用的关键语言特性,对编程语言知识加以标识。

这样,我们可以更细粒度的划分最少必要知识,让新同学的学习目标更聚焦。

最佳实践

在新同学上手编程语言和上手项目的过程中,我们尝试引入两个最佳实践—— 实验驱动开发和测试驱动开发。

我们推荐新同学,通过实验驱动开发,来尝试学习编程语言特性;通过测试驱动开发,来完成上手项目。

实验驱动开发

实验驱动开发就是开发者在写测试或生产代码前,先花点时间在交互环境或REPL里做实验。

《深入理解 Scala》一书中,对使用 REPL(Read- Evaluate-Print-Loop) 进行实验驱动开发的价值进行了阐释:

  • REPL 是开始学习面向表达式编程的极佳方法。
  • REPL 是一种测试 Scala 语言及其类型系统的强有力手段。
  • REPL 是一种快速测试 Web 服务或 REST API 的方法。
  • REPL 帮助开发者确保其设计的 API 在类型系统里能表达得出来。
  • REPL 是教学 Scala 的最好工具。

测试驱动开发

我们推荐新同学在开发上手项目的过程中,能够先写测试代码,再写产品代码,并在代码重构的过程中,能够思考出更好的设计。

在这里,我们强调测试驱动开发的两个好处,一个是保证质量,另一个是辅助设计。保证质量能让新同学更有信心地交付自己的产出,辅助设计能让新同学交付更好的产出。

上手项目

经过两周的编程语言学习(如果有相关的编程语言背景,这个过程可以略过),新同学通常可以开始上手项目,项目由 Mentor 和团队 Leader 共同指定。在新同学上手项目的过程中,要遵循公司的产研流程和规范——Jira Ticket 规范、技术文档设计规范、MR 规范、代码规范,Mentor 及其他同学在审查新同学代码过程中,要积极地给予指导意见。

写给新同学

新同学要遵循测试驱动开发规则,对没有掌握的编程语言知识,通过 REPL 进行实验。实验代码和项目代码都可以通过 GitLab 找 Mentor 评审。

此外,新同学要主动向 Mentor 反馈问题。

写给 Mentor

Mentor 需要帮助新同学确定最少必要知识和上手项目,之后与新同学的交流可以通过 GitLab 进行,点评新同学的代码,给出指导意见。

代码审查的结果可以作为新同学入职复盘的参考。

此外,Mentor 要及时响应新同学反馈的问题。

结语

本文尝试解决“如何让研发同学快速 Onboarding”,对新同学和 Mentor 的行为进行规范,让新同学在 Mentor 的指导下进行快速上手语言,快速上手项目,快速 Onboarding,更好地助力团队提升交付能力。

作者:刘振源 / 服务端工程师

招聘信息

GrowingIO技术团队是一个活力四射、对技术充满激情的团队,多个岗位持续招聘中!诚招 大数据工程师 / Java工程师 / 数据挖掘工程师
 等。欢迎有兴趣的同学投递简历至:jianli@growingio.com(邮件标题请注明具体岗位名称)。更多职位及信息可进入招聘官网查看


关于 GrowingIO

GrowingIO 是国内领先的一站式数据增长引擎整体方案服务商,创立于2015年,以数据智能分析能力为核心,通过构建客户数据平台,打造增长营销闭环,帮助企业提升数据驱动能力,赋能商业决策、实现业务增长。

点击「此处」获取 GrowingIO 15 天免费试用!


GrowingIO
57 声望10 粉丝

GrowingIO(官网网站www.growingio.com)的官方技术专栏,内容涵盖微服务架构,前端技术,数据可视化,DevOps,大数据方面的经验分享。