简介: 由阿里云云效主办的2021年第3届83行代码挑战赛已经收官。超2万人围观,近4000人参赛,85个团队组团来战。大赛采用游戏闯关玩儿法,融合元宇宙科幻和剧本杀元素,让一众开发者玩得不亦乐乎。
说到剧本杀,很多人很好奇,代码大赛究竟是如何与剧本杀元素结合的?在关卡里面收集到的线索,到底如何串联起来?我们请来了本次代码剧本杀的主要设计者陈少滨(阿里云云效代码平台)来具体讲讲。
前言
代码挑战赛、剧本杀、元宇宙,这些词可能单独列出来你都认识,但是放到一起可能就会有点疑惑:这三有啥关系?为了使83行代码挑战赛更加有趣,我们史无前例地将剧本杀元素、元宇宙科幻元素与代码挑战赛结合,打造了一场别开生面的代码剧本杀。
既然是剧本杀,那么自然就要有线索。玩家每次通关,都能够获取code83的定制线索,其中不仅包含了关键的剧情信息,还有决赛出题人担心题目太难,特意留下的提示,最重要的是,参与的玩家还可以通过获取的线索换取云效83行代码xCHERRY定制机械键盘等豪华大礼。
下面,我们来揭秘一下这场代码剧本杀,看看你是否破获了真相。
线索设计
这次线索的设计的时候,每一条线索都包含了决赛题目相关的提示和剧情相关的提示,先给大家解释一下决赛题目相关的线索是怎么设计的,看大家有没有错过一些提示。
"<(?.*)> 可以表示什么呢?":第一条线索是提示决赛有正则类型的bug,由于?这种用法不是特别常用,所以在线索里提前给出提示。
"NPE:No People Emo":这个就是很直接地提示决赛里有NPE类型的问题,当决赛答题的时候,需要多关注一下有没有什么地方可能会是null,触发NPE。
"不是什么都会等你,很多事情都是一次性的":这个是提示可能是有一些“一次性”类型的bug,如果经验比较丰富的话,可能就能意识到这个是指流类型一次性读取的问题。
"我们通常以为admin就是admin":这其实是在提示决赛中admin可能不是admin,那可能是什么呢?可能是ADMIN,或者admin123这种,具体的大家在决赛题目中就会了解到。
"大家都喜欢全局视角,但全局视角也有它的问题":其实是在提醒你全局类型的变量可能有问题,你可能需要把全局变量换成局部类型的变量。
"好的单元测试 => 你看懂了单元测试 = 你看懂了代码":决赛题目中大部分的bug都是在单元测试调用的函数中,如果能聚焦地分析单元测试调用到的函数,就能把大部分的bug解决掉。
"有的bug之所以难找,就是因为它只在运行时出现":这个是在提示有一些bug可能是无法直接看代码就能分析到的,需要结合运行时的调试和诊断,才能发现这些bug。
"别得意忘形了,快收好你的尾巴!":这个是在提示正则匹配读取尾巴的问题。
"贪多嚼不烂":这个是在提示正则匹配的贪婪模式的问题。
"断点调试是万能的吗?不影响应用本身的观测或许才是更优选择":这个是在提示本次决赛的场景是无法正常使用断点调试的,所以可能需要使用应用观测的能力。
剧情设计
下面我们进行一下剧情向的解析。最开始我们收到的是这样的邀请函:
你收到了这封邀请函,但只有一个 YES 选择键,没办法拒绝,只能接受。接受了之后,你就进入了我们的故事线。在我们的故事线中,当前的时间线是这样的:
你是一个程序猿 -> 收到邀请函,进入宇宙基地 -> 进入第一扇门,存在缝隙,暗手会偷走宝贵的东西 -> 进入第二扇门,百万人名涌动,根据关键词找到对应人名 -> 进入第三扇门,重塑人生 -> 进入第四扇门,发现了自己的人生被代码定义。
这部分的剧情内容是通过 WebIDE 的剧情对话给出的,而剧情线索中,会给出过往的时间线:
高考过后,走上程序猿道路 -> 电脑中存在后门,导致公司机密泄漏,被开除 -> 接触到云晓(阿里云云效),了解云端开发 -> 开除后成为数学老师,怀念柯西(Cosy)带来的高效和充满技术感的生活 -> 疫情来临,钉钉助力在线教育 -> 意识觉醒,想用技术创造价值。
在了解了所有剧情之后,就需要回答三个问题,分别是:你来自什么宇宙、你的真实身份是什么、怎么创造生命的意义。
你来自什么宇宙,其实是在问你从哪里来;你的真实身份是什么,其实在问你是谁;怎么创造生命的意义,其实是问你要做什么,你要到哪里去。这是三个经典的人生问题。
那么具体怎么回答这三个问题呢?想要解决这三个问题,需要先将决赛关卡的bug解决完之后,会发现client的会返回一些字符串,这些字符串有三个开头(三个通道),如果根据这三个通道进行筛选,就会发现其实是这三段代码:
通过阅读这三段代码,会发现其实这三段代码正好就是过往时间线里面的三个阶段。
所以从剧情上的话,可以理解到“你”的人生其实早就被代码定义了。
第一个问题:你来自什么宇宙?当然毫无疑问就是在代码宇宙中。另外,从代码的包名也可以看出:
com.code.universe。
第二个问题:你的真实身份是什么呢?从代码中也很明确了,就是programmer(程序猿)。当然,了解完全部剧情之后,更准确的答案应该是一段代码(code)或者说一段程序(program)。
最后一个问题:怎么创造生命的意义?这个其实是稍微有一点难的,不像前两题这么直观,需要看完整个剧情,就会发现剧情里主要强调一点是技术的力量,第三段代码中也明确提到了在经历了人生的大转折之后,向往Technology的力量,学习了DevStudio的知识,Yunxiao的知识,Devops的知识,Cosy的知识,思考生命的价值。所以这一题的答案是技术(Technology),或者DevStudio、Yunxiao、Devops、Cosy都是可以的。
上述就是本次比赛的完整剧情了,最后还有一个附加题:
之前提到了故事线中的时间线,我们再来对比一下现实的时间线:
故事的时间线:
你是一个程序猿 -> 收到邀请函,进入宇宙基地 -> 进入第一扇门,存在缝隙,暗手会偷走宝贵的东西 -> 进入第二扇门,百万人名涌动,根据关键词找到对应人名 -> 进入第三扇门,重塑人生,最终人生(职业)未改变,过程更加丰富 -> 进入第四扇门,发现了自己的人生被代码定义 -> 发现真相,阿里云云效邀请你一起用技术创造生命的价值
现实的时间线:
你是一个程序猿 -> 你收到开赛邀请,参与83行代码大赛 -> 开启第一关,解决会造成漏洞的安全问题 -> 开启第二关,从百万级别类名中,寻找指定前缀的类名 -> 开启第三关,重构代码,最终业务逻辑不变,代码质量更好 -> 开启第四关,解决bug,解锁真相 -> 揭晓结局,阿里云云效邀请你一起用技术创造生命的价值
当我们看完这时间线之后,最后我们可以再回过来看这三个问题:你来自什么宇宙?你的真实身份是什么?
怎么创造生命的价值?这三个问题就留给大家思考了。
结语
2021年第3届83行代码挑战赛已经正式收官。你参加的,到底是一场代码挑战赛,还是一场剧本杀,亦或是?你看清真相了吗?
原文链接
本文为阿里云原创内容,未经允许不得转载。