程序员如何写一份更好的简历

程序员如何写一份更好的简历

本文章由海外兔 (https://osjobs.net) 撰写,我们团队有丰富的面试官经验,能帮助你分析简历,模拟面试,重新规划你的职业生涯。详细信息请浏览求职课程 (osjobs.net/co/)

程序员求职课程

求职系列文章:

概述

从零开始写简历是一件痛苦的事,因为它既重要又耗时。写得太短的话觉得没诚意,写得太长的话又感觉无从下手。而且大多数求职者没有面试官的经验,没有阅读过其他求职者的简历,所以无法从优秀的简历中学习如何改进自己的简历。我遇过不少求职者写完简历后连自己都不忍心看,错别字连篇,排版混乱就投出去,这也不难怪没有获得面试的机会。加上程序员工资中位数较高,有大量人才从其他专业转来,竞争非常激烈。这篇文章分成两部分,简历中的常见错误以及如何写一份出色的简历,通过分享我们的经验以及技巧,帮助你从众多简历中脱颖而出。

简历中的常见错误

1. 信息过多,缺乏重点

信息过多的常见表现是十几行的技能列表, 我举一个血淋淋的例子:

20 行的技能列表,这位求职者开始就把自己了解的所有工具都列出来,希望能够突显自己的经验和学习能力,但是却适得其反。因为大部分人包括 HR 遇到大段文字都会选择跳读,不信你回头看看,第 3 行和 14 行其实是一样的。我们首先要了解 HR 是如何筛选简历的,例如要招前端工程师,HR会先找简历是否有简介这类总结性的板块,看求职者是否符合基本的岗位要求。接下来会在技能列表中搜索 Vue,React,jQuery 等关键字。如果也符合要求,才会认真阅读整份简历的其他部分。平均来说,给每份简历的时间只有不到十秒钟。所以越简洁清晰的简历,HR 反而越有可能认真看。这里还有个小技巧,投简历不要扎堆在周末投,而应该在平日投。因为周一堆积了周五未处理完的简历以及周末的简历,是最多简历需要处理的时候,HR 花费在每份简历上的平均时间会相对较少。另外,HR 会倾向于把同一天的求职者当成竞争对手,从中挑选合适的,所以那么简历越多竞争也越激烈。

大段的技能列表还有另外一个问题,当 HR 发现里面有几行是一些非常基础的技能时,反而会开始怀疑求职者的技术能力。想象下,当你上网搜索到一个 20部最佳喜剧电影榜单。却发现其中好几部都是之前看过的烂片,一点都不好笑。这个情况下,你就会开始怀疑这个喜剧电影排行榜有问题。技能列表也是一样的,基础的技能点越多,被怀疑的可能性也越高。 那么技能列表应该这么写呢?因为 HR 既可能是工程师,也可能是非技术员工,所以技能列表也应该简短而排版清晰,让外行人也能快速定位技能。我建议参考这种方式(熟练度从高到低进行排列,但不要强调熟练度):

后端框架:Django, Flask, Tornado
前端框架:Vue, React, jQuery
数据库:Redis, MySQL
工具:Docker, Jenkins, Git
其他:HTTP, TCP/IP, WebSocket
外语:大学英语四级,能流畅阅读英文文档

就是如此简短,让 HR 能快速定位到求职者的技能,做出是否看下去的判断。可能有读者会疑问了,这样好像太简单,无法突显我对工具的熟悉程度以及技术能力,这个问题,可以参考下文的简介部分来找到解答。

2. 无意义描述

第二个常见错误就是叙述项目经验的时候进行无意义的描述:

XXX平台
根据项目任务要求完成规划工作和按时完成软件开发。
完成爬虫模块,展示模块。
开发后台管理系统,实现自定义分页,第三方登录。
完成数据整理与入库功能。

HR 无法从这样的描述中得到有效的信息,也无法判断求职者的技术能力。项目经验是最能够突显技术能力的地方,应该按照

  • 使用什么工具: 使用 Scrapy 开发异步爬虫系统
  • 实现什么功能: 构建 IP 代理池,优化爬虫策略和防屏蔽规则
  • 结果怎么样: 提升 200% 网页抓取速度

三个点来修改,这里的 200% 量化数据是画龙点睛之处。就算没做太多统计和优化,也可以展示 CPU 或者内存负载数据。

XXX平台
使用 Scrapy 开发异步爬虫系统,构建IP代理池,优化爬虫策略和防屏蔽规则,提升 200% 网页抓取速度。
优化项目结构,拆分出核心库、常量库、工具库等公共模块,使用 Vue 框架完成内部管理系统,实现自定义检索,第三方登录,自动化部署等 6个 核心功能。
负责数据的清洗与存储数据到 MySQL 数据库,通过日志分析定位慢查询,通过添加联合索引减少了 50% 数据库查询时间。

我们准备了一些简介/工作经历/项目经验的例句在 awesome-resume,大家在写简历的时候可以用作参考。例句范例:

  1. 有良好的代码风格,通过添加注释提高代码可读性,注重代码质量,研读多个开源项目,学习改善代码的健壮性与扩展性。
  2. 有良好的代码编写习惯,具有良好的沟通、协作能力能力,有良好的职业道德和较强的工作责任感。
  3. 理解操作系统中进程、线程、死锁、虚拟化、文件系统等原理和简单实现。
  4. 大型互联网分布式系统的架构设计和开发经验,拥抱新技术,有很强的学习能力。
  5. 有扎实的计算机理论基础,良好的算法与数据结构基础,了解计算机基本原理与常见机制。 ...

如果你写完不知道写得怎样,也可以请我们帮忙简历分析 (osjobs.net/co/)。重要的是,从现在开始做数据统计,养成先测量再优化的开发习惯,尝试去发现和解决性能瓶颈。

3. 排版杂乱,错别字多

错别字绝对是零容忍,如果求职者连自己的简历都不重视,那么 HR 更不会重视。分享几个喜闻乐见的例子:

熟悉iOS发布上架流程,真机调戏
熟悉 mysql 数据库,了解 MySQL 基本原理(术语前后不符)

还有的简历字体极小(因为内容太多,又要塞在两页中),行距小,难以阅读。中英文之间空格混用,模块之间没有明显的分隔,让 HR 找不到想要的信息。有些招聘网站并不能完全正确渲染 PDF 文件。(例如拉勾网,遇到 PDF 文件翻页就会有大片空白出现。),我找了两个真实的例子放在下面,你问为什么海投没有回应,HR 问你这样的简历怎么看。

写完简历之后一定要自己仔细检查,再请一位朋友看一遍,请求中肯的建议。在排版上我建议大家用 HTML 写然后转成 PDF,HTML 比 Markdown 和 Word 格式更好进行样式与版本控制。读者可以使用我们的免费 HTML 模版付费 HTML 模版(均通过热门招聘网站测试),确保自己的求职简历能更好呈现在 HR 面前。模版示例:

如何写一份出色的简历

一份好的简历总体可以分为以下几个板块:

  1. 基本信息
  2. 个人简介
  3. 技能列表
  4. 工作经历
  5. 项目经验
  6. 教育背景
  7. 其他

这个顺序能让 HR 从浅到深快速了解求职者的优势与技能。(刚毕业的工程师或者有出色教育背景的工程师,可以把教育背景放在基本信息后面。)

基本信息

姓名/电话

如实填写即可,要注意的是,投简历之前可以先在全国企业信用信息公示系统或者天眼查查询该公司是否真实存在,是否存在严重失信或者法律诉讼,有些猎头会随便起一个公司名字,专门接受简历然后再联系求职者,不小心投递了就出卖隐私了。另外如果公司涉及太多的劳动仲裁诉讼,那么也是一个值得考虑的地方。

邮箱

写常用邮箱即可,论坛上,偶尔会讨论使用什么尾缀的邮箱看起来比较厉害,有的建议用 gmail,觉得能突显英语能力。有的建议使用 Outlook 或者 163,在国内能比较稳定地接受邮件。也有鄙视 qq 邮箱的,觉得太私人并且显得不专业。某些 HR 确实会因为邮箱尾缀而对求职者的初步印象产生影响。不过,只有在求职者的简历没有亮眼点,结构混乱的前提下,HR 才会因为这些小细节而筛掉他们只要求职者在简历中展现出自己的优点,什么邮箱尾缀都不重要。

Github / 博客

放上 Github 或者博客链接的前提是它能突显求职者的编程能力,如果 Github 既没贡献过开源项目,一年就 commit 了几次的话就不要放进去了。如果没写过技术博客,或者很久没更新的话,我建议在准备面试的这段时间,每周根据复习的主题写一篇总结性的博客。这样一方面能够通过写文字强化理解复习的内容,为技术面试做好准备,另一方面也能作为简历的加分项。

求职意向

这个细节很多求职者会忽略,一名 HR 可能会接受不同职位的简历,如果简历上没有注明应聘的职位,HR 也就不知道怎么去判断求职者合不合适了,最简单的方法就是直接看下一份简历。所以求职意向必须说清楚自己的目标岗位,例如前端工程师,Java 开发工程师

其他信息

其他信息包括政治面貌,性别,年龄,照片等。如果要投国企或者事业单位,党员的政治面貌可能有帮助,至于其他加不加没什么关系。合起来,基本信息部分可以像这样写:

张学礼
邮箱: contact@osjobs.net | 电话: 133-5555-6666
Github: github.com/abc | 求职意向: 爬虫工程师

简介

简介非常重要,也是HR开始了解求职者的第一步。在这里要体现出自己的优势。举个例子,在简历我常常看到这样的描述:

热爱计算机,喜欢学习计算机系统的知识。

如果你也这样写,那么完全体现不出自己的优点,因为这就像一句例句一样,没有任何自己的东西,所以需要根据自己的情况具体修改:

喜欢阅读计算机系统的书籍,完成《深入理解计算机系统》80% 以上的习题。并在博客(链接)分享学到的知识。

如果能够引导 HR 打开博客,进一步地了解求职者的话已经击败了大部分的求职者了。如果一开始不知道从何下笔的话,可以根据目标职位的岗位要求来参考,而且当看到目标职位要求熟悉多线程编程而自己不太理解的时候,也是一个非常好的复习机会了,面试绝对考啊。这里我们假设求职者喜欢的一家公司的岗位描述与要求如下:

Python 爬虫工程师
岗位描述:
- 负责爬虫系统架构设计和开发;
- 参与设计系统技术方案,核心代码开发和系统调优;
- 参与各专项技术调研,新技术引入等;

岗位要求:
- 2年 或以上 Python 开发经验,本科及以上学历,计算机相关专业;
- 热爱计算机科学,精通 Python 语言,熟悉正则表达式,熟悉 MySQL 数据库;
- 熟悉 Python 网络编程,能够设计和维护基于 TCP/IP 协议的高性能事件驱动框架程序;
- 有强烈的求知欲,优秀的学习和沟通能力;

先分析下这个岗位的要求,1) 负责开发爬虫系统,2) 需要 Python 以及 MySQL 开发能力,3) 熟悉网络要求,对网络协议有了解。抓住这几点之后,我们就可以针对这个岗位写简介:

