代码大全读书笔记2---用隐喻来充分理解软件开发
借助隐喻可以更加深刻地理解软件开发的过程。通过把不太理解的东西和一些你较为理解、且十分类似的东西做比较,这样可以对不太理解的东西产生更深刻的理解,这种使用隐喻的方式叫做建模。
隐喻的威力在于其生动性,能够让你把握整个概念,暗示各种属性、关系以及需要查证的部分。但是过度引申时,模型也会误导人们。
软件隐喻的作用更像是启示,而不是算法,告诉你如何去寻找答案。算法是一套定义明确的指令使你完成某个特定的任务,算法是可预测的、确定的、不易变化的。
算法与启发式方法之间的区别就在于其距离最终解决办法的间接程度:算法直接给你解决问题的指导,而启发式方法告诉你如何发现这些指导信息或者至少到哪里去寻找他们。
对于编程来说,最大的挑战是将问题概念化(建模),编程中的很多错误是概念性的错误,因为每一个问题在概念上都是独特的,所以要找到一套能解决所有问题的指导规则是很难得,甚至不太可能,所以能够一般性质地知道大致如何解决问题,至少也和知道如何解决特定问题一样有价值。
软件的牡蛎养殖观点:牡蛎制造珍珠的过程隐喻软件开发,其中关键词语有“增量的”,“迭代的”,“自适应的”以及“演进的”。以增量方式进行设计、编译和测试,都是目前已知的最强有力的软件开发概念。
在进行增量式开发时,先做出软件系统的一个尽可能简单、但能够运行的版本,它不必接受真实的输入,无须对数据进行真正的处理,不用产生真实的输出,仅仅只需要一个足够强壮的骨架,支撑起未来将要开发的真实系统。对于标志处的每一项基本功能,仅需要调用虚假的类。在骨架形成之后,要一点点地在其上附着肌肉和皮肤:将虚假的类替换为真正的类,接受真实的输入,产生真实的输出。
软件构建:首先要决定准备建一个什么类型的房子---问题定义,接下来与建筑师探讨总体设计---软件架构设计,然后画出详细的蓝图并雇承包人---软件详细设计,在然后打地基、搭房屋框架、砌墙、通水电等---软件构建,油漆工、装修工将房子美化---软件优化,检查人员检查工地、地基、框架、布线等---软件评审。
通常自己编写现成的、可以买得到的代码是没有意义的,除非在特殊情况下需要定制。