程序员修炼之道阅读记录

| 分类 reading  | 标签 technique 

这本书英文书名是《The Pragmatic Programmer》,翻译过来其实是"注重实效的程序员",讲的主要是程序员在做项目时的一些原则和技巧,以实用为主。

1 关心你的技艺

        Care About Your Craft.  
        编程是一门手艺活,其实和木匠、泥瓦匠等是一样的,不断提高自己的技艺。  

2 思考!你的工作

        Think!About Your Work.
        不断的批评和评估自己的工作。

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

        Provide Options,Don't Make Lame Excuses.
        提供各种解决方案,而不是寻找各种借口。不要说事情做不到,而是要说能做什么。

4 不要容忍破窗户

        Don't Live With Broken Windows
        参见“破窗理论”,“墙倒众人推,破鼓众人捶”。当看到糟糕的涉及、错误的决策和糟糕的代码时,尝试修正。

5 做变化的催化剂

        Be A Catalyst Change
        你不能强迫人们改变。相反,要向他们展示未来可能会怎样,并帮助他们参与对未来的创造。这一点对于生活也是很有价值的,有时候需要先做出一点东西来,别人会更容易的参与进来。

6 记住大图景

        Remember The Big Picture
        不要太过于专注于细节,始终保持对整体的把握。

7 使质量成为需求问题

        Make Quality A Requirements Issue
        让你的用户参与确定项目真正的质量需求。

8 定期为你的知识资产投资

        Invest Regularly in Your Knowledge Portfolio
        让学习成为习惯。让学习成为乐趣。

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

        Critically Analyze What You Read and Hear
        对信息进行理性分析,要有自己的建立在一定理性分析基础上的主见,而不是被他人左右。

10 你说什么和你怎么说同样重要

         It's Both What You Say and the Way You say it
         如果你不能有效的向别人传达你的了不起的想法,那这些想法就毫无用户。

11 不要重复自己

         Don't Repeat Yourself
         DRY-系统中的每一项知识都必须单一、无歧义、权威的表示。重复的工作交给程序。

12 让复用变得容易

            Make It Easy to Reuse
            如果复用很容易,人们就会去复用,创造一个支持复用的环境

13 消除无关事物之间的影响

         Eliminate Effects Between Unrelated Things
         设计自足、独立、并具有单一、良好定义的目的的组件。

14 不存在最终决策

         There Ara No Final Decisions
         没有决策是浇铸在石头上的,为变化做好准备,考虑扩展性。

15 用曳光弹找到目标

         Use Tracer Bullets to Find the Target
         曳光弹能通过试验各种事物并检查他们离目标有多远来让你追踪目标。

16 为了学习而制作原型

         Prototype to Learn
         原型制作是一种学习经验。其价值不在于所产生的代码,而在于所学到的经验教训。

17 靠近问题领域编程

         Program Close to the Problem domain
         用你的用户的语言进行设计和编码。

18 估算,以避免发生意外

         Estimate to Avoid Surprise
         在着手之前先进行估算,你将提前发现潜在的问题

19 通过代码对进度表进行迭代

         Iterate Schedule with the Code
         用你在进行实现时获得的经验提炼项目的时间标度

20 用纯文本保存知识

         Keep Knowledge in Plain Text
         纯文本不会过时。它能够帮助你有效利用你的工作,并简化调试和测试。

21 利用命令Shell的力量

         Use the Power of Command Shells
         当图形用户界面无能为力时使用Shell。

22 用好一种编辑器

         Use a Single Editor Well
         编辑器应该是你的手的延伸;确保你的编辑器是可配置、可扩展和可编程的。

23 总是使用源码控制

         Always Use Source Code Control
         源码控制是你的工作的时间机器-你能够回到过去

24 要修正问题,而不是发出指责

         Fix the Problem,Not the Blame
         bug是谁的错并不是真的很有关系,它仍然需要修正。做解决问题的人。

25 不要恐慌

         Don't Panic When Debugging
         深呼吸,将精力放在bug上面

26 "Select"没有问题

            "Select" Isn't Broken.
            OS、编译器中很少发现Bug,bug很可能在应用中

27 不要假定,要证明

            Don't Assume It,Prove It
            在实际环境中,使用真正的数据和边界条件,证明你的假定。

28 学习一种文本操纵语言

         Learn a Text Manipulation Language
         学习用一种处理文本的语言(比如python)

