1.自己介绍项目,看对项目的提炼总结能力(也是抽象能力);
2.自己印象最深的bug,可以知道大概技术深度;
3.设计模式提问,看有没有学习方法;
4.语法基础问题,多线,分布,安全等问题,看知识面广度;
5.智力问题,看反应能力,分析问题思路等
上述五步基本可知是否是一个好程序猿
计科专业从事软件开发十几年了,主要在浏览器内核领域研究的比较多,最近在研究服务器后台方向,辨别程序员水平高低主要看做出了什么产品,如同现在的程序员主要是项目经验,简历上写的一堆项目经验都是面试的时候主要提及的问题。经常在面试中会问两个关键点:一个是做过什么项目;一个是在项目组中承担什么职务,毕竟参与过和做的多少程度是不一样的,这些都是可以通过一些具体的细节检测出来,问题越具体越是容易看出水准,具体的东西不是能够编造出来的。
有很多技术公司直接不通过笔试,仅仅通过简单的面试就确定工资水准了,最简单的测试程序员水平的直接用笔试的方式,笔试可以把一些细节量化,尽量的细节化也是能测试出程序员基本功的,但这种基本用来测试初级程序员的,很多高级的程序员看到有笔试直接就抬腿走人了,因为有些程序员在一个方向做的时间太长了,很多基本功都忘得差不多了,所以笔试可能不过关,现实中很多程序员笔试不过关,面试还可以,也一样可以做项目说的就是这类人,起码这算是非常优秀的程序员。
有很多公司采用谷歌的方式,直接采用上机写代码的方式检验程序员水平,这种方式比较直接,但在现实中可能消耗的时间以及面试官的精力,目前只有极少数的公司用这种方式,国外的公司用这种方式比较多,这种看基本功非常有效。通过代码可以看到编码习惯以及算法的设计上,都能直接看的出来。
普通的程序员直接看项目的经验,高级的直接看做过的产品,特别是产品主要设计人员,这就是程序员内心的自豪感,毕竟作为一个程序员起码要有自己设计开发的产品,也算是不白做一个程序员,在程序员的职业经历中如果能经历过一个产品从开始设计的初稿到最后推向市场,如果是完整的经历,将是一种巨大的财富,只要经历过一次都会对产品设计有一个比较层次的认识,这种能力需要靠直接的面试语言表达来展示出来,谈下对产品的认识以及产品稳定性性能等方面的总结,能到这个层面起码是高级软件工程师的级别。
当然有些程序员内在的东西不是靠语言或者写代码看出来的,因为一个优秀的程序员不仅仅是代码能力以及框架能力,还有几个非常重要的能力
责任心,在项目推进过程中如果只是关心自己模块内容,对于整个项目置之不理,基本上很难有多大的成绩,眼界只是守着自己的一亩三分地,有些程序员开始其貌不扬,技术能力也不是最好的,但最后做到了主管或者经理甚至副总,这里面一定包含着技术之外的东西,至少包含责任心。
抗压能力,现在绝大部分程序员都有抗压能力不强的缺陷,有了一个看似变态的需求内心的第一反应就是排斥,作为一个技术人员首先要做到用技术服务产品,不要掺杂过多的消极因素在工作中,只要是能当技术管理抗压能力一定是比普通的技术人员更加用于承担。
沟通能力,这种其实在面试过程中能体现出来,沟通主要是技术沟通,以及和客户之间的沟通,所有技术都不是闭门造车就能搞定的,沟通能让事情推进起来更加顺畅,包括和产品经理之间的流畅的沟通也显得非常重要。
程序员的能力表面是可以直接展示出来,但很多内在需要是需要时间的磨合才能了解,人就才能见人心,而且很多优秀的程序员是培养出来的,能够长时间在一起的队友都是时间长了磨练出来的。
希望能够帮到你。
自认为不是一个好的面试官,因为我认为在这么短的时间内,准确地衡量出来程序员水平的高低是有比较大的难度的,并且我有多次看走眼的时候,面试的时候觉得能力还不错,但是入职工作了一段时间之后,编程能力不忍直视。
工作之后接触一段时间,我会从这么几个方面观察他们,以判断技术能力的高低和发展潜力。
能不能把开发任务按时按质量地完成,当然是最主要的衡量标准了:
需求理解快而准确,流程设计考虑全面,可以按时间要求开发完成,Bug少...这当然是项目经理最喜欢的程序员了;
能力一般,但是工作态度端正,不懂就问,也可以按照时间要求完成工作,这也是合格的程序员;并且经过一段时间的培养和成长,可能变成优秀的程序员;
工作能力一般,每次迭代都领最简单的任务,开发出来的代码问题多多,没有责任心,发生问题就喜欢甩锅...这种程序员,很快会被淘汰。
在开发过程中,难免会遇到没有见过的问题,有些程序员遇到问题无从下手,而优秀的程序员,自有一套解决问题的方法。
擅长使用搜索引擎、Stack Overflow等网站,有一定的英文阅读能力,遇到问题之后,先尝试按照暴露出来的问题搜索,寻找解决问题的方法;这里不太建议使用中文搜索引擎,很多时候,按照英文搜索,更容易找到解决方法;
问领导、问前辈、问同事,有些问题自己解决起来很困难,但是其他人有可能遇到过相同或类似的问题,他们给一些提示和方向,就可以帮助你很快地解决问题;但是要注意,这些问题一定是要你自己思考过,尝试解决过,而不是一有问题,就去寻求别人的帮助。
有人会认为,程序员的主要工作就是敲代码,上班大部分时候都是在敲代码,其实并不是这样:
程序员很多时间都在做需求分析,能不能快速和全面地理解需求,也是考核程序员水平的一个标准;
在敲代码之前,要做很多设计工作,一些复杂的功能,需要把流程图画出来,甚至把伪代码写出来;一些水平比较低的程序员,甚至这一步做的都有困难,流程都想不明白,写出来的代码更不可能对了。
好的程序员,相同的问题不会犯第二次,差的程序员,总会在一个问题上栽跟头:
优秀的程序员,也是一步一步成长起来的,各方面都差不多的两个新手程序员,为什么若干年后的水平相差很大,就是因为优秀的程序员,在工作中会遇到各种问题,他们在找到解决问题的方法之后,会总结经验,当未来遇到相同或类似问题的时候,可以很快解决;
建议大家养成写技术笔记的习惯,技术博客不仅是分享给别人看的,更是一个总结的过程,写给自己看的。
不请自来,一介码农路过,留下些看法。
程序员主要是有四种综合能力,也就是debug 能力、 performance分析、 保护性编程和 投入产出比。
在这里不能说一棒子打死,至少对于很多人来说,能独立完成是没什么问题的,有的是因为对业务熟悉,有的是真的基础扎实。但怎么说呢,程序员和浏览器打交道是最多的,现在这个互联网时代,遇到的大部分问题百度都是可以解决的,也就是普通程序员 + 百度 = 超级程序员。 但很多人也没明白具体的原理,甚至都是这个项目抄抄那个项目抄抄的,久而久之虽然解决了平时的业务,但进步的空间却很少,甚至止步不前,写出来的代码也可能存在很多坑,所以,仅仅能独立完成任务的话,离高手还有比较远的一段距离。
也就是结合我们一开始列举的那四个能力进行判断。不同级别的程序员,在那综合能力面前,强弱也是不同的。例如在奔溃的或者其他性能调优问题上,即使是面对大量复杂的代码,在信息不全的时候也会一步步的分析,抽丝剥茧缩小范围,最终定位根本原因
,并且最终给出一个好的方案。
当然还有看他摘了帽子是否秃顶这样的笑话,就再不赘述了。
第一阶段(黄金):会用编程语言实现需求,比如现在的业务系统,都会找一些会搬代码的人来拼工作量,也就是能自己独立基于搭好的框架实现crud常规操作。
第二阶段(铂金):除了crud,还会有一些自己踩过坑的经验,知道如何处理一些常见问题,或者可以基于搜索引擎快速解决一些异常情况。
第三阶段(钻石):能解决一些疑难杂症和会通过debug部分源码类库查看到这些疑难杂症是如何引发的,并通过编码解决这些问题,还能进行一些局部的性能优化,类似某个系统接口缓慢可以单独去优化。
第四阶段(星耀):会基于整个系统进行设计和规划,根据业务特性选择合适的框架,从源头控制开发遇到问题的频率,可以自主的搭建框架并完善机制,了解各个组件工作原理。
第五阶段(王者):小说里面总是说练武功的永远比不过创造武功的,同样的道理,用框架的也往往不如写框架的,所以写框架的这类人单独分层。
第六阶段(荣耀):其实这个阶段不应该列入进来,因为这类人往往不编码的,只是给出思想;像Hadoop这种框架就是基于人家发表的一些论文(bigdata)进行编码实现的,这类人注重的是思想和算法,区块链,大数据,云计算等等概念的创造和理论的支撑是这类人提出来的,这些人才是真正影响行业走向的人。
一个程序员有多优秀,就得看他写的代码!程序员自己的代码才是自己工作状态的真实体现。“菜鸟”程序员和“大神”程序员到底有什么区别哪,那我们就来看看。
看一个人的编程水平不是一件容易的事。程序员有两类,一类是能吹的,一类是不善言谈的。吹牛的人往往海天湖地,容易给人看出破绽;而不声不响的人,你却很难判断其水平的高低。
程序员的水平通过听其说,观其作,这两个方面就能大致来确定了。听是比较简单,只要听他讲从事编程时间有多长,参加过多少大的项目,就能基本判定程序员的水平了。听的过程中也可以判断出这个程序员头脑是否清晰,说话是否有条理,逻辑是否严密。这些也是程序员水平的重要方面。
看要相对比较复杂些。我要看一个人的水平如何,往往会请他把自己最得意的程序,拿出来。因为自己满意的程序或自己认为很重要的程序,往往反映他的编程水平。
我看别人程序比较快,下拉程序速度大约在1秒2行。如果程序在300行的话也就是3分钟左右。我看程序主要看一下几个方面:
函数名是否是英文命名?函数名是否拼音命名?函数名是否英文拼音混合命名?如果是英文命名,英文是否准确?缩写是否正确?读者是否能够看懂。函数名是否能表示函数所要提供的功能?所有函数命名的风格是否一致?函数名是否有注释?
变量名是否是英文命名?变量名是否拼音命名?变量名是否英文拼音混合命名?如果是英文命名,英文是否准确?缩写是否正确?读者是否能够看懂。变量名是否能表示变量要代表的内容?通过查看变量名能否确定变量的数据类型。所有变量命名风格是否一致?
函数中是否有参数?参数的次序是否具有逻辑性?参数命名如同变量命名。所有函数中的参数命名是否具有相同的风格?参数是否有注释?
一个函数的程序行数大于20-50行吗?
函数有统一编写风格吗?函数头的格式一致吗?函数体风格一致吗?函数尾风格一致吗?语句开头对齐吗?语句的缩进空格一致吗?语句左右括号上下对齐吗?
程序中是否有注释?程序开头是否有注释?注释是否用英文?注释是否有用中文?是否每个函数开头都有注释?是否程序重要之处都有注释?
说到底,想成为优秀的程序员,还是要努力提升专业技术才是王道!
一:50岁的时候,头发还是黑色的浓密的。
二:赚到的钱能保证家人快乐的生活。
三:当公司不要你的时候能成功转型。
其他的例如编程经验、写代码厉害啊什么的根本不值一提。
这就是程序员的面试嘛 :-)
(1)是否能熟练使用所用编程语言的主要功能;
(2)是否知道用合适的数据结构解决问题;
(3)是否知道基本的算法,并且用这些算法解决问题;
(4)只看少量代码的话,从变量命名和程序结构一般能够判断是否是新手;
(5)给出具体问题,能够用程序解决,能考虑到所有的边界条件;
(6)考虑程序的可扩展性,可维护性;
再往高一点走,就需要
(7)面对模糊的问题能够分析并且找到细节和具体的需求;
(8)知道利用已有的库,架构和工具等来解决新的问题,而不是什么都自己实现;
(9)能发现并改进已有程序中的瓶颈;
(10)对整个大项目的程序架构有很清晰的了解,知道相互之间的依赖,以及知道为什么采用这样就架构;
(11)给一个大的项目,能够对整个项目的程序架构和组件进行合理的设计,考虑并行性,低延迟,大数据量等各种需求和应对方式。
带领团队已多年,项目数十个,对判别程序员水平的高低,我有自己的看法,欢迎大家一起交流。
1.代码质量。
优质的代码,首先是经得起考验。静态分析工具过一遍,无错误,无警告。当然警告部分需要人工重审,因为静态分析工具不一定完全正确。过了这一关,重要的还须过测试关,少Bug或无Bug的代码,才是好代码。优质的代码带有技术气质和艺术气质。阅读起来,有一种赏心悦目的快感,即工整美观,干净利落,又蕴含着理论常识,运用技巧,精准到位。
2.表达能力。
良好的表达能力,需要建立在以下几方面:解决问题能力(复现,定位,分析,解决,验证,总结),语言组织能力,逻辑思考能力,团队协作能力。换句话来说,能用团队成员能理解的语言和思路,完整清晰地描述问题及方案的来龙去脉,优劣取舍。一件事情,可以展开讲半天,也可以浓缩成一分钟,收放自如。不同的听众,理解力和关注点都不同,表达者应有准确的定位和阐述。
3.文档能力。
文档形式包括但不限于PPT,文字,图表,音视频。文档内容包括但不限于API说明,工具手册,项目事项,技术论述,陷阱总结,方案展示,指导手册。文档要求必须是满足公司或部门的规范和格式,否则五花八门的,不利于交流和传承。
以上3点,是我量化判断程序员水平的标准,仅供参考。相比水平,其实我更看重程序员的态度,执行力,时间观念,自学力等等,也是很重要的团队作战能力,也可以说是程序员水平的考量吧。
谢谢大家。
页面更新:2024-02-09
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号