开发团队需要遵守纪律才能从现代软件工程规范中获益。如果你的团队没有正确的工程纪律,那么你们所使用的工具和流程几乎都起不到什么作用。这一点,我已经在“Discipline Makes Strong Developers”(纪律造就强大的开发者)一文中着重论述过了。

有人提议,应该在团队里配备一位像枪炮士官哈特曼那样的资深训导员,以强化工程纪律。一些评论者对此表示了担忧。这也在情理之中。

译者注:哈特曼(Hartman)是电影《全金属外壳》(《Full Metal Jacket》)中的一个角色。这是一部描述美国海军陆战队与越南战争的影片,被认为是电影史上最出色的战争电影之一。在影片中,哈特曼粗鲁的语言、刻薄的训练方式,夸张但也真实地刻画了海军陆战队新兵教官的形象。

你这个臭小子!我知道你的名字了!看我怎么收拾你!我看你还笑得出来吗?你会想哭都哭不出来的。你必须一条一条学下去。我会教你的。

对于软件开发者来说,以哄骗或痛斥的方式让他们服从不是一个有效的激励方法。至少在我的经验里,那行不通。如果你想提高团队的工程水平,你需要一个领导,而不是靠一个训导员去强制执行。其目标并不是给所有的同事洗脑,而是要和他们一起协商出大家都能接受的标准。

Dennis Forbes曾经发表过一篇文章,题目为“Effectively Integrating into Software Development Teams”(有效地融入软件开发团队)。我觉得他很出色地概括了关于有效领导方面的策略。他用一封假想的电子邮件开头(根据我对Dennis的了解,这也可能是他的亲身经历),描述了被人当作强制执行者的弊端:

我最近被拉去帮助一个软件开发团队完成一个产品的开发,具体的要求是协助一些Web应用程序的编码。我尽了自己最大的努力去融入这个团队,热心地帮助他们,以赢得一些信誉和尊敬。

我时常转发“Joel on Software”上的各种小文章给大家,还建议在公司里摆上一堆像《代码大全》、《人件》以及《人月神话》之类的书籍。不管任何事情,只要我觉得可以做得更好,我都会尽力给大家指出来。我经常浏览源代码库,以找出可以让其他成员工作得更好的方法。

译者注:Joelon Software(Joel谈软件)是Joel Spolsky的个人博客,主要介绍他在软件开发与管理方面的经验。这个博客在全世界程序员中非常流行,他也因此被称为“程序员部落的酋长”。博客上的一些精华文章现已汇编成书,中文版为《软件随想录》,于2009年12月由人民邮电出版社出版。Joel还是Stack Overflow网站的联合创始人。

当其他开发者来向我寻求帮助的时候,我不仅帮他们解决实际的问题,我还举一反三——指出他们在开发方式上的问题,教他们怎样改进打字形式,告诉他们该使用哪种命名规范,提倡一种更好的代码编辑工具,并且对究竟应该使用存储过程(Stored Procedure)还是动态SQL的争论给出我训练有素的最终结论。

然而,所有这些努力似乎都不起作用,我还是会常常受到他们的抵制,而且我觉得整个团队不是很喜欢我。我的很多建议都没有被采纳,而且我觉得有些人给我的回应是毫不掩饰的讽刺。

我到底哪里做错了?

我相信我们都曾和这样的人一起工作过。也许我们自己就是这样的人。即使你有最好的意图,并且已经熟读我给大家推荐的优秀书籍,你最终还是会落得跟枪炮士官哈特曼一样的下场:被你自己的团队“枪杀”了。

在文章的最后,Dennis对如何避免被你自己的团队“枪杀”做了一个很有想法的总结:

保持谦虚。总是先假定你是错的。虽然开发者的确是会犯错误的,并且作为一个新人你理所当然应该帮助其他人发现和修正错误,但是在你骄傲地宣布你的发现之前,你应该努力确保你的观察结果是正确的。如果你老是喊着“狼来了”(慌报险情),你的信誉将遭受巨大的损失。

提出建设性的批评时要小心。开发者更容易接受非正式的建议和具有巧妙引导性的问题,而不是把同样的内容以电子邮件的方式发送给整个开发组。扩大受众面很可能会引起开发者的防御和逆反。团队总是会去猜测你的动机。如果你贬低他们的工作是为了提升你自己,你会因此被投诉而流放的。

