
电视剧《花千骨》中,白子画为何收花千骨为徒?
《琅琊榜》中梅长苏为何选择靖王,抛弃太子和豫王?
《泰坦尼克号》中杰克和露丝为何一见钟情?
基特王子为何选择灰姑娘?
这些问题乍一看好像和程序员找工作没什么关系,但其实底层原理都是一样的。搞明白了这些问题,就能搞明白下面这些问题:
为什么十份简历中只有一两家公司录用你?
或者为什么你每次投简历都会得到面试机会?
最根本的原因是,一方求索心切,另一方摆出的要点,让对方心动不已,求索者心中有数,回应者则恰恰展露出求索者想要的一面,这是一个谜。
程序员在找工作的时候,一开始有三件事对于能否获得面试机会至关重要:
知识、技能和经验复习
设立求职目标
简历优化
友情提示:如果你不想看完万字的文章,可以:跳转至第3部分查看简历优化的实操;跳转至第4部分查看如何提高简历投递成功率。
01 知识、技能和经验回顾
知识、技能、经验都是一个人所能体现的商业价值,公司招一个人,一定是因为这个人能以某种方式帮助公司实现价值,而且,一般情况下,个人的贡献必须大于公司为这个人承担的各项成本(工资、社保、公积金、个人所得税等),否则,对你来说,就没有任何用处。
所以作为程序员,一定要清楚自己的价值,个人的商业价值可以通过以下五个因素来分析:
我们在招聘网站上填写简历的时候,前三个元素是内容最多的,都是类似的模板,大家都按照同样的方式填写。
一开始不建议直接在招聘网站上填写简历,强烈建议用Word或者MarkdownPad把你认为自己拥有的有价值的知识、技能、经验,无论大小,都整理、记录下来,这是我们后续优化简历的基础,也是确立求职目标的基础。
1.1 知识和技能
有必要讲一下知识和技能的区别,很多人经常混淆这两个概念。
知识可以通过语言、文字、语音、视频等方式来传授,比如C++、Java、数学、物理、Qt、Android、设计模式、网络协议等都是知识。
技能是指按照一定的规律运用知识和经验完成一定任务的能力。例如使用Qt开发桌面客户端软件是一项技能,使用Java和Android界面类库开发App也是一种技能。
我的认识大概如下:

知识一段时间不用就会褪色,就会被丢弃,所以在你的知识图谱中,必须有一些你经常使用的。例如,我最熟悉的是 C、C++ 和 Qt。
我们需要把最熟悉的三类知识标出来,因为它们以后会派上用场。
技能是知识的应用,所以一般来说,只要你有什么知识,你都可以找到一套技能。比如我可能有以下技能:
好的,现在我们应该可以整理一下我们的知识和技能了。
要注意的是,每个人都有很多的知识和技能,一定要找出自己擅长的2~3种知识和2~3种技能,这些会成为你找工作时的重要参考,只有用技能去做事,才能达到最好的效果。
1.2 经验
知识和技能可以帮助我们创造商业价值,积累知识和技能的过程本身就是有价值的,积累知识和技能的过程就是经验。
著名电影《贫民窟的百万富翁》讲述了这样一个故事:在孟买贫民窟长大的男孩贾马尔参加了一档名为“谁想成为百万富翁?”的节目,并赢得了2000万卢布的大奖和他心爱的女孩。
这个故事的神奇之处在于,贾马尔正确地回答了诸如“谁为《darshan do ghanshyam》写了歌词?”,“谁主演了1973年的动作片《囚禁》?”,“哪位板球运动员是本世纪最伟大的球员?”等历史上得分最高的问题,谁发明了左轮手枪,100美元钞票上印的是哪位美国总统的肖像,等等。即使是博士专家也不确定能否回答所有这些问题!这与他的身份完全不一致,这引起了主持人的怀疑,主持人认定他在作弊。节目暂停的同时,他通知了警方,并以欺诈罪名逮捕了这名可怜的男孩。
为什么贾马尔能做到?随着问答节目的进行,我们发现贾马尔从来没有学过与这些问题相关的知识,但他独特的贫民窟生活却恰好遇到了这些问题。这就是经验的价值。
程序员的(学习、工作、项目)经历也有非常独特的价值,往往在求职过程中起到非常重要的作用。比如你做过视频项目,那么在找做类似视频项目的公司时就很容易脱颖而出;比如你做过图像处理相关的项目,那么进入美图秀秀这样的公司就相对容易一些……
在回顾自己的项目经历时,一定要思考清楚并记录关于自己的部分,并从以下三点探索自己的亮点:
我的一个项目经历:

