寻找优秀的程序员之实战指南

——选自《软件随想录:程序员部落酋长Joel谈软件》

【好消息】本书今天(12.10)互动有货,感兴趣的朋友可以 逛逛去

【续】http://blog.csdn.net/turingbooks/archive/2009/12/10/4978128.aspx

~

程序员的社交生活

程序员与普通人并不是真地有那么多不同之处。当然,我很清楚,如今很流行将程序员看作埃斯柏格综合征 [ ① ] 患者,行为刻板、呆头呆脑,在人际交往中表现得很不协调。但是,这不是事实,哪怕有些程序员真患有埃斯柏格综合征,他们也很关心工作场所中社交性的一面,这包括以下内容。

程序员在组织中如何被对待

他们被当作明星,还是被当作打字员?公司的管理层是不是由工程师和曾经的程序员组成?程序员外出参加会议时,坐的是不是头等舱?(我不在乎这样是否像在浪费钱。明星坐的就是头等舱。请习惯这种做法。) 他们飞过来面试的时候,有没有豪华轿车在机场等着接他们?还是说,他们得自己想办法到公司?如果其他条件都相同,程序员就会选择去一个对待他们像对待明星一样的公司。如果你们公司的 CEO 以前是干销售的,并且什么都看不顺眼,他就很不理解那些娇滴滴的程序员,为什么一直要求发放诸如腕垫、大屏幕显示器、舒服的座椅这一类的东西,这帮人以为他们是什么?如果你们的公司是这种样子,那么就需要调整态度了。如果你不尊重程序员,你就不会得到优秀的程序员。

谁是他们的同事

面试的那一天,程序员会密切关注他们 遇到的那些人。他们待人是否友善?以及更重要的,他们是否聪明?曾经有一年夏天,我在贝尔通信研究所当实习生,那是贝尔实验室的一家子公司,我遇到的每一 个人都不断地、一遍又一遍地跟我说同一件事:“在贝尔通信研究所工作,最美好的事情是这里的人。”

这表明,要是你手下的程序员中有人脾气 火暴爱挑剔,如果你不能摆脱他们,至少不要让他们在面试场合出现;要是你的程序员中有人性格活跃、喜欢社交和组织集体活动,一定要让他们在面试中现身。你 要不断提醒自己,当求职者回到家中时,他们必须做出决定去哪里工作,如果他们遇到的每个人都面色阴郁,他们对你的公司绝不会有一个好印象。

顺便说一句, Fog Creek 软 件公司原先的招聘理念是从微软公司抄袭来的,只有两点:聪明,并且能够完成工作。但是,甚至在我们开始运作公司前,我们就意识到应该再加上第三点“不收怪 人”。回想起来,在微软公司的时候,是不是怪人其实不是录取新员工的必须要考虑的事。虽然,我相信微软公司在口头上一定说,与其他人融洽相处是多么多么重 要,但是实际情况是他们从来不会因为某人很古怪就否决了他的录用资格。事实上,有时候,古怪反而是进入微软公司高级管理层的先决条件。虽然从公司运营的角 度看,这不会造成太大的影响,但是从招聘的角度看,它确实会产生负面影响:谁愿意在一家需要忍受怪人的公司里工作呢?

独立和自主

回想 1999 年的时候,在创办 Fog Creek 软件公司之前,我辞职离开 Juno 软件公司,人力资源部约我进行一次很标准的离职谈话。我不知怎地就落入了陷阱,将我对公司管理上的种种不满都告诉了人事经理。虽然我很清楚这样做对我绝无好处,实际上只有坏处,但是我最终还是做了。我对 Juno 公司最大的不满是那种抽风式( hit-and-run ) 的管理风格。你们瞧,大多数时候,管理层对程序员完全不闻不问,将程序员扔在那里,让他们静悄悄地完成工作。但是,偶尔公司经理本人也会介入,追问一些极 其微小的细节,坚持一定要百分之百按照他们的方式做出来,不许有任何借口。接着,他们又转向其他方面的细节问题,每个问题关注的时间都很短,短到来不及看 到按照他们要求做出来的可笑结果。举例来说,我记得有两三天让人特别恼火,从我的上级经理一直到 CEO ,都跑来跟我说,怎么才能符合要求地填写 Juno 公司员工资料登记表格的日期栏。他们没有受过用户界面设计师的专门训练,又不肯花时间同我就这个问题交换意见,搞清楚为什么说在那个特殊情况下我恰好是正确的。不过这些都不重要,重要的是管理层根本不愿意屈尊同属下讨论问题,甚至不愿意花时间听取我的论点。

