在软件设计的过程中,我们经常会面临这样的诱惑:

在工作过程中,突然出现了一个问题如鲠在喉,阻塞住了当前整个的工作进度,

而同时,你立刻能够想到一个快速搞定该问题的方案,这种情形下开发人员,很

容易就会受到快速解决问题的诱惑,快速地给出fix,然后继续推进到后面的内容,

维持那种开发过程中酣畅淋漓的快感。但是在开发过程中,不可避免会经常性地遇

到问题,如果经常性地给出快速的fix,到了一定的阶段,可能就会发现,现有的

系统处于一种补丁落补丁的状态,看上去不舒服,在这个不舒服的基础上作后续

的开发也很难受。如果一定要继续坚持维持这个不够好的设计,也许,最终产品

还是能够开发完成,但是它的扩展性,稳定性,可复用性,可修改性都会大打折扣

这种对问题快速给出fix的方式,在产品维护的阶段,尚可运用,当然前提是产

品本身的架构设计得足够好。但是在产品的设计阶段,在早期开发阶段,还使用

这种方式,则可能会带来较大的负面影响。

这样的体验,最近自己就有这一回。

最近一直在设计一个处理语意部分的evaluator,期间也遇到了不少问题。初始

给出的设计在后续的实现环节中发现有一些局限,但是 在实现的过程中因为过于关

注进度,也在一定程度上受到持续推进的顺畅感的诱惑,自己并没有停顿下来审视

原先的设计,而是稍作思考,给出一个快速的fix,能够解决当前的需要之后,就

继续进行到后续的开发中。虽然在编码的过程中,已经感觉到有些底层数据结构设计的

实在谈不上舒服,为了解决设计问题,引入coding trick的场景也不只一处,但

是身陷其中,并没有想过站起来,从更高的角度进行思考。及至代码基本编写完毕

,开始测试,暴露出一些bug,需要进行修改的时候,才更充分地体会到现有的设计

的局限性以及这种局限性给维护和扩展带来的开销。这样束手束脚地调试了差不多

一周的时间,基本功能倒是调通了,但是有些不爽的是,这种调通的感觉完全是建立

在调试经验之上的,刨开调试的经验和fix的一些bug,从流程上和框架上来看,自己

对现有的这个版本实现的品质并没有太大的信心, 简单来说,让自己闭上眼想一想,

现在的这个设计,这个实现,在品质上是不是达到了自己的要求,是不是在自己的控制

范围内,还是一件说不太清楚的事情。对于一个工业级的软件产品来说,这种控制感实

在是太虚弱了。考虑了一天,跟老大也沟通了一下,决定对evaluator进行重构。从底

层的数据结构的定义,到基本的流程框架,乃至具体的实现,几乎全部要作一番调整。

短期来看,这种调整会给进度带来一定的影响,但是在项目的初期阶段,对于根基性的

东西,还是值得花费较多的资源作精作细,这样后续的开发才可能有一个良好的基础。

P.S. 这段时间一个比较深的体会就是,当你感觉需要实现的某个模块过于复杂,条理

不是非常清晰,或是需要引入特殊的coding技巧来解决一个问题的时候,往往意味着更高

层次上的设计和架构潜伏着问题,所以这种时候,要控制住埋头实现复杂逻辑,引入trick

快速解决问题的冲动,缓冲一下,站起来,审视一下,是不是可以从更高的层次来简化问

题,给出更好的设计,消除引入特殊trick的必要性。

