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

1.自己介绍项目,看对项目的提炼总结能力(也是抽象能力);
2.自己印象最深的bug,可以知道大概技术深度;
3.设计模式提问,看有没有学习方法;
4.语法基础问题,多线,分布,安全等问题,看知识面广度;
5.智力问题,看反应能力,分析问题思路等
上述五步基本可知是否是一个好程序猿




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

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

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

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

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

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

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

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

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

希望能够帮到你。




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

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


能不能出活儿、能不能debug

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

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

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

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

解决问题的方法

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

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

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

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

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

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

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

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

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

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

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

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




不请自来,一介码农路过,留下些看法。

程序员主要是有四种综合能力,也就是debug 能力、 performance分析、 保护性编程和 投入产出比。

  • debug 能力。这是我们生活中常用的一种能力,也就是调试问题的问题。
  • performance分析。能够对业务和代码进行精准的分析。
  • 保护性编程。对代码的侵入性尽量的低,也就是解耦。
  • 投入产出比。效率的问题。

仅仅独立完成日后必然成高手?

在这里不能说一棒子打死,至少对于很多人来说,能独立完成是没什么问题的,有的是因为对业务熟悉,有的是真的基础扎实。但怎么说呢,程序员和浏览器打交道是最多的,现在这个互联网时代,遇到的大部分问题百度都是可以解决的,也就是普通程序员 + 百度 = 超级程序员。 但很多人也没明白具体的原理,甚至都是这个项目抄抄那个项目抄抄的,久而久之虽然解决了平时的业务,但进步的空间却很少,甚至止步不前,写出来的代码也可能存在很多坑,所以,仅仅能独立完成任务的话,离高手还有比较远的一段距离。

如何辨别高手程序员?

也就是结合我们一开始列举的那四个能力进行判断。不同级别的程序员,在那综合能力面前,强弱也是不同的。例如在奔溃的或者其他性能调优问题上,即使是面对大量复杂的代码,在信息不全的时候也会一步步的分析,抽丝剥茧缩小范围,最终定位根本原因

,并且最终给出一个好的方案。

如何成为高手程序员?

  • 学习设计模式。设计模式对程序员来说是一门重要的课程,设计模式是前辈程序员们总结下来的宝贵的解决问题的问题,能让我们写出更好的代码。写代码其实也可以看成是一门艺术,代码写得优雅就会让人看着舒服。
  • 动手前养成先思考规划的习惯。很多时候,我们临急临忙的动手,反而留的坑会越来越多。就比如我最近项目上遇到的一个问题,一开始做得复杂了,越写下去就发现越多坑,而且代码也比较凌乱。后来冷静的思考了一下,发现只有设计库的设计稍微修改修改,问题就能变得简单起来,代码也写得比之前的优雅了许多。
  • 有条件的话学习下算法和数据结构。在这里,也还是推荐适当的学习算法和数据结构的,虽然很枯燥,但这也是让我们变强大的内功。虽然可能很多时候用不到,但其实算法是在潜移默化的改变了我们思考的能力,让我们脑子变得更加的灵活,甚至会慢慢的一点点渗入我们的生活中。




  1. 看他写的代码。恰如其分的注释,整齐划一的命名,友好的安装文档,就算是一个外行,也能看懂个七七八八。
  2. 能否快速定位问题,如何排除,如何打短点、如何做隔离、如何用假数据?
  3. 语言表达能力,能不能三言两语把一件事说明白,是不是答非所问。弄不清需求走弯路就不好了。
  4. 是否有开放的心态,有的程序员自持傲物,觉得码农最牛逼,其他人都得围着他转,别人什么都不是。虽然技术很牛,但还是建议远离。
  5. 工具的使用能力,比如把Windows换成苹果甚至Linux,他还能不能工作?把IDE换成记事本甚至VIM他还能不能愉快的工作?一个好的程序员这都不是事儿,他都会玩一遍,什么样的环境都难不倒也困不住他。
  6. 读过多少计算机专业的书,是否愿意把技术分享出来?那些愿意分享技术经验,和同行互通有无的程序员,更容易融会贯通。形成自己在公司的威望,进一步出人头地。
  7. 有没有自己的业余玩耍项目?有可以加分,没有可能是真的太忙,也不必减分。
  8. 永远不要低估程序员对英语的依赖,英语好的查阅外文编程资料,仅仅依靠英语阅读能力,就能解决百分之八十的能力。那些英语单词都认不明白的,高不了。
  9. 也可以换一个编程以外的话题,看他了解的深不深,往往那些优秀的程序员,在其他领域也能给你带来很不一样的惊喜,比如钢琴弹的很好。
  10. 很遗憾,还是要看学历。名校、高学历,哪怕跨专业过来的,天资自然聪慧,一般差不了。高考已经把人区分开来了。

当然还有看他摘了帽子是否秃顶这样的笑话,就再不赘述了。




第一阶段(黄金):会用编程语言实现需求,比如现在的业务系统,都会找一些会搬代码的人来拼工作量,也就是能自己独立基于搭好的框架实现crud常规操作。

