当前位置:网站首页>告别失控

告别失控

2020-11-10 18:13:40 东皇巴顿

文章目录

 


1、概要

  《告别失控》是讲述聘用、激励和领导顶尖软件开发团队的指导性书籍,对于如何建立一个可持续发展、始终能够交付符合预期的高质量软件、人人乐在其中文化氛围的研发团队,该书提供了很多有价值的经验法则、指导性建议、精辟见解。该书不仅能帮助项目经理成为更好的管理者,也有助于团队成员更高效的工作,对哪些想提升软技能的同学而言,该书启发性强也会是比较适合的一本好书。


2、程序员为何难以管理

  1. 程序员这个职业至少已经有60年的历史,全球从业人数庞大、从业者的素养参差不齐。(任何人都可以成为程序员,没有必需的证书标准或考试)

  2. 与其他工程类实践相比,编程更像是写小说(是一门有创意的艺术),在完成指定功能的前提下,代码细节难以把控。

  3. 规范的开发流程和框架,都仅是对编写软件过程的制约,并未涉及到程序员管理的问题。而程序员是一个古怪的群体(穿拖鞋、格子衫、懒散、无拘无束、个性独立、不愿做出改变、差异较大不能一视同仁等),如何发掘每个程序员的长处,让整个团队高效工作是一个挑战。总之,管理程序员就像放牧软件项目中的一群猫。


3、理解程序员

  要想管理好程序员,就必须真正了解每个程序员。可以从以下几个视角理解程序员。

3.1工种分类:

分类 解读
客户端程序员 从事客户端程序开发的人员。客户端程序通常运行在终端用户的计算机、手机、iPad以及其他消费电子设备上。
服务器程序员 后端RD
数据库程序员 DBA
Web开发及其他脚本编写者 HTML、XML、CSS、JSP、JS、PHP,越来越多的web程序员能够像客户端程序员一样技术精湛。

  这4种类型覆盖了世界上绝大多数的程序员,其中每一种程序员使用的工具、擅长解决的问题以及产品方向各不相同。大多数程序员只能把其中的一种做好。

3.2领域知识:

  每个行业和领域的背景与知识各不相同。团队是由具有程序设计天赋、领域知识、分析能力的人员混合构成。领域知识是程序员分类的另一个视角。

3.3程序设计等级(职级):

  程序设计等级关联一组评价标准,程序员必须符合相关条件才能被录用到该等级。其中对工作年限的要求不是绝对的,年限可用于粗略衡量编程者具备的技巧和经验。 制定这一系列与程序员成长相适应的职级评判体系非常重要。

3.4工作地点和工作关系:

  1. 内部雇员(该书重点讨论的对象,管理者需要与其建立亲密关系,以降低沟通成本)
  2. 远程雇员 (见不到面,距离越远沟通效率越低)
  3. 合同工 (非全职)
  4. 合同管理团队
  5. 外包公司

3.5个性特点:

  1. 夜间型的人。大多数程序员属于夜晚型的人,往往在正常上班时间好久之后才到单位,并且工作到下班以后很久。要更关注结果,而不是他们的上班时间。

  2. “牧童”与“农民” 。软件开发就像种地,农民会了解地形、研究土地的化学组成、种植、浇水、除草、收货。好的软件也是这样有条不紊地开发出来的。但多数程序员更倾向于当"牧童",出现问题的时候“跳上马离开”去独自解决问题,他们跳过规范,最终得到一次性的解决方案,解决突发问题能力很强。需要识别牧童,加以制约,使其开发出来的解决方案也能用于解决其他问题。

  3. 英雄。能够付出超人的努力并最终完成任务的人。不能总是期望他们付出超人的努力,这样会毁掉他们。需要关注他们的福利,选择性的用于关键项目。

  4. 内向的人。职员中总有一些非常沉默、非常内敛,他们或许能够出色地完成工作,但对团队动力或会议上几乎没有贡献,几乎感觉不到他们的存在。

  5. 愤世嫉俗、刻薄的人。需要衡量他们的才华能否匹配雇佣他们的代价。

小结:以上多种视角告诉我们,每个程序员都是不同的,就像世上没有两片相同的雪花,需要因材施用,不能一视同仁。管理人是困难的,有时候最有天赋的程序员同时也是最难管理的人。


4、寻找并招聘优秀的程序员

  根据“个体差异”研究,程序员在编码时间、代码大小、调试时间、bug数量等方面存在很大差异,优秀的程序员最多可以比平庸的程序员好30倍。程序设计经理最重要的工作就是招到正确的人。最糟糕的招聘可能会给团队带来长达数月的痛苦。
招聘流程


