Unix编程哲学和软件设计方法

来源:互联网 发布:stc12c5a60s2单片机 编辑:程序博客网 时间:2024/05/26 05:51

 

      Unix编程哲学:

 1,模块原则:使用简洁的接口拼合简单的部件。

2,清晰原则:清晰胜于机巧。

3,组合原则:设计时考虑拼接组合。

4,分离原则:策略同机制分离,接口同实现引擎分离。

5,简洁原则:设计要简洁,复杂度能低则低。

6,吝啬原则:除非确无它法,不要编写庞大的程序。

7,透明性原则:设计要可见,以便审查和调试。

8,健壮原则:健壮源于透明与简洁。

9,表示原则:把知识叠入数据以求逻辑质朴而健壮。

10,通俗原则:接口设计避免标新立异。

11,缄默原则:如果一个程序没什么好说的,就沉默。

12,补救原则:出现异常时,马上退出并给出足够的错误信息。

13,经济原则:宁花机器一分,不花程序员一秒。

14,生成原则:避免手工hack,尽量编写程序去生成程序。

15,优化原则:雕琢前先要有原型,跑之前先学会走。

16,多样原则:绝不相信所谓“不二法门”的断言。

17,扩展原则:设计着眼未来,未来总比预想来得快。

 

另外:

一个程序只做一件事情,并做好。

程序要能协作。

程序要能处理文本流,因为这是最通用的接口。


     
来自《Unix编程艺术》一书。这些原则在很多软件工程,设计模式,敏捷开发书籍中都有提到。   

 

     有时因为设计问题受到同事的挑战。解释起来又挺麻烦的,不是三言两语能说明白的。以后就把这些原则背出来,再遇到挑战就说是根据**原则设计的,如果不清楚看《Unix编程艺术》这本书或者敏捷开发的书,省得解释了。

 

     一些人喜欢使用二进制协议,觉得文本协议太浪费资源。其实文本协议浪费不多(xml格式除外),能处理的程序多,纠错能力强。最主要的是便于人查看和编辑。

 

    一些人为了提高机器执行效率,到处要求优化。其实很多是废的。甚至因为引入了bug起发作用。至少使代码更难理解。应该优化经测试真正的瓶颈,而不是想当然。

 

    一些人喜欢用一个巨大的程序完成任务,而不是多个小程序。因为觉得线程间交互简单;而进程间交互复杂,而且要使用进程间通讯,效率低。多个小程序的好处是,提供了机制而不是策略。便于重用,具有更大的灵活性,能够满足多种需要。

 

      而且能够积累不少可重用的工具,提高日后的开发效率。有些公司办了很多年,一点积累都没有,每次来项目都要从头开始写。

     

    如果不愿意或者不能分成多个小程序,至少也应该提供serviceGUI层的逻辑上的隔离。这样service层等模块可以打包成动态链接库,jar包等,便于重用。 

 

    这样,至少如果有一天你的Web程序要提供openAPI(现在很流行)时,不需要大动干戈,重写很多代码。

 

     另外,Linux等开源代码,之所以质量优秀,就是充分的源代码公开和源代码review。建议公司在项目内形成开诚布公的源代码review风气,改善代码质量。当然这个在一些公司政治严重的团队很难实现。在程序员间容易产生矛盾。


     15,优化原则:雕琢前先要有原型,跑之前先学会走。

<!--@page { margin: 2cm }P { margin-bottom: 0.21cm }A:link { so-language: zxx }-->

     一些工程师,喜欢瀑布式的开发方式。一上来设计文档写个几个月,未来描绘得非常美好。代码一行未动。

      项目最后是一延再延,最后发现架构设计有根本性的问题,BUG修复很难,项目只能取消,或者彻底重写。

 

      没有深入到问题内部,和它近距离接触,是很难在脑子中凭空想清楚整个技术方案的。


      我喜欢先设计原型,搭起架子,找到有风险的技术问题,先予以解决。和问题近身肉搏,然后调整、重构,得到可工作的原型,同时也得到了设计方案。再一步步实施。

      

      我很奇怪,一些工程师对问题还没想透,技术风险还没排除,就敢直接花大量的时间写详尽的设计方案!

      如果是概要性质的,还可以理解,毕竟项目总体的设计不会有太大的改变。


 

 


 

    

   

 

 

 

 

 

 

 

 

 

原创粉丝点击