第二阶段(铂金):除了crud,还会有一些自己踩过坑的经验,知道如何处理一些常见问题,或者可以基于搜索引擎快速解决一些异常情况。

第三阶段(钻石):能解决一些疑难杂症和会通过debug部分源码类库查看到这些疑难杂症是如何引发的,并通过编码解决这些问题,还能进行一些局部的性能优化,类似某个系统接口缓慢可以单独去优化。

第四阶段(星耀):会基于整个系统进行设计和规划,根据业务特性选择合适的框架,从源头控制开发遇到问题的频率,可以自主的搭建框架并完善机制,了解各个组件工作原理。

第五阶段(王者):小说里面总是说练武功的永远比不过创造武功的,同样的道理,用框架的也往往不如写框架的,所以写框架的这类人单独分层。

第六阶段(荣耀):其实这个阶段不应该列入进来,因为这类人往往不编码的,只是给出思想;像Hadoop这种框架就是基于人家发表的一些论文(bigdata)进行编码实现的,这类人注重的是思想和算法,区块链,大数据,云计算等等概念的创造和理论的支撑是这类人提出来的,这些人才是真正影响行业走向的人。




一个程序员有多优秀,就得看他写的代码!程序员自己的代码才是自己工作状态的真实体现。“菜鸟”程序员和“大神”程序员到底有什么区别哪,那我们就来看看。

看一个人的编程水平不是一件容易的事。程序员有两类,一类是能吹的,一类是不善言谈的。吹牛的人往往海天湖地,容易给人看出破绽;而不声不响的人,你却很难判断其水平的高低。

程序员的水平通过听其说,观其作,这两个方面就能大致来确定了。听是比较简单,只要听他讲从事编程时间有多长,参加过多少大的项目,就能基本判定程序员的水平了。听的过程中也可以判断出这个程序员头脑是否清晰,说话是否有条理,逻辑是否严密。这些也是程序员水平的重要方面。

看要相对比较复杂些。我要看一个人的水平如何,往往会请他把自己最得意的程序,拿出来。因为自己满意的程序或自己认为很重要的程序,往往反映他的编程水平。

我看别人程序比较快,下拉程序速度大约在1秒2行。如果程序在300行的话也就是3分钟左右。我看程序主要看一下几个方面:

1、 函数命名

函数名是否是英文命名?函数名是否拼音命名?函数名是否英文拼音混合命名?如果是英文命名,英文是否准确?缩写是否正确?读者是否能够看懂。函数名是否能表示函数所要提供的功能?所有函数命名的风格是否一致?函数名是否有注释?

2、 变量命名

变量名是否是英文命名?变量名是否拼音命名?变量名是否英文拼音混合命名?如果是英文命名,英文是否准确?缩写是否正确?读者是否能够看懂。变量名是否能表示变量要代表的内容?通过查看变量名能否确定变量的数据类型。所有变量命名风格是否一致?

3、 函数中的参数

函数中是否有参数?参数的次序是否具有逻辑性?参数命名如同变量命名。所有函数中的参数命名是否具有相同的风格?参数是否有注释?

4、 函数的行数

一个函数的程序行数大于20-50行吗?

5、 函数的格式

函数有统一编写风格吗?函数头的格式一致吗?函数体风格一致吗?函数尾风格一致吗?语句开头对齐吗?语句的缩进空格一致吗?语句左右括号上下对齐吗?

6、 注释

程序中是否有注释?程序开头是否有注释?注释是否用英文?注释是否有用中文?是否每个函数开头都有注释?是否程序重要之处都有注释?

说到底,想成为优秀的程序员,还是要努力提升专业技术才是王道!




我认为辨别程序员水平的高低主要有如下方面。

一:50岁的时候,头发还是黑色的浓密的。

二:赚到的钱能保证家人快乐的生活。

三:当公司不要你的时候能成功转型。

其他的例如编程经验、写代码厉害啊什么的根本不值一提。




这就是程序员的面试嘛 :-)

(1)是否能熟练使用所用编程语言的主要功能;

(2)是否知道用合适的数据结构解决问题;

(3)是否知道基本的算法,并且用这些算法解决问题;

(4)只看少量代码的话,从变量命名和程序结构一般能够判断是否是新手;

(5)给出具体问题,能够用程序解决,能考虑到所有的边界条件;

(6)考虑程序的可扩展性,可维护性;

再往高一点走,就需要

(7)面对模糊的问题能够分析并且找到细节和具体的需求;

(8)知道利用已有的库,架构和工具等来解决新的问题,而不是什么都自己实现;

(9)能发现并改进已有程序中的瓶颈;

(10)对整个大项目的程序架构有很清晰的了解,知道相互之间的依赖,以及知道为什么采用这样就架构;

(11)给一个大的项目,能够对整个项目的程序架构和组件进行合理的设计,考虑并行性,低延迟,大数据量等各种需求和应对方式。




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



1.代码质量。

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



2.表达能力。

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



3.文档能力。

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



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

谢谢大家。

展开阅读全文

页面更新:2024-02-09

标签:程序员   水平   英文   注释   算法   函数   框架   需求   能力   优秀   代码   程序   项目   工作   技术   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top