1、我的源码让猫给吃了

为你自己和你的行为负责的观念是注重实效的哲学的一块基石。注重实效的程序员对自己的职业生涯负责,不害怕承认无知或错误,诚实、坦率、尽可能职业地处理出错的事情。

责任是主动担负的。在承诺确保某件事正确完成前,除了尽你所能之外,必须分析风险是否超出你的控制;无法完成或风险太大的事情,有权不为之负责。

在你确定要为某个结果负责时,应该切实负起责任,合理的选择供应商、编程语言、管理部门或者同事,预先制定应急计划,备份源代码。

提供各种选择,不要找蹩脚的借口

当你犯错误或者判断失误时,诚实的承认它,并设法给出各种选择,而不是找借口。在你大声说出来前,在你的脑海里把谈话预演一遍,设法把蹩脚的借口清除出去,提供挽回局面的建议,不要害怕提出要求、承认你需要帮助。

2、软件的熵

熵是一个来自物理学的概念,指的是某个系统中的无序的总量。当软件中的无序增长时,程序员们称之为“软件腐烂”。有许多引入可以促生软件腐烂,其中最重要的似乎是开发项目时的心理或文化。

不要容忍破窗户

不要留着“破窗户”(低劣的设计、错误决策或是糟糕的代码)不修,而应该发现一个修一个,对于确实没有足够时间进行适当的修理,则可以将出问题的代码加上注释,或标注“未实现”,采取行动防止进一步破坏。

整洁、运行良好的系统,一旦窗户开始破裂,将相当迅速的恶化,置之不理会更快的加速腐烂的进程。

如果你在一个有好些破窗户的项目里工作,就会很容易产生这些代码其余部分也是垃圾的想法,并直接照着垃圾的代码做。如果你发现你所在的团队和项目的代码十分漂亮,编写整洁、设计良好、并且很优雅,你就很可能会格外注意不把它弄脏。

3、石头汤与煮青蛙

做变化的催化剂

在有些情况下,你也许确切地知道需要做什么,以及怎样去做。整个系统就在你面前,你知道它是对。但请求许可去处理整个事情,你会遇到拖延和冷漠。事情会变得复杂,每个人都会护卫他们自己的资源。

这正是拿出石头的时候。设计出你可以合理要求的东西,好好开发它,一旦完成,就拿给大家看,让他们大吃一惊。然后说:“要是我们能增加……可能会更好”,假装那并不重要。等着他们开始要你增加你本来就想要的功能。

人们发现,参与正在发生的成功要更容易。让他们瞥见未来,就能让他们聚集在你周围。

记住大图景

从另一方面,石头汤的故事也是关于温和而渐进的欺骗的故事。过于集中注意力,项目慢慢地、不可改变地完全失去控制。常常是小事情的积累破坏了士气和团队。

破窗户理论是人们失去与熵战斗的意愿,温水煮青蛙是青蛙没有注意到变化。要持续不断地观察周围发生的事情,而不只是你自己在做的事情,留心大图景。

4、足够好的软件

你可以训练自己,编写出足够好的软件:对你的用户、对未来的维护者、对你自己内心的安宁来说足够好。

使质量成为需求问题

市场人员有需要信守的承诺,最终用户也许已基于交付时间表制定了各种计划,公司有现金流方面的约束。无视这些用户的需求,而是一味地给程序添加新特性、一次次地润饰代码,不是有职业素养的做法。你所制作的系统的范围和质量应该作为系统需求的一部分规定下来。

许多用户宁愿在今天用上有一些“毛边”的软件,也不愿等一年后的多媒体版本。用户及早使用的反馈常常会把你引向更好的最终解决方案。

如果你不懂得应何时止步,所有的辛苦劳作就会遭到破坏。不要因为过度修饰和过于求精而损毁完好的程序。继续前进,让你的代码凭着自己的质量战力一会儿,它也许不完美,但不用担心:它不可能完美。

5、你的知识资产

你的知识和经验是你最重要的职业财富。但遗憾的是,它们是有时效的资产,随着新技术、语言及环境的出现,你的知识会变得过时。

