总结 软件开发的艺术 理想主义,经验主义和无绪
文艺复兴时期,现代科学产生了两个重量级理论: 理性主义和经验主义。
理性主义认为理智是信息的首要来源。给出一个假设,只要通过思考就能理解和描述这个世界,如著名的伽利略***落体实验。
经验主义则认为人类对世界认识的主要来源是经验。
我们开一辆车,不必知道其内部实现细节。
如果孤立地基于两种极端的方式来观察世界都是片面的。对大多数人来说,懵懂无知是一种生活方式,也是理性主义和经验主义结合在一起的结果。今天的程序开发和软件工程方法也是如此。
软件的演变过程上世纪40年度,用机器语言, 那时debug的时候可能还得带一个扳手
然后 FORTRAN ,他允许程序员只关心数学公式而不是内部机器内部实现 ---- 经验主义
然后COBOL来了, 他简化了数据库的操作 ---- 经验主义
当然同时期lisp出现了,他更强调纯粹的数学模型---理性主义
然后cpp, 然后java
我们可以发现在软件演变的过程中, 理性主义几乎已无存身之处。
因为软件的趋势是: 程序员在可以不深入了解很多内容的情况下就可以写出非常好的代码。
大型软件是如何开发的现状: 开发团队往往直接复用现有的一些软件框架,完全不重视这些重量级的框架是否超过我们的需要的。现代软件都是基于大型组件的方式进行组装的。 我要一个web服务器就装一个tomocat, 要一个数据库就装个mysql。 这完全是一种推土机式的开发方式,不管你的组件有多大, 总会找到合适的推土机把他推上去。 运行效率太差 就 加内存,搞服务器集群,
这种方法是好还是坏呢?实际上绝大多数公司已经用这种方式了。
因为推土机式的工作方式可以使你在不关注内部细节的情况下,也可以得到不错的结果。 我们可以在不了解汽车原理的情况下,可以把汽车开得很好。 在写win32程序时候,也不必了解系统是怎么实现。 我们只需要关注windows 系统API, 以及这些API的功能。
理解一个系统有两个层面:
浅层理解: 紧限于了解使用方法
深层理解: 理解其原理
而在软件开发中, 一般只要做到浅层理解就可以了。
我们说明软件开发其实是一个经验的积累过程,并且可以是复用前人的经验积累的。
设计API的动力之源好的API可以使功能的使用者聚焦在使用层面而不是其内部细节
为什么需要好的API:
分布式开发: 通常我们一个程序部署由一个人能独立完成的
模块化应用程序 : 我们的程序是分模块的,不同模块的交互就是用API
交流互通才是一切: 模块之间相互依赖
开发第一个版本通常比较容易
设计API过程中遇到的最大问题--- 不断变化的需求一个软件开发的生命周期:
第一版吧总是非常漂亮的
快乐总是短暂的
软件熵不断增加
天哪 千万不要动他
重新开发一个版本吧。
变化是万恶之源。
那么如何才能设计好的API 评价API好坏的标准