5、帮助新员工顺利入职

  招聘工作很重要,做好新员工的入职工作同样重要,永远不要低估对新员工适当欢迎的重要性。如何让新员拥有宾至如归的感觉(就像回到家不用担心吃什么饭一样),直接关乎新员工的工作热情。不用提前规划,只要表达出对他们加入的兴奋之情就可以。

5.1员工入职

  应当从员工接受录取通知的那一刻算起,与候选人保持"温暖"的关系,掌握候选人的心理变动,因为种种事件都会影响候选人是否会真正前来入职。

5.2为新员工到来做准备(入职的接待工作)

  如“伙伴计划”、新人SOP、参观认识办公环境、自家主管领着新员工在办公室“游街”示众一番、团队目标沟通等。

5.3确保成功

  1. 帮助新员工找到可以完成的任务,让其迅速开展工作。(让其有产出,有成就感,如完善wiki、梳理业务等)
  2. 让新员工和可以充当导师角色的团队成员坐一起。
  3. 确保他们可以立即访问所有的相关的文档。
  4. 设定试用期的期望成果,与新员工保持适当的沟通频次,紧盯一个个短期成果。(不要太相信新人的自我管理)

大部分公司都是垂直的组织结构。按照和你的关系划分为:

  • 向下管理(管理下属,项目经理大部分时间应该花费在向下管理上)
  • 向上管理(管理上司)
  • 对外管理(其他组织)
  • 自我管理

6、向下管理

6.1赢得技术尊重

成功地管理程序员最重要、最关键的因素就是获取下属的技术尊重。获取技术尊重的因素有很多,比如:

  1. 理解计算机程序设计的艺术;(比尔盖茨最喜欢和他的员工一起将程序分析到字节的层面,能够在技术战斗中守住自己的阵地…)
  2. 拥有良好的过往履历;
  3. 做出值得称道的技术贡献;
  4. 追逐技术潮流的最前沿;
  5. 展现出强大的个人价值;
  6. 写书、有专利、技术论文、开源软件…

6.2招聘杰出的程序员

  招聘到正确的人,那么其他的工作就会变得更容易;

6.3强化现有的团队

  受招聘预算限制、系统陈旧无趣等因素影响,招聘到杰出程序员几乎是不可能的。必须在招聘优秀程序员的同时,持续推动团队的进步(内部培养)。

6.4管理不同类型的程序员

  不同类型的程序员稍加区别地对待。项目进展往往很难分辨,只能依赖一些间接因素来观察进展:状态报告、项目时间表、基本指标及口头反馈,给与他们信任和活动空间。

6.5引导

  经理应该引导程序员做出正确的决定,而不应该自己就把决定做了;如果经常需要下达具体的命令,那说明你没能很好的利用你的管理技能。杰出的经理能够提前发现阻碍并提前移除阻碍,让目标的实施过程看起来很容易。

6.6保护

  经理要保护他的团队成员,免受组织中每日泛滥不绝的各种问题、评估、讨论、记录、争议的干扰,淹没在繁杂事情的洪流中会极大降低RD的程序设计效率,经理需要站出来缓冲这些洪流,并让他们知道你在保护他们,这样你会获得相应的声誉。

6.7评价和改进绩效

  1. 为员工设定目标与其达成共识,专注于帮助团队找到他们自己的自我驱动力。
  2. 绩效审查。正式沟通、非正式沟通、绩效审查的书面记录,并持续改进他们的绩效。(重要程度仅次于招聘到合适的人)
  3. 削减损失。解聘对绩效太差、消极失去动力者、对组织表现出破坏性影响的人等。

6.8交付成果和庆祝胜利

  识别、奖励和庆祝团队的成绩是至关重要的。如:10.24请队员吃饭、周五下班撸串、周六给加班队员晒个朋友圈?

小结:向下管理很难,但如果做的成功,职业生涯的辉煌是绝对有保证的。无论管理效果如何,要让队员知道你的忙,是忙于管理他们。


7、向上管理

  成功并不在于你做了什么,更需要考虑别人如何看待你所做的成果,现实中外在认知往往比实际行动更重要。管理好上司让他们成为你事业进步、个人成功的助力源泉。

7.1了解你的上司

  上司是什么类型的?技术型、销售和市场型、财务型、大局型、细节型等。

7.2准备好沟通

  主动沟通,让领导知道你为他分担了很多工作,随着时间的流逝你的汇报人会对你的能力和职权边界达成一种共识。

7.3了解你老板的老板

  只做好自己的工作并不够,还要帮助你的老板获得成功。了解你老板的工作目标,知道可以为上司做些什么。

7.4时机

  好时机几乎和好运气一样重要。就像电影发布的时机好坏直接影响它能否获得奥斯卡金像奖。

7.5成为模范员工

  几条成为模范员工的秘诀:

  1. 不要把每个问题都带到你老板那里去寻求解决方案,真正的问题才去寻求老板的帮助。
  2. 主动自荐帮助上司解决问题。
  3. 学会给人惊喜、快乐。

