百度空间 | 百度首页 
               
 
查看文章
 
未必有价值的《编程之美》及对开发人员能力的思考
2008-07-26 23:34
记得我刚开始从事软件开发工作的时候,当时的领导曾经给我推荐过一本很薄很经典的90年代的书,书名我已经记不起来了,讲的是微软开发小组里面的一些优秀的开发实践,如TRACE, ASSERT, bound check 的一些美妙之处,看后对我的编程风格有很深的影响,有些习惯可能一直延续至今。微软亚洲研究院的《编程之美》给我第一印象应该是这样一本书,然而看了几个小时之后,稍微觉得有点失望。一般程序员看后可能会对有些应试的用途,但对提升自身价值没有任何帮助。

也顺便说说我对开发人员能力如何衡量。

1. 90%以上公司需要的都是知识型人才,比重占70%,
拿Java来说
a) 基础知识类:如jdk, collection, thread, jdbc, jsp, servlet
b) 专业技术类,如Struts, Spring, Hibernate
2) 综合知识类,如TCP/IP, socket, linux, web service, xml, sql, ajax

2. 协作能力/EQ, 比重占20%
比如协作,沟通,态度,责任心,积极心等

3. IQ(智力题,数学题) 10%
这个很难衡量需要多少,按应用类型来说
a) 以功能为主的应用, 国内大部分是这种情况,开发就是怎样用程序来完成业务系统,这种类型知识面更重要
b) 以性能为主的应用, 如 nginx
c) 两者兼顾,如 mysql
b/c可能是对智力方面要求稍高,但我觉得任何一个数学能打80分以上的在1,2达到要求之后都可以胜任。

在大部分软件开发中,纯算法占的比例很少,甚至没有。一个有趣的现象就是《数据结构》(严蔚敏的那本经典教材不怎样)这本书大部分程序员只是在面试前阶段有机会看看,工作中根本没需要查阅。
比如Java中
常用数据结构:ArrayList, LinkList, Queue, Hashtable, HashSet
常用排序:SortedSet, SortedMap, TreeMap
数据结构中描述的那些东西基本上JDK都有了,对于Java程序员只要理解这些工具库的使用场合,能够使用恰当就非常合格了。

再讲个纯数学算法优化是否重要的问题,书中有例子,如2.10 寻找1个数组中最大值和最小值。这个题通常的解法的时间复杂度是2*N,实际上可以很容易优化到1.5*N。如果从一个产品的角度来考虑,如果一个程序员提交的代码复杂度是2*N, 我觉得这样就足够了。因为
1) 大部分应用的电脑CPU占用5%都不到
2) 这样纯算法的问题在目前大部分Web系统通常不会成为瓶颈,瓶颈通常在IO, 网络及架构设计及语言本身上。比如你用Ruby写,某个算法再优化可能也只有C语言效率的1/100
3) 产品负责人更关心代码质量,可维护性,可扩展性等方面。
4) 产品负责人更关心更关注知识型/经验型的层面,比如程序员原来用Java IO实现的,可能用Java NIO更合适。

可能上面这个例子是此书里面离开发最近的,大部分题目比这个离实际开发更远,比如“数独”问题等,用来做做头脑游戏可能更适合。如果一个程序员花了1天,写出了一个构造数独的程序,他的能力就得到了提高吗?

后记中其中一个现任职于微软研究院的作者提到,“作为一个曾经的求职者,当时自己能够做的,就是搜集和整理能够在网络上搜刮到的所有题目。算法题、智力题以及各种面经。把各种题目做到让自己条件反射为止……(原文)”。如果真是这样,我对微软亚洲研究院的这种“高考式”的面试方法表示担心。擅长做数学题和智力题跟能否够给软件企业和社会创造价值未必能划上等号。

类别:编程 | 添加到搜藏 | 浏览() | 评论 (6)
 
最近读者:
 
网友评论:
1
2008-07-27 20:50 | 回复
实用和知识永远是企业寻找人才的支撑点。这不光光存在于软件行业。 我想很多外企愿意接收知识型人才,是因为看到以后的潜力和方向。我在很多外企面试题中都看到大堆算法和数据结构题目。
 
4
2008-08-22 21:38 | 回复
@rabbitrun84 没错就是那本书,谢谢你的提醒。我自己都google不到了。现在查到中文名好像叫《编程精粹 - Microsoft编写优质无错C程序秘诀》 btw, 你的blog也很cool.
 
5
2008-08-22 21:47 | 回复
@iso1600 我是偶然在实验室的图书架上碰到,然后看了看,很惭愧没能详细看完。我现在作SIP,虽然对XMPP不熟,但我们的领域还是接近的。不过我是作移动设备开发,你好像更偏向于Server吧。我订阅了你的blog,十分感谢你能分享出这么多好的经验,资料,以及最重要的,想法。
 
6
2008-08-22 21:50 | 回复
补充下,作SIP也只是暂时的。我们组SIP,XMPP,IRC等等通信客户端都作,用得是telepathy framework,不知道你对此熟悉不?
 
7
2008-08-22 22:37 | 回复
SIP我研究不多,telepathy framework也没用过,mobile IM我倒研究过,不过我也是用XMPP, 走socket,跟pc上的架构差不多。
 
8
2008-11-11 18:02 | 回复
其实美这本书上那些题 还是在考察人的智力 ,思考方式 ,至于和写代码的关系 就像是勾画设计蓝图 和到工地盖房子的关系.思考方式是出发点
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu