软件设计的思想与哲学

以下是从比较经典的书籍中摘录了的几条跟软件设计相关的原则和思想,这些思想不仅可以帮助你在设计软件、编写代码时有用,而且正如Mike Gancarz的《Linux/Unix设计思想》的译者序的作者漆犇所说“如果用“武侠”来作一个类比,这本书就好像是一部教你修炼内功的秘笈,无论新手老手,修炼基本内功都是一件必须持之以恒甚至可以毕生研习的事情,而同时我们也要知道,有时候优秀程序员和普通程序员水平差距的关键也正在于此”。

  1. 摘自Robbins和Beebe的《Shell脚本学习指南》软件工具设计概念和原则(P8-P20)    
    (1)一次做好一件事。      
    (2)处理文本行,不要处理二进制数据。      
    (3)使用正则表达式。      
    (4)默认使用标准输入输出。      
    (5)避免喋喋不休。      
    (6)输出格式必须与可接受的输入格式一致。      
    (7)让工具去做困难的部分。      
    (8)构建特定工具前,先想想 。
  2. 摘自Mike Gancarz的《Linux/Unix设计思想》UNIX哲学(P5-P9)    
    (1)小即是美。      
    (2)让每一个程序只做好一件事情。      
    (3)尽快建立原型。      
    (4)舍高效率而取可移植性。      
    (5)使用纯文本文件来存储数据。      
    (6)充分利用软件的杠杆效应。      
    (7)使用shell脚本来提高杠杆效应和可移植性。      
    (8)避免强制性的用户界面。      
    (9)让每一个程序都成为过滤器。
  3. 10个次原则    
    (1)允许用户定制环境。      
    (2)尽量使操作系统内核小而轻巧。      
    (3)使用小写字母,并尽量保持简短。      
    (4)保护树木。      
    (5)沉默是金。      
    (6)并行思考。      
    (7)各部分之和大于整体。      
    (8)寻找90%的解决方案。      
    (9)更坏就是更好。      
    (10)层次化思考。

软件设计的思想与哲学

时间: 2024-10-24 07:03:57

软件设计的思想与哲学的相关文章

2020荐书:软件设计的哲学

2020年必读书籍推荐:软件设计的哲学(A Philosophy of Software Design),本书190多页,豆瓣的点评分在9分以上,目前只有英文版本,中文版还未上市,英文好的同学建议去直接阅读原版. 内容简介 书中讨论了软件设计的主题:如何将复杂的软件系统分解成可以相对独立实现的模块(如类和方法).这本书首先介绍了软件设计的基本问题,即管理复杂性.然后讨论了如何处理软件设计过程的哲学问题,并提出了在软件设计过程中应用的一系列设计原则.该书还介绍了一系列标识设计问题的危险提示.你可以

软件设计的哲学:前言

01 前言 80多年来,人们一直在为计算机编写程序,但令人惊讶的是,关于如何设计这些程序或什么是好程序的讨论却少之又少.关于软件开发过程(如敏捷开发)和开发工具(如调试器.版本控制系统和测试覆盖工具),已经有了相当多的讨论.还广泛分析了编程技术,如面向对象编程和函数式编程,以及设计模式和算法.所有这些讨论都是有价值的,但是软件设计的核心问题在很大程度上仍然没有触及.David Parnas的经典论文“关于将系统分解成模块的标准”发表于1971年,但是在随后的45年里,软件设计的技术水平并没有超过

软件设计的哲学 第五章 隐藏信息

目录 5.1 信息隐藏 5.2 信息泄漏 5.3 时间分解 5.4示例:HTTP服务器 5.5 示例:类太多 5.6 示例:HTTP参数处理 5.7 示例:HTTP响应中的默认值 5.8 隐藏在类中的信息 5.9 不要过度隐藏 5.10 结论 第四章论述了模块的深度.本章以及随后的几章将讨论创建深度模块的技术. 5.1 信息隐藏 实现深度模块最重要的技术是信息隐藏.这种技术首先由David Parnas描述.基本思想是每个模块应该封装一些知识,这些知识表示设计决策.该知识嵌入到模块的实现中,但不

