Unix编程哲学:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

另外:

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

程序要能协作。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Unix编程哲学和软件设计方法相关推荐

  1. 面向过程的软件设计方法

    面向过程的软件设计方法 前面主要是对系统的分析,从而明确我们系统的逻辑模型.也就是说,通过前面几章我们清楚了"系统需要做什么?".而软件设计阶段主要任务则是要实现系统逻辑模型向物流 ...

  2. 软件工程学习笔记——第六章 软件设计方法

    目录 第一章 概述 第二章 过程和活动 第三章 软件过程模型 第四章 问题定义和可行性研究方法 第五章 需求分析方法-1 第五章 需求分析方法-2 第六章 软件设计方法 第七章 软件实施与测试方法 第 ...

  3. 软考·系统架构师论文——论基于架构的软件设计方法及应用

    文章目录 说明 摘要 过渡 项目背景 论点理论+实践 结尾 说明 1.[摘要 300~330字] ① 项目介绍:时间.项目名.项目主要功能简述.作者角色及工作内容 ② 项目技术简介:正文理论/分论点的 ...

  4. 软件工程——软件设计方法(概要设计)

    软件设计方法主要分为两个方面:1.概要设计  2.详细设计 概要设计: 一.软件设计的目标和任务 1.定义 将文字转化为结构图,根据用信息域表示的软件需求,以及功能和性能需求进行数据设计,系统结构设计 ...

  5. 【软件设计】软件设计方法归纳总结

    软件设计方法有:结构化设计(数据流图为依据).面向对象设计(面向对象概念为依据): 结构化设计方法的模块化体现为:过程.函数.子程序: 面向对象设计的模块化体现为:类.对象.构件. 以上为主流的两种, ...

  6. 软件工程:结构化软件设计方法 VS 面向对象软件设计方法

    一.基本概念 1.结构化方法 结构化方法是一种传统的软件开发方法,它是由结构化分析.结构化设计和结构化程序设计三部分有机组合而成的. 基本思想:把一个复杂问题的求解过程分阶段进行,而且这种分解是自顶向 ...

  7. 《软件工程》-面向过程的软件设计方法

    [前言] 软件设计的目标和任务 软件设计基础 模块独立性 结构化设计方法 数据设计和文件设计.过程设计 [内容] 1.软件设计的目标和任务 根据用信息域表示的软件需求,以及功能和性能需求,进行 数据设 ...

  8. Visio——软件工程实验贰——面向对象软件设计方法

    所使用的工具软件及环境: 硬件环境:微机1台. 软件环境:操作系统:Windows:建模工具:Visio或 Rose:数据库:MySQL(可选):开发工具包:JDK(可选):开发环境:MyEclips ...

  9. mpu6050上位机测试软件设计方法以及源码下载

    硬件:MPU6050传感器模块+Ginkgo 2 I2C Adapter软件:Qt(MinGW 4.4)+Qwt(6.0.2) 效果: 2013-5-21 10:44 上传 下载附件 (82.91 K ...

最新文章

  1. DCN-S4600 telent、http远程登录配置
  2. typescript ajax,TypeScript的应用方式
  3. 计算机发展最新趋势素材,计算机方面论文范文素材,与关于计算机科学与技术的趋势探究相关论文网...
  4. java代码 创建文件夹的方法
  5. matlab中rgb转hsv,matlab实现RGB与HSV(HSB)、HSL和HSI的色彩空间互转
  6. Java订单交易_Java实现获取105发卡平台的订单信息
  7. 使用element-ui中的container布局容器
  8. python之deque
  9. Windows Phone 7完整版模拟器
  10. python按内容分割txt文件_python 读txt文件,按‘,’分割每行数据操作
  11. 详解 Word2vec 之 Skip-gram 模型
  12. Find a Mother Vertex in a Graph
  13. android 百度网盘 播放器,最好用的安卓播放器,支持云盘播放,看电影必备
  14. 10-特质-Scala
  15. 我的微信公众号开通了
  16. 时序图神经网络总结(1)
  17. 迷惑,不知何去何从。。。。。
  18. Java的应用领域有哪些
  19. bugkumsic之图穷匕见
  20. 23个经过时间考验的应用程序,可以管理您的远程软件开发团队

热门文章

  1. VTK:图表之VertexSize
  2. VTK:Filtering之ExtractVisibleCells
  3. OpenGL shader uniform的实例
  4. OpenGL Assimp模型加载库
  5. C++实现插值查找(附完整源码)
  6. 经典C语言程序100例之四二
  7. Window下UDP(socket)接和收数据案例
  8. Linux下crontab(自动重启)的格式备忘
  9. 处理数字_5_非NULL值的列的个数
  10. linux共享xp打印机驱动下载,给debian共享winxp下的打印机