基本上,如果你要雇用聪明人,你就必须 让他们在工作中发挥技能。管理层可以提出建议,而且这样做是受欢迎的,但是他们必须极端小心,不能让他们的“建议”被视为命令,因为不管是什么技术问题, 经理们知道的很可能不如在壕沟里干活的工人们,尤其是正如我前面说过的,你雇用的都是聪明人的话。

程序员希望自己之所以被雇用,是因为自己的技能,希望被别人当成专家那样对待,有权力在自己的专业领域中做出决定。

不搞政治

老实说,只要有两个以上的人待在一起, 就会有政治。这很自然。我说“不搞政治”的真正的意思是“不搞恶性的政治”。程序员早就练出了对公正有非常良好的判断力。代码要么能运行,要么不能。坐在 那里争论代码是否有问题,这是毫无意义的,因为你可以运行代码,答案自然就有了。代码的世界是非常公正的,也是非常严格有序的。许许多多的人选择编程,首 要的原因就是,他们宁愿将自己的时间花在一个公平有序的地方,一个严格的能者上庸者下的地方,一个只要你是 对 的 就能赢得任何争论的地方。

如果你要吸引程序员,你就必须去创造出 这样一个环境。当一个程序员抱怨“人际关系复杂”时,他们的意思明白无误,就是指任何个人因素超过技术因素的环境。程序员在完成手头任务时,不被允许使用 最合适的编程语言,而是被命令只能使用另一种特定的语言,原因仅仅是老板喜欢这种语言 ——没有什么比这更让人气愤的了;晋升的原因不是成果,而是人际关系——没有什么比这更让人抓狂的了;程序员被迫去做技术上落后的东西,仅仅因为上级或者得到上级支持的人坚持这样——没有什么比这更让人发火的了。

没有什么比因为技术原因赢得一场由于政治原因本来要输掉的争论更让人心满意足了。当我在微软公司刚开始工作的时候,有一个正在开发中的大型项目走入了歧途,项目的代号是 MacroMan ,目标是创造一种图形化的宏语言。真正的程序员遇到这种语言会很有挫折感,因为图形的特性让你真地没有办法完成循环和条件判断功能。此外,对于那些非程序员的用户,这种语言也不会有很大作用,因为我觉得那些用户不会习惯算法思维,没有办法很快地理解 MacroMan 。当我说出对 MacroMan 的负面评价时,我的老板告诉我:“火车跑起来就刹不住了。算了吧。”但是,我还是不放弃,一再地不断地争论。那时我刚走出学校,在微软公司中差不多跟谁都没有利害关系,所以,渐渐地,人们开始倾听我的核心观点, MacroMan 后来终止开发了。我是谁并不重要,重要的是我是对的。非政治性的组织就应该这样,这种组织才会让程序员感到高兴。

总的来说,关注你的组织的社交动态变化,对创造一个健康的、令人愉悦的工作环境是很关键的,这样可以留住程序员和吸引程序员。

~

我干的是什么活

一定程度上,让程序员干有趣的活是吸引优秀程序员的最好方法之一。但是,这可能是最难改变的事情。请试想,如果你很倒霉地在为沙土行当写软件,跟石头和沙子打交道,这就是你的行业,那么你无论如何也没法装得像某些互联网创业公司一样酷,靠这个吸引程序员。

另一类程序员喜欢干的活是开发一些非常简单或者非常流行的东西,这种东西足以让他们在感恩节那一天向艾玛婶婶 [ ② ] 解释清楚。而艾玛婶婶当然对沙土行当中的 Ruby 编程并不怎么懂,因为她是学核物理的。

最后,许多程序员也会关注他们服务的公司的社会价值。在社会化网络公司( social networking )和网志公司工作,可以帮助人们交流沟通,看上去也不会造成污染,所以这种公司受欢迎。军火公司和那些不道德、充斥着会计欺诈的公司就非常不受欢迎。

