——程序员版《人性的弱点》,提升职业生涯软技能
※探讨领导力、合作、沟通、高效等团队成功关键因素※
一、天才程序员神话
1、请帮我隐藏代码
没有人喜欢受到批评,尤其是对自己未完成工作的批评。
在某种意义上,这只是人类本性的一部分——缺乏安全感。
2、天才神话
人有一种本能:发现领导者和楷模,将他们偶像化,然后试图模仿他们。在内心世界,我们都希望成为天才。
3、隐藏是有害的
如果总是独自工作,失败的风险就会增加,你也会错失成长的机会。
尽早分享想法不仅可以避免个人失误,验证想法的正确性,而且可以减少缺少你时项目完全无法进行下去的风险。
总之,独自工作一定比多人合作更具有风险。
4、团队为王
编程领域极少出现独行侠,即便真有,他们也不是在真空中完成超人创举的。
软件开发是一项团队活动。高效团队千金难求,是成功的真正关键。
5、三大基石
下面三大原则不仅可以调和人际关系,还是所有良好交互与合作的基础。
- 谦虚(Humility):你并非宇宙中心,并非无所不知,也会犯错,但愿意自我改进。
- 尊重(Respect):你要真诚关心同事,以礼相待,欣赏其能力,认可其成就。
- 信任(Trust):你要相信别人可以胜任工作并作出正确选择,愿意在合适的时候将权力交给他们。
这些原则合称为HRT。
几乎每种社交冲突的源头最终都可归结为谦虚、尊重或信任的缺失。
6、HRT实战
- 放下自我——自信和谦虚并不矛盾,只是别表现得无所不知。
- 批评与自我批评——批评要基于尊重,学会接受批评。
- 快速失败和迭代——失败是一个选项。从错误中学习的关键是将失败记录在案。
- 留出学习的时间——跨出自己的舒适区域,接受未知的挑战。
- 学会忍耐——充满耐心。
- 接受改变——越愿意接受改变,就越能引起改变。越是脆弱的人,越表现得坚强。
7、下一步
掌握了“与他们合作的艺术”,你必须开始检视和反省自己的行为。
重要的改变应当从自身开始,由内及外。
二、打造团队文化
团队文化种类多样,反映出不同的价值观和任务优先级。
1、什么是团队文化
团队文化不仅仅是团队成员完成工作、编写代码或彼此相处的方式,而且是成员共享的经验、价值观和目标。
2、团队文化的重要性
如果团队成员不重视团队文化,不仅难以培养很强的团队认同感和集体荣誉感,而且新成员很容易给团队文化带来不好的影响。
“强大的文化”能够接受提升自己的改变,而抵御带来伤害的巨变。
好的团队文化可以帮助你集中精力,提高效率,让你充满力量,造就一个更快乐的团队。
团队文化的有趣之处在于,如果定义明确,团队文化就会自己选择成员。
3、团队文化与人
在软件行业中,制造产品的工程师需要进行大量的创新思维。要得到高质量的产品,就需要优秀的工程师。想让优秀的工程师做出杰出的工作并且留下不走,就需要为他们创造良好的团队文化,让他们放心地分享想法,并有参与决策过程的权利。
4、成功团队文化的沟通模式
沟通的通用准则:人少时使用同步沟通(如会议与电话会议),人多时使用异步沟通(如邮件、问题跟踪系统、文档注释)。
5、高层同步
在最高层次上,团队需要保持统一的共同目标,在沟通中遵循最佳实践。
- 任务说明书:迫使团队面对意见分歧,就产品方向达成共识。确保事情沿既定方向发展。
- 高效会议:避免不必要的例会。主持会议的五条简单准则
(1)只邀请必需人员参加
(2)草拟议程并在会议开始前尽早发出
(3)完成会议目标即可散会
(4)保持会议按议程进行
(5)尽量将会议安排在中断点附近(如午餐或下班时间)
- 分布式团队:视频交谈。不要低估了面对面谈话的信息量。
- 设计文档:不仅是未来产品的概要蓝图,而且也是与大团队沟通的低成本方式,可以传达你的设计目标及实现方法。
6、日常讨论
面谈是最好的方式。
- 邮件列表:约定邮件讨论的规则——保持文明,防止“聒噪的少数人”扰乱秩序。
- 在线聊天:群聊、一对一。
7、使用问题跟踪系统
注意维护,设置优先级,避免漏掉重要的问题而修复无关紧要的缺陷。
8、工程中的沟通
- 代码注释:凡事不过,制定团队注释风格。
- 署名:强烈反对源代码文件中宣示所有权的署名。
- 每次提交必有审阅:保证风格、质量。严格的审阅不仅可以提高代码库质量,而且可以极大地提升项目成员对代码质量的集体荣誉感。
- 测试与发布流程:测试驱动开发、回归测试,提升自动化测试能力。
9、一切为了产品
强大、有效的团队文件,花时间注意团队的沟通,创造出的团队会将更多的时间花在编写和提交产品上,而花费更少的时间争论提交什么样的产品。
三、群龙不可无首
一个团队没有领导者就无法运作。透彻地理解领导方式是影响工作方向的关键技能。
1、自然界里无真空
如果没有人领航,项目团队就是一群只会等待事情发生而无所事事的极客而已。
2、经理是个贬义词
新时代的“经理”是“领导者”。
领导唯一需要担心的是,所有事。当经理可以扩展自己,而且说不定自己特别善于为团队提供所需要的指导、帮助和氛围。
3、服务型领导
为团队搭桥铺路,在需要时给出建议,而且依旧愿意从事具体工作。
服务型领导者唯一需要管理的是团队的技术和人际关系的健康。
4、反模式
- 雇用软弱者
- 忽视表现不佳者
- 忽视人际关系
- 与所有人为友
- 放宽招人标准
- 把团队当孩子管
5、领导模式
- 放下自尊:信任团队、你不可能做好所有事也不能解决所有问题、犯错时道歉。
- 成为禅意大师:在任何时候保持镇定。你是齿轮组中最大的那个,你的举动会被所有人关注。
- 成为催化剂:促进团队达成共识、很多时候认识正确的人比知道正确的答案更有用。
- 失败是一个选项:失败并不可怕,但要让团队整体承担失败,并从失败中学习经验。
- 成为老师和导师:三个条件,1熟悉团队的流程和系统,2能够向别人清楚地解释事情,3能够判断新人需要多少帮助。
- 设定清晰的目标:让团队往同样的方向使劲,可以极大提高团队的效率。
- 以诚相待:真诚。
- 关注幸福度:确保每个团队成员都能保持高效、快乐。很大程度上关注他们的职业发展。
- 其它提示和技巧:放权,但也要做具体工作。寻找接替自己的人。知道何时出手。给团队一方净土。保护团队。肯定团队的成就。同意具有冒险精神的成员尝试容易恢复的事情。
6、人同植物
发现谁需要什么,然后满足他们的需求。
7、内在激励与外在激励
使人们最幸福最高效的方法不是外部激励(例如,给他们很多钱),而是增强他们的内在激励:自主性、卓越性和目标。
8、总结
花点时间审视一下所在的团队,看看团队主管用了哪些模式和反模式导致团队的成功(或失败),你会对团队运作的关键获得更实际的理解。
四、应对有害之人
创新工作中最困难的部分是人。
1、定义“有害”
暂且指代行为不佳的人。
2、巩固团队
- 发布任务说明书,明确目标和非目标。
- 为邮件讨论建立适当的礼节规范。
- 记录所有历史:代码历史、设计决策历史、重要缺陷修复历史、过往错误历史。
- 有效合作。使用版本控制软件,防止知识集中在少数人手中。
- 明确缺陷修复、测试、软件发布的政策和流程。
- 降低新成员的磨合障碍。
- 依赖基于共识的决策方法,但也要指定备用流程,以解决无法达成共识的冲突。
3、发现威胁
最可能受到有害之人影响的是团队的注意力和专注力。
- 不尊重他人时间
- 自大
- 颐指气使
- 沟通幼稚或混乱
- 疑神疑鬼
- 完美主义
4、去除毒素
创造一种友善的人对抗刻薄的人的派系之争是不利于社区健康的。注意力应该集中在如何消除行为,而不是如何驱逐人。
- 引导完美主义者的能量:将完美主义者的注意力集中到另一个需要解决的问题。
- 不要喂食能量生物:对挑衅不予理会。
- 不要过于情绪化:时刻保持冷静。
- 在愤怒中寻找事实:思考他说的是否言之有理?
- 以德报怨:~
- 适时放手:有时候,不管你如何努力,最终还是需要选择放下,继续前行。
- 放眼未来:就长远来看,确定相信项目将收益吗?最终冲突会以有益的方式解决吗?
5、总结
不要将愚蠢归结为恶意。
五、组织操控的艺术
1、好公司、坏公司,以及策略
2、理想情况
理想的工作体验:
- 完成本职工作后寻求更多职责。
- 承担风险而且不惧失败。
- 表现得像成年人一样。
- 对不确定的东西提出疑问。
3、通常情况
- 不称职的经理
- 办公室政治家
- 管理不当的组织
4、操控组织
- 取得原谅比获取许可更容易
- 另辟蹊径——想方法使你的想法被底层接受
- 学会向上管理
- 运气和人情经济
- 政治银行账户
- 晋升到一个安全职位
- 寻找有影响力的朋友
- 如何写信找忙碌的高管帮忙——三条要点和一个行为召唤
5、备用计划:撤退
跑路——做正确的事,等着被炒
6、希望尚存
首要目标应当是做出所需的改变,使自己开心,完成工作目标。
六、用户也是人
良好的软件需要很多其他人来使用并对其感到满意。要创造优秀的产品,你还需要积极地与用户合作,如果疏于此道,你所得到的不过是一个没人使用的漂亮软件。
1、管理公众认知
你听说过市场营销这个词吗?你需要营销策略,才能让自己的软件进入市场。
- 注意第一印象
- 少承诺多提交
- 与工业分析师谦恭合作
2、你的软件可用性如何
除非你开发的是软件工具,否则工程师不会是软件的客户。关注用户,其它百年都将水到渠成。
关注用户的一些重要方法
- 选择听众
- 考虑进入的壁垒
- 衡量使用数,而非用户数
3、设计很重要
良好的设计的很大一部分是以用户为先,隐藏复杂性,提高产品速度,最重要的是,不要一味求全。
- 以用户为先
- 速度不容忽视
- 切勿求全
- 隐藏复杂性
4、管理与用户的关系
不管你是否相信,很多用户希望与产品的公司或团队建立关系。程序员常犯的错误之一就是交付软件之后就对用户反馈置之不理了。用户啥也不懂???
- 尊重用户的智商
- 耐心
- 创造信任和愉快
5、记住用户
- 市场营销:了解人们对软件的看法;这决定了他们会不会去尝试。
- 产品设计:如果软件做不到容易尝试、速度快、友好,而且用户面广,用户就会流失。
- 客户服务:主动与用户建立长期的良好关系能影响软件的演化和用户保持率。
后记
如果你读完本书只记得一点内容,那么请记住HRT原则:谦虚、尊重、信任。
推荐书目
《安静:内向性格的竞争力》,作者Susan Cain
《编写可读代码的艺术》,作者Dustin Boswell、Trevor Foucher
《重来》,作者Jason Fried、David Heinemeier Hansson
《怪诞行为学》,作者Dan Ariely
《硅谷最受欢迎的情商课》,作者Chade-Meng Tan
《你就是极客!软件开发人员生存指南》,作者Michael Lopp
《人件(第2版)》,作者Tom DeMarco
《人月神话(第2版)》,作者Frederick P.Brooks
《软件开发者路线图》,作者Dave Hoover、Adewale Oshineye
《三双鞋:美捷步总裁谢家华自述》,作者Tony Hsieh
《无从选择》,作者Barry Schwartz
《拥抱变革》,作者Mary Lynn Manns