我没有把上面说的三点对应的内容全部列出来,也没有把我个人的亮点全部写下来,但你心里一定要清楚,你起到了什么关键作用,如果你有攻克技术难关的经验,有明显的可量化的成绩,一定要总结出来,面试的时候经常会被问到。
才华和人脉其实是一个人非常重要的商业价值,不过在程序员的简历中很难展现出来,而在面试中展现的机会比较多。
02 设立求职目标
无论你是大学毕业初入社会的求职者,还是在职场打拼多年的老手,找工作都要避免一件事:无的放矢。
在找工作的时候,明确目标行业、公司、职位,做好针对性的准备,就能收到事半功倍的效果。
2.1 职业连续性
每次跳槽都换行业、换技术栈,对于程序员的商业价值(知识、技能、业务等)积累极其不利。如果这不是你第一次找工作,有必要考虑职业连续性。
如果你目前从事金融行业,那么跳槽时最好还是留在原行业,这样可以积累行业相关经验,逐渐形成优势;如果你目前从事 iOS 开发,那么跳槽时最好找一个 iOS 开发人员,这样你的 Objective-C、Swift、Cocoa 水平才能不断提高……
有一种情况就不一样了:你发现自己不喜欢现在的行业和自己用的技术,这时候就需要找一个新的方向(下面的方法可以帮助到你),一旦你找到新的方向,并且转行去做,你还需要考虑以后的连续性。如果你一直说不喜欢现在的,更喜欢另外一个,这样干几年之后,你可能会发现,那些一直默默努力的朋友,突然都变得好棒啊……
2.2 通过成就事件挖掘职业兴趣
当我们总结和整理工作和项目经历时,要特别留意那些让你感到特别有成就感的事件,它们隐藏着你的职业兴趣,可以帮助你发现未来想要追求的职业方向。
我们可以按照STAR原则来回顾成就事件:
列出成就事件之后,你可以根据以下两点进行进一步的深入挖掘:
通过这样的分析,你也许能够发现自己最擅长的技能,以及工作中最关心的事情,然后在此基础上建立新的职业目标。
2.3 关注行业、企业和职业
聚焦的目的是为了缩小目标范围,节省时间和精力,进行深入的研究和分析,有针对性的优化自身商业价值的组合,增加简历的吸引力,最终增加获得面试机会的概率。
程序员针对某一领域的问题,使用编程语言、技术框架、设计模式、算法等来开发软件,软件肯定是离不开目标需求和业务的,所以程序员左手有技术,右手有业务,如果你对业务内容完全不感兴趣,那么当你有目标行业、有目标公司的时候,你还需要了解公司是做什么产品的,是产品型公司,还是项目型公司,还是以外包为主的公司。选择业务范围让你感兴趣的公司,不感兴趣的就淘汰。
基于连续性的考虑,你需要认真对待之前从事过的行业,但不必继续在之前的方向工作,也可以换个方向。但有一个基本原则:远离夕阳产业、衰退行业。远离企业。
我来举例分析一下。
技术方面,我最擅长的语言是 C++,最擅长的框架是 Qt(出过两本书《Qt on Android 核心编程》和《Qt Quick 核心编程》),最擅长的技能是客户端软件开发。有了解和兴趣。新职位应该和这两方面有关。

我第一个锁定的目标是高级软件开发工程师,语言是C++,至于行业领域,互联网、智慧城市、企业服务等都可以。
另外,我之前一直在小公司工作,现在希望到大公司体验不同的工作氛围。
在锁定职位时,你还应该考虑自己目前的弱点,以便在简历和面试中妥善处理它们。例如,如果我要找一份软件开发工作,就会有两个缺点:
好的,我的聚焦过程已经完成了,现在让我们进入简历优化的实际过程。
03 简历优化实践
现在你知道了自己的商业价值,也想清楚了自己想要从事什么样的行业、公司、职位,那么下一步就是优化你的简历。
恢复优化有几个关键点:
程序员的简历一般包含以下内容:
根据实际情况,有的简历可能没有自我评价或者附加信息,有的简历没有任何教育经历可写(比如高中生),有的简历甚至没有任何工作经历或者项目经验(比如大学生等初次求职者)。
特别提到一些与程序员个人品牌相关的附加信息(看这8个武器点亮程序员个人品牌),比如技术博客、GitHub主页、参与过的开源项目、自己做的APP、公众账号等等。这些都是可以非常好的展现一个程序员的知识和技能的东西,可以为你的简历加分,也可以弥补面试时间和信息交流短的问题,要知道,决定你是否能通过简历审核的,通常是另外一个程序员,而致敬一个聪明内向的程序员的最好方式就是“Show me the code”。
3.1 简历模板
很多程序员都是使用招聘网站提供的简历模板。如果想在不同的招聘网站上发布简历,可能要填写5、6次简历,非常耗时。我一般会有一个基本的word格式的简历。针对不同的求职网站制作不同的简历。
接下来我来介绍一下我的简历,很简单,依次包括以下五个部分:
我的简历的前三部分如下:

我已经工作很长时间了,所以我将看一下最近的一些:

好了,我的简历主要框架就是这样了,接下来我会根据我的目标职位——高级软件开发工程师,找几个招聘信息,通过分析招聘信息来优化简历的技能和评价。项目经验有两部分,这两部分也是我们优化简历时的重点。
3.2 简历优化
大部分招聘需求都是同行提供的,如果你能从招聘信息中推断出起草招聘需求的软件工程师或者经理心里的关键词,那么你的简历优化就会有针对性。
下图是一份C++高级开发工程师的招聘需求:

红线标出了一些关键的基本要求,包括 C++、Qt 和 Windows 桌面客户端。这些都是申请该职位必须满足的硬性要求。
绿线表示软性要求,这类要求不容易直接量化和衡量,但面试官可能会在面试过程中通过谈话来考察。例如软件设计能力、技术沟通能力、交流能力、沟通与团队合作等。一般会在面试中体现出来,而编码能力可能会在面试过程中通过笔试或不断询问技术细节来考察。
蓝线标示优先条件,若有多个候选人,符合这些条件者优先考虑。
公司在审核软件开发工程师的简历时,首先由HR进行筛选,然后由技术人员(程序员或者经理)再次进行筛选,通过技术人员的筛选后,才会通知笔试或者面试。
当HR接到招聘需求的时候,会跟技术人员沟通需要关注的重点,然后根据这些重点挑选出合适的简历,通常在HR眼里,重点就是关键词,所以我们在修改简历的时候,尽量用招聘信息里出现的词语,方便HR识别。HR看一份简历,长则一分钟,短则二三十秒。
技术人员筛选简历通常比HR更仔细,大致分为两个步骤:先筛选关键字,然后查看项目经验是否体现了所发布职位所需的技能和软技能,不到30秒;如果能匹配,则继续看项目经验,整个过程可能持续几分钟。
在看项目经验时,一方面要看应聘者是否在项目中用到了未来需要的相关技能,另一方面要看具体的项目内容,比较行业、产品、业务的关联性,如果应聘者开发的产品和招聘相关,工作关联性越高,优先考虑的程度越高。
通过了解简历筛选的流程,我们可以知道关键词的重要性,然后根据从招聘信息中提取出来的重点来修改简历。
我在修改简历的时候,尽量多体现公司要求的技能和软技能,一般可以思考以下两点:
技能与评估
项目经验
我会根据我的简历,先看看技能和评估部分该如何修改。
因为目标岗位是高级软件开发工程师,而招聘信息中并没有明确体现对管理能力和经验的要求,所以我的管理经验可以淡化或者去掉。然后重点突出C++、Qt、软件设计、技术交流等内容。版本如下:

新版本兼顾了硬性要求、软性要求和优先条件,与初版有明显区别。接下来,我们会重新整理和呈现项目经验,让其更能体现企业HR和面试官所关注的重点。以下是我的一个具体项目经验:

这个招聘要求主要在技能(C++、Qt)方面与我匹配,下一个主要在业务(行业)经验方面与我匹配。

红线标记了基本要求:C/C++、Linux。
绿线标注的软性要求一部分是一些不容易量化的技能,比如熟练掌握多线程、独立设计经验等,一部分是与产品业务相关的,比如音视频编解码、封装、流媒体、网络协议、视频业务系统等。
此招聘信息有两个优先条件,但是都不符合我的知识和技能。
一个程序员的知识、技能、经验,从不同角度看都是一座山,视角很重要。
我们来看看新修改的技能和评价:

和之前的招聘信息的内容差别很大吧?
这次我改变了之前展示的两个项目经验,以便于大家比较差异。第一个:

这次我重点关注了多媒体、设计等方面,和上次有很大的不同。
我们先来看看文章开头提到的互联网视频卡顿的项目经验,新版本如下:

和以前有很大不同。
需要特别提醒的是,简历优化是对程序员知识、技能、经验的装扮,从不同的角度呈现不同的方面,可以仔细思考,但切不可弄虚作假。
3.3 测试优化效果
以下是检查你的简历优化水平的方法:
这个过程可以确保你先练习简历和面试技巧,然后以最佳状态迈向你最喜欢的公司中你最喜欢的职位。
04 如何提高简历投递成功率
根据前面的分析,为了增加简历投递的成功率,遵循下面的流程会很有帮助:
将知识、技能、经验进行整理并记录下来,形成基本简历
设立求职目标
筛选招聘信息
选择符合您目标的公司和职位
分析每条招聘信息,提取关键词
根据关键词,结合基础简历,优化技能描述、项目经历,生成针对性简历