很不幸,在这方面,我真不确定我有办法给那些一般的招聘经理出主意。你可以尝试改变一下产品线,制作某些很“酷”的东西,但是这样不会长期有效。不过,我看过一些公司在这方面采取的举措。

让一流的新员工挑选他们自己的项目

多年以来,甲骨文集团有一个叫做 MAP 的计划,也就是“多选择性计划”( Multiple Alternatives Program )。这个计划针对各个班级中甲骨文认为最好的高校毕业生。计划中的安排是让他们来甲骨文,花上一到两个星期到处看看,访问所有缺人的开发小组,然后让他们选一个自己想进去工作的小组。

虽然也许对这个计划的效果我没有甲骨文的人清楚,但是我觉得这是一个好的计划。

使用非必要的热门新技术

纽约的那些大型投资银行被认为是相当艰苦的程序员工作环境。那里的工作条件很可怕,大量的连续加班,嘈杂的环境,咆哮的上司。程序员是千真万确的三等公民。而与此同时,一群狂热的类人猿在那里操盘买卖金融工具。这群类人猿是公司里的皇室,拿着高达 3 千 万美元的分红,公司里所有的汉堡包他们都可以吃(经常是让碰巧在旁边的程序员递给他们)。不管怎么说,这些都是陈规陋习,所以为了留住最好的程序员,投资 银行有两个策略:一个是给程序员发一吨的钞票,另一个是给予程序员完全的自由,允许他们使用自己想学的任何最新热门编程语言,不断地一遍又一遍重写每件东 西。想把整个交易程序用 Lisp 语言重写?随你的便。帮我再拿一个该死的汉堡包过来。

一些程序员固执于他们正在使用的编程语言,但是,大多数程序员很高兴有机会使用令人激动的新技术。现在的热门大概是 Python 语言或者 Ruby on Rails ,三年前是 C# ,再以前是 Java 。

在这里,我不是让你不要用最好的工具完成工作,我 也不是让你每两年就用热门语言重写一遍程序,我只是在说,如果你能找到办法让程序员有接触新的语言、框架和技术的经历,那么他们会感到更开心一些。即使你 不敢为了学习的目的用一种新语言重写核心程序,那么有没有可能重写你们使用的内部工具,或者其他不关键的新应用程序呢?

~

我能够认同公司吗

大多数程序员工作不是为了谋生,他们要 的不是一份“朝九晚五”的工作,他们要的是工作所能带给他们的意义。他们想要认同他们的公司。年轻的程序员尤其会被有理想有抱负的公司所吸引。许多公司与 开源运动或者自由软件运动(两者不是一回事)都有一些联系,这使得它们能够吸引那些具有理想主义倾向的程序员。另外一些公司与非营利性的社会事业有关系, 或者制造的产品被视为和用于造福社会。

作为一个负责招聘的人,你要做的是找出你的公司中理想主义的一面,确保招聘对象了解它们。

一些公司甚至努力在创造它们自己的理想主义运动。芝加哥的创业公司 37signals 就强烈地认同简单的东西,所以他们开发像 Backpack[ ③ ] 那样简单、容易使用的应用程序,以及像 Ruby on Rails 那样简单、容易使用的开发框架。

对于 37signals 来说,简单已经成为了一种主义,实际上是一种国际政治运动。简单不仅仅是字面上的含义,哦,不,它是夏日的时光,它是优美的音乐,它是和平,它是公正,它是幸福,它是头发上插着花的漂亮姑娘。 Rails 开发框架的创造者 David Heinemeier Hansson 说,他们的故事是“一个关于美、幸福和激励的故事。从你的工作和你的工具中享受乐趣,并为它们感到自豪。这个故事并不仅仅是一种时尚,而是一种趋势。这个故事使得像激情和热诚这样的词不用找借口就能成为程序员自己所认同的词汇。你再不用为喜欢自己的工作而感到尴尬了”( www.loudthinking.com/arc/2006_ 08.html )。将一个互联网编程框架上升到某种“美、幸福和激励”,可能看起来有点像说大话,但是这确实非常有感染力,的确使得他们的公司与众不同。他们把 Ruby on Rails 说成是一种幸福,并且向外推广这种观念,这实际上保证一定会有某些外部的程序员想来找 Ruby on Rails 方面的工作。

但是,在这种自我认同的管理方法( identity management )潮流中, 37signals 资历尚浅。如果比起苹果公司,他们连在旁边(为明星)举蜡烛的资格都没有。 1984 年的美式橄榄球超级碗决赛时,苹果公司播出了一支广告。 [ ④ ] 从 那时起一直到今天,它一直在加固自己反对传统文化的形象:追求自由,反抗独裁;追求自我,反抗压迫;追求色彩,反抗单调。就像广告里的内容一样,苹果公司 是一个穿着明亮的红色运动短裤的漂亮姑娘,奔跑着穿过身着制服被洗过脑的人群。但是,我不得不说这里面的含义其实是奥威尔式的反讽。巨型公司用一种不合理 的方式操纵它们的公众形象——嗯,比方说,他们是一家计算机公司,那么与反抗独裁有什么关系呢?真是活见鬼 ——成功地创造出一种自我认同的文化,使得全世界各地购买计算机的用户感觉他们买的并不仅仅是一台计算机,觉得自己通过购买而参加到了一场运动中。当你购买一台 iPod 时,你当然是在支持甘地 [ ⑤ ] 反抗大英帝国的殖民主义统治。每一台被卖出的 MacBook 都表达了一种反抗独裁和饥饿的立场!

好了,不说了,深呼吸……这一部分的真正用意是,思考你的公司代表了怎样的追求,这种追求是怎么形成的,又是怎么才能被别人感受到。管理好你的公司的品牌不仅对营销很重要,对招聘新人也同样重要。

~

程序员不在乎的一件事

他们实际上不在乎钱,除非你在其他事情上搞砸了。如果你开始听到有人在抱怨薪水,而以前并没有出现这种情况,这经常就是一种信号,表明人们并不真地喜欢他们的工作。如果你想雇的新人提出高得离奇的薪水要求,并且不愿意降低,那么你可能遇到的是这样一种情况,那些人心里想:“好吧,如果不得不接受这份糟糕透顶的工作,那么我至少应该有一份优厚的报酬。”

我们说程序员不在乎钱,并不意味你可以向他们支付低工资。因为程序员对公正公平是在乎的,如果他们发现同工不同酬,或者他们发现自己公司每个人的薪水都比街对面同样的公司低 20% ,他们会被激怒的,然后,突然之间,钱就将成为一个大问题。你必须支付有竞争力的报酬,但是让我们这样说,当程序员决定去哪里工作时,在他们考虑的所有因素中,报酬的位置低得让人吃惊,前提是薪水必须基本合理。同样让人吃惊的是,如果你的公司里有这样的问题,比如程序员用的是 15" 显示器,整天都有销售人员对着他们吼,他们的工作是猎杀小海豹、制造核武器等,那么向他们提供高薪水并不是一个有效的工具,并不足以克服这些问题,吸引他们加入你的公司。

【完】


[ ① ]    埃斯柏格综合征( Asperger syndrome ): 1944 年,德国儿科医生 Hans Asperger 发表《关于儿童自闭性人格障碍》的论文,提出某些患有自闭症的儿童,有一些特殊的症状,比如与人交流时缺乏面部表情、不断重复同一问题、社会交往中表现出自我倾向、对他人没有情感性的共鸣、走路姿势很特别或不稳定等。 1981 年,英国的儿童精神病学家 Lorna Wing 将具有上述临床特征的人格障碍命名为 Asperger 综合征。

[ ② ]   艾玛婶婶是英国情景喜剧 IT Crowd 中的角色。该剧讲述的是一家大公司 IT 部门员工令人啼笑皆非的日常生活。——编者注

[ ③ ]   Backpack 是一个互联网个人信息管理系统,网址是 http://www.backpackit.com/ 。