8、对外管理

  向外管理是对组织外部关系的管理,比如技术合作部门、供应商、合作伙伴、竞争对手、行业中有影响力的人等。跨部门、跨组织的纽带关系很有必要,可以采用非常规的方式逐步建立关系。


9、自我管理

  最难管理的人总是自己。

9.1个人风格

  1. 得体的外观。消除老板和其他管理层对你的负面看法。着装取决于你在哪里工作以及工作文化。
  2. 职业道德。能起到表率作用、以身作则。
  3. 了解你的员工。要成功管理团队,就不能只与团队打成一片,也不能太过冷漠疏远,要平易近人,这样员工才能遇到问题时愿意找你谈。

9.2时间和优先级管理

  保持一个积极准确的日程,只对哪些真正需要你时间的人慷慨。

9.3沟通管理

  1. 管理洪水一般的信息,保持注意力,专心于重要的事情。邮件、电话、信息的叮咚声容易使人分散注意力、让人有紧迫感,你不必一定答复或回应。
  2. 沟通中最大的问题,是误以为已经在沟通了。可以通过重述或者重释你听到的内容,反馈型倾听。

9.4寻找导师

  寻找那些令你尊重的、可以在你的生活和事业上给你指导的人,然后某种方式接近他们,请求他们指导你的职业发展,并为困难的管理问题指路。

9.5自己的职业发展和个人纪律

  时间不充裕,不要最后才想到自己。每周花时间自我管理,每周拒绝一次约会,把时间留给自己改善自己的问题。


10、激励程序员

  激励程序员没有一劳永逸的方法。以下是几个关键激励因素,最终还是需要我们反复思考和实践。

10.1改变世界

  几乎没有人不想改变世界。很多人选择程序设计,至少有部分原因是为了对身处的世界发挥积极影响。

10.2学习和成长

  技术变革太迅速,最好的程序员必定是终身学习者。为员工营造极好的学习氛围。技术讲座可以来自外部、应试者、员工、新书作者、供应商、产品经理等。

10.3工具和技术

  最简单的奖励和激励程序员的方法之一,是为他们配置最先进的开发设备和环境。

10.4认可与称赞

  认可与称赞不用花一分钱,却能对员工态度、职业道德、整体业绩产生巨大的影响。

10.5和员工快乐相处

  无需每天都很开心,但能够坐下来了解员工之间当天发生的事情或者一个笑话,并与他们哈哈大笑。有时候,笑是处理问题打破紧张问题的利器。

10.6利益

略…

小结:每个程序员都不相同,激励程序员的动力因人而异,了解一个程序员的动力,不妨从你雇用他们之前,那时你有机会去研究激励他们的真正动力。


11、环境

重金聘请的程序员,如何让其获得最高效的生产效率?需要有:

  1. 一间安静的私人办公室、不限量的饮料、68~72℉的室温
  2. 一台性能卓越的计算机及软件、没有炫目的屏幕、一把舒适的椅子、一个保证网络畅通的系统管理员、一个能发现他们看不到的bug的测试人员。
  3. 一个能找到目标客户的市场团队、一个出色的销售团队、一个帮助程序员整理哪些问题引发了技术支持人员、一系列支持和管理的职能部门

12、经验法则

  1. 管理工作是与人打交道,其任务是使员工能够协同工作、扬长避短。 不要把时间都耗在繁琐的日常事务中。(做"真正的"工作。)
  2. 画一张图就能搞定问题,如果你不能用图描述一个问题,那你很可能没有理解这个问题。 大声赞美,轻声责备。
  3. 没有记录的会议,相当于没有开过的会议。 不要写没人打算运行的代码,产出价值用“代码”乘以“代码执行的频率”来衡量。
  4. 每个程序员的内心动力都不一样,了解每个程序员的动机是高效管理的关键。
  5. 程序员的问题在于,你永远搞不清程序员在做什么,而等你发现时已经晚了。 一对一是最有效的管理工具。
  6. 写文档就像过性生活:如果做得不好,那也总比没有好。 员工离开公司,看五个因素:环境、平台、产品、领导、薪酬。
  7. 小团队比大团队更高效…完成同样大小的项目,5~7人的团队所花费的时间最短。
  8. Brooks定律:向进度落后的项目中增加人手,只会使进度更加落后。
  9. 侯世达(Hofstadter)定律:做事所花费的时间总是比你预期的要长,即使你的预期中考虑了侯世达定律。
  10. 大多数优秀的程序员从事编程不是为了工资,也不是为了受公众崇拜,而是因为编程很有趣。——Linus Torvalds

版权声明
本文为[东皇巴顿]所创,转载请带上原文链接,感谢
https://my.oschina.net/blacklands/blog/4711469