两年 Python 后端开发经验,熟悉 Scrapy 框架熟悉 HTTP 协议、TCP/IP 协议,了解正则表达式,XPATH的用法,了解 Redis,MySQL 数据库与 Linux 系统的常见机制与原理。作为主力工程师参与设计与开发过多个项目,负责系统核心模块的开发,自动化测试与部署。有优秀的学习能力和团队沟通能力,过去一年中与团队十多次进行技术分享,主题包括 Python 协程原理分析,Python 性能优化技巧等。

简介分为三部分,第一部分展现自己的符合岗位要求的专业知识与技能列表,第二部分简单介绍之前主要工作职责(有爬虫开发,自动化测试与部署经验)。第三条列出软技能,以与团队进行技术分享为例子,突显出团队合作的能力。

如果是非科班或者萌新工程师的话尽量从个人项目,学习能力以及软技能突显自己的能力。

两年独立开发 Web 项目经验,熟悉 HTTP 协议、TCP/IP 协议,了解 Redis,MySQL 数据库与 Linux 系统的常见机制与原理。了解项目开发流程及自动化部署,设计以及开发了 Todo-list,博客等项目,实现了浏览,评论,点赞等功能。热衷学习计算机技术,自学了计算机系统,数据结构等多个计算机课程。

非科班工程师要与科班工程师竞争,最好自己有做过岗位类似的项目。优质的个人项目也是加分项。博客,爬虫,Todo-list 这些实在太常见了,我不是说它缺少技术含量(可以看看 Python 作者 Guido van Rossum 写的爬虫),只是太多求职者都只完成非常简单的功能,没有深究原理。如果能完成一些与众不同的项目的话,那么就能吸引到HR的眼球了。我们整理了一些免费的项目实战项目 (github.com/resumejob/fr)供各位选择。试想下,如果上面的简介改为:

两年 Python 后端开发经验,了解 Scrapy 爬虫框架,设计开发了简单的浏览器,实现语法解析,编译功能。开发了一个搜索引擎和社交网络,实现了搜索,关注功能。熟悉 HTTP 协议、TCP/IP 协议,正则表达式,XPATH 的用法,了解 MySQL 数据库 与 Linux 系统的常见机制与原理。热衷学习计算机技术,自学了计算机系统,数据结构等多个计算机课程。

是不是非常不一样了,HR也会愿意给机会这样特别的求职者。写简历的过程其实也是自我反省的过程,从中你能知道自己哪里不足,及时地弥补与学习,才能得到好的 offer。

有些工程师会有一些误区,他们觉得如果循规蹈矩地写简历,只会吸引到传统的,无聊的公司。我遇过不少在简介中写热爱自由,热爱生活,我想大多数人都喜欢自由,单纯写热爱自由并不能展现出真正的热爱,在计算机领域最好证明的方法就是使用自由软件与贡献开源项目。恭喜你,第一步的简介完成了。你抓住了 HR 的眼球,接下来的话就是要展现自己的能力。

技能列表

像我在常见错误所指出,HR会直接在简历中搜索关键字,如果没有的话就会直接筛掉。所以技能列表可以按照类型把自己最擅长的工具列上去,熟悉度因为见仁见智,所以不用写,或者用进度条表示就好:

