最近读完《unix编程艺术》,一本不错的书,值得好好读一下。
书中提到了一些非常有启发性的设计概念,这里和大家分享一下。
模块性:要编写复杂软件又不至于一败涂地的唯一方法,就是用定义清晰的接口把若干简单的模块组合起来。模块性可以说是听到的最多的一个,它已经深入程序员的心中。它的本质其实就是用分而治之的方法来分解复杂度。关于模块的大小,本书有精彩的论述,有兴趣可以详读。
紧凑性:就是一个设计能否装进人脑的特性。我把它理解为设计的可读性。紧凑不等以薄弱:如果一个设计构建在易于理解利于组合的抽象概念上,则这个系统能够在具有非常强大、灵活的功能同时保持紧凑性,典型的如Eclipse的插件体系结构。紧凑不等于易于学习:对于某些紧凑设计而言,在掌握其精妙的内在概念模型之前,要理解这个设计有些困难;但是一旦理解了这个模型,则学习相对简单。
紧凑性目前对我来说是一个“可以意会,不可言传”的特性。书中用开发语言的设计做例子也许非常好理解:lisp就是一个典型的紧凑性的设计:特性非常简单,几十行代码就可能写一个解释器。但是,它可以做很多复杂的东西。c和Python是半紧凑的,perl,java,shell则不是。c++是反紧凑的,但是他的子集是半紧凑的。
提高紧凑性的一个方法就就是设计过程中保持概念的一致性,并且紧紧的围绕它来定义问题和解决问题。
正交性:是有助于使复杂设计也能紧凑的重要特性之一。在纯粹的正交设计中,所有的操作均无副作用;每一个动作(无论是API调用,宏调用或者语言运算)只改变一件事情,不会影响其他。无论你控制的是什么系统,改变一个时期的方法有且只有一个。正交性的障碍在于便利性,人们经常为了便利性牺牲正交性。正交性教给我们:做,并且只做好一件事情。
单点性:每一个知识点在系统中只有一个唯一,明确,权威的表述。在它的指引下,你编程的时候会遵循下面的建议:不要重复你自身(Don’t Repeat Yourself)——《程序员修炼之道》。数据结构的SPOT原则:无垃圾,无混淆。数据结构不要太通用,太面面俱到。数据驱动编程,代码生成在一定程度是也是遵循的SPOT原则。
透明性:如果没有阴暗的交流和隐藏的深度,软件系统就是透明的。如果实际上能够预测到程序的大全部或大部分情况,并能够建立简单的心理模型,这个程序就是透明的:因为可以看透程序在干什么。
要追求代码的透明,最有效的方法很简单,就是不要在具体操作的代码上叠放太多的抽象层。不要建造过分精细的抽象城堡。
可显性:如果软件系统所包含的功能是为了帮助人们对软件建立正确的做什么,怎么做的心理模型而设计的,这个系统就是可显的。良好的帮助有助于提升可显性,良好的变量名和函数名有助于提升可显性。
我的理解:可显性是指是否容易入门(比如有没有相关文档);透明性是指入门后是否容易理解(比如程序结构是否模型是否容易理解)。
为透明性编程
更深入的内容可以详细阅读《unix编程艺术》。
分享到:
相关推荐
matlab中比较有创意的画图程序,对初学matlab的学生是非常有帮助的,对于掌握matlab画图很有好处~
教你TDA2030洞洞板布线,非常有启发性
这些程序都是很基础的,对初学FPGA的朋友有很多的启发与参考价值!
Oracle数据库课程的启发性实验设计.pdf
很有启发性的分词算法,适合同类项目中借鉴。
学习电源技术的必修,TL494常用pwm芯片
启发性测试框架.xmind
关于启发性名言.doc
启发式模块化设计.doc
推荐几个国外经典网站版面设计供参考,相信会对你的首页设计有所启发!
平面设计新艺术直线风格特点启发-平面设计-设计
全书共分十章,前八章讨论了和网站UI设计相关的八个不同的领域,覆盖面非常广,具有很强的操作性和专业性,全书逻辑严密、言简意赅,设计人员可以快速地找到自己想要的东西。第九章以访谈的形式介绍了多位专家对一...
思维模式对服装设计人才培养的启发-服装设计-设计.pdf
TSP问题的脂肪计算复杂性与启发式算法设计是一个很厉害的算法,对你一定有帮助。
启发式搜索,算法设计相关的,大家想学算法的可以看看学习学习。不错的。
每章从实际问题出发,经过具体、深入、细致的分析,自然且富有启发性地引出相应的算法设计思想,并对算法的正确性、复杂性进行恰当的分析、认证。《算法设计》覆盖的面较宽,凡属串行算法的经典论题都有涉及,并且...
PPT 展示由科学启发的设计改格式
带启发性变异的粒子群优化算法.pdf
启发性提问在高中数学教学的应用.doc
全书共分十章,前八章讨论了和网站UI设计相关的八个不同的领域,覆盖面非常广,具有很强的操作性和专业性,全书逻辑严密、言简意赅,设计人员可以快速地找到自己想要的东西。第九章以访谈的形式介绍了多位专家对一...