如何辨别一个程序员水平的高低?

太多的不该


自认为不是一个好的面试官,因为我认为在这么短的时间内,准确地衡量出来程序员水平的高低是有比较大的难度的,并且我有多次看走眼的时候,面试的时候觉得能力还不错,但是入职工作了一段时间之后,编程能力不忍直视。

工作之后接触一段时间,我会从这么几个方面观察他们,以判断技术能力的高低和发展潜力。


能不能出活儿、能不能debug

能不能把开发任务按时按质量地完成,当然是最主要的衡量标准了:

  • 需求理解快而准确,流程设计考虑全面,可以按时间要求开发完成,Bug少...这当然是项目经理最喜欢的程序员了;

  • 能力一般,但是工作态度端正,不懂就问,也可以按照时间要求完成工作,这也是合格的程序员;并且经过一段时间的培养和成长,可能变成优秀的程序员;

  • 工作能力一般,每次迭代都领最简单的任务,开发出来的代码问题多多,没有责任心,发生问题就喜欢甩锅...这种程序员,很快会被淘汰。

解决问题的方法

在开发过程中,难免会遇到没有见过的问题,有些程序员遇到问题无从下手,而优秀的程序员,自有一套解决问题的方法。

  • 擅长使用搜索引擎、Stack Overflow等网站,有一定的英文阅读能力,遇到问题之后,先尝试按照暴露出来的问题搜索,寻找解决问题的方法;这里不太建议使用中文搜索引擎,很多时候,按照英文搜索,更容易找到解决方法;

  • 问领导、问前辈、问同事,有些问题自己解决起来很困难,但是其他人有可能遇到过相同或类似的问题,他们给一些提示和方向,就可以帮助你很快地解决问题;但是要注意,这些问题一定是要你自己思考过,尝试解决过,而不是一有问题,就去寻求别人的帮助。

分析问题、流程设计的思路

有人会认为,程序员的主要工作就是敲代码,上班大部分时候都是在敲代码,其实并不是这样:

  • 程序员很多时间都在做需求分析,能不能快速和全面地理解需求,也是考核程序员水平的一个标准;

  • 在敲代码之前,要做很多设计工作,一些复杂的功能,需要把流程图画出来,甚至把伪代码写出来;一些水平比较低的程序员,甚至这一步做的都有困难,流程都想不明白,写出来的代码更不可能对了。

总结问题和改进问题的能力

好的程序员,相同的问题不会犯第二次,差的程序员,总会在一个问题上栽跟头:

  • 优秀的程序员,也是一步一步成长起来的,各方面都差不多的两个新手程序员,为什么若干年后的水平相差很大,就是因为优秀的程序员,在工作中会遇到各种问题,他们在找到解决问题的方法之后,会总结经验,当未来遇到相同或类似问题的时候,可以很快解决;

  • 建议大家养成写技术笔记的习惯,技术博客不仅是分享给别人看的,更是一个总结的过程,写给自己看的。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


我以前的公司,最垃圾的程序员才拿一千多。却比现在拿一万多的牛逼。表现,bug少,做的快。甚至面试手写b+树。回答虚拟机。现在一万的。答不上就跑了。让他二千块做他不干。以前的答不上二千块晚上一两点下班,单休,都干。


用户93912154010


我9年的程序员也当过技术面试官,所以对这个问题还是有很深的体会。根据实际的自己参加面试的经验以及面试别人的经验,我摸索出了一套魔鬼面试的流程。

要考察一个程序员水平的高低,根本就不需要问很多问题,也不需要做笔试题,只要让他完完整整的解决一个实际的问题,就能够考察出这个人水平的高低了。

最简单的一个办法,就拿平时工作中遇到的复杂的问题,告诉他现象,然后让他分析有哪几种可能性。

最好选择那种复合型的性能问题,比如说这个现象有多种原因造成的,而且其中涉及到操作系统,数据库,网络,算法等多方面的问题。

让他说出每一种可能性都用什么方法来排查,看哪些观测指标,怎样判断是不是这一种原因。

接下来给他提供实际的环境,让他按照他的说法去做排查,看他会不会观测那些指标,所说的工具会不会用?

解决的办法是不是能够真的实际上手去操作,把问题给解决掉,如果一个方法不起效,能不能及时切换到另外一个方法。

过程中这个人的知识面,逻辑思考的能力,沟通能力,表达能力,实际动手的能力,面对问题的耐力,都能够考察的一清二楚。

不要觉得这个很花时间,大多数人在实际动手这个环节之前就已经挂掉了。

过了这项面试的人,在实际的工作中,大部分都是技术骨干,可以独当一面的。


