⑴ 如何辨别一个程序员水平的高低呢
有的时候单纯靠一个面试很难辨别一个程序员的水平是什么样的。原因很简单,因为很多面试题在网上都有,如果刻意准备那么一般都能回答的不错。所以想辨别一个程序员的水平需要一定的方法。
上述几方面我们称为应能力,还有一些软能力也是非常重要的,比如责任心,对技术的态度,学习能力等等。当然,这些就更难考量了,本文暂不介绍。
如果上述几方面都比较不错,那么这个程序员的水平应该是不错的。即使对目前的工作的知识储备可能还有欠缺,但经过一段时间后必然可以
⑵ 我想问问关于java的问题。 1,怎样判断一个java技术人的技术水平 2、java可以做那些系统和平台
你的问题都不是很好回答,我尝试给你答一下。
1、要判断一个java技术员水平,首先要看经验。
原因就是java是一个开源语言,各色各样的框架只要有人想得到,或者别的语言出现过,都有可能在java里出现,经验就是指与各种框架、思想打交道的时间。这个时间越长,对问题及平台的了解也就越全面,在很多时候比如设计框架等会走在前面,考虑到很多未来可能出现的问题,提前解决。
其次也是经验,这次是指java外其它内容的经验。好的程序员绝对不会只懂一种语言,理解更多的东西才有得比较,才会了解谁更好。另外程序开发一般也脱离不了一些东西,比如网页开发的html、css、flex等;数据库又要各种方言的SQL;假设要用到java mail又可能自己去搭建个mail服务器等等等等,很多就不列举了。与这么些杂七杂八的事打交道的经验也是很重要的,会直接影响开发的水准及效率。
然后是学习兴趣与学习能力。任何一个语言不进步就会自然被淘汰,java也是。各种新的内容不停的扩充进来,新的JDK特性,新的框架,还有新的OS支持平台,很多很多。做为一个程序员,你得不停的刷新自己的知识,这也是分辨是不是个好java程序员的重要条件。
2、Java可以做的内容。
CS(Client/Server)平台,即用java做出Client界面,Server端也是Java实现。这种类似于windows的窗口程序。
BS(Browser/Server),即用户使用浏览器做为Client,程序员使用html,jsp,或者其它技术来实现Client,Server端仍是Java,这种可以制作各类型的网站、基于浏览器的内部系统等。
其它,如WebService,只是发布接口,让其它程序来调用。例气象局把天气发布成WebService,任何程序都可以去调用来取得天气的数据。
还有些内容恕我知识、经验不足,时间不多无法全部描述。
希望能帮到你。
⑶ 如何辨别一个程序员水平的高低
1.自己介绍项目,看对项目的提炼总结能力(也是抽象能力);
2.自己印象最深的bug,可以知道大概技术深度;
3.设计模式提问,看有没有学习方法;
4.语法基础问题,多线,分布,安全等问题,看知识面广度;
5.智力问题,看反应能力,分析问题思路等
上述五步基本可知是否是一个好程序猿
计科专业从事软件开发十几年了,主要在浏览器内核领域研究的比较多,最近在研究服务器后台方向,辨别程序员水平高低主要看做出了什么产品,如同现在的程序员主要是项目经验,简历上写的一堆项目经验都是面试的时候主要提及的问题。经常在面试中会问两个关键点:一个是做过什么项目;一个是在项目组中承担什么职务,毕竟参与过和做的多少程度是不一样的,这些都是可以通过一些具体的细节检测出来,问题越具体越是容易看出水准,具体的东西不是能够编造出来的。
有很多技术公司直接不通过笔试,仅仅通过简单的面试就确定工资水准了,最简单的测试程序员水平的直接用笔试的方式,笔试可以把一些细节量化,尽量的细节化也是能测试出程序员基本功的,但这种基本用来测试初级程序员的,很多高级的程序员看到有笔试直接就抬腿走人了,因为有些程序员在一个方向做的时间太长了,很多基本功都忘得差不多了,所以笔试可能不过关,现实中很多程序员笔试不过关,面试还可以,也一样可以做项目说的就是这类人,起码这算是非常优秀的程序员。
有很多公司采用谷歌的方式,直接采用上机写代码的方式检验程序员水平,这种方式比较直接,但在现实中可能消耗的时间以及面试官的精力,目前只有极少数的公司用这种方式,国外的公司用这种方式比较多,这种看基本功非常有效。通过代码可以看到编码习惯以及算法的设计上,都能直接看的出来。
普通的程序员直接看项目的经验,高级的直接看做过的产品,特别是产品主要设计人员,这就是程序员内心的自豪感,毕竟作为一个程序员起码要有自己设计开发的产品,也算是不白做一个程序员,在程序员的职业经历中如果能经历过一个产品从开始设计的初稿到最后推向市场,如果是完整的经历,将是一种巨大的财富,只要经历过一次都会对产品设计有一个比较层次的认识,这种能力需要靠直接的面试语言表达来展示出来,谈下对产品的认识以及产品稳定性性能等方面的总结,能到这个层面起码是高级软件工程师的级别。
当然有些程序员内在的东西不是靠语言或者写代码看出来的,因为一个优秀的程序员不仅仅是代码能力以及框架能力,还有几个非常重要的能力
程序员的能力表面是可以直接展示出来,但很多内在需要是需要时间的磨合才能了解,人就才能见人心,而且很多优秀的程序员是培养出来的,能够长时间在一起的队友都是时间长了磨练出来的。
希望能够帮到你。
自认为不是一个好的面试官,因为我认为在这么短的时间内,准确地衡量出来程序员水平的高低是有比较大的难度的,并且我有多次看走眼的时候,面试的时候觉得能力还不错,但是入职工作了一段时间之后,编程能力不忍直视。
工作之后接触一段时间,我会从这么几个方面观察他们,以判断技术能力的高低和发展潜力。
能不能出活儿、能不能debug
能不能把开发任务按时按质量地完成,当然是最主要的衡量标准了:
解决问题的方法
在开发过程中,难免会遇到没有见过的问题,有些程序员遇到问题无从下手,而优秀的程序员,自有一套解决问题的方法。
分析问题、流程设计的思路
有人会认为,程序员的主要工作就是敲代码,上班大部分时候都是在敲代码,其实并不是这样:
总结问题和改进问题的能力
好的程序员,相同的问题不会犯第二次,差的程序员,总会在一个问题上栽跟头:
我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。
不请自来,一介码农路过,留下些看法。
程序员主要是有四种综合能力,也就是debug 能力、 performance分析、 保护性编程和 投入产出比。
仅仅独立完成日后必然成高手?在这里不能说一棒子打死,至少对于很多人来说,能独立完成是没什么问题的,有的是因为对业务熟悉,有的是真的基础扎实。但怎么说呢,程序员和浏览器打交道是最多的,现在这个互联网时代,遇到的大部分问题网络都是可以解决的,也就是普通程序员 + 网络 = 超级程序员。 但很多人也没明白具体的原理,甚至都是这个项目抄抄那个项目抄抄的,久而久之虽然解决了平时的业务,但进步的空间却很少,甚至止步不前,写出来的代码也可能存在很多坑,所以,仅仅能独立完成任务的话,离高手还有比较远的一段距离。
如何辨别高手程序员?也就是结合我们一开始列举的那四个能力进行判断。不同级别的程序员,在那综合能力面前,强弱也是不同的。例如在奔溃的或者其他性能调优问题上,即使是面对大量复杂的代码,在信息不全的时候也会一步步的分析,抽丝剥茧缩小范围,最终定位根本原因
,并且最终给出一个好的方案。
如何成为高手程序员?
当然还有看他摘了帽子是否秃顶这样的笑话,就再不赘述了。
第一阶段(黄金):会用编程语言实现需求,比如现在的业务系统,都会找一些会搬代码的人来拼工作量,也就是能自己独立基于搭好的框架实现crud常规操作。
第二阶段(铂金):除了crud,还会有一些自己踩过坑的经验,知道如何处理一些常见问题,或者可以基于搜索引擎快速解决一些异常情况。
第三阶段(钻石):能解决一些疑难杂症和会通过debug部分源码类库查看到这些疑难杂症是如何引发的,并通过编码解决这些问题,还能进行一些局部的性能优化,类似某个系统接口缓慢可以单独去优化。
第四阶段(星耀):会基于整个系统进行设计和规划,根据业务特性选择合适的框架,从源头控制开发遇到问题的频率,可以自主的搭建框架并完善机制,了解各个组件工作原理。
第五阶段(王者):小说里面总是说练武功的永远比不过创造武功的,同样的道理,用框架的也往往不如写框架的,所以写框架的这类人单独分层。
第六阶段(荣耀):其实这个阶段不应该列入进来,因为这类人往往不编码的,只是给出思想;像Hadoop这种框架就是基于人家发表的一些论文(bigdata)进行编码实现的,这类人注重的是思想和算法,区块链,大数据,云计算等等概念的创造和理论的支撑是这类人提出来的,这些人才是真正影响行业走向的人。
程序员的水平高低,不是靠语言或外在表现就能看出来的,不是看他会多少技术、参加过多少项目、写了多少博客,而是看他在实际业务场景中解决问题的能力,尤其是面对一些特别复杂的问题,或在高强度、高压工作状态下解决问题的能力与态度。
技术可以通过学习掌握,但是解决问题、定位问题的能力却不是一蹴而就。大家可能会说,“解决问题的能力”这个太宽泛了吧,可以更具象化吗,有具体的测量方法吗?简单整理了以下几点供参考。
会写出满足需求的代码,早就不是评判程序员水平的标准了。代码编写既要满足业务需求,同时还要考虑后续的软件维护,说得通俗些,既要自己爽,也要别人爽。一个优秀的程序员,会致力于写出更简单、更效率、可读性强、扩展性强的程序代码。
程序员在日常工作中,需要理解各式各样的业务需求,所以这就需要程序员具备一定的逻辑思维能力。可以说,逻辑思维是程序员的灵魂,因为每一行代码都是程序员逻辑的体现。
项目着急上线,发布时出现问题?
业务高峰时段,系统宕机了?
业务催、运营催、用户催、老板催!
各种形态的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点,是我量化判断程序员水平的标准,仅供参考。相比水平,其实我更看重程序员的态度,执行力,时间观念,自学力等等,也是很重要的团队作战能力,也可以说是程序员水平的考量吧。
谢谢大家。
⑷ HR怎么通过简历来判断程序员是否优秀
01.简历中项目的参与度、贡献度
简历本身的效用信息往往非常局限,看了简历之后,也难以形成对候选人的初步判断。但我们其实可以通过项目经历上的信息,来评估候选是否完整、深入参与其中。
在候选人简历的项目板块,我们可以查找是否有以下关键信息:本人在项目中的角色?比如后台系统开发,主导搭建了页面框架,提高代码质量;公共组建的提取、编写。解决了什么样的问题?比如通过自动化,让代码易于管理;统一的编码规范,更有利于多人合作,降低了代码出错率;性能上带来多少提升?比如单页应用让请求次数变少、页面呈现更快,用户体验更好了。通过以上信息,我们基本上可以判断候选人在项目中的角色,或者从解决的结果来看能基本评估出候选人在整个项目中的贡献度。
另外一种是简历上的项目阐述,可以通过以下两个例子对比:例子一:A:应用 xx 技术,解决了XXXB:应用 xx 技术,解决了XXX,出错率降低了 0.1% 等。例子二:A:结合使用 xx,实现了 app 登录和个人资料的自动填充B:结合使用 xx,实现了 app 登录和个人资料的自动填充,提高了多少的转化率我们可以直观看出,有量化的结果的项目履历更有说服力,也可以侧面证明候选人是有深度参与到项目中,才能对数据结果有一定的了解。
02.候选人在技术社区的使用情况
很多优秀的技术人才都有分享的习惯,比如在GitHub、知乎等社区都会分享一些自己的技术经验贴。通常来讲,如果候选人有在社区发帖的习惯,确实会增色不少。比如全球最大的开源社区GitHub,大多数程序员都会有账号,但这个只能算是真正的“圈内人”,如果是GitHub的重度用户,其实非常亮眼的:如候选人在GitHub发布的项目经常能收获很多follower和star,那正是其能力的体现,可以通过其贡献的项目来评估;如果能长期坚持使用GitHub,也能说明的是这个人心态比较开放,对业界比较关注、律己、有耐心;GitHub上大多数代码是经过长时间构思和反复修改重构,代码质量可以很好反映其当前的Code水平,其中也可以窥见解决问题的能力。
经常在技术社区发帖互动,可以说是判断是否为优秀技术程序员的加分项,但也只能是敲门砖,不能过份强调它的重要性。
03.通过代码笔试,直击简历
要看能力最终还是应该考查编码能力。面试官或HR其实可以通过一场在线笔试,在简历初筛阶段来进一步判断是否为大牛。
面试官可以设置一些耗时较短,考察具体硬技能的题目,来考察候选人的基本功,将简历造假的同学筛掉,在ShowMeBug笔试平台,支持不同职级、不同语言、不同维度等题目,面试官可以快速发一起一场笔试,可以节省面试官大量的时间;
对于简历中的项目,其实可以设计一个非常真实的问题,比如你目前有独立设计实现过一个完整的功能吗?你研发的这个功能产生了什么作用,你在项目中扮演一个什么角色?ShowMeBug笔试支持音视频题型,面试官可以量身设计,让候选人更加真实的回答。
⑸ HR如何快速判断应聘的程序员是否靠谱
招人这个事情放到如何重要的地位,其实都不为过。前赶集网CEO杨浩涌在一次开放式演讲中说过,CEO要花一半精力去找人。其实在Google、Facebook、Alibaba等一些公司在招聘一个员工的时候,他们是很耗费时间和精力的。一个好的人是值得花非常多的时间。你看重的人,在他身上花精力是非常值得的,他会被打动,他会感知到你确实非常在乎他,士为知己者死,好的人才觉得跟你是有共鸣的,他愿意加入你这个团队。
其实在一些中小公司,可能HR会初步筛选一些简历,然后给面试官进行面试。但其实很多时候,面试官面试的这位应聘者根本不靠谱(注意,我们现在说的是程序员招聘这个方向)。这样一来其实不仅浪费面试官的时间(其实,你知道,一般能够作为面试官的,在公司里面其实是很忙碌的),也是在浪费面试者的时间。所以,我个人觉得,HR在招聘的时候,首先可以通过一些基本的问题来快速判断应聘的程序员是否靠谱,通过HR的初步筛选后,面试官再和应聘者电话或者当面聊一些技术层面、逻辑思维层面以及团队合作层面的问题,这样就大大的增加了招聘的效率。
我个人觉得有两点:
因为程序这个行业变化更新很快,不要说刚入行的程序员,就是工作了十年的老司机,也需要不断的学习,而看书是学习的最直接体现。
HR可以在和应聘者电话沟通的过程中,可以询问他的业余时间都是怎么过的,如果应聘者没有提到读书、看书之类,我觉得多半不靠谱。当然看书并不局限于一些技术方面的书,也可以是一些非技术的书,我觉得爱看书的人,两方面的书都会看的。
我觉得第二点非常重要,首先我想要的是,应聘者简介、清晰、有条理的描述出他最近做完的一个项目或者产品的大的需求是什么,他自身在整个团队里面充当的是什么样的角色,能否描述清楚他自己做的某些功能。
如果HR能够很清晰的理解应聘者所描述的这些问题,我觉得他是靠谱的。
首先,如果作为一个非技术性的HR,能够听懂应聘者的解释,我觉得应聘者沟通、理解能力是完全没有问题。
其次,他能描述出来这个项目或者产品的大的需求是什么,说明他不是在蛮干,也说明他并非只是关注于手头上的事情,他还在关注整个团队在做什么样的事情,这也体现了团队精神。
然后,他能描述出来自己做的某个功能,说明他是真正的去实践过和思考过,思考和实践是作为一个靠谱程序员必备的素质。
总体上,快速判断一个程序员是否靠谱也就是这两点,如果这两点都OK ,没有问题后,我觉得HR再和应聘者约时间,再和面试官聊。
提出一点建议
就是HR先进行一轮电话面,沟通一些基本问题,从中觉察应聘者在表达、沟通、描述以及学习方面的能力。如果还行,可以和应聘者约定一个时间进行技术面,而面试官可以把时间选择在晚上,也就是7-9点钟,这个时候,上了一天的班,可以更好的投入到面试的上面。通过电话面,了解一下技术,以及以前的工作经历,没有问题的话,再约时间当面聊。
这是我能想到的,不喜可以喷......
⑹ 看资深面试官透露是怎样判断IT开发人员水平的
1、计算机相关学科的学历背景,或者即使没有计算机学历背景,也要有计算机学科体系的完整学习经历,基础知识在我看来是第一步,如果你不懂数据结构算法,不懂计算机体系结构,不知道怎么设计算法,不知道计算机软硬件怎么工作的,那写出的代码也是质量差的无效率的,你只是写出来了,但是在我看来是没有价值的代码,没有可维护能力和积淀性的,我从来就不相信一个没学过数据结构算法,计算机体系结构,编译原理,软件工程这些课程的人写出来的代码,那些很多策划改行的程序的程序员是不会到我这里一面的,所以来我们这面试的,无论你之前多牛逼,那都是虚的,一定要做笔试题,一纸笔试题直接看出基础能力,曾经见到技术总监不会写快排算法的,说太久忘了,那你来指导什么?用你的经验在这喝茶么?需要你来这里做什么?这不是笑掉大牙么?为什么我不招一个专业基础优秀并且有活力且成本低易塑造的年轻人,数据结构和算法设计是这里必须通过的。一句话,做技术的,太虚没用,用你的专业能力说话,在这里我们会偏向那些名校背景的人,因为经验上看,学历背景好的专业能力普遍非常扎实,这点我觉得网易现在的技术的一枝独秀,不得不说和他的校招只招清北浙交的策略有很大关系
2、游戏开发领域的专业知识,游戏开发有很多特定领域的知识基础,包括3D图形学,AI,物理,音视频,操作系统平台开发,业务逻辑系统,很少会有人把这些面面俱到,这里面每一个都需要几本书的系统知识去啃,但是我们只需要看到你在这里面某一个或两个上面有深入研究和经验,比如你非常通晓渲染,opengl D3D 各种shader效果,渲染优化都玩得很好,那就是一个加分,比如你非常善于研究ai,对行为树,寻路这些有深入的经验,也是很好的,如果对这些全都一知半解,那是不行的,我们需要的不是只是每个都懂一点的人,在游戏的专业知识领域方面,先做一个专才。
3、聪明。没错这是非常重要的一个衡量标准,开发者一定是这个世界上IQ最高的一群人,我很看重IQ,面对日新月异的开发工具技术的变革,聪明代表你有更快的学习适应能力,并能够对问题提出自己的一定见解和解决方法,这个很重要。
4、工具的使用,工具是针对不同游戏项目的,比如你做unity,那要求你掌握unity编辑器,你做unreal,你做cocos,在我看来工具并没那么重要,一个基础扎实聪明的人对工具的掌握是很快的,甚至很多非程序员都能玩转工具,所以在面试时这个只占25%左右的比例,和我说你多了解多了解某个工具,那其实并没有那么值得炫耀,就像练功的外功和内功,我们更看重内功,工具是可以花时间弥补的,专业基础则很难,那需要悟性。我们现在主要招聘U3D的开发,对这块,我们会衡量简单的U3D编辑器基础,U3D 的一些深入的概念,比如优化内存,drawcall,光照系统,assetbundle包,资源加载,动画系统,GUI系统,还会深入的考察C#,LUA的开发的情况。如果面试者只是把unity当office用,那就在这块没有分数了,一个并不是很复杂的问题可以难到很多人:两个资源BC共用A,那么ABC如何打包?加载b的时候要怎样加载?加载好b之后哪些包卸载哪些不卸载?不卸载的何时卸载?这个问题答得不完整不能说你深入的研究过UNITY
5、经验,经验在我们看来和工具差不多,这种依靠时间堆积的东西并不如专业基础重要,在技术开发来讲,10年经验绝对不是1年经验价值的10倍,经验多固然好,但那是在其他因素都一样的情况,一个聪明的名校毕业生,和一个10年经验做过10款游戏但是一直没有做过很多核心工作的程序员,我必然选择前者。而且关于经验,我们会把时间放在一边,先来剖析你所谓的经验多少是真正有价值的。首先,大厂大作的开发人员是加分的,这意味着你曾经同一些很棒的同事共事过,任何成功的产品都是有其成功的道理的(但是大厂的边缘发开人员则没有什么亮点,大厂往往把核心工作和非核心工作分的很开,一些非核心开发的人员很久接触不到主要研发工作,那反而是个劣势了),然后我会就着你的简历详细剖析你所做的工作,你说你做过寻路,那我问你A*算法原理怎样的,和navmesh有什么区别,A*在大型地图怎样优化,如果你答不出来,那我不认为你真正的做过寻路,你只是使用过工具而已,那知识不属于你,这一项经验我会清0,你做过战斗,那我会问怎样同步前后端的状态,怎样避免延迟导致的问题,怎样能够更好的表现打击感。所以经验绝对不是你做过什么,而是你详细的琢磨过什么,哪些东西真正的属于了你。所以很多10几年程序的经验开始很不屑一顾的坐在对面,说了一堆堆很着名的产品,这我做的那我做的,我要来当主程,那ok,问到细节一个也说不清楚,再加上基础的算法也都说你忘了,那没有任何意义,对不起,我喜欢刨根问底。
⑺ 怎样快速判断一个前端工程师的能力如何
对于考察人的技术等级,学界是有认真的研究的。参见:德雷福斯模型解说。
德雷福斯模型把人的技能水平,分成 5 级:新手、高级新手、胜任者、精通者、专家。
对不同技能等级的认定是这样的:
新手:依靠指令清单,必须按部就班。就是必须给出详细而具体的操作规则,才能工作。比如你做一道从未做过的菜,需要看菜谱的说明,第一步做什么,第二步做什么等等,直到最后烹饪结束。
高级新手:有限的情景洞察力,同等对待工作的各个方面。对全局性、体系性的东西没兴趣。这是小工的水平。比如他能跟着师傅干点活,打打下手。可以靠着反复检索搜索引擎、StackOverflow 解决具体的小问题。
胜任者:能够独立解决各种各样的领域内问题。这是一般的企业招聘,比较希望招到的等级,招进来稍作适应就能干活了,省心省力。
精通者:经验丰富,可以自我纠正、自我改进。这类等级的人,思考可以指向内在,通过反省、反馈改善技能。这种在企业可以算上高手、大拿了,培养不易。
专家:依靠直觉工作,不需要解释和理由。实际你让他解释,他可能也说不出个所以然,就是直觉给出答案,然后还是对的。专家人数稀少,需要很长时间训练、实践。通常的说法是 10 年出专家,10000 小时定律。
这个是理论上的研究,实践中比较缺乏操作性,难以迅速的判定应聘者的实际情况。不信你打开收进来的大把简历,刚毕业的学生,每个技能名词上面都是一堆堆的“精通” – 你相信么?但它可以当成一个职业技能等级判定的参照标准。
于是乎,各家企业开启了各种“笔试”、“机试”,多轮面试,并且严格要求学历以及出身院校,试图以此过滤掉不合意的应征者,留下合格的人选。它当然是可行的,但是效果一般,而且容易出错,错失有思想有水平的人。不然也不会催生出各类“推荐式”的招聘。
看重学历、学校当然也有其优点:它是快速过滤的手段,毕竟能考上好学校的人智商不会太差吧。但在大数字公司的一朋友说,公司里面还有初中毕业,一直精研安全领域的人,技术能力也是十分出色。如果严苛对待背景,这些人就会错过了。因为人的生活多种多样,有各种历史的背景因素影响经历。而部分人的经历,就是跟一些人不同的,可是不妨碍他们同样可以变得优秀。招聘,实际上是建立信任关系。如果有充足的信息证明,应聘者足够优秀,这就够了。条条框框只是辅助手段,并不是目的。
推荐式的招聘实际要靠谱的多,因为人很容易了解熟悉的人的水平。这是靠推荐者的信用背书。人平时沟通时说什么话,日常看什么书,关注哪些领域,琢磨过啥问题,哪些东西很熟,这个经常聊的熟人往往都知道。可是,这类招聘局限性也很大:面窄、靠机缘。靠推荐能招几个好手啊?好手往往是各家争抢的对象,窗口期有限,基本不会缺工作的。
说了一圈,还是要在技能水准判定上有更高效率的办法,招进合适的人来。
回到开头的德雷福斯模型,既然人的技能是分级的,那么对待不同的职位要求,也应该侧重不同的考察角度。如果千篇一律的走招聘流程,就容易出问题了。比如你明明要找的是“精通者”,可上来就让人一堆笔试、机试,这是不合适的。对方会十分的厌烦。体现高水平技术能力的并不在默写什么“字符串算法”那里。这反倒是刚毕业的人占便宜,因为才学过不久,印象深。不信你让工作 10 年的人跟计算机专业应届生比比写排序算法,真未必能赢。但是这并不重要 – 你干活不看手册不查文档吗?聪明人从不死记硬背。重要的地方在于对问题域的准确、深刻的理解,对各类技术优劣点、各种条件平衡的评判和把握。
对待初阶新人,应着重考察的是基本功是否扎实,专业成绩是否优秀。更重要的,是他对职业的热情,学习能力和研究精神。某类人要说起技术来,滔滔不绝,两眼放光,充满热情,对未知的、新生的各类概念、技术非常好奇,这种人想差都难。因为他会自我驱动,不用督促,自己就钻研前进。反之,觉得这个职业待遇高,只是想混饭吃的人,很少走得长远。这类初阶新人以毕业生、工作年限少者为多。测试考核,可以笔试查看其对基础概念的理解是否准确,知识领域的大致范围。甚至,布置一个有点挑战性的小任务,让他尝试解决,说明思路。
考察胜任、精通者的策略不一样。笔试做题没啥用,原因前面说了。这类招聘是重头戏,企业都喜欢找这样的,能干活。所以考核评估的地方也较多。我觉得可以分成几个方面去看。意识是否先进,是否会反省思考;是否善于解决问题,富有创造性;是否有比较深的积累和广阔的知识面。
业界的开发思想也是在不断变化,工具链一直在革新。聪明的人不用蛮力,而爱用工具提升效率,喜欢自动化操作解放人力。要查看人用什么开发工具链,用什么开发环境,解释下为什么?好的开发者会及时注意新出现的工具,挖掘它能解决什么问题,并尝试吸收,解决自己的需求。如果没有这个思想意识,工作效率就会打折扣了。因为你会落后行业发展水平。人善于自我反省,则会催动自我纠正,这正是精通者的特征。参考:优秀的开发者为什么要学习研究新的编程语言?
解决问题的能力是重头戏,也是企业招聘人的主因。人要善于解决实际问题,而且,要学会聪明的解决问题。解决问题要看思路,看手段,看是否有创造性,这是真正考验人能力的地方。好的开发者,会考虑很多可能选项,预估各种优劣,给出一个较优的方案。 遇到难题,会用各种方法尝试。经验丰富的人,常常会使用技术的组合手段来处理难题,而不是一个语言一个工具到处用。所以,要查看下过往的项目经历遇到的问题、困难,是如何解决的,思路如何。一些公司据说不招聘不会用谷歌的工程师。谷歌打不开?嘿嘿,这就是你要克服的困难啊。这你都解决不了,还做什么研发。谷歌是人类最全、最新知识的总索引,充分利用事半功倍。
考察知识的深度、广度,对重要领域的概念是否有深刻的理解和掌握,以及从各类工作经验中得到的认知。问问他看过什么书,研究过什么东西。说白了,知道的东西是否多。一些公司很喜欢用 CheckList 模式来考核,列一堆领域的知识点、概念,问人懂不懂,知道就是水平好,不懂就是水平差。实际情况并非如此。人的工作过程是独立的,一些事情如果没有工作机会去接触并解决,那么一些冷僻的问题就永远都碰不上。当然也就不知道。但你能说没做过就一定做不好么?
另外,人的技能树,其实也是“犬牙交错、参差不齐”的。什么意思?技术领域非常的广阔,你真的没办法每个领域都很精通,实际上是这个做的多,懂的多,那个用的少,知道的少。这个时候,应看具体知识领域,是哪一类。它是否需要复杂的、难度较高的背景。门槛高的技术,需要的配套技能多得多,比如 AI、机器学习。而一般产品应用领域则不然,了解核心概念、设计意图,看着手册、最佳实践,也就能上手了。这个暂时不会,实际无关紧要的,工作一段学的认真点就会了。但是门槛高的领域,就需要很长时间的学习了。这是本质的差别。
我曾看见某公司放出的职员技能树,包罗万象,几乎一切 IT 领域的知识技能都在里面了,还声称要求“全部精通”。我不知道它如何定义的“精通”,如果按德雷福斯模型的定义,能做到的那是神,不是人类。这个纯属吹牛皮,我压根就不信。如果真有这样的人,出来让我膜拜下。因为每个稍大点的领域,都足够让你钻研一辈子,因为它们也在迅速发展呀。业内流传“全栈工程师”的说法,鼓吹自己是全栈的人经常是前端工程师。而研究后端工作领域的技术高手经常鄙视这类人:真以为会点 Node.js 就能解决一堆后端的事务了么?我也懂一些前端,也能号称“全栈”,但在不同领域的专业性是什么水准,自己明白的很。前端要解决的事情也有很多复杂性。全栈实际是反专业化的,是人力资源稀缺时候的低成本选择。
更高一层,则是考察人本身了。人的视野够广阔么?其它领域的知识有了解吗?一些问题的解答并不在问题域本身,而是在外面的领域。所谓“功夫在诗外”。公司讲求团队协作,总要面临不同的分工合作问题。比如产品、运营的人提需求,可以换位思考吗?合作意识强么?谁也不想招个刺头进来吧?把团队的气氛和人际关系搞的一团糟,大家做事都不痛快、不顺心,又如何安心做好工作?最终只能让团队工作效率下降,甚至瓦解。