寻找优秀的程序员之实战指南-2相关推荐

  1. 寻找优秀的程序员之实战指南-1

    寻找优秀的程序员之实战指南 --选自<软件随想录:程序员部落酋长Joel谈软件> [好消息]本书今天(12.10)互动有货,感兴趣的朋友可以 逛逛去 2006 年 9 月 7 日 ,星期四 ...

  2. 优秀的程序员都在哪里 如何寻找优秀的程序员?

    优秀的程序员都在哪里 这是你第一次公开招募雇员.如同大多数人一样,你会发布广告,可能也会浏览一些大型的网上论坛,然后你就收到了一吨的简历. 一份份看下去,你会想:"嗯嗯嗯,这人应该可以.&q ...

  3. 转:寻找优秀的程序员(译文)

    今天在阮一峰前辈的博客中翻到这样一篇文章<优秀的程序员在哪里>,感觉写的风趣幽默却又富含哲理.所以转载以分享~ 注:本文是阮一峰前辈翻译Joel On software 博文节选,而 Jo ...

  4. CV+游戏,美国游戏开发公司 Rockstar Games 寻找优秀动画程序员

    (图来自Rockstar Games 官网,是即将推出的一款游戏封面) 美国知名游戏公司 Rockstar目前正在寻找一名对研究计算机视觉和机器学习感兴趣的动画研发工程师.为角色扮演游戏开发先进的面部 ...

  5. 长见识!居然还有程序员考公指南这种东西?

    整理 | 王晓曼 出品 | 程序人生 (ID:coder _life) 最近,拼多多事件的发酵再次把互联网打工人的996推到了风口浪尖. 虽然并不是每一个猝死事件都能与"过劳"建立 ...

  6. 大家在寻找的高级程序员到底是什么样子的?

    你好,我是Z哥. 这篇文章主题很简单,就是一个很常见的话题"什么是高级程序员?". 文章稍微长了些,但是很容易阅读. 我们的中国文化,对"面子"看的特别重,所以 ...

  7. 世界读书日:作为一个优秀的程序员请收藏这份书单

    ​4月23日世界读书日全称"世界图书与版权日",又称"世界图书日".最初的创意来自于国际出版商协会.由西班牙转交方案给了联合国教科文组织. 1995年11月15 ...

  8. 端粒效应《The Telemere Effect》程序员的养生指南(二)情绪、思维模式与健康

    身为程序员,面临着久坐,工作时间长,工作量大等种种问题.健康显得至关重要.接下来,打算借助一本诺奖得主写的书,来探讨下怎么能够更加健康的做好程序员的工作.端粒效应<The Telomere Ef ...

  9. 程序员考公指南:逃离996的最强出路,拒绝秃顶的最佳方法

    最近,拼多多事件的发酵再次把互联网打工人的996推到了风口浪尖. 虽然并不是每一个猝死事件都能与"过劳"建立直接联系,但互联网行业超负荷加班处理Bug是家常便饭,虽然收入高于很多行 ...

最新文章

  1. STL priority_queue sort 自定义比较终极模板
  2. 一个完整的操作UI线程的例子,用到了多种方式
  3. 【杂谈】从学员到专栏作者、讲师,我在有三AI学习与名利双收的故事
  4. 7-21 求前缀表达式的值 (25 分)(思路详解)
  5. Maven : maven异常记录-must be unique maven duplicate declaration of version
  6. 爬虫app信息抓取之apk反编译抓取
  7. Educational Codeforces Round 18
  8. IE6下溢出多余文字
  9. 解决vim编译后的乱码问题
  10. 一篇文章教你如何使用makerfile
  11. php设计模式 -- 迭代器模式
  12. 为什么我推荐你用Ubuntu开发?
  13. 第二季-专题6-点亮指路灯
  14. kali linux查看局域网的电脑,kali linux 如何查找局域网ip
  15. Pyts入门之时间序列的分解---奇异谱分析(七)
  16. Lora sx1278+stm32(ADC录音)+SPPEX音频压缩 数字对讲机
  17. 在html中input是什么意思,在HTML代码中input是什么意思?
  18. 问题 M: 【枚举】桐桐数
  19. 爬虫ip代理对高匿代理ip的重要性
  20. 护眼色的RGB值 和 颜色代码

热门文章

  1. exit的用法python_python 中exit,sys.exit,os._exit用法
  2. mysql写入时判断锁_MySQL 锁检查
  3. 华为消息推送 有透传通道吗_华为首款头戴耳机FreeBuds Studio正式发布,能否撑起品牌之名?...
  4. kindeditor扩展粘贴截图功能修改图片上传路径并通过webapi上传图片到图片服务器...
  5. node.js——麻将算法(一)基本判胡
  6. Linux 单用户模式修改密码与救援模式修改密码总结
  7. github 项目绑定自己的域名
  8. 孰优孰劣?Dubbo VS Spring Cloud性能测试大对决!
  9. substr vs substring
  10. [ruby] wxRuby安装