招聘时,我经常收到一些非常彪悍的简历,这个也精通,那个也精通。比如下面这样的:
精通php、java、c#、mysql、python、javascript、html、css⋯⋯
这样的简历是不可能得到面试机会的,我认为这么写简历的人根本没搞明白“精通”的定义,并可以简单推导出以下结论:
- 他列出的这些技术没有一项是他“精通”的;
- 他缺乏学习能力和工作经验;
- 他写的代码结构性和可读性很差;
- 他是一个“表现型”选手,而非“进取型”选手。
何谓精通?
有位同学在简历里写着“精通:……、ajax、……”,于是我问他:
问:你给我讲讲ajax跨域是怎么一回事呗。
答:ajax跨域啊,用jsonp就行,在html里加一个⋯⋯
问:不好意思打断一下,你先给我讲讲跨域问题是一个怎样的问题,导致这个问题的原因是什么?
答:跨域就是一个网站请求另一个网站的资源啊。原因嘛⋯⋯(沉默)
问:那jsonp是怎么解决跨域问题的,是什么原理?
答:记不太清楚了⋯⋯
问:除了jsonp,你还知道其他解决ajax跨域问题的方案么?
答:⋯⋯
“知其然,不知其所以然”是当下很多技术人的弊病。有问题百度一下,拿着找到各种“大神”的解决方案生搬硬套,解决了就认为自己把这个问题搞明白了,并没有深入去思考:
- 这个问题发生的原因是什么?如何重现?
- 当前这个解决方案的原理是什么?
- 还有哪些解决方案?原理分别是什么?
- 这些方案各有什么优缺点?适用于什么场合?
- 业界主流方案是哪几种?为什么?
会:至少知道一种解决方案,并能独立实施。
懂:了解问题发生的原因和解决方案的原理。
有研究:了解业内主流各种解决方案的原理及其优缺点,能在不同case下进行合理选择。
有创新:熟知业内各种现有方案的局限性和不足,并能提出自己的改良方案。
当对某个领域的绝大多数常见问题都达到了“有研究”层次后,便可称之为“精通XX”了。不过,往往在到达这个层次时,你已经充分领略了技术世界的博大精深,不敢轻言“精通”了。
如何描述自己掌握的技术/技能?
一般来说,在简历中对某项技术或技能的描述有以下几个级别:
了解:理解基本概念,有过简单的使用经验 —— “用过”
熟悉:基本操作很熟练,有过密集的使用经验 ——“用得不少”
精通:深入理解其底层原理及各种实现方式,并有丰富的项目经验——“有研究”
由于一次面试的时间有限(一般为一个小时),不可能对候选人的技术水平做到全面考察。因此面试官往往会抽样提问简历中候选人自称比较熟悉的方面、做过的业务等。如果候选人连自称最熟悉的技术水平也不行,那其他的技术点就不用再考察了。
作为WEB开发程序员,技术栈的构成一般都较复杂(后端语言、数据库、前端语言、基本运维……)。在简历中描述的能力点一定要分清主次,按照擅长的程度排序,并实事求是地标注级别,能够具体描述自己的运用程度更佳,比如:
- 精通PHP,熟练使用Yii2、Lavarel框架,了解TP、Symfony框架
- 熟悉MySQL及数据建模,了解索引优化、分库分表原理
- 熟悉AJAX、HTML、JS、CSS,了解LESS
- 能编写简单的Shell脚本
……
后话
不管从事什么领域,都免不了依次经历下面这几个阶段:
- 以为自己“精通”,其实才刚入门 —— “不知道自己不知道”
- 意识到自己的不足,开始勤学苦练 —— “知道自己不知道”
- 被人尊为“大神”,却不敢言“精通” —— “不知道自己知道”
- 无欲无求,随心所欲 —— “知道自己知道”
我们需要“格物致知”;只有深入分析思考并理解事物的原理,才能让自己拥有解决问题的能力。
我唯一知道的,就是我一无所知。——苏格拉底
程序员应聘必备词汇:了解=听过名字;熟悉=知道是啥;熟练=用过;精通=做过东西。
您在文章中说的哪位同学可能是看过这个段子后写的简历吧。
您对了解、熟悉、精通的解释我觉得更贴切一点,要是按照上面的那个段子来说的话,我精通很多技能,但是我却很清楚的知道,其实可能连了解都算不上。当然在我的理解中「了解」就达到您所说的精通水平,「精通」则就是要达到对这项技术的本质有着深刻理解,甚至可以对其修改,好比能够对 Linux 的源代码进行修改。
我还是在校学生,在专科中学习网络,到毕业的时候应该是能够达到 CCNA 与 CCNP 之间的水平,编程的话我自认为和没学过一样,在学校仅仅学过 C 语言,学到函数便结束了课程,想自学却被 Python 所吸引,但是 Python 也就是 hello world 的水平,HTML 技术代码也没记全,Linux 的话也仅仅会基础的操作,虽然因为维护博客而经常使用,但我想这应该连了解都不算吧。
每当想到自己会些什么的时候,总是感到深深的恐惧,虽然「会」的很多,却又感觉什么都会……