软件设计过程中的诱惑相关推荐

  1. 《挖掘管理价值:企业软件项目管理实战》一2.4 软件设计过程

    本节书摘来异步社区<挖掘管理价值:企业软件项目管理实战>一书中的第2章,第2.4节,作者: 徐勤 责编: 杨海玲, 更多章节内容可以访问云栖社区"异步社区"公众号查看. ...

  2. 界面设计过程中的常用字体规范

    好长时间没发帖,净想过年了,过年哈,倒腾工作总结和年货是大事. 这几天有人问我说:"最近看了好多教程,都老高大上了,但是老弟我做不到呀,想学点直接能拿来用的,这个要求过分吗--" ...

  3. 打开潘多拉的魔盒——软件设计过程(1)——序

    小序 <打开潘多拉的魔盒>--这是一系列文章,这些文章并不是真的要讲述潘多拉 MM 打开魔盒的故事.这些是技术文章,是要通过真实的案例来讲述软件系统的设计过程.本文中所采用的真实案例是网页 ...

  4. 产品设计过程中,如何理解用户任务

    我们做产品时有时候会陷入一个困境,我们以为用户需要的是功能,从功能入手设计感觉就像是雾里看花,不知道什么样的东西是用户想要的. 本文分享一种站在用户角度去思考"用户任务"的方法,希 ...

  5. 计算机在现代设计技术中应用,现代设计过程中应用计算机艺术的研究

    计算机已经深深的影响着我们生活的方方面面,当然也包括艺术领域.计算机艺术是数字化时代新兴的艺术形式.计算机对艺术的影响不仅表现在它能更有效率地创作,也给艺术与设计带来了新的风格和形式,丰富了艺术的表现 ...

  6. 关于测试软件设计过程管理的思考

    关于测试软件设计过程管理的思考 关于测试产品软件建设过程说明 平台测试环节管理 关于平台建设初期报表统计维度的经验 关于测试产品软件建设过程说明 业务方和软件实现团队方怎么能有效的沟通,这个话题一直应 ...

  7. 常用软件-安装过程中的小常识

    常用软件-安装过程中的小常识 主要通过安装金山打字通软件,来讲解我自己安装程序中用到的小技巧. (只适用于电脑小白奥) 完整安装过程 如下是安装金山打字通的完整过程,讲解了我自己的常用小技巧. 1. ...

  8. Niso II 设计过程中的时钟频率问题

    Niso II 设计过程中的时钟频率问题 一. Niso的主时钟 Niso硬件设计时的CLK,可不和板子的晶振同频(利用锁相环PLL分频) 根据不同的芯片其最高频率不同,可查询==<Nios I ...

  9. 《大话软件工程—需求分析与软件设计》,给出了分析与设计过程中需要的理论、方法、工具和标准

    □ 做好一款软件从哪里开始呢?→ 客户需求的调研: □ 一款软件的价值高低由哪个环节决定呢?→ 软件的分析与设计: □ 软件顺利完成开发靠什么?→ 高效的项目管理: □ 软件开发的主要角色?→ 客户. ...

最新文章

  1. LeetCode-笔记-131. 分割回文串
  2. 计算机界和数学界,也需要一个“希波克拉底誓言”
  3. (译) 函数式 JS #2: 函数!
  4. CMake 条件判断
  5. JStorm与Storm源码分析(八)--计时器工具-mk-timer
  6. 模型评估方法和性能指标
  7. 设置cookie存活时间_Django之cookie、session、token
  8. 026_JavaScript数组排序
  9. 众筹课 | 电气系统运维培训报名啦
  10. cli3解决 ie11语法错误 vue_从零到一教你基于vue开发一个组件库高性能前端架构解决方案...
  11. 蓝桥杯java第五届决赛第二题--六角幻方
  12. Topshelf 学习 跨平台
  13. Eclipse常用技巧总结:热键,自定义模版及其他
  14. 对口高考计算机vf试题,计算机对口升学模拟答案.doc
  15. 15.使用using和try/finally来做资源清理
  16. 《C#与.net高级编程》——第一支柱:C#的封装
  17. PHP正则淘口令,Flutter代码锦囊---淘口令复制弹窗
  18. 微信字号调整问题 html,解决h5 开发 ,设置手机字体大小微信设置字体大小 页面变形问题...
  19. 怀旧服务器联盟优势,魔兽世界tbc联盟服务器选哪个_wowtbc怀旧服联盟服务器排名_3DM网游...
  20. linux 使用 repotrack 下载 rpm 程序包及其所需依赖

热门文章

  1. 某HR引全网公愤:大专都是猪吗?只值200,然后...
  2. offsetof宏的实现(c语言)
  3. 东北大学计算机课程,东北大学《操作系统原理》2016春季课程主页
  4. 在全国断网的情况下我们如何上网?
  5. LeetCode专题:树与回溯(完结,已更50题)
  6. 物联网平台消息总线设计
  7. 浦发2019春招上海面经
  8. 如何实现C++中类编写的头文件和源文件的拆分
  9. (C++)矩阵模板类
  10. 长用不变的FTP账号