`
langyu
  • 浏览: 888241 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

我所认识的软件开发原则:简单表述

阅读更多
        简单表述,就是用通俗直白的表达来正确说明问题。说起这个话题,首先我会感觉心虚,以前为了装X,故意以专业术语加模糊的定义来描述问题,看到别人似懂非懂的神情,我既兴奋又惶恐,感觉一定要把他绕在里面才算专业。但换作别人讲个问题把我绕晕,我就满不在乎,认为别人应该也没弄明白是怎么回事,因为我总觉着每个问题都应该有个简单道理。这种人性的弱点也让我走了不少弯路,幸好及时悔改,不至于遗失太多。

        两年多来我所苛求的简单似乎总没有实现过。系统是越设计越复杂,逻辑越改越多,有时候非得整个系统重构才能看起来舒服些。痛定思痛,为了追求理论的朴实,我开始总结日常所遇到的很多系统、架构、产品的简单之处,以求他日我来设计系统时,也有追求的目标。

        跑远了,继续来说主题。假设朋友用手机跟我聊天,我在网上看到一段很有意思的话想和朋友分享。如果我知道朋友的手机是可以上网的,那么我会给他一个URL让他自己去看,如果他不能上网,我就会把内容贴给他。当然,我也可以不论朋友的手机能不能上网,都把网页内容发给他。在这里,就涉及到数据简单有效传输的问题。在系统数据传输过程中,我们应当秉持简洁的理念,用最少的信息达到完整传输的目的。

        网络通信中的众多协议是非常简洁的。因为要处理跨网络的端到端传输,路途遥远,如果不能有效表述信息,对网络资源的浪费是可观的。所以每个协议对字节锱铢必较,力求用最少的数据表达有效属性和控制协议。同样一个有意思的例子是HTTP 304状态码,用于判断服务器端数据的lastModifiedTime与客户端缓存数据的lastModifiedTime是否一致,如果一致就表示在这次请求之前的一段时间这些数据没有任何变化,客户端可以放心使用本地缓存,否则就将最新的数据发送到客户端。对于网页中很多的静态内容,只是一个状态信息就可以减少很多网络数据流量,实属有效性的典范。

        这种成功的例子很多,对于我们来说,在实践中应当将简单有效性体现在哪呢。在设计阶段,尽量简单易懂。如考虑问题时,就假定这个问题出现是现实生活中,我们人是怎样去解决的,有怎样的流程,然后代入系统角色中来解决问题(软件设计过程中有角色扮演这样的一种分析模式)。这样做的好处既让另外的设计和开发人员理解,也易于项目的其它角色对项目有很多的认识。同时,在软件的生命周期中,占绝大部分时间的维护阶段可以省太多力气。在实现阶段,简洁有效的接口和返回值是十分必要的。各模块之间有着简单的接口,注释清楚明了。模块间传输的数据也应当有效,简明。假如A与B模块都要处理数据库中的某些数据,那么在A和B之间传输的就应当是这些数据在数据库中的主键或惟一标识,而不是整个数据(当然,是在不考虑数据库压力,而传输成本比较大的情况下)。

        以上的举例基本只是我们开发中的一部分,我们还得学习新的技术和概念。在我们学习时,这种简单性也至关重要。多年来对于学习我总结的一条经验就是:要学就一次学懂。但在自身知识层次或是书本表述能力各异的情况下,要一次学明白实在是有些难。软件行业的特点是源源不断涌现的新名词,新概念。很多时候一个简单的概念被不断包装炒作后,再附带一些难于理解的解释,基本就可以忽倒一批人,对之加以膜拜。以Spring热炒的IoC来说,一个简单概念被冠以一个好玩的名字,控制反转。在大家还在迷糊的时候,又一位大师(具体是谁大家清楚)站出来说这个不应该叫IoC,应该叫DI,翻来倒去的折腾概念,这可能和国外有限年代的历史文化有关吧,以发明缩写为傲。同样让大家很压抑的一个概念是AOP,无奈的可笑。

        很多时候当我们学懂一个东西后,可能会恍然大悟,噢,原来是这么回事。其中感慨的时候肯定是和自己已明白的一个道理联系起来了,这些本身的道理是很简单明了的。所以,在给别人想讲清楚一件事的时候,要用最直白,最易于理解的方式,如讲故事,套例子,怎样直白怎样来。在学习一个新东西的时候,仔细关注作者最初说的那句话,知道这个东西是做什么的,之后的理解都是建立在你知道它是做什么的之上。

        貌似用了很多废话来说明一个简单的道理。如果你很厌烦大段文字从开头跳到这里,那么我可以告诉你上面说了很多话,其实就是四个字:大道至简


我所认识的软件开发原则:权衡
我所认识的软件开发原则:封装
我所认识的软件开发原则:二八原则
我所认识的软件开发原则:减少等待时间

0
0
分享到:
评论
2 楼 langyu 2010-08-23  
Lanyef 写道
   其实 ,简单 说起来很简单,具体实现的时候要简单起来实非易事 。
看了你的几篇博文,很受教,呵呵。。

我在本系列最后一篇文章中会分析下为什么实现简单不简单的问题,呵呵,预告下。

共同进步!
1 楼 Lanyef 2010-08-23  
   其实 ,简单 说起来很简单,具体实现的时候要简单起来实非易事 。
看了你的几篇博文,很受教,呵呵。。

相关推荐

    软件需求分析.pdf

    需求规格说明书不仅是软件开发的蓝图,也是评估软件功能与性能是否达标的标准,是软件开发团队与用户沟通的重要桥梁。 #### 软件需求的定义与特性 软件需求被定义为一种无歧义的表达工具,它需同时被用户与软件...

    MSF基本原则及团队模型

    6. **适应不确定性**:认识到软件开发的不确定性,通过灵活的过程和预判来管理风险。 7. **质量投资**:强调零缺陷意识,追求文档、开发、发布的高质量,并逐步实现这一目标。 8. **学习与改进**:从经验中学习,...

    软件工程复习资料.doc

    这份复习资料主要涵盖了软件工程的基础知识,包括软件开发模型、软件生存周期、软件危机的解决途径、软件复杂性、软件质量以及可行性研究等方面。 1. 软件开发模型是指导软件开发过程的重要框架。瀑布模型是一种...

    软件需求文档

    综上所述,软件需求文档在软件开发过程中起着举足轻重的作用。它不仅是项目规划和执行的基础,也是跨部门沟通和协调的桥梁。通过遵循上述原则和步骤,我们可以编写出高质量的需求文档,为项目的成功奠定坚实的基础。...

    20年春福师大《软件工程》在线作业二满分答案.docx

    《软件工程》在线作业二涉及了软件工程领域的多个知识点,以下是根据题目内容提炼的...这些知识点涵盖了软件工程的多个方面,包括软件开发过程、设计原则、测试方法、系统分析、人机交互以及软件维护等多个核心概念。

    软件设计说明书通用模板.doc

    ### 软件设计说明书通用模板解析 #### 一、引言 - **编写目的**:此文档的主要目的是为了提供一套全面...这一套完整的指南有助于提高软件开发效率,减少设计阶段的不确定性和风险,从而保障最终产品的质量和稳定性。

    软件设计师历年考试真题(13-17)

    1. **软件工程基础**:这包括了软件生命周期、软件开发模型(如瀑布模型、迭代模型、敏捷开发等)、软件质量保证和风险管理等概念。 2. **需求工程**:如何进行需求获取、分析、表述和管理,以及需求变更控制是这...

    商务/医疗/软件操作界面测试

    尽管界面设计的重要性已经逐渐被认识到,但在实际开发过程中仍然存在不少问题。例如,很多软件开发者往往更注重功能实现而忽视了界面设计。此外,优秀的界面设计往往需要结合技术与艺术,这对设计师提出了更高的要求...

    NIEH考试大纲

    根据给定的NIEH考试大纲初级内容,我们可以提炼出一系列关键知识点,这些知识点主要围绕着计算机编程,尤其是Java编程的基础知识...通过这一系列的考核,有助于确保考生具备从事软件开发工作所需的基础技能和职业素养。

    Scrum-Guide-2013-7-CN

    自1990年代初以来,Scrum已被广泛应用于软件开发领域,但其实用性不仅限于此,任何需要应对不确定性与快速变化的项目都能够从中受益。 #### Scrum 原理 Scrum的理论基础来源于经验主义原则,即知识源自于实际经验和...

    东财20秋《客户关系管理》单元作业二答卷.docx

    - **知识点**: 没有一定信息系统开发能力的企业,在选择一个适当的功能强大的软件产品后,自己进行实施,因此它们需要运用五阶段实施方法。 - **解析**:对于那些不具备足够IT开发能力的企业来说,采用现成的CRM软件...

    山东高校教师资格证笔试

    ### 山东高校教师资格证笔试知识点解析 #### 一、教育问题转化为教育政策问题的标准 ...2. **布鲁纳的螺旋式安排**:从简单到复杂,循序渐进。 3. **奥苏贝尔的先行组织者策略**:先介绍概括性材料,再展开具体细节。

    计算机专业英语教学大纲.docx

    - **电子商务**: 认识电子商务的基本原则,具备阅读英文商务网站的能力。 #### 三、课程内容与特色 - **综合性**: 结合计算机科学的基础知识与专业英语的学习,确保学生能够全面地掌握所需技能。 - **系统性**: ...

    Java开发工程师应聘求职简历模板.pdf

    Java开发工程师是信息技术领域中至关重要的角色,主要负责设计、实现、测试和维护基于Java技术的软件系统。他们需要具备深厚的编程基础,精通Java语言,理解面向对象的设计原则,能够使用Java SE(标准版)和Java EE...

    自考(谈判与推销技巧)真题试题及答案解析(一).docx

    是一种管理原则**的表述不够准确。 #### 二、多选题知识点解析 **23. 广义的谈判利益** - **A. 利润空间**:经济利益。 - **B. 投资回报**:经济效益。 - **C. 改进彼此的关系**:人际关系的改善。 - **D. 遵循...

    Java极限编程(PDG

    Java极限编程(PDG)是一种敏捷开发方法论,它源于极限编程(XP)的理念,旨在提高软件开发效率、质量和响应变化的能力。极限编程的核心原则包括快速反馈、简单设计、持续集成以及重视团队协作和沟通。在Java环境中...

    产品需求文档(PRD)模板.zip

    在软件开发过程中,PRD是项目启动的关键步骤,用于沟通产品愿景,确保团队、利益相关者和开发者对产品的理解一致。 PRD通常包括以下几个核心部分: 1. **产品简介**:简短地概述产品是什么,它将解决什么问题,...

    how to write better test case

    在软件开发周期中,需求往往会发生变化。因此,设计能够适应这些变化的测试用例至关重要。这意味着测试用例应当具备灵活性,能够随着需求的变化而调整。为此,我们需要关注以下几个方面: 1. **模块化设计**:通过将...

Global site tag (gtag.js) - Google Analytics