公司近期举办了极客活动,我牵头推进活动,还有两个同事一起互相配合,里里外外忙了差不多一个月,一共举办了两场比赛,还是有一些感慨的。
这是公司第一次举办极客活动,而且是针对实习生举办的,当初我来公司实习的时候都没有这些,想想现在的学生,真的很幸福。
活动目的
1. 和其他部门小伙伴一起组队,大家来自不同学校,但对编程都充满了激情,在这里你能认识更多志同道合的小伙伴。
2. 通过一天的集中编程,加强自己的编程能力和经验。
3. 拓宽自己的技术视野,将是极其有趣的编程经验。
总之,我们希望公司招进来的实习生,不仅仅只做项目和业务,通过活动可以更好的融入公司,并且希望以活动的形式,让大家觉得很有趣,并多认识其它小伙伴。
既然是活动,不能只是玩的形式进行,不然很容易出现过于随意,而没有产生希望的效果。所以,活动内容还是会像比赛一样,有具体的规则。
我们提前给所有实习生发了极客活动邀请邮件,并简单介绍了活动事宜。
日程安排:
08:45——09:00 签到
09:00——09:20 日程讲解,题目和规则介绍
09:20——09:30 现场组队,4-5人一组
09:30——24:00 极客编程
每个人自备一台电脑,编程语言和形式都不限制。
项目由小组共同完成,可随时提交作品,最晚截止24:00。
我们将题目进行了打印,活动当天交给每个参加活动的实习生,并对实习生进行了编号和签到。然后进行了题目规则讲解等,根据编号,现场使用python写的脚本进行随机分组,确保公平公正。
这是随机代码,包括组队,以及不同的项目组随机选用不同的会议室:
import random
# 会议室
meetings = dict()
meetings['A会议室'] = list()
meetings['B会议室'] = list()
meetings['C会议室'] = list()
meetings['D会议室'] = list()
meetings['E会议室'] = list()
# 参加活动的人数
number = 22
# 将所有人序号随机打乱
students = range(1, number + 1)
random.shuffle(students)
# 平均分配到每个会议室
for i in range(number):
if i % 5 == 0:
meetings['A会议室'].append(students[i])
elif i % 5 == 1:
meetings['B会议室'].append(students[i])
elif i % 5 == 2:
meetings['C会议室'].append(students[i])
elif i % 5 == 3:
meetings['D会议室'].append(students[i])
elif i % 5 == 4:
meetings['E会议室'].append(students[i])
for k in meetings:
print k + ' : ' + str(meetings[k])
关于题目,我们一共举办了两次,间隔两周左右,不过我们题目基本没有变。是的,绝对意想不到,题目内容基本没变,又让所有实习生做了一整天加夜晚!
这是问题:
card_person.zip文件中,含有1000万的用户数据(可能存在各种未知异常)。
用户信息包括姓名、电话、邮箱、公司、部门、职位等信息。
不借助任何数据库服务,自行设计一套数据存储服务,满足增/删/改/查/计数。
电话、邮箱格式错误的数据,不要导入到数据存储服务中。
语句支持and/or/模糊匹配。
邮箱不论大小写,均能搜索到数据。
所有请求结果,都要显示准确的执行时间。
编程语言:Ruby
简单示例:
张晓明 13311223344 zhangxiaoming@mail.com 雄县石化股份有限公司 销售部 经理
张晓明 13955667788 Zxiaoming@taiyang.com 中国太阳集团 商务部 部长
>> select(姓名='张晓明' and 电话='13311223344')
查询结果:
张晓明 13311223344 zhangxiaoming@mail.com 雄县石化股份有限公司 销售部 经理
>>select(公司='深圳政府*' or 职位='NULL')
b宇军 13375171737 duangyoujuan008@gcaifu.com 深圳政府 补胎E-Q NULL
毛rsnck 18634684196 nennis.wang@dhink-bridge.com 深圳政府采 新福aiE Bn#aggina NULL
>>count(电话='133*')
1031121个
>>select(邮箱='zwsaj@am.co.au')
上亮妈 13945187289 zwsAj@Am.co.Au Opp.M书法家协会 SPBS, MDGP (IOM, TUTH) NULL
>>update(邮箱='zwsaj@am.co.au')set(电话='1394518729')
错误,电话不合法
>>update(邮箱='zwsaj@am.co.au')set(电话='13914518729')
上亮妈 13914518729 zwsAj@Am.co.Au Opp.M书法家协会 SPBS, MDGP (IOM, TUTH) NULL
第一次活动和第二次活动用了同一套题目是有原因的,在这里进行一下解释。
第一次活动时候,并没有要求大家使用ruby,任何语言都可以,组队后,由队员进行讨论选择。也没有明确的评分标准,只是让大家去实现所说的所有功能。
结果当天出现了一些问题:
1. 所有组都默契地使用了python,但是有些组员并不熟悉python。
2. 部分不熟悉python的组员,在比赛中存在消极的开发情绪。
3. 由于没有评分标准,实习生实现的过于随意化,甚至选择性实现部分功能。
我们一直对外宣传的是活动促进大家合作,但实际上举办这个活动背后有着巨大的、可以说极其诱惑的奖励,当天比赛结束的时候我们才对所有实习生说。这个时候,不止一个实习生举手发言,表示今天自己可能参与度不高,因为对python不熟悉之类的。说实话,我觉得这个理由很牵强,有些人明明是态度就有问题,却找理由。
不过,我们为了公平起见,我们确实举办了第二次,而且第一次的评分占总评的比例也不是很高。考虑到第一次活动遇到的问题,我们做了一次意想不到的设计:
1. 发起第二次活动,并在邮件说明为了让大家更好的参加活动,请大家把自己擅长的编程语言、大学学过的编程语言发出来,我们根绝大家的编程语言进行出题。
2. 所有学生都积极而又详细的写下了自己接触过的所有语言。
3. 我们选择了ruby,因为没有一个学生会使用。
4. 我们完善了题目的描述,加强了题目的复杂度,完善了评分细则。
5. 第二次活动内容就这样出来了。
第二次活动题目给到大家的时候,我能感受到很多人惊讶的表情。
第一次比赛,重点考察了合作、主动、协作能力。第二次比赛,重点考察了快速学习、时间把控、业务分解的能力。
在这个过程中,每个组都有优点和缺点,有的组快速开始开发、有的组花了一个多小时把技术实现细节写满了白板,有的组使用B+树、有的组使用hash实现,不做评价,各有千秋。不过两场活动下来,感觉大家都比较缺失的:
1. 对题目的理解不深入,对评分细则的重视度不够。
整个活动,导师一直和他们强调仔细看题目要求和分值,而学生们感觉都不以为然,更多的是把激情投入到算法里和代码调试等细节中,没有人对项目本身有很好的把控,这也导致最后每个组的分值不是很高。
2. 没有组长,一团和气。
大家没有确定组长制,也就是说没有选一个专门拍板的人,这也直接导致了没有一个带头的同学对项目整体有把控。大家都是和和气气地开发,不太关注进度、时间节点,谁的环节实现的慢了,也没有批评和提醒。很多组,到了晚上,还有很多主干流程都没实现,大家只顾低头忙自己的。
3. 越往后越着急,反倒越低效。
越到活动尾声,大家更多的时间开始联调,项目对接,而这个时候有些组表现出来了极度的低效。比如A同学实现了交互和接口调用,B同学实现了接口细节,结果对接的时候接口有问题,那么B同学开始各种看代码调试,而A呢?竟然从会议室出来了,到处溜达,问他的时候他却说“没我什么事,我那块代码好的,另外一个同学在调试”。
当场批评他,提了几个问题给他,除了这一块其它功能好了么,有没有人测试过,文档写了么,有再次对照分数表看一遍还有什么遗漏么等等。这也说明,大家的责任心不够。
放几张活动现场图片吧!
准备了超级多的零食还有啤酒,每个小组抱着各种零食的箱子前往会议室,满满的幸福。
千万级别的数据,我们放了非常多的脏数据,清晰数据时候遇到了问题,大家在分析。
极客活动,是公司对“工程师文化”的一种肯定,给实习生们提供了互动、有趣的编程氛围。
未来希望多组织这样的活动,不仅仅有实习生,还要有正式员工。题目也可以更宽泛,围绕公司的一些场景、产品定位,进行脑暴和快速选题尝试。说不定通过这类的活动,能让公司诞生一款新的明星产品呢!
当然,午餐的羊肉串非常好吃,必点~!
pupil
高级高级!