Pragmatic Programmer

第一版

第二版

第一章 务实的哲学

一个务实的程序员能够透过问题表面,将问题放在更宽泛的上下文综合考虑。

了解当前项目的来龙去脉,有利于把握项目接下来的发展脉络。

要做到以上几点,要大量的知识和经验。

人生是你自己的,是你在拥有、经营和创造。

在自己的职业发展、学习教育,以及项目和每天的工作等方面对自己负责,对自己的行为负责。

团队需要能够信赖我,我也要信赖团队里的每个人。

我想承担责任意味着我对这件事很是认同,保证能够完成,并做出承诺。我还必须分析超出我能力的风险情况。

如果责任并不明确,或是风险过大,都有权不承担责任。

不要把问题归咎于其他人,多想想自己能做什么。

提供选择,别找借口。

别害怕请教别人,别害怕承认自己需要帮助。

在说“我不知道”后,一定补上“——但是我会去搞清楚”。

软件的熵——软件的混乱程度。

负面情绪容易传染。

不要放任糟糕的设计、错误的决定、低劣的代码不去修理。

First, Do No Harm.

软件开发过程中,对应急问题的处理办法,不要干扰正常代码的运转。

项目协作:知道如何“借来”资源。找到合理需求,不断完善,一旦有成果的展示给大家看,这时可以说“当然了,它可以更好,只要我们再加点……”这句话。

持续审视身边和整个领域发生的事情,不要只专注自己在做的事情。

构建够好即可的软件。

投资知识,收益最佳。

知识组合:程序员了解的有关计算过程的事实、工作的应用领域,以及所有经验。

构建知识组合:

  1. 定期学习新知识。示例,每年学习一门新语言、每月读一本技术书、读非技术书、上课、加入本地用户组/交流群、尝试不同编程环境、与时俱进
  2. 拓宽知识边界。别人的每次提问都是一个学习的机会。
  3. 不要学习即将淘汰的技术
  4. 在新技术流行以前开始学习
  5. 评估哪些技术在未来前景更好

批判性思维:不要让自己的大脑成为别人思想的跑马场。

几个和批判性思维相关的问题:

  1. 问“五个为什么”
  2. 谁从中收益
  3. 这件事发生的背景是什么
  4. 什么时候在哪里可以工作起来;当它结束后还会发生什么
  5. 为什么是这个问题

交流很重要。作为开发人员,必须在多个层次上进行交流:

  1. 开会与老板同事交流
  2. 和最终用户交流,理解他们的需求
  3. 编写代码与机器交流
  4. 编写文档,与下一个阅读文档的开发者交流
  5. 写建议和备忘录,用于资源申请、报告现状以及提出新的解决方案

了解听众,明白自己想说什么,选择时机,根据听众调节表达方式,让它看起来不错,让听众参与进来,做倾听者,回应别人,把代码和文档绑在一起。

网上交流,特别是电子邮件,同样需要注意以上几点,一些建议:

  1. 点击发送按钮前先校对一遍
  2. 检查一遍拼写,找到有可能是自动纠错没做对的地方
  3. 用简单的格式
  4. 尽可能少地引用原文
  5. 如果要引用别人的邮件,一定要注明出处,而且是内联引用(不是放在附件里)
  6. 不要在网上侮辱别人
  7. 在点发送前,检查一下收件人列表

Layout of comment panels