程序员的修炼之道:从小工到专家(一)
阅读进度:
第一章 注重实效的哲学(1~6)
第二章 注重实效的途径(7~8)
第一次阅读这本书,说句老实话,由于水平有限,编 0程的经验又不足,觉得读起来有点晦涩,不太习惯这种文章的描述风格,没有读多少,下面就把阅读之后有所感的的部分摘录下来...
序:
注重实效的程序员的特征
<1>早期的采纳者/快速的改编者;
<2>好奇;
<3>批判的思考者;
<4>有现实感;
<5>多才多艺;
<6>关心你的技艺;
<7>思考你的工作;
<8>跃出直接的问题去思考,总是设法把问题放在更大的语境中,总是设法注意更大的图景;
第一章 注重实效的哲学
(1)我的源码让猫给吃了
<1.1>负责。提供各种选择,不要找蹩脚的借口;
(2)软件的熵
<2.1>不要容忍破玻璃。杜绝软件中的无序增长("软件腐烂");
(3)石头汤与煮青蛙
<3.1>做变化的催化剂;
人们发现,参与正在发生的成功要更容易。让他们瞥见未来,你就能让他们聚集在你的周围
<3.2>记住大图景;
不要像青蛙一样,要留意大图景,要持续不断的观察周围发生的事情,而不只是你自己在做的事情
(4)足够好的软件
<4.1>欲求更好,常把好事变糟;
现实世界不会让我们制作出十分完美的产品,特别是不会有无错的软件。时间、技术和急躁都在合谋反对我们
<4.2>让你的用户参与权衡;
<4.3>使质量成为需求问题;
你所制作的系统的范围和质量应该作为系统需求的一部分规定下来
<4.4>知道何时止步;
(5)你的知识资产
<5.1>知识上的投资总能得到最好的回报;
<5.2>经营你的资产:
<5.2.1>定期投资
你必须定期为你的知识资产投资,即使投资量很小,习惯自身也和总量一样重要
<5.2.2>多元化
作为底线,你需要知道 你目前所用的特定技术的各种特性。你掌握的技术越多,你就越能更好的进行调整,赶上变化
<5.2.3>管理风险
高风险,可能高回报,低风险,低回报;不要把你所有的技术鸡蛋放在一个篮子里;
<5.2.4>低买高卖
在新兴技术流行之前学习它,可能就和找到被低估的股票一样困难,但所得到的就和那样的股票带来的受益一样
<5.2.5>重新评估和平衡
这是一个非常动荡的行业,你一个月之前所用的知识可能迅速过时,你好久之前研究过的东东,可能需要被重新启用,需要灵活学习与温故
<5.3>定期为你的知识资产投资
每年至少学习一门新语言、每季度阅读一本技术书籍、也要阅读非技术书籍、上课、参加本地用户组织、试验不同的环境、跟上潮流、上网
<5.4>学习机会
各种学习资源,包括请教大神
<5.5>批判的思考
批判地思考你读到的和听到的,你需要确保你的资产中的知识是准确的,并且没有受到供应商或媒体炒作的影响
(6)交流
<6.1>知道你要说什么
规划你想要说的东西,写出大纲。然后问你自己:"这是否讲清了我要说的所有内容?",提炼它,直到确实如此为止
<6.2>了解你的听众
只有当你是在传达信息时,你才是在交流。为此,你需要了解你的听众的需要、兴趣、能力
<6.3>选择时机
<6.4>选择风格
调整你的交流风格,让其适应你的听众
<6.5>让文档美观
<6.6>让听众参与
如果可能,让你的读者参与文档的早期草稿制作,获取他们的反馈,并汲取他们的智慧,你将建立良好的工作关系,很可能制作出更好的文档
<6.7>做倾听者
<6.8>回复他人
你说什么和你怎么说同样重要
第二章 注重实效的途径
(7)重复的危害
<7.1>DRY:Don't Repeat Youself!
我们觉得,可靠地开发软件,并让我们的开发更易于理解和维护的唯一途径,是遵循我们称之为DRY的原则:
系统中的每一项知识都必须具有单一、无歧义、权威的表示
<7.2>重复是怎样发生的?
强加的重复、无意的重复、无耐性的重复、开发者之间的重复
(8)正交性
<8.1>什么是正交性?
在计算机技术中,该技术用于表示某种不依赖性或是解耦性。
<8.2>正交的好处
我们想要设计自足(self-contained)的组件:独立,具有单一、良好定义的目的(可称之为"内聚")。如果组件相互隔离,你就知道你能够改变其中之一,而不用担心其余组件。只要你不改变组件的外部接口,你就可以放心,你不会造成波及整个系统的问题。
<8.2.1>提高生产率
<8.2.1.1>改动得以局部化,较少开发和测试时间;
<8.2.1.2>正交的途径还能够促进复用,如果组件具有明确而具体、良好定义的责任,就可以用其最初的实现者未曾想象过的方式,把它们与新组件组合在一起;
<8.2.1.3>如果你对正交的组件进行组合,生产率会有微妙的提高,假定某组件做M件事情,而另一组件做N件事情,如果它们正交,把它们组合在一起,结果就能做M*N件事情;
<8.2.2>降低风险
<8.2.2.1>有问题的代码区域被隔离开来
<8.2.2.2>所得系统更加健壮
<8.2.2.3>可能得到更好的测试
<8.2.2.4>不会与特定的供应商、产品或是平台紧绑在一起
<8.3>从编码的角度看正交(书中还从其他的方面解读了"正交",目前本人只要求自己从编码角度去理解)
<8.3.1>让你的代码保持解耦
<8.3.2>避免使用全局数据
<8.3.3>避免编写相似的函数