SUMTEC -- There's a thing in my bloglet.

But it's not only one. It's many. It's the same as other things but it exactly likes nothing else...

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  263 随笔 :: 19 文章 :: 3009 评论 :: 74万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
这个问题我想也许有人的答案都跟我以前的答案差不多,不就是解决实际编码当中所遇到的问题吗?不就是解决怎么设计一个程序的问题吗?确实是这样,但这只是表面现象。如果没有深入的挖掘问题的本质,就可能会错误的是用这些知识。

最近在JGTM2004这里工作的时间,我学到了不少东西,有了更高的觉悟,对这个问题的理解就是其中一方面。以前我就没有仔细去想过这个问题,并且站在一个实际做开发的人员的角度来看,自认为这个东西就是为了减轻开发人员的负担,并且为最终产品提供更加优良的特性。其实这个只是一方面,并且就我目前的理解觉得可能还是一个次要的方面。为了阐述这个问题,我不妨举一个具体的例子:

某天你接到一个项目,客户说,我们需要一个对树型结构的数据节点进行遍历,同时对这里面的数据进行一个统计,你就开始噼里啪啦的敲键盘编码了。但是过两天客户跟你说了,现在要添加一个新的统计,于是你就开始辛辛苦苦的进行修改。再过两天用户又说了,去掉原来那一个,只要后来增加的部分。等待产品快要发布了,用户一看,说:“哎呀,看来这样还是不好,你还是给我显示原来的统计数据吧。”等到展品发布之后过了一个月,用户打电话找你然你进行维护——当初没有说清楚,实际上要遍历的数据是网络型结构的……

现实确实就是这样的,事情总是在变。唯一不变的就是一直在变,这个确实是一句名言,甚至就是真理。我想大家也一定认同,问题是作为普通的程序员,可能没有意识到这个变化是从一开始进行开发就出现的,并且在整个产品的生命周期里面,出变化最多的可能是产品发布之前的阶段。而产品一旦发布了,用户通常也能够理解有一些东西改变起来不方便。如果我们从管理高层的角度看问题,可能会更容易解释这个问题。实际上制约一个软件成功的最大要素并不在于技术,而在于两个制高点——“创意”和“市场”。创意我们不谈,我们就说这个市场。你的产品是否买得出去,在于你的产品是否能够适应并满足市场的需求,不能够满足需求的东西显然不可能赚钱。至于你的技术怎么样,用户根本就不关心,甚至你的产品写的很垃圾都好,只要你能够满足用户需求满足市场需求,那就一定赚大钱。那么怎么才能够尽最大的程度满足需求呢?在一个项目的最开始,我们肯定不会非常清楚。如果我们按照自己一知半解的假设去做,那么最终做出来的东西可能就不是用户所需要的,至少是用户所最需要的。所以我们需要用户给我们提出需求,到这里就是传统软件工程学里面的思想。很可惜的是,用户根本就不知道自己需要些什么,而我们对于用户想表达的是什么更是没有头绪。


因此我们只好不停的跟用户接触,不停的把我们现阶段的东西展现给用户,哪怕没有具体实现,哪怕背后的数据都是假的,也要给用户一个Visualize的东西出来看看,这样用户才有可能把需求说明白:噢,这个确实是这样的,那个我不需要,但是我需要的是什么,能不能这么改,这么操作我不习惯,我就要那样的……有了这个你才可能进行更进一步的设计。这里就已经出现了一定的需求变化了——由于原始需求的定义是粗糙的,没有经过验证的,而现在进行了一定的验证之后可能发现原来的想象可能有问题,需要修改。于此同时,你也需要谨记,客户可能会随时反复。只要你的产品没有正式发布,你就没有理由不去响应客户的需求变化。因此你做出来的东西应该能够随时地,方便得在某种程度上面进行修改。简而言之,在设计和开发阶段,需求的变化是最为剧烈的,这种变动的次数可能会很多。怎样有效率的适应这些变化,我觉得可能是设计模式所要解决的一个很重要的问题。

我们来假设一下,某个客户一共会更改10次的需求,如果你每次接到需求变化之后第二天就能够把修改过的演示版本提交给用户评议,而我则每次都要花费10天的时间,我们两个人之间的差别将会是多大。事实上市场的变化速度是相当快的,可以说一年前的产品基本上就进入了淘汰序列,如果你还在卖一年以前普遍使用的技术,那就是一件危险的事情——这表明你跟不上时代的节奏,不可能拉到大量的订单。这说明现代IT行业的产品有一个非常重要的一点就是从“创意”到“市场”这两点之间花费的时间越短越好,也就是要求你的开发效率要高。如果你的设计灵活,能够有效地应付变化,那么你就在这一点上面成功了。

当然,这只是其中的一个方面。今天关于这方面问题的总结就暂时到这里,以后还有什么想法再贴。
posted on   Sumtec  阅读(1594)  评论(13编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
点击右上角即可分享
微信分享提示