29 编写能编写代码的代码

         Write Code That Writes Code
         代码生成器能提高生产效率,并有助于避免重复。

30 你不可能写出完美的软件

            You Can't Write Perfect Software
            软件不可能完美,放弃完美,持续进步

31 通过合约进行设计

         Design with Contracts
         使用合约建立文档,严格按照合约完成代码

32 早崩溃

            Crash Early
            死程序造成的危害通常比有问题的程序要小得多

33 用断言避免不可能发生的事情

         Use Assertions to Prevent the Impossible
            用断言来验证各种假定

34 将异常用于异常的问题

         Use Exceptions for Exceptional Problems
         将异常保留给异常的事物

35 有始有终

            Finish what you start
            只要可能,分配某资源的例城也应该负责接触其分配

36 使模块之间的耦合减至最少

            Minimize Coupling Between Modules
            避免耦合 低耦合

37 要配置 不要集成

         Configure,Don't Integrate
         使用配置,而不是集成或工程或代码

38 将抽象放进代码,细节放进元数据

         Put Abstractions in Code,Details in Metadata
         为一般情况编程,将细节放在被编译的代码库之外

39 分析工作流,以改善并发性

         Analyze Workflow to Improve Concurrency
         利用你的用户的工作流的并发性

40 利用服务进行设计

         Design Using Services
         根据服务-独立的、在良好定义、一致接口之后的并发对象-进行设计。

41 总是为并发进行设计

            Always Design for Concurrency
            并发很重要,设计时考虑并发

42 使视图与模型分离

         Separate Views from Models
         根据视图和模型设计应用,从而以低廉的代码获取灵活性

43 用黑板协调工作流

            Use Blackboards to Coordinate Workflow
            用黑板协调完全不同的事实和因素,同时又使各参与方保持独立和距离

44 不要靠巧合编程

            Don't Program by Coincidence
            依靠可靠的事物。注意偶发的复杂性,不要把幸运的巧合与有目的的计划混为一谈。

45 估计你的算法的阶

            Estimate the Order of Your algorithms
            估计算法的运行时间

46 测试你的估算

            Test your Estimates
            实际测试速度

47 早重构,常重构

            Refactor early Refactor Often
            就和你会在花园里除草、并重新布置一样,在需要时对代码进行重写、重做和重新架构。要铲除问题的根源。

48 为测试而设计

            Design to Test
            在你还没有编写代码时就开始思考问题。

49 测试你的软件,否则你的用户就得测试。

         Test your Software,Or Your Users Will

50 不要使用你不理解的向导代码

         Don't use Wizard Code You Don't Understand

51 不要搜集需求-挖掘他们

            Don't gather Requirements-Dig for Them

52 与用户一同工作,像用户一样思考

            Work With a User to Think like a user

53 抽象比细节活得更长久

         Abstractions Live Longer than Details

54 使用项目词汇表

         Use a Project Glossary
         创建并维护项目中使用的专用术语

55 不要在盒子外面思考,要找到盒子

         Don't think outside the box - Find the box

56 等你准备好在开始

         Start When You are Ready
         你的一生都在积累经验。不要忽视反复出现的疑虑

57 对有些事情做胜于描述

         Some Things Are Better Done Than Described

58 不要做形式方法的奴隶

         Don't be a slave to Formal Methods
         如果你没有把某项技术放进你的开发实践和能力的语境中,不要盲目的采用

59 昂贵的工具不一定能制作出更好的设计

            Costly Tools Don't Produce Better Designs

60 围绕功能组织团队

            Organize Teams Around Functionality

61 不要使用手工流程

            Don't use manual Procedures

62 早测试,常测试,自动测试

            Test Early,Test Often,Test Automatically

63 要到通过所有测试,编码才算完成。

         Coding Ain't Done ‘Til All the Tests Run

64 通过 蓄意破坏 测试你的测试

         Use Saboteurs to Test your software

65 测试状态覆盖,而不是代码覆盖

            Test State Converage,Not Code Coverage

66 一个bug只抓一次

        Find Bugs Once

67 英语就是一种编程语言

        English is Just a Programming Language

68 把文档建在里面,不要拴在外面

         Build Documentation in,Don't  Bolt it on
         与代码分离的文档不太可能得到修正和更新

69 温和的超出用户的期望

         Gently Exceed Your User's Expectations

70 在你的作品上签名

            Sign Your Work

上一篇     下一篇