要想赢得信誉和尊敬,最好的方法就是努力工作并且取得实实在在的成绩。廉价而肤浅的替代品——例如群发关于最佳实践的邮件,或者转发别人鼓吹某种“银弹”的评论——它们不会产生同样的效果,到头来你可能也只是枉费心机。

百说不如一干。创建一个团队博客(blog),或者一个维基(wiki),或者实施一种新的代码控制机制,或者实现一种新技术——这些事情说起来都很容易。所有人都知道,你只是在声明这些主意是你想出来的,而实现它们所需付出的艰苦努力却最终会落在别人的头上——他们会因此而讨厌你。如果你想建议些什么,你应该为此付出实际的行动、做好充分的准备。例如,展示团队博客的基本要素,包括初级的使用指南,以及所有的支撑技术。这并不能保证团队对你的倡议会一呼百应,而且你还可能徒劳无功,但团队会意识到:你是付出努力的,你在积极地推动它,而不是在试图捡便宜。

没有一个通用的建议可以适用于所有的情况。不是所有的应用都是大型的电子商务网站。仅仅因为那是最普遍认同的最佳实践,并不意味着它对你所加入的团队来说也是最好的设计原则。也许差得很远!

我喜欢Dennis的建议,因为他均衡地关注了行动与结果。他的结论和我个人观察的结果高度一致:最有效的一种技术领导就是以身作则。经常发生的是,开发主管没有时间和权力去强制执行(即便他们想那样做),于是他们都身先士卒、用行动来说话。

但是,单单行动或许还不够。即使你花上一辈子的时间去学习如何领导,结果可能还是不得要领。Gerald Weinberg的著作《Becoming a Technical Leader: An Organic Problem-SolvingApproach》对软件工程领域的领导力做出了更为深入的分析。

译者注:《Becoming a Technical Leader: An Organic Problem-Solving Approach》的中文译本是《成为技术领导者——解决问题的有机方法》,由清华大学出版社于2003年出版。

在最初的几章里,Weinberg就已经点到了发生在枪炮士官哈特曼以及Dennis Forbes身上的问题的根源:

我们希望怎样被帮助?我不想别人因为怜悯而帮助我。我不想别人因为自私而帮助我。这些情况下,帮助我的人完全不把我作为一个“人”来认真对待。我想要别人对我做的是,真正地爱我——当然,不是那种浪漫的爱,而是真正的对人性的关怀。

因此,如果你想要激励一些人,不管是以直接的方式还是通过营造一个协助的环境,你必须首先使他们相信你是真的关心他们,而惟一能确保他们相信你的方法就是你去真正地关心他们。人们可能会受到虚情假意的关心,但它不会长久。这就是为什么“黄金准则”的第二版说:“爱你的邻居”,而不是说:“假装爱你的邻居”。不要自欺欺人。如果你不是真的关心那些你所领导的人,你作为他们的领导是永远不会成功的。

译者注:黄金准则(Golden Rule)指的是一条公正的准则,可以在世界范围内的文化和宗教里找到,它引导人们要“像你希望别人如何对待你那样去对待别人”。换句话说,你希望别人怎样对待你,你就怎样去对待别人。作者这里引用的是《圣经》中的黄金准则。

Weinberg的《成为技术领导者》是一部真正的经典之作。它跟另一位思想极客的《赢在影响力:人际交往的学问》如出一辙。领导力的很大一部分就是要学着在乎别人,而这恰恰是我们程序员所不擅长的(我们在这方面已经声名狼藉)。我们热爱的是机器和代码,而我们的队友毫无疑问要复杂得多的多。

译者注:《赢在影响力:人际交往的学问》一书的作者是戴尔·卡耐基,英文原版的名字为《How to Win Friends & Influence People》。这本书创造了全球出版史上空前的发行记录。它深深地触动着读者的神经,满足了人们在人性方面的需要。其作者是美国著名心理学家,人际关系学家,20世纪最伟大的人生导师。他以超人的智慧和严谨的思维,在道德、精神和行为准则上指导了千千万万的读者。他还著有《人性的弱点》、《人性的光辉》、《语言的突破》、《美好的人生》、《人性的优点》、《林肯传》、《快乐的人生》等书。其中《人性的弱点》是继《圣经》之后世界出版史上的第二畅销书,被译成28种文字,全球销量突破1500万册。

作者在Twitter上发的一条短讯:

“雅虎的教训是,一个领导力差劲的公司注定会失败。‘一堆程序员呆在一个房间里’不是领导力。”

12:17 PM – 2012-5-23

