《程序员修炼之道:通向务实的最高境界》读书笔记Day1:软件编程哲学

站在哲学的视角,从务实的哲学和务实的方法两方面介绍了软件编程的15条原则

软件编程哲学
    务实的哲学
        1)人生是你的
            你有权选择
                人生是你的,把握住人生,让它如你所愿。
        2)    我的源码被猫吃了
            提供选择,别找借口
                不要只说做不到,解释一下都能做些什么。
        3)    软件的熵
            不要放任破窗
                只要看到不好的设计、错误的决策、糟糕的代码,就赶紧去纠正。
        4)    石头做的汤和煮熟的青蛙
            做推动变革的催化剂
                你无法强迫人们去改变,但是可以展示美好未来并帮助他们参与创造
        5)够好即可的软件
            将质量要求视为需求问题
                让用户参与对项目真实质量需求的确定
        6)知识组合
            对知识组合进行定期投资
                养成学习的习惯
            批判性分析你读到和听到的东西
                不要受供应商 媒体炒作或教条的影响,跟进自身和项目的实际情况开分析信息
        7)交流
            英语就是另一门编程语言
                写文档和编程一样要遵循DRY原则、ETC(easy to change)、自动化等
            说什么和怎么说同样重要
                如果无法有效交流,任何伟大的想法都是没有意义的
            把文档嵌进去,而不要拴在表面
                与代码隔离的文档,很难保持正确并及时更新
        8)优秀设计的精髓
            优秀设计比糟糕的设计更容易变更
                适合使用者的事务,都已经过良好设计。对代码来说这意味着必须适应变化
    务实的方法
        9)DRY邪恶的重复
            DRY不要重复自己
                系统中的每一条知识,都必须有单一切无歧义的权威陈述
            让复用变得更容易
                只要复用方便,人们就会去做。创建一个支持复用的环境
        10)正交性
            消除不相关事物之间的影响
                设计的组件,需要自成一体,独立自主,有单一清晰的意图
        11)可逆性
            不设最终决定
                不要把决定刻在石头上,而要将其视为写在沙滩上的东西,时刻准备应变
            放弃追逐时尚
                昨日之最在于时间,即明日之反模式。要基于基本原则去选择架构,不要盲从流行
        12)曳光弹
            使用曳光弹找到目标
                通过不断尝试并看清弹点,曳光弹可确保你最终击中目标
        13)原型与便签
            用原型学习
                制作原型旨在学习经验,其价值不在于过程中产生的代码,而在于得到的教训
        14)领域语
            靠近问题域的编程
                用时间领域的语言来设计和编程
        15)估算
            通过估算来避免意外
                开始之前做估算,能够提前发现潜在问题
            根据代码不断迭代进度表
                利用实施过程中获得的经验来精细化项目的时间尺度
务实的哲学
    1)人生是你的
        你有权选择
            人生是你的,把握住人生,让它如你所愿。
    2)    我的源码被猫吃了
        提供选择,别找借口
            不要只说做不到,解释一下都能做些什么。
    3)    软件的熵
        不要放任破窗
            只要看到不好的设计、错误的决策、糟糕的代码,就赶紧去纠正。
    4)    石头做的汤和煮熟的青蛙
        做推动变革的催化剂
            你无法强迫人们去改变,但是可以展示美好未来并帮助他们参与创造
    5)够好即可的软件
        将质量要求视为需求问题
            让用户参与对项目真实质量需求的确定
    6)知识组合
        对知识组合进行定期投资
            养成学习的习惯
        批判性分析你读到和听到的东西
            不要受供应商 媒体炒作或教条的影响,跟进自身和项目的实际情况开分析信息
    7)交流
        英语就是另一门编程语言
            写文档和编程一样要遵循DRY原则、ETC(easy to change)、自动化等
        说什么和怎么说同样重要
            如果无法有效交流,任何伟大的想法都是没有意义的
        把文档嵌进去,而不要拴在表面
            与代码隔离的文档,很难保持正确并及时更新
    8)优秀设计的精髓
        优秀设计比糟糕的设计更容易变更
            适合使用者的事务,都已经过良好设计。对代码来说这意味着必须适应变化
务实的方法
    9)DRY邪恶的重复
        DRY不要重复自己
            系统中的每一条知识,都必须有单一切无歧义的权威陈述
        让复用变得更容易
            只要复用方便,人们就会去做。创建一个支持复用的环境
    10)正交性
        消除不相关事物之间的影响
            设计的组件,需要自成一体,独立自主,有单一清晰的意图
    11)可逆性
        不设最终决定
            不要把决定刻在石头上,而要将其视为写在沙滩上的东西,时刻准备应变
        放弃追逐时尚
            昨日之最在于时间,即明日之反模式。要基于基本原则去选择架构,不要盲从流行
    12)曳光弹
        使用曳光弹找到目标
            通过不断尝试并看清弹点,曳光弹可确保你最终击中目标
    13)原型与便签
        用原型学习
            制作原型旨在学习经验,其价值不在于过程中产生的代码,而在于得到的教训
    14)领域语
        靠近问题域的编程
            用时间领域的语言来设计和编程
    15)估算
        通过估算来避免意外
            开始之前做估算,能够提前发现潜在问题
        根据代码不断迭代进度表
            利用实施过程中获得的经验来精细化项目的时间尺度《程序员修炼之道:通向务实的最高境界》读书笔记Day1:软件编程哲学