木鱼说职场


程序员的水平高低,不是靠语言或外在表现就能看出来的,不是看他会多少技术、参加过多少项目、写了多少博客,而是看他在实际业务场景中解决问题的能力,尤其是面对一些特别复杂的问题,或在高强度、高压工作状态下解决问题的能力与态度。


技术可以通过学习掌握,但是解决问题、定位问题的能力却不是一蹴而就。大家可能会说,“解决问题的能力”这个太宽泛了吧,可以更具象化吗,有具体的测量方法吗?简单整理了以下几点供参考。


优秀的代码能力

会写出满足需求的代码,早就不是评判程序员水平的标准了。代码编写既要满足业务需求,同时还要考虑后续的软件维护,说得通俗些,既要自己爽,也要别人爽。一个优秀的程序员,会致力于写出更简单、更效率、可读性强、扩展性强的程序代码。


逻辑思维

程序员在日常工作中,需要理解各式各样的业务需求,所以这就需要程序员具备一定的逻辑思维能力。可以说,逻辑思维是程序员的灵魂,因为每一行代码都是程序员逻辑的体现。


debug能力

项目着急上线,发布时出现问题?

业务高峰时段,系统宕机了?

业务催、运营催、用户催、老板催!

各种形态的bug,各种着急的心情,背后无数支眼睛盯得内心慌慌......

这些都是一位合格程序员所需要面对的日常。不同的程序员,在解决问题的方法、效率、质量等方面,都各有千秋。一个经验丰富的程序员,能够扛住各方压力,在复杂条件下找到核心问题,通过抽丝剥茧的分析来找到产生问题的原因,并快速进行应对处理,事后及时复盘总结,减少同类问题出现的概率。


学习能力

随之互联网的发展,越来越多的人涌入程序员这个赛道,竞争日益激烈,加之新技术层出不穷,更新迭代快,程序员所使用的语言、框架、模式都会发生天翻地覆的变化。如果不主动学习,你很快就会被落伍淘汰。



沟通能力

这种其实在面试过程中能体现出来,沟通主要是技术沟通,以及和客户之间的沟通,所有技术都不是闭门造车就能搞定的,沟通能让事情推进起来更加顺畅,包括和产品经理之间的流畅的沟通也显得非常重要。程序员的能力表面是可以直接展示出来,但很多内在需要是需要时间的磨合才能了解,人就才能见人心,而且很多优秀的程序员是培养出来的,能够长时间在一起的队友都是时间长了磨练出来的。


责任心

线上出bug了,第一时间响应、处理;

团队项目进度紧张、人手紧缺,主动补位;

又或者,在项目推进过程中如果只是关心自己模块内容,对于整个项目置之不理,只守着自己的一亩三分地。

随着时间轴的拉长,你会发现,有此f技术能力不是最好的,甚至不如你的小伙伴,最后做到了技术主管或经理、甚至更高职位,这里面除了技术实力,还有一个叫“责任心”的东西。


结束语

判断一个程序员的水平高低,核心是其解决问题的能力,而解决问题的能力养成,需要扎实的底层基础来支撑,要综合其代码质量、项目经验、框架能力、逻辑思维等等多方面,不能单看某一方面。


而对于1-6岁的程序员来说,想要成为一个高级程序员,变得越来越优秀,唯有持之以恒去学习、积累、实践、修炼。


简单罗列,欢迎补充或修正,觉得不错请点赞支持下,谢谢~


----end----



优知学院


给他安排debug的任务,最好是崩溃问题或性能问题,观察他面对大量复杂的代码,在信息不全的的情况下,看他怎样一步步抽丝剥茧缩小范围,最终定位根本原因,并且给出一个不错的fix。

如果能独立完成工作,那么以后必然成为高手。

如果经过少量提醒点拨也能完成,以后会是个不错的程序员。

如果需要不断提醒,只能按照我给的思路去反复测试调查,那么只能说是个踏实肯干的人,但天赋不高,可以委派些普通任务。

如果以上皆非,我基本就放弃对他的治疗了。

之所以选崩溃或性能问题,因为这种问题没什么玄学,行就行、不行就不行,结果好验证。

这种问题很考察基本功,可能对操作系统,语言,编译链接器,内存,进线程,网络,存储,图形学都要有深刻理解,也很考验逻辑推理能力,在一堆证据中构建合理的证据链推导出最终结果,懂得大胆假设小心求证的工作方法,也考察耐心和毅力,有的问题需要构建复杂的测试场景,还要反复多次测试才能重现,考察沟通能力,复杂的bug可能涉及多个部门开发组,可能还要对最终用户做访谈。