后端框架:Django, Flask,
前端框架:Vue, React, jQuery
数据库:Redis, MySQL
工具:Scrapy, Docker, Jenkins, Git
网络协议:TCP/IP, HTTP, Websocket
外语:大学英语六级,能流畅阅读英文文档

工作经历

如果你没有工作经历的话,这个模块可以跳过。一个要注意的点是工作经历的完整性,我有一次去 BAT 其中一家面试的时候(我常常去面试,参考如何准备技术面试),他们问我为什么没有把完整的工作经历写上去,因为他们要求从毕业到现在的时间不能出现空白期。我回答说一方面是保持简历的简短,另外一方面是最近的工作经历与这个岗位比较有关。不过这也是我仅有的一次被要求填写完整的工作经历,所以我的建议是简历上最好写上最近 2-3 间公司的工作经历,而且面试问到之前的工作的话要能正确地回答,并且连接所有时间点,不要让面试官觉得你在隐瞒什么。工作经历应按照最近的工作倒序列出,可以分为四点:

公司名称

写上公司全称即可,如果产品比较出名但是公司不太出名的话,也可以把产品名加在后面:

独角科技有限公司(旗下产品 EngineGo)

岗位/在职时间

岗位 title 要注意,如果投的岗位是数据分析工程师,那么之前曾经担任爬虫工程师还是数据挖掘工程师对 HR 来说就不一样了,高级工程师的话也要加上去。在职时间要根据社保缴纳的时间写,有些厂会做背景调查的。

独角科技有限公司(旗下产品 EngineGo)
2014年6月-2016年6月 | 高级 Python 开发工程师

工作经历

工作经历突显的是在职的职责以及给公司带来什么效益,与接下来的项目经验不同,不需要详细写技术栈和项目细节,这里举一个我们例句中的一个例子:

  1. 作为组长负责设计和开发分布式网络爬虫系统,优化爬虫策略和防屏蔽规则,提升网页抓取的效率和质量。
  2. 根据行业需求分析设计方案可行性,对项目代码进行测试优化,协助持续集成与自动化部署,提高系统可用性。
  3. 负责 EngineGo 爬虫系统技术文档的编写以及维护,定期 review 团队的代码,定期组织团队技术分享。

