给一位Udemy学员的回复(之二):如何在简历中榨干坦克大战的剩余价值?

一通关于设计模式的扯淡之后,我想仔细谈一下台湾小帅哥问题中的第二部分:如何在简历中榨干坦克大战的剩余价值?

先回到台湾小帅哥的问题:

另外, 我想將這個project寫在履歷上, 但是我沒有做過這種project, 所以我不知道從何寫起, 以及一個面試官, 一個senior希望從這個項目看到什麼樣的重點及技能。能不能請老師稍微分享一下您的經驗, 若您是面試官, 您希望在這個project上看到我學會了什麼, 以及什麼市值得寫在履歷上的呢?

先说结论:应聘岗位需要哪些技能(事前调查清楚),就写哪些技能,不会没关系,赶紧补上。

原因:如果你的简历不是通过内部推荐的方式进到人力资源部那里,那么你的简历被发现,通常只是因为对方使用他们关注的关键词在求职网站搜索时找到了你,且你还出现在前几页。

企业级应用与坦克大战

简历中的项目描述,与所要面试的公司、期望应聘的岗位、当前自身的状态(校园毕业?培训班结束?工作多年?)密切相关。考虑到台湾小帅哥谦虚的自称新手,那么我们不妨假定:小帅哥即将毕业,计划应聘各类不同公司的初、中级软件工程师岗位,这些公司以企业级应用开发为主。在这些假定之下,我们可以对坦克大战这一项目起到怎样的作用有一合理的定位:

  • 坦克大战适合作为个人业余兴趣项目出现,配合简历的主打项目——一些比较“正经”的项目
  • 坦克大战适合覆盖一些常规企业应用开发涉及不到的开发技能,比如Java桌面应用。在其他开发人员技能同质化很高时,这点可以转换为一定的优势
  • 坦克大战适合延伸到一些与工作可能不直接相关的其他领域(后面详谈)

坦克大战?企业级应用?这两者一起出现时,画面其实相当违和。我之所以选择在Udemy上面第一款课程以坦克大战作为题材,原因有三:

  • 相对有趣。毕竟正经的课程已经太多了,Spring啊,Web啊,略审美疲劳
  • 珠玉在前。尚学堂马士兵老师的老版课程我印象很深,我希望能开发一门与时俱进但保留其精华的课程
  • 最佳实践。是的,你没看错,坦克大战虽然只是个小游戏项目,但是我在课程中整合了很多实际开发的经验和技巧,这些和真实的企业级应用开发密切相关。虽然坦克大战是我录制课程的第一次尝试,自我评价比较生涩和粗糙,但是那些经验和技巧我相信对新手朋友们绝对大有裨益!

假如我是面试官,我看到求职者的简历中正儿八经出现了一个“坦克大战”的项目,一眼掠过去竟然还看到了诸如TravisCI、CodeCov等结结实实的企业级开发流程工具,我可能会从这些感兴趣的地方切入,和他聊聊这项目的一些细节——注意,是细节。

比如我可能会这样展开:

  • “不错,小游戏附上了GitHub Repository地址,用Maven构建。先简单问问Git用法,Maven/Gradle是否都熟悉云云”——寒暄几句,等同打招呼。这些是日常开发的ABC,不会的话…

  • “你怎么测试你的程序?除了打开游戏界面实际运行,有其他办法吗?”,看看求职者有无自觉的单元测试意识、自动化功能测试的意识,如有,实际已甩开不少人了。正规软件开发中,一个Bug可以牵动N多部门,让大家都没好日子。写出的程序Bug尽可能少的少年,大家都爱

  • 如果发现对单元测试确实有所了解。顺便再问问是否用过Mockup,其优缺点等等。也可能会问问都用过那些自动化测试工具

  • “这小游戏如何发布?会自动构建出Windows、MacOS、Linux的不同版本吗?有没有考虑过游戏程序有Bug,用户如何获取升级补丁?”,了解求职者对软件工程的基本认识和业余项目的折腾深度

  • “怎么想到使用Travis CI的?你自己业余项目的单元测试覆盖率,最高有多少?”,了解一下求职者技术选型的考量,单元测试的使用力度有多大

  • “游戏界面中最多能同时出现多少敌方坦克?想过这问题吗?如果游戏的性能不佳,最多只能同时出现40辆敌方坦克,再多就卡成狗,有什么优化的思路没?”,了解求职者有无压力测试、突破性能瓶颈的实际经验,是否掌握性能调优的科学方法

  • “游戏中判定物体碰撞的算法,时间、空间复杂度是多少?有没有研究过一些物体碰撞检测的优化思路?”,了解求职者的数据结构、算法基本功是否扎实,是否有不断改进、优化折腾的中二精神。爱折腾的中二青年,大家都喜欢

一般,面试官会主要基于公司岗位的技能要求与求职者对话,其匹配度自然是越高越好,如果同时还能从业余项目中观察到求职者勤于学习、乐于折腾,交流时发现思路严谨、表达清晰,那么坦克大战作为一个辅助项目,其使命就达到了。

那么我该怎么写简历?

  • 根据应聘公司岗位的技能要求,合理编排核心、辅助项目的覆盖面
  • 坦克大战定位一个业余项目,可覆盖:版本管理(Git)、单元测试(JUnit)、敏捷开发(TDD)、持续构建(TravisCI)、桌面应用(Java Swing)、重构技巧(Refactoring)、性能调优、数据结构与算法、开发环境自动化(勉强可算作DevOps的一部分)等等话题,如果你愿意,敌方坦克的AI改进也可加入(但前提是你至少做过一些基本的尝试和努力),表明咱们踏上了人工智能的浪潮嘛😅

其他

  • 想大概知道自己实力几何?去TripleByte转转,过了在线笔试,可以约电话面试,完了之后对方会给你详尽报告,让你知道自己成色多少——当然,仅供参考
  • 录用与否主要取决于对方,面试表现的自我感觉无需特别看重。你可能发挥极其出色,自我感觉良好,却挂了(其他人更出色),又或是感觉很糟糕,却收到了Offer(对方时间紧迫,在为数不多的求职者中,你是最不坏的哪一个,所以二话不说先要你了)——这两种情况,我都遇到过

最后,疫情期间,祝大家宅在家里HAPPY CODING!