管理知识资产与管理金融资产非常相似:

  • 严肃的投资者定期投资–作为习惯

    定期为in的知识资产投资,即使投资量很小,习惯自身也和总量一样重要。

  • 多元化是长期成功的关键

    你知道的不同的事情越多,你就越有价值。作为底线,你需要知道你目前所用的特定技术的各种特性,但不要就此止步。计算机技术变化很快,掌握的技术越多,越能更好的进行调整。

  • 聪明的投资者在保守的投资和高风险、高回报的投资之间平衡他们的资产

    高风险,可能有高回报,低风险,低回报。不应该太保守,而错过可能的机会。不要把你所有的技术鸡蛋放在一个篮子里。

  • 投资者设法低卖高卖,以获得最大回报

    在新技术流行前学习它可能和找到被低估的股票一样困难,但所得到的收益就和那样的股票带来的收益一样。

  • 应周期性地重新评估和平衡资产

    这是一个非常动荡的行业,你上个月开始研究的热门技术,现在也许已像石头一样冰冷。也许你需要重温你又一阵子没有使用的数据库技术,又或许,如果你之前试用过另一种语言,你就会更有可能获得那个新职位。

定期为你的知识资产投资

  • 每年至少学习一种新语言
  • 每季度阅读一本技术书籍
  • 也要阅读非技术书籍
  • 上课
  • 参加本地用户组织
  • 试验不同的环境
  • 跟上潮流
  • 上网

学习的机会

对于未知问题,把找到答案视为对你个人的挑战:请教古鲁、上网搜索、去图书馆。如果自己找不到答案,就去找出能找到答案的人,不要把问题搁在那里。

所有阅读和研究都需要本来就已经很短缺的时间,因此需要预先规划,让自己在空闲时总有东西可读。

批判地分析你读到的和听到的

你需要确保你的资产中的知识是准确的,并且没有收到供应商或媒体炒作的影响。

与古鲁打交道的礼节与教养

  • 确切地知道你想要问什么
  • 小心而得体地组织你的问题
  • 组织好问题后,停下来,再找找答案
  • 决定你是像公开提问还是私下提问
  • 坐回椅子上,耐心等候

6、交流

问题不只是你有什么,还要看你怎样包装它。除非你能够与他人交流。否则就算你拥有最好的主意、最漂亮的代码或是最注重实效的想法,最终也会毫无结果。

作为开发者,需要在很多层面进行交流,有许多时间花在开会、倾听和交谈上:与最终用户一起工作以了解他们的需要;编写代码,与机器交流我们的意图;把想法变成留给以后开发者的文档;撰写提案与备忘录来申请自由、证明正当性、报告状态、提出各种新方法;在团队工作中宣扬我们的注意、修正现有的做法、提出新做法。

知道你想要说什么

在交流中,最困难的部分也许是确切地弄清楚你想要说什么。规划你想要说的东西,写出大纲,然后不断审视、提炼它,知道确实说清楚所有内容为止。

当你面临重要会议、或是与重要客户通电话时,简略记下你想要交流的想法,并准备好几种把它们讲清楚的策略。

了解你的听众

需要了解你的听众的需要、兴趣、能力。要在脑海里形成一幅明确的关于你的听众的画面,根据听众的不同,准备适当的内容。

选择时机

弄清楚交流对象的“轻重缓急”,了解你的听众需要听到什么。

选择风格

调整你的交流风格,让其适应你的听众。如果有疑问,就询问对方。但是,你也是交流事务的一方,在交流方式的选择上,可以有你自己的判断。

让文档美观

你的主意很重要,它们应该以明确的方式传递给你的听众。

让听众参与

与制作文档的过程相比,制作出的文档最后并没有那么重要。如果可能,让你的读者参与文档的早期草稿的制作,获得他们的反馈,汲取他们的智慧。

做倾听者

如果你想要大家听你说话,那么你必须听他们说话。鼓励大家通过提问来交流,或是让他们总结你告诉他们的东西,把会议变成对话。

回复他人

当别人给你发送电子邮件或备忘录、请你提供信息,或是采取某种行动时,不要忘记回复。

你说什么和你做什么同样重要

更多有关《程序员修炼之道》的读书笔记,请关注 :
http://tabalt.net/blog/the-pragmatic-programmer-reading-notes/

本文链接:http://tabalt.net/blog/tpp-a-pragmatic-philosophy/,转载请注明。