还有就是这我总结出了一些架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题和答案做成了文档和架构视频资料还有完整高清的java进阶架构学习思维导图免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。


浩淼淼o


带领团队已多年,项目数十个,对判别程序员水平的高低,我有自己的看法,欢迎大家一起交流。



1.代码质量。

优质的代码,首先是经得起考验。静态分析工具过一遍,无错误,无警告。当然警告部分需要人工重审,因为静态分析工具不一定完全正确。过了这一关,重要的还须过测试关,少Bug或无Bug的代码,才是好代码。优质的代码带有技术气质和艺术气质。阅读起来,有一种赏心悦目的快感,即工整美观,干净利落,又蕴含着理论常识,运用技巧,精准到位。



2.表达能力。

良好的表达能力,需要建立在以下几方面:解决问题能力(复现,定位,分析,解决,验证,总结),语言组织能力,逻辑思考能力,团队协作能力。换句话来说,能用团队成员能理解的语言和思路,完整清晰地描述问题及方案的来龙去脉,优劣取舍。一件事情,可以展开讲半天,也可以浓缩成一分钟,收放自如。不同的听众,理解力和关注点都不同,表达者应有准确的定位和阐述。



3.文档能力。

文档形式包括但不限于PPT,文字,图表,音视频。文档内容包括但不限于API说明,工具手册,项目事项,技术论述,陷阱总结,方案展示,指导手册。文档要求必须是满足公司或部门的规范和格式,否则五花八门的,不利于交流和传承。



以上3点,是我量化判断程序员水平的标准,仅供参考。相比水平,其实我更看重程序员的态度,执行力,时间观念,自学力等等,也是很重要的团队作战能力,也可以说是程序员水平的考量吧。

谢谢大家。


嵌入式宏思微想


计科专业从事软件开发十几年了,主要在浏览器内核领域研究的比较多,最近在研究服务器后台方向,辨别程序员水平高低主要看做出了什么产品,如同现在的程序员主要是项目经验,简历上写的一堆项目经验都是面试的时候主要提及的问题。经常在面试中会问两个关键点:一个是做过什么项目;一个是在项目组中承担什么职务,毕竟参与过和做的多少程度是不一样的,这些都是可以通过一些具体的细节检测出来,问题越具体越是容易看出水准,具体的东西不是能够编造出来的。

有很多技术公司直接不通过笔试,仅仅通过简单的面试就确定工资水准了,最简单的测试程序员水平的直接用笔试的方式,笔试可以把一些细节量化,尽量的细节化也是能测试出程序员基本功的,但这种基本用来测试初级程序员的,很多高级的程序员看到有笔试直接就抬腿走人了,因为有些程序员在一个方向做的时间太长了,很多基本功都忘得差不多了,所以笔试可能不过关,现实中很多程序员笔试不过关,面试还可以,也一样可以做项目说的就是这类人,起码这算是非常优秀的程序员。

有很多公司采用谷歌的方式,直接采用上机写代码的方式检验程序员水平,这种方式比较直接,但在现实中可能消耗的时间以及面试官的精力,目前只有极少数的公司用这种方式,国外的公司用这种方式比较多,这种看基本功非常有效。通过代码可以看到编码习惯以及算法的设计上,都能直接看的出来。

普通的程序员直接看项目的经验,高级的直接看做过的产品,特别是产品主要设计人员,这就是程序员内心的自豪感,毕竟作为一个程序员起码要有自己设计开发的产品,也算是不白做一个程序员,在程序员的职业经历中如果能经历过一个产品从开始设计的初稿到最后推向市场,如果是完整的经历,将是一种巨大的财富,只要经历过一次都会对产品设计有一个比较层次的认识,这种能力需要靠直接的面试语言表达来展示出来,谈下对产品的认识以及产品稳定性性能等方面的总结,能到这个层面起码是高级软件工程师的级别。

当然有些程序员内在的东西不是靠语言或者写代码看出来的,因为一个优秀的程序员不仅仅是代码能力以及框架能力,还有几个非常重要的能力

  • 责任心,在项目推进过程中如果只是关心自己模块内容,对于整个项目置之不理,基本上很难有多大的成绩,眼界只是守着自己的一亩三分地,有些程序员开始其貌不扬,技术能力也不是最好的,但最后做到了主管或者经理甚至副总,这里面一定包含着技术之外的东西,至少包含责任心。

  • 抗压能力,现在绝大部分程序员都有抗压能力不强的缺陷,有了一个看似变态的需求内心的第一反应就是排斥,作为一个技术人员首先要做到用技术服务产品,不要掺杂过多的消极因素在工作中,只要是能当技术管理抗压能力一定是比普通的技术人员更加用于承担。

  • 沟通能力,这种其实在面试过程中能体现出来,沟通主要是技术沟通,以及和客户之间的沟通,所有技术都不是闭门造车就能搞定的,沟通能让事情推进起来更加顺畅,包括和产品经理之间的流畅的沟通也显得非常重要。