项目经验

项目经验可以放在对应的工作经历里,每间公司选 1-2个 项目重点介绍即可。需要详细描述主要开发或者维护的模块,使用了什么工具,以及达成的效果如何,这里以 EngineGo 爬虫系统为例,注意简洁和突出数据,不要进行无意义描述,同时关键字应该加粗。

  1. 与产品经理保持沟通,使用 Scrapy 框架对爬虫模块进行重构,提高 200% 爬虫速度并减少服务器 20% CPU负载。改进爬虫策略,降低 40% 被屏蔽的请求数。
  2. 作为主要工程师设计以及开发物业模块,活动模块,实现报名,即时通知等 10个 功能。
  3. 使用Redis数据库实现分布式爬虫与数据缓存,减少 50% 数据查询时间。
  4. 与其他工程师合作,使用 Docker 对项目进行拆分重新架构, 减少业务模块之间的资源耦合, 实现持续集成与自动化部署。

大部分情况下,不建议简历中出现项目的图片,更好的做法是在不影响排版的前提下附上项目链接。

教育情况

学校大家都会写,要注意的有几点,如果就读 211 / 985 等学校可以把学校放在前面,简介之后。另外,我碰到不少转专业的求职者直接不写原本的专业了,我觉得这毫无必要。HR 也不是傻的,看没写专业就知道是非科班的,还不如老老实实写下来。高绩点 / 专业课分数高 / 奖学金 / 比赛获奖可以选重要的加上:

XXX大学 | 计算机科学
2013年- 2017年
计算机系统(85分/专业排名18/100),数据结构(90分/专业排名10/100)
绩点:3.7 | 获得一次国家励志奖学金
2015-2016学年获得美国大学生数学建模竞赛一等奖
2013-2014学年获得广东省“砺剑杯”科技创新大赛二等奖

好吧,如果我的学校非常一般,专业也不对口怎么办。我们参考这篇文章的统计,HR看重求职者简历的哪些部分,来自好学校,好公司这不用说,完成 Udacity / Coursera 等课程也有加分。求职者可以像这样展示自己的教育情况。

XXX大学 | 土木工程
2013年- 2017年

Udacity | 机器学习工程师 Coursera | 计算机导论 | 操作系统
2016年- 2017年

我不敢说在国内的环境,这一定能加很多分,毕竟大多数公司看重的还是大学的学历。不过,一些比较开放的公司还是喜欢这样不断学习的员工。加上去,起码不会扣分。

其他(可选)

可选项,也有可能成为加分项,国内比较少看重这点,不过我个人还是比较注重的:

志愿者工作

协助组织翻译 Flask,Requests 第一版本文档,翻译十多篇技术文章(侧面突出了外语能力比较好)。
教导初中生从零开始学习 Python,并设计并编写自己的游戏。

其他项目

可以把自己的开源项目或者工作经历的次重要项目简单概括,例如:

  • Cherry (github.com/Windsooon/ch): 基于 sklearn 实现的一款具备高精确率,召回率的文本分类器,开箱即用,支持多种自定义算法以及可视化功能。

综合起来

综合上面的几点,一份好的简历看起来应该是这样的,模版可以在 osjobs.net/co/ 找到:

总结

这篇文章讲述的简历技巧面向的是国内的公司,如果投向外企的话,不是直接翻译那么简单,有兴趣了解的读者可以参考 Programmer Resume,里面提供了不少有用的资讯。总的来说,只要认真去修改简历,HR 是能感受到的,我希望各位看了这篇文章后能写出更好的简历,也能从众多求职者中脱颖而出,得到更多机会。

海外兔 (https://osjobs.net) 专注海外生活

如果你觉得这篇文章帮助到你,希望我们能继续分享自己的技术知识和求职经验,请帮我们点赞吧。

编辑于 2020-05-15

文章被以下专栏收录

    学习这一部分的课程并不能使你成为一位程序员,但是你不需要成为一名程序员,你可以是会编程的老师,会编程的 HR,这点可以使你在行业中更具有竞争力。而且世界上很多问题都没被解决。当你学会编程,用编程的眼光再去看自己平常的工作,或者就能找到一些属于你们行业的独特的问题,去解决它们。