issues
search
zync-mzy
/
blog
repository as blog, issue as article
7
stars
1
forks
source link
《程序员修炼之道——从小工到专家》
#13
Closed
zync-mzy
closed
3 years ago
zync-mzy
commented
3 years ago
第1章 注重实效的哲学
要越出直接的问题去思考,注意更大的图景,才能做出明智的妥协和有见识的决策
为自己的工作负责,对自己的错误坦诚
在出现问题时提供选择而不要找借口,在向他人说明问题前,先说服自己
代码里如果有垃圾,别人就不会当回事(破窗户);如果代码十分漂亮,别人就不会舍得把它弄脏(灭火)
心里有想法时,先实现力所能及的部分,然后公开出来,吸引人们为之添砖加瓦(石头汤)
留心大图景,持续观察周围发生的事情,不要只局限在自己在做的事情(煮青蛙)
尽早把可用的功能开放给用户,收集反馈,让用户参与权衡,定义何为「足够好」
管理知识资产:
定期投资
,多元化,管理风险,低买高卖,重新评估和平衡
知识资产的投资选项:每年学习一种新语言,每季度阅读一本技术书籍,阅读非技术书籍,上课,参加本地用户组织,试验不同的环境(Windows/Linux,IDE/Makefile),跟上潮流(杂志期刊),上网(信息来源)
认真对待每一个问题,努力去寻找答案
批评地思考
学会交流:了解听众,选择时机,选择风格,美化文档,促进相互交流而不是单方面输出,及时回复
zync-mzy
commented
3 years ago
第2章 注重实效的途径
Donot Repeat Yourself
使得软件项目易于维护和适应变化
用自动生成器来维护不同语言、框架下相同的结构体或语法
让代码能自我解释,把注释用于更高层次的说明
用代码来生成文档
用访问器函数读写对象属性将使得未来增加功能(比如缓存)变得更加方便
创造一种环境,在其中可以找到并复用已有的东西,吸引大家为它贡献可以复用的代码
编写正交的系统来提高生产率和降低风险
把第三方产品隐藏在定义良好的抽象接口后面
如果做不到上一条,则把需求放入元数据,使用自动机制把语句插入代码中
使用曳光弹代码生成骨架,丰富它完成最终系统
zync-mzy
commented
3 years ago
第4章 注重实效的偏执
防御式编程,及时地对参数进行检查,在问题发生的现场就抛出问题
在程序里检测到发生了不可能发生的事情时,应该及时终止它—— 用断言来确保事情不会发生
将异常用于不应该发生的问题,如果不确定问题是否会发生,那么应该返回错误
资源要在同个例程里按照固定的顺序申请,并按照相反的顺序释放
用类来封装资源,依赖构造和析构函数来管理资源的申请和释放——
auto_ptr
语义不变项——确定规则
zync-mzy
commented
3 years ago
第5章 弯曲,或折断
代码不会止步不前,尽一切努力编写尽可能宽松灵活的代码,才能更好地适应变化
设计函数的时候,应尽量使参数直接可用,而不是需要处理过之后才能用(比如调用参数的很多方法才能拿到想要的数据)
函数的得墨忒耳法则规定,某个对象的任何方法都应该只调用属于以下情形的方法:
它自身
传入该方法的任何参数(但不包括从参数里获取到的对象)
它创建的任何对象
任何直接持有的组件对象
《Large-Scale C++ Software Design》
以声明的方式思考,将抽象放进代码,将细节放进元数据
Enterprise Java Beans:可配置的分布式系统编程框架
设计的时候总是要考虑并发,尽量解除任何时间或次序上的依赖
可以通过发布/订阅模式来解耦
Model-View-Controller:数据模型、展示数据的视图、控制视图中数据展示的控制器
黑板方式的编程,用黑板协调工作流
zync-mzy
commented
3 years ago
第6章 当你编码时
要理解所写下的每行代码背后做了哪些事情,避免靠巧合编程
估算算法使用的资源——时间、处理器、内存
不要对改动犹豫不决,要及时地进行重构
重复
非正交
过时
性能
为测试而设计,尽力写出易于测试的代码
使用代码生成器的同时,也要理解它生成的代码
zync-mzy
commented
3 years ago
第7章 在项目开始之前
完美,不是在没有什么需要增加、而是在没有什么需要去掉时达到的
需求很少存在于表面,通常深深埋藏在层层假定、误解和政策下面——不要搜集需求,而要挖掘它们
需求应该是一般性陈述,政策应该作为例子、以元数据或者其他方式进行设计
找出用户做特定事情的原因,而不只是目前做这件事的方式——成为用户
把真实的需要抽象成需求文档,把当前的工作实践记入政策文档
维护词汇表,保持项目名词的认知统一
确定真正的约束,不要被表面的约束限制了想象力
应该把需求搜集、设计和实现视为同一个过程的不同方面,而不是一步接一步孤立进行的
批判地看待方法学,从中提取精华,并不断改进
zync-mzy
commented
3 years ago
第8章 注重实效的项目
让计算机去做重复、庸常的事情,把一切流程化的东西自动化
要无情地测试
单元测试
集成测试
功能正确性测试
资源耗尽、错误及恢复——内存、磁盘空间、cpu带宽、计算机时间、磁盘带宽、网络带宽
性能测试
可用性测试
回归测试
测试数据
对测试进行测试——通过蓄意破坏
对状态而不只是代码进行覆盖测试
及时、频繁地测试
注释和文档
zync-mzy
commented
3 years ago
第3章 基本工具
纯文本
shell
编辑器
版本控制
调试器
文本操纵工具
代码生成器(不仅仅是代码)
第1章 注重实效的哲学