程序员的能力表面是可以直接展示出来,但很多内在需要是需要时间的磨合才能了解,人就才能见人心,而且很多优秀的程序员是培养出来的,能够长时间在一起的队友都是时间长了磨练出来的。

希望能够帮到你。


大学生编程指南


大家好,老陈为你解答自己的观点。


技术厉害的人不仅代码清晰,而且业务逻辑能力很强,而且但凡是略懂代码的人只要看了代码百分之八十以上就能知道这个人技术怎么样。当然这是要在看代码的情况,那么不看代码怎么辨别呢,那么就只能通过口头交流技术就能得知。


一、通过面试得知应聘者的技术水平

程序员找工作,就先就是第一轮就是人事给你面试,先照本宣科问一些问题,你只要回答的不是拖拖拉拉,而且表现的很自信的那种,那基本上第二轮就能通过。但是在第二轮,一般是技术领导面试你,那么就会直接问你的技术相关的问题,面试官会根据你的简历或者他对应聘者的要求提出一些技术问题,通过这种方式立马就能得知一个人技术水平怎么样,但也有特例,有些人应聘者是做了功课的,把面试题刷的滚瓜烂熟,但是做项目就不太行,所以就要通过下面这种方式辨别一个人的技术水平。

二、通过工作中的观察得知一个人的技术水平

在工作中肯定会和身边的同事合作开发,那么只要合作一两天就能发现一个的人技术水平,一是开发效率,二是代码的质量,三是业务逻辑,四是理解能力,五是对技术的专研,六是考虑问题。一个人要是把需求完成的再好,毫无bug,但是他写的代码你根本没办法看,没办法让人接受,这并不代表他写的代码技术就高,只能说他其他方面强。

我一开始做前端开发的时候,总是遇到问题就问他人,他们就立马知道我的技术怎么样,我处理问题内心是很慌乱的,害怕自己考虑的不全面,害怕自己不能解决这个bug,每到这个时候我就会叫同时帮忙处理,那个时候根本不敢一个人开发一个项目。怕遇到问题不会解决,怕产品上线之后,存在很多很多问题。

责任心不强的人,做事态度不端正的人、逻辑思维能力不强的人,不喜欢总结的人,写出来的代码经常出问题的人,平时喜欢逃避责任或者喜欢甩锅的人技术肯定不是很强的人。

优秀的程序员都是怎样干活的?

优秀的程序员的特点:知其然而知其所以然。他们即便做事的风格不一样,思路不太一样,但是他们都有一个很好的习惯就是做笔记、喜欢彻底把问题研究透,甚至会反复的提出质疑,然后反复的解决问题。

  1. 喜欢做笔记,把遇到的问题记下来。有的人放在博客上,有的人专门放在笔记编辑器里,比如有道云笔记。


  2. 找到各种解题思路并且分析哪个解题思路更优一点,而一般的程序员脑海里只想着解决问题就行。

  3. 能够快速定位到问题的所在,即便是不会处理,也能快速的通过搜索找到解决问题的办法,先把问题解决掉,然后再去想是什么原因导致自己没有考虑到这方面,这种解决方法先做个笔记,然后想想为什么要这样解决。

  4. 他们都不会自己死磕在一个问题上,都会和身边的分享,也许其他人就知道呢,因为三个行必有我师。

谢谢大家的支持,期待您的点评。

老实人侃职场


小郑是从事前端开发的,曾经被面过也面过其他人,一路上也见到过,更多的是共事过各种各样的程序员大牛。与大牛一起共事和讨论,那是一件非常值得享受的事情,因为那样可以使你开阔视野,达到知道自己不知道的境界,从而有方向, 在短时期内进入到一个新的境界......。啊,有点跑题了,不好意思,下面说正题。
我想从一个前端开发人员的角度,说一下,我是如何辨别开发程序员的水平高低的。

一、从专业基础能力来看

