背景
在客户咨询后期,客户的交付压力很大,导致顾问闲置。正好他们部门招聘了一些新员工大概7名,有3人是刚毕业,4 人是社招有经验的Deveoper。因为新员工刚到公司,有充足的时间进行能力提升,所以由钱安川带着这些人做了为期一个月的C语言训练营。以下为钱安川的总结。
其实,刚开始的时候我是不太乐意给新员工做培训的。因为担心新员工基础薄弱,效果不好,浪费我的时间和精力,觉得更多的去影响他们的Leader和经理更加重要。但是,做了几次活动之后,他们所有的人都超出了我的期望。他们每个人都很强的学习和提高欲望,能够按时按量的完成我布置的作业,心态非常Open,非常主动积极的学习。
活动方式
C语言新员工训练营和OO训练营的方式有所区别。因为参加OO训练营平均都有3年以上的华为工作经验,可是C语言训练营都是新员工,甚至有的是刚刚毕业。但是他们的优势是有充足的学习时间。通过和他们的经理的讨论之后,决定每天上午由我统一训练,下午他们回归到各自的模块组,熟悉模块的业务和技术。
时间:每天上午
活动方式:
1. 早上站立会议:每人要在站会上分享一条学习经验或者教训
2. 展示家庭作业代码
3. 顾问提出需求
4. 分组讨论和设计(如果需求简单,则跳过此环节)
5. 各自TDD开发
6. 代码演示
7. 点评和顾问总结
8. 布置家庭作业
活动的组织方式和OO训练营基本类似。不同的地方如下:
- 多了一个站会分享学习经验和教训的环节,为大家营造一个互相学习和分享的氛围。
- C语言训练营没有要求结对开发,因为大家对语言还没有吃透,希望给每个人独立思考写代码的空间。
- 代码基本上都是上午写完的,只有偶尔的重构任务作为家庭作业
- C语言训练营有一个读书写代码活动,这是每天的家庭作业,在后面我们会有详细介绍
训练营内容
新员工的技术和经验参差不齐,有些人连C语言还没有吃透,如何去教他们做TDD和简单设计呢?这是一个很大的挑战。我回想起自己学习新语言的方法。前些时间我自学了SCALA语言,看完了《Scala程序设计:Java虚拟机多核编程实战》,但还是觉得很多概念没有吃透,于是我就把书合上,然后把书上所有的例子独立写了一遍,这时才能感觉自己是学了一门语言。
我用同样的方法要求这些新员工,我给他们找了一本书《C程序设计语言》,同时给大家做了一个具体的读书计划。当然这个还不够,我要求每个人在不看书的情况下,把书上的例题改造成测试驱动的代码。比如:Hello World 的例子
#include
main()
{
printf("hello, world\n");
}
要求把这个例子改造成测试驱动的代码。改造之后代码分别为:
测试代码:
TEST(test_case_name, test_greetings) {
EXPECT_EQ("hello, world", greetings());
}
业务代码:
char[] greetings()
{
return ("hello, world");
}
通过这样训练,每个人可以系统的学习一遍C语言的所有知识,并且可以锻炼如何用TDD进行开发。
大概花了20天左右的时间,每个人基本上都写完了书上所有的例子。这些只是家庭作业的部分。在每天上午我带着大家集中训练。我们完成的练习有:长方形、单位转换和飞机场项目。每个人都要遵循简单设计四原则,用TDD的方式写代码,全部使用快捷键,用Module C的方式写C语言代码。
效果
很明显,效果是矼矼的。就连一直对敏捷有质疑的PO主任也站出来说:“今年新员工是有史以来代码写的最好的一届”。大家都反馈通过TDD方式系统的学习了C语言,扫除了很多的语言盲点。通过练习,每个人都学会了简单设计,TDD开发,什么是好代码,如何写出更加优雅的C代码。而且通过每天站会分享和代码演示,给大家提供了一个互相学习、交流的平台。
经验总结
- 读书写代码活动的效果好的太明显了,可以帮助大家在很短的时间里吃透一门语言
- 读书写代码活动必须要有计划有规律的进行,我是给大家排了3周左右的计划,并且要及时检查,让大家演示成果,一方面是互相学习,一方面是鼓励大家继续前进
- 刚开始早站会是每人说昨天做了什么,今天准备做什么。但是,我发现这样就太过形式了,因为大家都很清楚这些事情。所以我把站会内容改为:每人分享一条学习经验或者教训
- 在活动中遇到任何问题,我们都会把他写在白板上,并且指定一个owner(负责人),之后去研究搞定,第二天和大家一起分享
- Module C是解决C语言设计的不二选择