如何辨别一个程序员水平的高低? 让你一眼识破

找不到分类 evilven 2个月前 (04-16) 18次浏览 已收录 0个评论 扫描二维码

如何辨别一个程序员水平的高低? 让你一眼识破

工作3-5年,大家都做过点什么?但是有的程序员只是技术迁移、完全没解决问题的能力啊?大家盘点下,在你眼中,高工作年限的程序员,技术水平差是什么样子?

姚冬/文


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

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

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

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


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

Vkki/文


我认为程序员水平的高低直接体现在对问题理解的深刻程度。

众所周知程序的精髓在于算法,一个程序好不好,毫无疑问应该看它的算法好不好,这直接影响了程序解决问题的正确性和效率。而算法的实现又强烈依赖程序员的抽象能力及理解能力。

给定一个list,元素都是正整数,要求返回这些元素组成的最大数。例如 [5,3,31,2],返回 53312


对于这道题我当时理解不够深刻,开始用递归解决的,后来想了半天又写了个更简单的方法:

如何辨别一个程序员水平的高低? 让你一眼识破如何辨别一个程序员水平的高低? 让你一眼识破
可以看到,这两个方法的代码量差了一倍不止,却解决的是同一个问题。


如果这两个解法是两个人分别写的,那么显然可以说,后一个人的水平比第一个人的水平高,因为前一个解法只是单纯的「解决」了问题,后一个却看到了问题的「本质」。
而往往,对于本质的解法是 simplest 的,却是 most difficult to come up with 的。

再来看一个面试题:

100个人排成一行,分别以1、2、3……编号,从这些人中选出偶数号的杀掉,剩下的人重新从1开始编号,然后再选偶数杀掉……如此循环直到只剩下1个人为止。请问你要站在哪个位置才能保证存活时间最长(除了1号)?


这个问题如果是第一次看到,相信大多数人拿到手里都没什么头绪。然后有的人可能会试图去找规律,试图去在脑中演绎,试图去从反方向逆向推出结论……

如果我现在告诉你,这道题考的实际上是二进制,你会怎么想?觉得不知所云?亦或是突然找到了灵感?

其实这道题很简单,掌握了方法之后无论题目说有多少个人都能在 1 秒内得出答案。

对于这道题,答案是 65。

  1. 把总人数转成二进制,110 0100

  2. 除了最高位其余都变成 0 : 100 0000

  3. 把这个数转成十进制再加 1

其实也就是不超过总人数的 2 的最大次幂再加 1

对这道题思考的过程,其实就是一个人理解问题的过程。这方法看似简单,毫无技术含量,却不是所有人都能一下子发现的。
如果不信,可将此题发给身边的人,让他们说出思考的过程。许多人都会需要进行大量的演算、比较、试验后,才能得出一个类似数列的通项公式,却还是不能抓住本质。

看到问题实质的能力,是通过经年累月训练出来的,不是一下子能够完成的。

来源:知乎

链接:http://www.zhihu.com/question/35194924

-END-



关注“51CTO博客”

如何辨别一个程序员水平的高低? 让你一眼识破

长按二维码关注

如何辨别一个程序员水平的高低? 让你一眼识破


如何辨别一个程序员水平的高低? 让你一眼识破


Hacking For Fun , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何辨别一个程序员水平的高低? 让你一眼识破
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址