本书是Tock的创始人Brian Fitzpatrick
和SVN开发者之一的Ben Collins-Sussman
共同写的。下面是我记录的一些书中的重点:
天才程序神话
人们总是缺乏安全感,就像程序员担心别人看到并评论自己未完成的工作,所以好多程序员在工作未完成的时候不会频繁地提交代码。
人有一种本能:发现领导者和楷模,将他们偶像化,然后试图模仿他们。我们都需要崇拜英雄以激励自己,编程届也有自己的英雄。“技术名人”现象几乎演变成了神话。每个程序员都希望像林纳斯那么可以凭一己之力完成一个操作系统。但是一个人是不可能完成所有的事情,就比如林纳斯,他并没有完成Linux系统中所有代码的编写(他编写的是一个类Unix的概念内核原型,其实这已经很牛逼了),而要完成整个Linux系统,更多的是需要整个团队或者整个社区的努力。
在内心深处,我们都希望成为天才。极客的最终幻想就是获得令人称赞的新创意。在山洞里闭关几周甚至数月,努力完美实现自己的创意,然后横空出世,令所有人惊叹不已。同行叹服于你的聪明才智,大众排队使用你的软件,名利随之而来。但是,这种天才神话往往是不可能发生的,所以你该醒醒了。
天才神话一方面由于缺乏安全感而导致的,另一方面是担心自己的想法被别人知道(其实没必要,或许你以为独特的想法早就被别人想到了)。
单独工作一定比多人合作更具有风险。编程领域极少出现独行侠,即便真有,他们也不是在真空中完成超人创举的。他们的惊世之作几乎都是灵感的火花和优秀团队创作出来的结果。因为软件开发是一项团队活动。
优秀团队的三大基石:谦虚(Humility)、尊重(Respect)、信任(Trust)。以下简称HRT。
HRT需要每个成员做的事:放下自我、批评与自我批评、快速失败和迭代、留出学习的时间、学会忍耐、接受改变。
打造团队文化
团队文化不仅仅是团队成员完成工作、编写代码或彼此相处的方式,而且是成员共享的经验、价值观和目标。
如果团队成员不重视团队文化,不仅难以培养很强大的团队认同感和对工作的集体荣誉感,而且新成员很容易给团队文化带来不好的影响。
团队文化不是团队领导者负责维护的,而是每个成员参与的结果。
人少时使用同步沟通(会议和电话等),人多时使用异步沟通(邮件、问题跟踪系统等)。
高层同步方式:任务说明书、高效会议、设计文档。
主持会议的5条准则:
- 只邀请必需人员参加;
- 草拟议程并在会议开始前尽早发出;
- 完成会议目标即可散会;
- 保持会议按议程进行;
- 尽量将会议安排在中断点附近(如午餐或下班的时间)。
日常讨论方式:邮件、在线聊天、面对面沟通。
工作中的沟通:代码注释、署名、每次提交必有审阅、测试与发布流程。
群龙不可无首
项目和船一样,如果没有人领航,项目团队就是一群只会等待事情发生而无所事事的极客而已。
公司不应该强制员工的职业发展进入管理层。如果一个工程师能写出很好的代码,根本无意管理别人或领导团队,那么强制他担任管理或技术主管职位会使你失去一位优秀的工程师,换来一位差劲的经理(本书中的经理特指领导者)。
领导者能做的最重要的事就是服务团队,就像管家照顾家人的健康和福利一样。服务型领导者为团队搭桥铺路,在需要时给出建议,而且依旧愿意从事具体工作。
领导者不好的做法:雇佣软弱者、忽视表现不佳者、忽视人际关系、与所有人为友(要保持自己的权威)、放宽招人标准、把团队当孩子管(没必要什么都管)。
领导者好的做法:放下自尊、成为禅意大师、成为团队催化剂、成员失败也没关系、成为老师或导师、设定清晰的目标、关注幸福度、要有自己的工作、寻找代替自己的人、给团队一方净土、保护团队、肯定团队的成就、激励团队。
应对有害的人
不要将团队当作一个力图“驱除恶人”的精英兄弟会,而是要创造一种拒绝容忍特定负面行为的团队文化,也就是说需要去除的是行为而不是特定的人。
常见的有害行为:不尊重他人的时间、自大、颐指气使、沟通幼稚或混乱、疑神疑鬼、完美主义。
如何处理这些有害的行为:对完美主义者可以换个话题、对有意激怒你的人保持沉默、不要过于情绪化、在愤怒中寻找事实、以德报怨、适时放手、放眼未来。
组织操作的艺术
理想的工作体验:完成本职工作后寻求更多的职责、承担风险且不惧失败、表现的像成年人一样、对不确定的东西提出疑问、及时与经理沟通。
通常情况:经理不称职(比如经理害怕失败、不信赖员工、藏匿信息、遇到失败归结于员工身上、获得成功自己独享等),办公室政治家(建议尽量避开),管理不当的组织。
组织操作的艺术:取得原谅比获取许可更容易、另辟蹊径、学会向上管理、帮助他人(或许不会立即带来好处,但有可能多年以后他会帮助你)、晋升到一个安全的职位、寻找有营销力的朋友。
当有机会纠正错误的时候,身居高位的领导往往很乐意去做,繁忙的领导也是如此。
如果的确无能为力,那就不要耗着,走为上策。但是,不是说如果现在的工作干得不开心就应该更新简历立马走人。相反,你的首要目标应当是作出所需的改变,使自己开心,完成目标。
用户也是人
要创造优秀的产品,需要积极地与用户合作。
如果创造更好的产品:
- 市场营销:了解人们对软件的看法;着决定了他们会不会愿意尝试。
- 产品设计:如果软件做不到容易尝试、速度快、又好而且用户面广,用户就会流失。
- 客户服务:主动与用户建立长期的良好关系能影响软件的演化和用户保持率。