除了专业基础能力之外,我说两个最容易被程序员忽略的两个看似不起眼,却是最需要重视的两个基础知识点。
1. 基础算法,数据结构理论扎实程度
如果这项能力较弱,就会导致后面一编程思维难于理解。比如前端JS中涉及到的原型链,如果比较了解数据结构中链表结构,那么这个东西也就不难理解。类似问题还有很多。
2. 计算机体系结构,操作系统理论,网络理论的扎实程度
如果操作系统,网络基础没了解过,那么在你的职业道路上,越往后面,一些重要的东西理解起来就会比较吃力,比如前端从浏览器输入URL到服务器返回数据这个过程,要更深入的理解TCP/IP,协议栈等就比较困难,学习到node开发,到I/O,进程,线程方面理解不好,就不能很好的使用node的api等。
前端这个业务,导致这些基础能力较弱其实也是很容易想得到的原因。
可能是:计算机专业出身,在校没学好。
可能是:非计算机专业出身,0基础培训,速成上岗,不扎实。
可能是:非计算机专业出身,自学,不体系化。
可能是:知道要学习,自律不行或者有意识无行动。
总之,大概就这些个原因,如果程序员想这职业道路上发展的更好,更高,补补这些基础知识是会让自己起的更轻松。
面试的时候,也会带上一两个相关问题,来探探程序员的功底。

二、从做过的项目来看

对于有经验的开发,至少参与过完整项目从立项,开发,测试,部署等完整的项目流程。这个时候,只需要从下面两个方面来问,来了解,基本就能断定该程序员水平高低。
1. 看对整个项目所做出的个人贡献。
比如:项目如何做技术选型的。这一点可以往深的问几个为什么。从回答中,就能知道其对技术掌握的真实情况。尤其是对于多人合作完成项目而言,不仅要看程序员对整个项目的把控能力(这里包括技术和业务),而且要了解是如何协作的,自己的能力定位,对新技术和不断变化的现状是否愿意学习和接受及探索。这样一个程序员的全方位的能力基本就能知道了。
2. 看在整个项目开发过程中解决问题的能力。
这是一个关于处理问题是否有归纳方法论的习惯。
作为开发者,很多时候我们除了开发新需求,设计新的项目结构,还需要处理很多临时的问题。不管什么问题,相似度高的问题不要重复花时间,提高开发效率。
基于这一点,可以问在项目中碰到过的最大问题是什么,自己是如何解决的。或者直接问是否有什么方法论。
项目经验是最好了解一个程序员水平高低的有力证据。从上面这两方面去问,基本就能断定一个程序员开发项目的水平高低。

三、从侧面来了解高水平程序员的素质

一名高水平程序员还应该具备的几个通用素质是:
1. 高效的沟通能力
工程师不仅要具备全面严谨的思维逻辑,良好的沟通能力也是帮助我们高效完成工作的一项必不可少的技能。
2. 高效的开发工具
工欲头善其事必先利其器,使用高效的工具能节省大量的开发时间。
3. 必要的产品设计思维
有经验的程序员在开发需求时除了实现需求,做的另一件事情是思考这个需求为什么是这样的呢。是不是合理呢?如果不合理该怎么修改呢?

小郑搞码事


如何判断一个程序员水平的高低,那么可以通过非常简单的方法来进行判断,就是看一看这个程序员是否会说人话。

因为绝大多数水平初级或者是中级的程序员,他们在思考问题的时候都是非常逻辑性的去思考问题的,虽然说这样的思考是没有什么问题的,但是在和普通人进行技术问题的沟通的时候,经常会牛唇不对马嘴。



所以你要看一个程序员的水平的高低,只需要问他一个技术性的问题就可以了,让他用非常通俗的语言把这个问题给解释清楚,如果你能听得明白的话,那么你就可以来分辨这个程序员的水平的高低了。

举一个例子,你可以问一个程序员,当你在浏览器的地址栏当中输入了一个网址之后发生了什么,导致浏览器当中把一个正确的网页给渲染出来了。


再比如另外一个问题,你可以问一个程序员浏览器和服务端之间是怎么确定每一个用户的身份的?

当然你必须保证你身边有一个人是了解这些技术问题的,当一个程序员可以把这些问题用非常浅显的通俗的让你听得懂的话,把这个描述清楚的话,那么就说明这个程序员的水平功底是非常深厚的。

就算不是说是专家级别的水平,那么他也可以去解决你日常的工作当中遇到的绝大多数的问题。


因为你招聘一个工程师最重要的事情是他能够完成你的工作,而不是说它有多么强大的科研技术能力。

只有能把问题分析清楚的工程师,才有能力去解决问题。因为在编程领域,解决问题的能力并不是特别重要,最重要的问题是能不能够分析问题并提出正确的问题,因为只有你提出了正确的问题,你才能够找到解决问题的答案。

以上文字只是我的个人观点,如果各位看官有不同的观点,欢迎在评论区中讨论留言。


分享到:


相關文章: