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

2024-05-08 15:15

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

有的时候单纯靠一个面试很难辨别一个程序员的水平是什么样的。原因很简单,因为很多面试题在网上都有,如果刻意准备那么一般都能回答的不错。所以想辨别一个程序员的水平需要一定的方法。

首先需要确定的是程序员的能力体现在哪些方面。本号以为主要体现在如下几个方面:
计算机专业知识的储备逻辑思维能力解决问题的能力因此,我们在面试过程中主要从上面几个方面进行旁敲侧击,而不是简单的问几个具体的技术问题。
计算机专业知识
计算机的专业知识很广,很难全面掌握。这里我们主要对其从事的子领域进行考察,主要考察其擅长领域专业知识的掌握程度。如果在这个领域掌握的深度可以,那说明他是没问题。欠缺的部分他也应该能快速补上来。

我们举一个简单的例子。比如对于网络开发相关的知识。我们可以由浅入深的来进行提问。大概可以问如下几个问题:
是否进行过网络开发,网络开发常用的API有哪些?TCP协议与这些API的关系是什么?TCP协议是如何保证数据的可靠性的?除了网络问题如何解决?如果抓取网络数据包?如果面试者能够不仅知其然,还能知其所以然,那么这个人的水平应该还是可以的。当然,这里只是一个例子。由于TCP的问题可能被问烂了,所以很多人可能提前有准备。这个还需要根据领域自己设计问题。
逻辑思维能力
对于大型复杂系统的开发没有比较好的逻辑思维能力显然是不行的。这方面的能力可以通过让面试者设计一个小型的系统来考察。

解决问题的能力
程序天生就是来解决问题,首先是解决业务问题。比如开发电商系统,其实就是解决如何在线上进行销售的问题;其次是解决系统问题,也就是系统出了Bug后,解决系统出现的Bug。
解决问题的能力通常可以让面试者描述一个自己之前曾经解决的问题来考察。当然,面试者通常可能会有所准备,但面试官需要根据面试者的描述进行深挖,找到问题的关键,并对关键点进行深入的提问,确保能考察出其真正的能力。

上述几方面我们称为应能力,还有一些软能力也是非常重要的,比如责任心,对技术的态度,学习能力等等。当然,这些就更难考量了,本文暂不介绍。
如果上述几方面都比较不错,那么这个程序员的水平应该是不错的。即使对目前的工作的知识储备可能还有欠缺,但经过一段时间后必然可以

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

2. 如何看出一个程序员的技术能力和水平

其实,评论一个程序员技术的高低,不是看他会多少技术,又懂多少技术。参加过什么大型的项目,也不是看他有没有自己的博客,github有多少star。
而是看他解决问题,定位问题的能力。这个很重要,真的很重要。
技术可以很快上手使用,但是解决问题定位问题的能力不是轻易就行的。特别是在高压下解决问题的能力。
下面是师姐为大家整理的一些建议:

解决问题
1.代码的命名要规范。
代码是写给人看的好嘛!代码是写给人看的好嘛!代码是写给人看的好嘛!
headImg是什么鬼?我能以为是banner么,头部的图片,请原谅我蹩脚的中式英语!avatar这个呢、portrait这个呢?会不会更好些?英语不好就不能用好有道、google翻译么?还有用中文拼音命名的,亲,我们用的是英文做为脚本好么?你要用这样的,用易语言可好?!

疯了!
为什么要用框架?一个很重要的原因是命名规范,目录规范,结构规范,分层规范,有利于团队协作,不要本末倒置!
2.架构和规划能力很重要,模块分层,解耦设计什么的,文件目录嵌几层?
这其中又跟命名的能力能搭上点关系。命名都命不好,目录结构怎么建?
url不要做的漂亮些吗?不考虑seo了?
你喜欢addGoods还是喜欢goodsAdd?
请你尊重点我的那些初高中英语语法好么?

3.协助能力、可持续能力。
最好的程序代码是脱离其产生者的。
为自己程序处处救火的程序汪并不是一条好汪。
我记得一句话就是:别想着你的代码以后还有机会重构!
每次说,额,这里我后面会改的,会改的,但是可惜,现实情况是根本不会给你这个时间的。
代码写出来,一是要爽了自己,二是也要爽了别人。

4.debug的能力、总结能力、学习能力真的很重要,代码写出来真的花的时间不长,但擦屁股的时间比写代码的时间多多了!
出了问题不记录,写个博文都好啊,我可没那么强大的记忆力,所以最讨厌考记忆力。
5.不要一贯的使用各种算法,秀算法的你们够了,要写去写底层,应用的场景比较多。
应用层面的程序,算法的应用不是特别多,大部分都是业务代码。以这个作为评价标准的,真心然并卵。

3. 如何识别真正的程序员?

如何识别优秀的程序员?并不是像听起来那么容易。在这儿工作经验的作用是很有限的,因为伟大的程序员不一定要‘正式’的工作经历来证明他们的伟大。

    1,激情

    我曾经遇到许多“职业程序员”,他们从事IT是因为觉得这是一种职业,他们只在工作时间编程,除非送去培训否则他们不会学习新东西,这不是好的程序员。我认为一个好的程序员总是对编程充满激情,而且好的开发者会做一些编程工作即使这没有报酬。激情是一个优秀程序员的重要指标。

    2,自学好学

    编程领域始终发展变化着,不出一年有些新技术就变成了老技术,这并不是说好的程序员要对所有新技术跟进,但有些却对学习任何新技术都没有兴趣。他们通常在学校学习了编程,然后工作后单位安排学什么就学什么。如果在招聘中你听到“让我培训一个星期我就会胜任这个工作”那不要雇佣他。实际上,真正优秀的程序员始终谈论着你所不知道的新技术,向人们解释为什么你必须用这个技术,哪怕没有听众听得明白,哪怕他自己也不明白。

    3,聪明

    聪明包括很多因素,情绪和社会交际只是其中之一。好的程序员绝不木讷,他们是最聪明的人,他们中的许多善于交际,健谈、兴趣广泛。

    4,隐性的经验

    好的程序员通常有自己的私人的一些研究、爱好、项目,而这些是他们不写在简历上 (通常觉得不值得写),但表现出来却可能恰恰是他的潜能、深度和后劲所在。

    5,技术多样性

    由于好的程序员喜欢学习和涉猎新技术,所以一般来说超过22岁的都熟知很多新技术,而且对多种技术的长短有“强烈”的个人意见/见解,喜好尝试新鲜技术。

    6,资格证书

    资格证书并不是识别真正程序员的方法,MCSE、SCJP、说明不了什么,它们只是让别人认识和获取的,顶多代表这个人在某个技术有一定的知识。

    原文作者在文末写道:以上所说的标准并不是绝对的,因为有些优秀的程序员确实不符合上述,而有些bad程序员却符合了。但相信这些对大多数真正的程序员都适用。

    总结而言,优秀的程序员通常有一下特点:

   - 对技术充满激情;
   - 将编程作为一种爱好
   - 如果你允许会滔滔不绝地跟你谈论技术
   - 有过个人的开发经历(与4意思相同)
   - 坚持认为某种技术最好
   - 如果让他用他认为不好的技术他会非常别扭
   - 聪明、健谈、兴趣广泛
   - 在大学和工作前就开始接触程序

如何识别真正的程序员?

4. 如何评价一个程序员是资深程序员

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

如果能独立完成工作,那么以后必然成为高手。
如果经过少量提醒点拨也能完成,以后会是个不错的程序员。
如果需要不断提醒,只能按照我给的思路去反复测试调查,那么只能说是个踏实肯干的人,但天赋不高,可以委派些普通任务。

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

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

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

其实,评论一个程序员技术的高低,不是看他会多少技术,又懂多少技术。参加过什么大型的项目,也不是看他有没有自己的博客,github有多少star。
而是看他解决问题,定位问题的能力。这个很重要,真的很重要。
技术可以很快上手使用,但是解决问题定位问题的能力不是轻易就行的。特别是在高压下解决问题的能力。
下面是师姐为大家整理的一些建议:

解决问题
1.代码的命名要规范。
代码是写给人看的好嘛!代码是写给人看的好嘛!代码是写给人看的好嘛!
headImg是什么鬼?我能以为是banner么,头部的图片,请原谅我蹩脚的中式英语!avatar这个呢、portrait这个呢?会不会更好些?英语不好就不能用好有道、google翻译么?还有用中文拼音命名的,亲,我们用的是英文做为脚本好么?你要用这样的,用易语言可好?!

疯了!
为什么要用框架?一个很重要的原因是命名规范,目录规范,结构规范,分层规范,有利于团队协作,不要本末倒置!
2.架构和规划能力很重要,模块分层,解耦设计什么的,文件目录嵌几层?
这其中又跟命名的能力能搭上点关系。命名都命不好,目录结构怎么建?
url不要做的漂亮些吗?不考虑seo了?
你喜欢addGoods还是喜欢goodsAdd?
请你尊重点我的那些初高中英语语法好么?

3.协助能力、可持续能力。
最好的程序代码是脱离其产生者的。
为自己程序处处救火的程序汪并不是一条好汪。
我记得一句话就是:别想着你的代码以后还有机会重构!
每次说,额,这里我后面会改的,会改的,但是可惜,现实情况是根本不会给你这个时间的。
代码写出来,一是要爽了自己,二是也要爽了别人。

4.debug的能力、总结能力、学习能力真的很重要,代码写出来真的花的时间不长,但擦屁股的时间比写代码的时间多多了!
出了问题不记录,写个博文都好啊,我可没那么强大的记忆力,所以最讨厌考记忆力。
5.不要一贯的使用各种算法,秀算法的你们够了,要写去写底层,应用的场景比较多。
应用层面的程序,算法的应用不是特别多,大部分都是业务代码。以这个作为评价标准的,真心然并卵。

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

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

 1.自己介绍项目,看对项目的提炼总结能力(也是抽象能力);  2.自己印象最深的bug,可以知道大概技术深度;  3.设计模式提问,看有没有学习方法;  4.语法基础问题,多线,分布,安全等问题,看知识面广度;  5.智力问题,看反应能力,分析问题思路等  上述五步基本可知是否是一个好程序猿
   计科专业从事软件开发十几年了,主要在浏览器内核领域研究的比较多,最近在研究服务器后台方向,辨别程序员水平高低主要看做出了什么产品,如同现在的程序员主要是项目经验,简历上写的一堆项目经验都是面试的时候主要提及的问题。经常在面试中会问两个关键点:一个是做过什么项目;一个是在项目组中承担什么职务,毕竟参与过和做的多少程度是不一样的,这些都是可以通过一些具体的细节检测出来,问题越具体越是容易看出水准,具体的东西不是能够编造出来的。  
   有很多技术公司直接不通过笔试,仅仅通过简单的面试就确定工资水准了,最简单的测试程序员水平的直接用笔试的方式,笔试可以把一些细节量化,尽量的细节化也是能测试出程序员基本功的,但这种基本用来测试初级程序员的,很多高级的程序员看到有笔试直接就抬腿走人了,因为有些程序员在一个方向做的时间太长了,很多基本功都忘得差不多了,所以笔试可能不过关,现实中很多程序员笔试不过关,面试还可以,也一样可以做项目说的就是这类人,起码这算是非常优秀的程序员。  
   有很多公司采用谷歌的方式,直接采用上机写代码的方式检验程序员水平,这种方式比较直接,但在现实中可能消耗的时间以及面试官的精力,目前只有极少数的公司用这种方式,国外的公司用这种方式比较多,这种看基本功非常有效。通过代码可以看到编码习惯以及算法的设计上,都能直接看的出来。
   普通的程序员直接看项目的经验,高级的直接看做过的产品,特别是产品主要设计人员,这就是程序员内心的自豪感,毕竟作为一个程序员起码要有自己设计开发的产品,也算是不白做一个程序员,在程序员的职业经历中如果能经历过一个产品从开始设计的初稿到最后推向市场,如果是完整的经历,将是一种巨大的财富,只要经历过一次都会对产品设计有一个比较层次的认识,这种能力需要靠直接的面试语言表达来展示出来,谈下对产品的认识以及产品稳定性性能等方面的总结,能到这个层面起码是高级软件工程师的级别。  
   当然有些程序员内在的东西不是靠语言或者写代码看出来的,因为一个优秀的程序员不仅仅是代码能力以及框架能力,还有几个非常重要的能力
   程序员的能力表面是可以直接展示出来,但很多内在需要是需要时间的磨合才能了解,人就才能见人心,而且很多优秀的程序员是培养出来的,能够长时间在一起的队友都是时间长了磨练出来的。
   希望能够帮到你。
   自认为不是一个好的面试官,因为我认为在这么短的时间内,准确地衡量出来程序员水平的高低是有比较大的难度的,并且我有多次看走眼的时候,面试的时候觉得能力还不错,但是入职工作了一段时间之后,编程能力不忍直视。
   工作之后接触一段时间,我会从这么几个方面观察他们,以判断技术能力的高低和发展潜力。
     
   
   能不能出活儿、能不能debug   能不能把开发任务按时按质量地完成,当然是最主要的衡量标准了:
     
   
   解决问题的方法   在开发过程中,难免会遇到没有见过的问题,有些程序员遇到问题无从下手,而优秀的程序员,自有一套解决问题的方法。
     
   
   
   分析问题、流程设计的思路   有人会认为,程序员的主要工作就是敲代码,上班大部分时候都是在敲代码,其实并不是这样:
     
   
   
   总结问题和改进问题的能力   好的程序员,相同的问题不会犯第二次,差的程序员,总会在一个问题上栽跟头:
     
   我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。     
   
   不请自来,一介码农路过,留下些看法。
   程序员主要是有四种综合能力,也就是debug 能力、 performance分析、 保护性编程和 投入产出比。
    仅仅独立完成日后必然成高手?    在这里不能说一棒子打死,至少对于很多人来说,能独立完成是没什么问题的,有的是因为对业务熟悉,有的是真的基础扎实。但怎么说呢,程序员和浏览器打交道是最多的,现在这个互联网时代,遇到的大部分问题百度都是可以解决的,也就是普通程序员 + 百度 = 超级程序员。 但很多人也没明白具体的原理,甚至都是这个项目抄抄那个项目抄抄的,久而久之虽然解决了平时的业务,但进步的空间却很少,甚至止步不前,写出来的代码也可能存在很多坑,所以,仅仅能独立完成任务的话,离高手还有比较远的一段距离。
   如何辨别高手程序员?   也就是结合我们一开始列举的那四个能力进行判断。不同级别的程序员,在那综合能力面前,强弱也是不同的。例如在奔溃的或者其他性能调优问题上,即使是面对大量复杂的代码,在信息不全的时候也会一步步的分析,抽丝剥茧缩小范围,最终定位根本原因
   ,并且最终给出一个好的方案。
   如何成为高手程序员?   
   
   当然还有看他摘了帽子是否秃顶这样的笑话,就再不赘述了。
   
   第一阶段(黄金):会用编程语言实现需求,比如现在的业务系统,都会找一些会搬代码的人来拼工作量,也就是能自己独立基于搭好的框架实现crud常规操作。
   第二阶段(铂金):除了crud,还会有一些自己踩过坑的经验,知道如何处理一些常见问题,或者可以基于搜索引擎快速解决一些异常情况。
   第三阶段(钻石):能解决一些疑难杂症和会通过debug部分源码类库查看到这些疑难杂症是如何引发的,并通过编码解决这些问题,还能进行一些局部的性能优化,类似某个系统接口缓慢可以单独去优化。
   第四阶段(星耀):会基于整个系统进行设计和规划,根据业务特性选择合适的框架,从源头控制开发遇到问题的频率,可以自主的搭建框架并完善机制,了解各个组件工作原理。
   第五阶段(王者):小说里面总是说练武功的永远比不过创造武功的,同样的道理,用框架的也往往不如写框架的,所以写框架的这类人单独分层。
   第六阶段(荣耀):其实这个阶段不应该列入进来,因为这类人往往不编码的,只是给出思想;像Hadoop这种框架就是基于人家发表的一些论文(bigdata)进行编码实现的,这类人注重的是思想和算法,区块链,大数据,云计算等等概念的创造和理论的支撑是这类人提出来的,这些人才是真正影响行业走向的人。
   程序员的水平高低,不是靠语言或外在表现就能看出来的,不是看他会多少技术、参加过多少项目、写了多少博客,而是看他在实际业务场景中解决问题的能力,尤其是面对一些特别复杂的问题,或在高强度、高压工作状态下解决问题的能力与态度。  
     
   
   
   
   
   技术可以通过学习掌握,但是解决问题、定位问题的能力却不是一蹴而就。大家可能会说,“解决问题的能力”这个太宽泛了吧,可以更具象化吗,有具体的测量方法吗?简单整理了以下几点供参考。
     
   优秀的代码能力   会写出满足需求的代码,早就不是评判程序员水平的标准了。代码编写既要满足业务需求,同时还要考虑后续的软件维护,说得通俗些,既要自己爽,也要别人爽。一个优秀的程序员,会致力于写出更简单、更效率、可读性强、扩展性强的程序代码。
     
     
   逻辑思维   程序员在日常工作中,需要理解各式各样的业务需求,所以这就需要程序员具备一定的逻辑思维能力。可以说,逻辑思维是程序员的灵魂,因为每一行代码都是程序员逻辑的体现。
     
     
   debug能力   项目着急上线,发布时出现问题?
   业务高峰时段,系统宕机了?
   业务催、运营催、用户催、老板催!
   各种形态的bug,各种着急的心情,背后无数支眼睛盯得内心慌慌......
   这些都是一位合格程序员所需要面对的日常。不同的程序员,在解决问题的方法、效率、质量等方面,都各有千秋。一个经验丰富的程序员,能够扛住各方压力,在复杂条件下找到核心问题,通过抽丝剥茧的分析来找到产生问题的原因,并快速进行应对处理,事后及时复盘总结,减少同类问题出现的概率。
     
     
   学习能力   随之互联网的发展,越来越多的人涌入程序员这个赛道,竞争日益激烈,加之新技术层出不穷,更新迭代快,程序员所使用的语言、框架、模式都会发生天翻地覆的变化。如果不主动学习,你很快就会被落伍淘汰。
     
     
   沟通能力   这种其实在面试过程中能体现出来,沟通主要是技术沟通,以及和客户之间的沟通,所有技术都不是闭门造车就能搞定的,沟通能让事情推进起来更加顺畅,包括和产品经理之间的流畅的沟通也显得非常重要。程序员的能力表面是可以直接展示出来,但很多内在需要是需要时间的磨合才能了解,人就才能见人心,而且很多优秀的程序员是培养出来的,能够长时间在一起的队友都是时间长了磨练出来的。
     
     
   责任心   线上出bug了,第一时间响应、处理;
   团队项目进度紧张、人手紧缺,主动补位;
   又或者,在项目推进过程中如果只是关心自己模块内容,对于整个项目置之不理,只守着自己的一亩三分地。
   随着时间轴的拉长,你会发现,有此f技术能力不是最好的,甚至不如你的小伙伴,最后做到了技术主管或经理、甚至更高职位,这里面除了技术实力,还有一个叫“责任心”的东西。
     
    结束语 
   判断一个程序员的水平高低,核心是其解决问题的能力,而解决问题的能力养成,需要扎实的底层基础来支撑,要综合其代码质量、项目经验、框架能力、逻辑思维等等多方面,不能单看某一方面。
     
   而对于1-6岁的程序员来说,想要成为一个高级程序员,变得越来越优秀,唯有持之以恒去学习、积累、实践、修炼。
     
       
    ----end---- 
     
     
   
   一:50岁的时候,头发还是黑色的浓密的。
   二:赚到的钱能保证家人快乐的生活。
   三:当公司不要你的时候能成功转型。
   其他的例如编程经验、写代码厉害啊什么的根本不值一提。
   
   这就是程序员的面试嘛 :-)
   (1)是否能熟练使用所用编程语言的主要功能;
   (2)是否知道用合适的数据结构解决问题;
   (3)是否知道基本的算法,并且用这些算法解决问题;
   (4)只看少量代码的话,从变量命名和程序结构一般能够判断是否是新手;
   (5)给出具体问题,能够用程序解决,能考虑到所有的边界条件;
   (6)考虑程序的可扩展性,可维护性;
   再往高一点走,就需要
   (7)面对模糊的问题能够分析并且找到细节和具体的需求;
   (8)知道利用已有的库,架构和工具等来解决新的问题,而不是什么都自己实现;
   (9)能发现并改进已有程序中的瓶颈;
   (10)对整个大项目的程序架构有很清晰的了解,知道相互之间的依赖,以及知道为什么采用这样就架构;
   (11)给一个大的项目,能够对整个项目的程序架构和组件进行合理的设计,考虑并行性,低延迟,大数据量等各种需求和应对方式。
   带领团队已多年,项目数十个,对判别程序员水平的高低,我有自己的看法,欢迎大家一起交流。
         
   1.代码质量。
   优质的代码,首先是经得起考验。静态分析工具过一遍,无错误,无警告。当然警告部分需要人工重审,因为静态分析工具不一定完全正确。过了这一关,重要的还须过测试关,少Bug或无Bug的代码,才是好代码。优质的代码带有技术气质和艺术气质。阅读起来,有一种赏心悦目的快感,即工整美观,干净利落,又蕴含着理论常识,运用技巧,精准到位。
         
   2.表达能力。
           
   3.文档能力。
   文档形式包括但不限于PPT,文字,图表,音视频。文档内容包括但不限于API说明,工具手册,项目事项,技术论述,陷阱总结,方案展示,指导手册。文档要求必须是满足公司或部门的规范和格式,否则五花八门的,不利于交流和传承。
         
   以上3点,是我量化判断程序员水平的标准,仅供参考。相比水平,其实我更看重程序员的态度,执行力,时间观念,自学力等等,也是很重要的团队作战能力,也可以说是程序员水平的考量吧。
   谢谢大家。

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

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