最有效的一种技术领导是“以身作则”相关推荐

  1. 好技术领导和差技术领导区别在哪里

    FROM:http://suanfazu.com/t/topic/9613 Foursquare团队技术领导简要指南--有感于Ben Horowitz"好产品经理,差产品经理"一文 ...

  2. 好技术领导和差技术领导区别在哪里--转

    原文地址:http://suanfazu.com/t/topic/9613 Foursquare团队技术领导简要指南--有感于Ben Horowitz"好产品经理,差产品经理"一文 ...

  3. 从来没有一种技术是为了解决复用、灵活组合、定制开发的问题

    很多人说:微服务的价值是复用.方便灵活组合 很多人说:PaaS平台的价值是方便定制开发 我想说,这都什么人传出来的谣言. 这都是白日做梦.从来没有一种技术是为了方便修改和定制开发 (1)微服务是怎么来 ...

  4. [转帖]好技术领导,差技术领导

    团队合作 一个优秀的技术领导必然是团队的一份子,他们认为当整个团队成功时自己才称得上成功.他们不仅要做好繁杂和不讨好的本职工作,还要清除项目中的障碍,从而让整个团队能够以100%的效率运转起来.一个好 ...

  5. 成为成功技术领导的十条经验

    如果你带领的团队必须完成某个任务,而任务现在面临困境,你愿意: a.优先考虑任务 b.优先考虑人 c.平衡人和任务 d.逃避 e.上述无一可选择 上面的问题出自一本管理教科书.简单来说,它代表了领导的 ...

  6. 温伯格 技术领导之路 ——如何弯腰更省力 怎样伸手更合理

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本文选自 ...

  7. 自动驾驶汽车可用于处理急转弯的 3 种技术

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 自动驾驶汽车需要感知不同颜色和不同光照条件下的车道线,才能准确检测 ...

  8. iOS 多线程的四种技术方案

    iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) {for (NSInteger i = 0; i < 100 ...

  9. 向服务器请求数据的五种技术

    2019独角兽企业重金招聘Python工程师标准>>> Ajax,在它最基本的层面,是一种与服务器通讯而不重载当前页面的方法,数据可从服务器获得或发送给服务器.有多种不同的方法构造这 ...

最新文章

  1. kuayu react_react跨域解决方案
  2. 第三次Scream冲刺
  3. echarts柱状图同一页面点击不同得按钮切换_不可思议,这个PPT居然有按钮滑动效果...
  4. Jenkins+SonarQube6.5.5+SonarScanner2.5代码质量管理平台
  5. r语言和metawin_如何创建R的HelloWorld包(Windows或Linux环境下)
  6. jar包导出无法显示图片或者音乐_音乐曲谱软件-Guitar Pro 7 for Mac
  7. Oracle使用imp/exp导入/导出数据库
  8. 数学--数论--HDU 2197 本原串 (推规律)
  9. 探索SwitchYard 2.0.0.Alpha2快速入门
  10. 织梦同步静态文件到服务器,某猫织梦插件-织梦dedecms静态文件生成速度的区块插件...
  11. java09数组的使用
  12. java多线程创建一个简单的案例
  13. 【数据库系统设计】关系数据库简介(关系模型、关系模式、关系完整性、关系代数)
  14. “WiFi 万能钥匙”盗 9 亿用户数据,如何看待运营平台滥用隐私的问题?
  15. matlab进行ai研究,matlab【人工智能项目】—ELM地质分类研究
  16. 时下流行的深度学习数据标注工具
  17. ubuntu等linux发行版声卡、网卡、显卡驱动问题解决
  18. 项目中报Assign array to a variable before exporting as module default 这个错
  19. 微支付几个参数的获得
  20. PyTorch Geometric (PyG) 入门教程

热门文章

  1. 美光消费级3D SSD:最大2TB
  2. .net core 使用 Hangfire 实现定时、延时任务
  3. Idea使用“ctrl+/”快捷键进行 行注释 时,在//后自动添加空格
  4. 码云(Gitee)团队如何使用码云完成开发?
  5. 阿里巴巴离职DBA 35岁总结的职业生涯(转)
  6. CentOS安装配置Maven
  7. word输入后面的字没了
  8. 【层级多标签文本分类】HFT-CNN: Learning Hierarchical Category Structure for Multi-label Short Text Categorizati
  9. HTML批量转换jpg,万能文件转换工具(word,excel,powerpiont,PDF,TXT,JPG,HTML互转)
  10. [Linux字符驱动] DIDO 74HC595实现遥控遥信功能