《程序员修炼之道:从小工到专家》阅读笔记2
接着上回的笔记,接下来就是下面6到13节的阅读感受和笔记
第六节:交流
1、知道你想要说什么
当我们面临会议,重要通话,或者只是撰写技术文档,问下自己你要表达的中心想法是什么,围绕这一点进行展开。
2、了解你的听众
比如你要做一场分享,你可以按照 WISDOM 的形式思考这几个问题:
- 你想让他们学到什么
- 他们对你讲的什么内容感兴趣
- 他们有多富有经验
- 他们需要多少细节
- 你想要谁拥有这些信息
- 你如何促使他们听你说话
3、选择风格
传达一个消息,可以是正式的邮件,黑板上的绘图,口头描述,及时消息,选一个适合你的目的的方式。
4、让文档美观
技术文档不光要注意内容也要注意形式,使用 LaTeX 或者 Markdown 进行排版。
5、让听众参与
引导他们提问,以问答的形式推进分享进程。
6、回复他人
你说什么和你怎么说同样重要。尽量不要忽视别人的询问,即使回复他们稍后再联系都会更好一些。
第七节:重复的危害
1、可靠的开发软件,并让我们的开发更易于理解和维护的唯一途径,是遵循我们称之为 DRY 的原则:系统中的每一项都必须具有单一、无歧义、权威的表示。
DRY 是 Dont’t Repeat Yourself 的缩写。
2、重复的产生通常有以下种类:
强加的重复。开发者觉得他们无可选择,其实是有一些方法让我们避免重复的。
无意的重复。开发者没有意识到他们在重复信息。这个需要通过提高代码意识或者 CR 进行减少。
无耐性的重复。开发者偷懒,因为重复可以让事情更容易。有时往往会遇速则不达,在这类重复面前我们应该更慎重。
开发者之间的重复。同一个团队或者不同团队的几个人重复了同样的信息。需要一个统筹的人引导大家交流,提供一个中央区域,管理维护公共代码。
第八节:正交性
1、正交性是一个从几何学中借鉴而来的术语,如果两条直线相交成直角,他们就是正交的。这在向量中的解释是沿着一条直线移动,你投影到另一条直线上的位置不变。
在计算机中,该术语用于表示某种不相依赖性或解耦性。
2、正交的好处是它提高生产效率,各个组件不相互依赖,使得改变得以局部化,促进复用,对于正交组件进行组合也可以提高生产效率,同时它还降低了代码的风险。
3、延伸开来,项目团队的配合也应该遵循正交性。如果成员之间任务重叠较多容易让大家疑惑问题和责任的归属如何划分,这会造成配合的效率低下。
代码设计的时候也应该尽可能考虑正交性,这需要结合一些特定的设计模式以达成目的。
第九节:可撤销性
如果某个想法是你唯一的想法,再没有什么比这更危险的事情了。在设计软件时,我们需要为可能出现的某种错误做准备,比如数据库的更换,开发平台的更换。这需要我们设计之初就考虑到构建一个相对灵活的架构。
第十节:曳(ye)光弹
1、在黑暗中使用机枪射击有两种方式。
方式一:你需要知道目标准确的位置,然后考虑当时的温度、湿度、气压、风力等一系列因素,计算完位置之后进行射击。
方式二:使用曳光弹,发射时,曳光弹中的磷点燃,会照亮它经过的地方和最终位置,我们用曳光弹确认位置之后,就不需要那些繁杂的计算,直接使用机枪进行射击。
2、在黑暗中发光的代码。通常一个项目的开发是非常复杂的,如果只是一个模块一个模块的开发,我们可能直到最后才能确认项目运行情况。更好的做法是,我们要让系统尽早的跑起来,然后根据需要给它完善细节。这样会有以下好处:
- 用户能够及早看到能工作的东西。
- 开发者构建了一个能在其中工作的结构。
- 你有了可用于演示的东西。
- 你能够感觉到工作进展。
第11节:原型与便笺
1、原型是你可以在忽略细节的情况下,考虑项目走流程,主要使用场景,他们是否正确,是否可行。通常也可以用用于演示
2、原型制作是一种学习经验,其价值并不在于所产生的代码,而在于所学到的经验教训。那才是原型制作的要点所在。
3、制作原型甚至不需要编码,你可以用便笺,白板上制作原型。制作原型时你需要尝试回答以下问题:
- 主要组件的责任是否得到了良好定义?是否恰当?
- 主要组件间的协作是否得到了良好的定义?
- 耦合是否得以最小化?
- 你能否克服确认重复的潜在来源?
- 接口定义和各项约束是否可接受?
第12节 领域语言
1、计算机语言会影响你思考问题的方式,以及你看待交流的方式。
2、领域语言通常是为了简化流程,用于配置或者控制应用程序。
3、DSL 可以理解为一个小型语言,它可以是扩展自已有语言。
4、在设计一种 DSL 时,考虑可读性还是简单性时,主要权衡的应该是可扩展性和可维护性,因为通常大多数应用都会超出预期的使用期限。
第13节 估算
1、通过学习估算,并将此技能发展到事物的数量级有直觉的程度,你就能展现出一种魔法般的能力,确定他们的可行性。
2、多准确才足够准确?130 个工作日和大概 6 个月,是不同的,显然,前者表示的精度更高。我们在做估算的时候也需要选好描述估算时间的单位值。
3、估算结果怎么来呢。
首先需要确认你是否理解了需求所涉及的各个方面,这个是前置条件。
然后你需要建立系统模型,在这个系统中,把模型分拆成各个组件,然后给每个参数设置定一个值,最后根据模型计算一个时间。
4、模型应该是一个动态的,它像一个人工智能模型,你需要持续不断的训练它,才能使它真正准确起来。每次的估算都需要记录,反思估算效果,找出影响因素,加入新的影响项或者调整对应参数。
5、被要求进行估算时间时,我们可以这样回答:我等会儿回答你。然后花点时间仔细检查我们在这一节描述的步骤,你总能得到更好的结果。