我想很多人都饱受过糟糕软件设计的痛苦,因此心里总有一股气,自己一定要做一个非常优秀的设计。至少我是这样的人。
近日公司的一个项目进行TR1评审的时候,在技术方案的评估文档中,我发现其第一项列出的便是上一个版本存在的设计缺陷:
-
产品之间复用只是停留在代码级别
-
模块代码不够独立,后期不能复用
-
模块代码不易扩展现在的新功能
由于是公司产权产品,其具体的内容不便详说。幸好我们只需要关注一下其中的重点。对,就是复用!
当然了,这份技术方案中,剩下的就是自己如何解决所有问题,如何提取可供复用组件,如何架构一个好的系统。姑且不谈对本系统的设计如何,我们跳出来看看我们在做一件什么样的事。
否定 --> 肯定 --> 否定
第一个否定,是我们在“否定”上一个版本,“肯定”是我们在肯定自己的版本,最后一个“否定”,是别人来否定我们的版本。不管我们意愿如何,这几乎是很多公司中必然的境况。
再来看看我们所希望的:我们希望我的设计足够优秀,所以在这个产品的下一个版本的时候(或者维护阶段),他们不会抨击设计的缺陷,并且能发现,
- 其架构的扩展性非常好,
- 可重用的模块也非常多。
- 原有系统的稳定性值得肯定。
可是,事实总不如我们想象的那样。为什么呢?
古人有一句非常有道理的话:己所不欲,勿施于人。什么意思呢?你希望别人来称赞你的设计,将来来复用你的模块。那么你这么做了吗?你愿意这么做吗?你自己都不做,何以希望别人来做呢?
是的,作为设计师的你来说,设计的根本目的是解决问题。解决业务上的问题,解决原有系统的问题。那么你的设计才会被认为是有用的。至于设计是否是优秀的,事实上,谁也没把握。未来的事,谁知道呢?
如果只是来证明你有足够能力设计整个系统,我相信你一定早就拥有了。可是说到优秀,却又一个标准问题。这和编写代码不一样。我能编100000行代码,你一定会认为我很强。我把整个系统的大部分全都实现了,你一定会将我捧到非常高的地步。
可惜,你要考虑的是,你不再是在编码,你是在设计。那么到底设计的衡量标准是什么呢?设计的标准很多,可是我相信有一个非常重要:
用最少的代码完成最多的事!
这和程序员的宗旨看上去完全是反其道而行之的。为什么呢?
- 代码越少,复杂度越低,所隐含的BUG也会越少。
- 代码越少,编写成本也越少。生产率提高了,你的待遇也就提高了。
- 代码越少,才真正证明了设计的重要性。如果设计就是让系统复杂话的话,要设计做什么?
- 代码越少,维护越简单
代码的大量减少,其实是意味着稳定性的模块在持续增加。这些稳定性的模块,才是设计的真正精髓所在。那么,这些稳定性的模块如何来呢?
一种选择是你来完成这样的模块,让别人调用。
另外一个选择就是你直接用别人的模块。
当然了,这里有一个非常有意思的地方。你或许会说,原来那么差的设计,我怎么使用?只能等我来设计了。可是我要说,如果你眼里只有第一种选择,那么你对别人来说,也不会有第二种选择。或者几乎可以肯定的是,你的设计,没有人会愿意复用。他们总可以发现你的设计中有足够多的缺陷来让他们放弃!就像你现在一样。
这个不是简单的所谓态度决定一切的阐述。这之间几乎有着必然的联系:
- 你发现不了别人系统中可以复用的,那么你在复用方面的意识就没有提升到足够的高度
- 没有足够的高度的复用意思,编写不出足够可以复用的模块
- 如此循环。抛弃式的设计只是会证明一点,又有一个存在众多问题的产品出生了。
如果从企业角度来看,那么复用的重要性更是不可言语。不过,公司的高层一般在技术细节方面不会太多涉及,所以反而容易忽略这点最可以提升生产效率的过程。不过好的公司,会规划平台性质的产品模块,来降低系统设计的范围。也可以减少设计的错误。这和前面的想法从基本上是一致的。
总之一句话,如果在解决问题之外,我们还想设计成优秀的产品,那么先从复用别人开始!
分享到:
相关推荐
优秀个人简历模板系列中的“城市规划景观设计专业”版面,是专为这一领域求职者设计的完美简历范本。 在本篇自荐信中,求职者XXX通过一系列的描述,展示了自己的学习成果与实践经验,使其简历内容更加充实、有说服...
她的故事激励着我们每一个人,无论何时何地,我们都应该以刘某为榜样,努力提升自己,为社会贡献自己的力量。刘某作为优秀少先队员的典范,她所体现出的优秀品质和行动力,是我们所有少先队员学习的标杆。在未来的...
5. **所需文件**:PPAP要求提供设计记录(包括图纸)、产品设计更改文件、控制计划、制造流程图、过程FMEA分析表等,以证明产品符合所有技术规格。 通过实施PPAP,企业可以确保产品在上市前达到预期的质量标准,...
你需要简洁地阐述为什么选择这个主题,国内外的研究现状如何,你的研究有何独特之处,以及它的学术和社会价值。 3. **研究思路与方法**:明确阐述你的理论依据,包括支撑你研究的三个主要理论。详细解释你的研究...
【案例对比】可能涉及到与其他研究的比较,或者是你的实验结果与其他已知案例的对比,以证明你的研究的独特性和有效性。 【成果展示】是展示你的研究结果的部分,包括数据分析的输出、实验结果、模型构建等。这部分...
学术意义上,你需要阐述你的研究如何填补了现有知识的空白,对学科发展有何贡献,以及对理论框架的拓展。在PPT中,可以列举具体的理论依据和实例来证明这一点。经济意义上,要说明你的研究对社会经济的影响,可能...
在这里,研究者应当明确自己的研究如何填补现有的知识空白,提出何种独到见解或技术,以及如何通过实验或数据收集来证明研究的可行性。 模板的每个页面都预留了足够的空间供用户插入图表、图像和数据等具体信息。...
在这一部分,你需要阐述你的研究课题是如何产生的,它在当前领域的重要性,以及你的研究将为该领域带来何种贡献。这部分应简洁明了,让听众迅速理解你的研究主题。建议使用恰当的图表或数据来支持你的论点,同时保持...
1. **选题背景意义**:这部分旨在阐述你的研究主题为何重要,它与你的专业领域有何关联,以及为什么值得深入研究。你需要清晰地解释该课题在当前学术或实践领域的价值,可能解决的问题,以及可能带来的贡献。例如,...
5. **客户评价**:展示客户的反馈和推荐,以证明公司的专业能力和良好口碑。 6. **联系我们**:包括地址、电话、邮箱以及可能的地图集成,方便客户直接联系。 在【压缩包子文件的文件名称列表】中,我们可以看到: ...
网上图书销售逐渐成为主流,如淘宝、京东、亚马逊等电商平台的成功案例,证明了这一模式的可行性与市场需求。网上书城系统利用互联网的灵活性和无边界特性,使得用户无论何时何地都能获取最新的图书信息,进行选购。...
Kendra的作品集很可能利用了HTML5的最新特性,如多媒体支持、响应式设计元素等,以适应不同设备和屏幕尺寸,确保用户无论在何种环境下都能获得一致的优质体验。 此外,一个优秀的UX设计师还会关注无障碍性(Web ...
5. **成果形式**:描述你的研究成果将以何种形式呈现,例如论文、模型、实验数据、软件等。同时,要提及成果的应用前景,如何能转化为实际应用或对未来研究产生影响。 6. **参考文献**:列出你在研究过程中引用的...
这部分内容通常需要配合程序代码和调试截图,以证明实验的实际操作过程。 实验调试则需要说明设定的调试目标、选择的调试方法,记录调试过程,并进行错误分析和修正。这一部分要求学生能够熟练地使用各种调试工具,...
在本文中,作者何春辉等人提出了一种基于句子重要度的累积贡献率筛选策略。这种策略认为,一个句子对文档整体意义的贡献不仅取决于自身的权重,还与其前后句子的关联程度有关。通过累积贡献率,算法可以动态评估句子...
通过100%的雪崩测试,IPTG011N08NM5证明了自身在极端过电压条件下的可靠性,为设计工程师提供了一种具备高安全边际的选择。此外,该产品完全符合RoHS标准,采用无铅镀层,并满足IEC61249-2-21的卤素含量规定,使得这...
在撰写和准备大学毕业论文答辩PPT的过程中,一个系统化、内容详实且视觉效果优秀的模板是不可或缺的工具。该模板不仅需要将研究内容以清晰、有逻辑的方式呈现,同时更应该强调信息的可视化,以便于答辩者和听众之间...
2. **使用强势语言**:在描述自己的经验和成就时,避免使用过于被动或模糊的词汇,如“参与”、“协助”,而应使用“计划”、“设计”、“领导”等具有主动性和影响力的动词,展示你的能力和影响力。 3. **具体成果...
实验证明,此类系统在农田信息采集方面表现优秀,特别是在水稻抽穗期的评估上,数据与实际情况的吻合度较高。此外,系统具备视频传输功能,能流畅展示农田图像,通过视觉分析辅助判断作物生长状况。 【技术发展趋势...
6. 示例作品:展示已完成的翻译项目案例,以证明服务质量。 在实际应用中,开发人员可以自定义这些页面的内容和样式,以满足特定公司的需求。Zp_demo.demohuo.top_27这个文件可能是该模板的压缩包,解压后将包含...