如果能独立完成工作,那么以后必然成为高手。
如果经过少量提醒点拨也能完成,以后会是个不错的程序员。
如果需要不断提醒,只能按照我给的思路去反复测试调查,那么只能说是个踏实肯干的人,但天赋不高,可以委派些普通任务。

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

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

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

8. 怎样快速确定程序员编程水平

想要快速确定程序员的编程水平,可以从以下四个方面考虑:
第一,知识的考察。这个是几乎每个公司都会做的,也是很有效的手段,基本就是考试。包括问语法问标准算法问API问一切有标准答案的问题。一个人懂得多,不一定写得特别好,但是什么都不懂一定写不明白。这个方式还可以按需求选人才,比如我们就在php做前端,那我就可以问一堆关于php的,如果我是做嵌入式的,那我可以问一堆c。可以考察这个程序员在和公司需求的交集上完成的怎么样。这也是最最简单和直观的方法。
第二,对过往项目的理解。这个也是在简历关很常问的,说说你当时做的这个项目吧。这个问题非常有效地考察了他是否理解他之前做的东西。有的人简历写的巨漂亮可是实际那项目和他没关系,或者他就是复制粘贴的代码,其实自己啥都没写。这种时候你和他聊的足够深入之后能很明显地发现他自己说不明白了。同时还可以考察一定的语言表达能力和逻辑能力。用我们的话说,先问到面试官不会的深度,然后让他给面试官讲明白。如果他做的东西,他蒙圈的时候比面试官还早(前提是面试官不是搞这方向的),那一般就比较悲剧了。
第三,对写程序本身的理解。我们很喜欢问一道题,描述一下你是怎么写程序的。凡是说我事先design好所有的模块、接口、功能,然后逐一实现,然后程序就work的,我们都心里默默补上“呵呵”。因为这是不可能的,只能说明他没写过大程序或者没总结过写程序的经验。没有人在完成一千行以上的程序的时候在没写之前就做好所有模块设计的,何况更大的程序。当然还有就是他会不会认为程序跑通一次就完成了(即写程序有没有test阶段)之类的。
第四,动手写程序的能力。这个说实话是面试的时候不太容易考的,因为时间有限。现在的大公司基本是45-60分钟一轮,一轮还要问好几个程序题,所以写的代码都是片段的,大概20行左右,根本没法体现一个人会不会写程序。所以很多人不需要会写程序,只需要刷好leetcode之类的算法题库就可以进大公司(相信我我认识很多)。我们认为一个好的程序员一定要在限定时间之内完成一个完整工作,满足要求的程序。从输入到输出到corner case的验证。而不仅仅是研究明白某个基础算法如何用nlogn而不是n^2解决。这一关卡下去了无数看起来很美好的人。因为我们的题目是不可能在那个时间内找到最优解的,就像绝大部分工程中的编程一样。一个较好的可用解往往比最优解要有价值的多,因为后者需要大量的时间,很可能没有前者直白,而且提升未必很高。这是我们公司最在乎的一点。
最新文章
热门文章
推荐阅读