软件设计的哲学:第四章 深度封装模块

目录 4.1 模块化设计 4.2什么是接口? 4.3 抽象 4.4 深度模块 4.5浅模块 4.6 类拆分 4.7示例:Java和Unix I/O 4.8 结论 管理软件复杂性最重要的技术之一是系统设计,这样开发人员在任何时候都只需要面对总体复杂性的一小部分.这种方法称为模块化设计,本章介绍其基本原理. 4.1 模块化设计 在模块化设计中,软件系统被分解成一系列相对独立的模块.模块可以采用多种形式,例如类.子系统或服务.在理想的情况下,每个模块都完全独立于其他模块:开发人员可以在任何模块中工作,

软件设计的哲学: 第十章 定义不存在错误

目录 10.1 异常增加复杂性的原因 10.2 例外情况太多 10.3 定义不存在的错误 10.4 示例:在Windows中删除文件 10.5 示例:Java子字符串方法 10.6 屏蔽异常 10.7 异常聚合 10.8 事故? 10.9 设计不存在的特殊情况 10.10 做过了头 10.11 结论 异常处理是软件系统中最糟糕的复杂性来源之一.处理特殊情况的代码天生就比处理正常情况的代码更难编写,而且开发人员经常在定义异常时没有考虑如何处理它们.本章讨论了异常对复杂性的不成比例的贡献,然后展示了

Tcl 和 Raft 发明人的软件设计哲学

John Ousterhout(斯坦福大学教授,Tcl 语言.Raft 协议的发明人...真的是超级牛人,Title 好多好多,这里就列几个大家熟悉的),在 Google 做了一次演讲,题目就叫 「A Philosophy of Software Design」.首先,John 问了大家一个问题,什么是计算机科学里最重要的事情?下面有回答 Abstration 的,有回答 Complexities 的,有回答 Testing 的.他还问了 Donald Knuth(高德纳,程序员应该都认识吧),

面向对象编程思想的哲学起源(转载)

http://www.xuebuyuan.com/566309.html 本来想象着写一整篇「面向对象编程思想的哲学起源」这样的题目,笔走纸上,方才发现这样的题目足够出本书,知识不够,写不动.但心里还是想写点自己的所思所想. 全篇就拿JAVA来举例了.众所周知,面向对象的四大基本要素:抽象(Abstract).封装(Encapsulation).继承(Inheritance).多态(Polymorphism). 很多人坚持<逻辑学>是唯物哲学的基础,不懂,姑且不论.哲学就是对自然学科的抽象,看

编程思想、哲学、道与术

一切的起源:问题及问题的求解: 编程是为了解决问题,而解决问题可以有多种视角和思路: 世界观与方法论: 马克思:世界是物质的,物质是运动的:运动着的物质是普遍联系和永恒发展的: 编程思想与世界观: 我们知道,哲学领域中,最根本的对立是唯物主义和唯心主义的对立,而附属其下,又有许多对立,如形而上学和辩证法的对立.可知论和不可知论的对立等等.这些对立形成了哲学的基本体系.派别和出发点.实际上,这些对立,都是世界观的对立.世界观,简而言之即如何看待这个世界.世界观是一切哲学问题的本源和出发点. 同样,

2015软件设计论点总结

这篇随笔将提出两个设计上的论点,其实这两个论点在之前的随笔中已经有提及,只是未明确指出. 提出这两论点,也希望软件设计思想的哲学有更进一步的发展. 一个项目,两种数据访问 软件架构设计中,使用持久化的话,一个项目通常需要两种数据访问机制,业务流程使用实体映射的数据访问机制,查询列表和报表使用传统原生数据库查询语句的数据访问机制. 设计模式,分为架构模式和业务模式 随着时代发展,进入互联网时代,软件系统日益庞大,程序员之间也开始出现分工合作,使用同一种程序语言的程序员也可能在技术方向上有很大的差异