从DDD说开去,流行方法论和我们的未来

首先澄清一点, 我这篇文章中菜鸟来菜鸟去叫嚣, 仅仅是为了配合文章主题, 不代表我本人对比我更聪明、 更有能力的人的否定; 只是某些牛人借以成功或者出位的东西, 其价值放到更久远的过去与未来, 其作用放到形形色色的具体环境中去, 究竟几何, 我个人认为必须持谨慎甚至怀疑的态度; 更不论跟我们的生存相关的那些问题了。

既然有那样的人和那样的组织, 可以通过产品、 书籍、 某某大奖、甚至自己的从业经历以及地位等各种各样的方式,行使他们的宣传能力所具有的舆论暴力, 让众多希望凭借掌握某些东西从而获得更好的生活、 更多的心理满足的人们随声附和, 那么我想, 我也应该有在夹缝中惊声尖叫的勇气。



从DDD看方法论的产生与流行

以前大概了解过一下DDD, 也下载了电子书(因为不确定值得一买), 吸收了其中一些想法, 放弃了另外一些。刚才看一兄弟的博客, 看又提到DDD, 顺着他提供的链接, 下载了InfoQ的DDD简版, 打算重温一下。

怎么说呢, 也许是关注点变化了, 我个人认为DDD在交流到分析这一块还是相当棒的, 但是从分析到设计再到实现, 尤其是一些结论, 很多是菜鸟对自身能力不足的屈服。 也许某个不小心点入我博客的人, 正在跟随这些“菜鸟”, 那么您的感受我是可想而知的, 事实上, 我自己也是个菜鸟, 而且我本来决定不再提这些招人厌烦的话了。

我自己是个年轻人, 不是老古董, 在接受新事物上绝无问题。 但是我深刻的意识到一件事, 如果我本人在杂乱的领域知识与最终的设计实现的千头万绪之间, 感到难于处理, 也许我也会屈服。 事实上这就是DDD和很多方法论的核心所在。 我只想说一件事, 包括我自己在内, 这世界哪儿来的这么多没能力还要承担责任的二把刀? 这样的情况会一直持续下去么?

当然, 我并不是再说这个精简版中对“拿C模拟面向对象”的抨击。 我很久没使用C工作过了,也不喜欢C,因为它没有提供足够抽象的, 用于表达的措施; 也不是在反对诸如此类的任何一个说辞,这些话题太具体了。我想说的是: 计算机软件行业发展到今天, 已经提供非常多的手段, 让我们可以采取各种各样不同的抽象。  DDD,或者其它一些方法论的问题在于, 因为某菜鸟大牛和其追随者们不具有掌握其它抽象手段的能力, 或者仅仅是主观的不愿意再花力气对其它抽象手段做出思考, 于是就号称, 这个事最好这样, 最好那样。

同样的,当采取一个他们认为可以掌握的方法进行下去, 碰到问题时, 人的一个非常自然的反应, 不是否认自己, 因为除了自我肯定, 还有很大的一方面是否定既定策略所带来的庞大成本: 重新学习、 思考和实践。 在这种情况下, 顺理成章的, 他们就需要采取可以弥补上一个决定的方法; 这样一步一步走下去, 其中一些聪明人居然也弄出了某种自圆其说的方法论。 当这种方法论的效果处于可接受的范围内, 尤其是更重要的, 他迎合了广泛存在的、盲目和容易满足的菜鸟的时候, 这个方法论就流行开来。

另外, 某些方法论的跟随者, 说起其拥护的方法论的态度是刺激我发表这样的言论的动机之一; 因为他们所拥护的东西, 其提出者甚至也没有像他们这样肯定, 这在我看来是荒谬的。 比如一些方法论的提出者论证他的方法论适合某某类型项目的文章, 本身就已经说明, 其实这些东西在真正值得说服的群体内, 根本就没有得到足够的肯定; 甚某些文章的语气, 让我这样的怀疑者可以看到那么一丝若有若无的不自信。

但也许这就是人类做事的解决之道: 既然我们的社会还不具有一大堆能够将现实世界的问题和真正艰深的科学理论联系起来的顶尖工程师, 也没有出现一群真正的大师拿出对大多数问题解决方案的总结,而事情总是要做的, 那么不如一步一步的来, 让菜菜鸟们跟随菜鸟的优雅, 采取次一等的做法总是要比什么都不做来的好得多。所谓山中无老虎, 猴子称大王, 就说明大王存在的必要性了。

在这里有一个结论, 就是我话虽然说的这么难听, 但是它们是正确的尝试

是明星给出的扶梯,还是我们全体刨出的大坑

既然流行方法论对大多数人来说是正确的尝试,那为什么我又要哗众取宠, 特立独行呢? 难道说扮演小丑真的让一个人获得心理满足吗? 原因有二:

其一, 根本性的, 上面这个结论, 其条件是当前现实环境下。

我们也许可以假设90后, 2000后, 也像我们这么笨, 当他们成为工程师的时候, 情况仍然得不到改善; 就好比相对论已经提出了这么多年, 量子物理的发展也有那么大的进展,连传说中“造黑洞”的对撞机都马上要启动了, 但是大多数人连牛顿说的那点东西都没有学好。 但万一事情不是这样呢?当90后走入社会, 挑起大梁时, 想想我们面对的是什么呢? 再观察一下我们周遭的世界, 我完全相信, 即使在老古董中, 也存在着有足够能力, 采取更好、更正确的做法的真正的高手。

拿我们最最熟悉的数据库应用举例: 假设一个问题实际上被关系模型描述是最佳的解决方案,并在这个方案中, 已经不存在需要其它手段辅助的空间了。 相同的这个问题上,你我采用面向对象, 很可能不是因为你我高杆, 恰恰是能力不足的表现: 因为你我不知道如何提炼出一个正确的关系模型, 同时, 那些菜鸟大牛们也不知道, 于是作为菜菜鸟,我们就愿意跟随菜鸟们的方法, 选取一个你我能够掌控的方式; 但这并不意味着没人能做到。

除此之外, 还有另外一个危机: 随着信息化的扩散,一些问题的解决方案被提炼成一套工具, 人的工作在绝大范围内被取代。从根本上来说,一些工程如果通过自动化来完成其绝大部分, 软件机器的内在运作, 根本无需搞什么与现实的对应,某些其实是帮助菜鸟(如果你愿意, 把这个词换成“高手”也未尝不可)的方法论, 也就变得微不足道了。

在这里, 让我们关注一下关系模型这个领域本身, 想象一下如果没有SQL, 甚至没有数据库, 让你我自己来处理, 能做好的概率有几成?实际上,这里有一个最好的例子, 我们只能趴在数据库上干SQL、对于任何不爽只能等着厂商升级,这一现实说明: 如果让我们自己处理关系模型本身这个领域的问题, 你我根本没有能力做出好的设计和实现。  那么在任何其它领域, 你我有正确抓住事物实质和理论依据,快速创造和正确实现一个用以描述业务的系统和语言, 以更好的贴合业务需求的能力吗?

当然, 不但你我不能, 世界上大多数人也不能。 这就是你我能够放轻松, 并且满足于现状的原因。可我们不要忘了, 有人能: 就是那些没有使用这些方法论, 而是使用了自己方式、发展了独特能力的“落后者”。 “牛”们告诉我们说,软件既人件, 放心, 我们不需要普通人没法读懂的程序。 也许我们暂时安全了: 的确,他们中间的一些将被彻底淘汰, 甚至无法与方法论跟随者向竞争; 但一些人将走到最后, 让所有号称“人掌握复杂度的能力有限, 于是我们应该如何如何”的家伙被机器送回老家种地如果我们家里还有地且还没被机器占领的话。当然, 那会儿方法论的始作俑者就像一切明星一样,肯定是买地买游艇了。

也许某人会说, 独特性的项目成千上万,大多数项目也没复杂到需要做像数据库这么复杂的系统这样的程度, 那样成本太高了。 不过, 在我的观察中, 很少有问题是独特的。 一个人、 一个组织存在的问题, 往往其它组织也存在; 而且随着IT技术越来越多的普及到社会的各个层面, 共同性最终会浮出水面, 导致就某个所谓的“领域独有问题”开发一套类似于数据库系统的东西变得有利可图。

其二,社会性的, 某些方法论的多米诺骨牌, 会造成什么样的效果呢?

即使是那些确实不需要建立复杂系统的问题, 本来可能存在更好的解决方式(比如分析、设计、实现等各个方面), 但这些方式很有可能被埋没了。 考虑我说的不同的抽象手段, 大多数人的第一反应是什么? 我想恐怕是: 其它抽象手段在哪里? 或者是: 哦,XXX啊, 早被证明不灵了; YYY,那也是给人用的; ZZZ, 太不成熟了吧; 至于那啥和那啥, 不符合某某大牛(就是他已经决心跟随的那个菜鸟明星)说的原则。

由于在初期因为各种各样的原因, 获取了更多的关注和资源投入, 流行的东西容易得到加强; 这逐渐在整个社会(甚至影响了根本跟技术无关的圈外人)形成一个正(不是说是好的,而是增强的)反馈, 最后导致坏的(或至少比较勉强的)的方法, 逐渐变成表面上好的,深层次的矛盾被掩盖了; 而针对某一问题更合适的方法却得不到发展。 这对于有志于实验和流行方法截然不同的道路的同志, 变得无计可施: 只要他需要跟别人交流与合作。 (但是有什么东西会被一直压制吗?)

说实话, 我现在开始体会毛主席的教导了: 笔杆子、 枪杆子夺取政权的两杆子。 以前我不知道为什么宣传部门会得到50%的重视,但是看看现在技术圈子中的明星和他们所引领的风潮, 再想象一切暴政之初其组织在人民群众中掀起的波澜, 一切都豁然开朗。比起政治,在开发者社区还有另外一个因素, 大型商业公司的角色是非常暧昧的: 大多数时候是推波助澜(因为新方法论只要不是破坏性的往往意味着进一步发掘市场潜力),一旦上道, 即使以它们的实力, 也无法再左右什么了。虽然大型商业公司并不见的会主观拒绝小众方法论, 但对他们来说, 在某一时期内更好的策略是让流行的那个更流行。

这造成的坏处有几方面: 由于隐藏在深处的问题, 造成从社会到组织再到个人、从分析到设计再到实现的各种浪费; 因为上面所说的这种众人拾柴的效应,所造成的社会资源的分配, 更适合的解决之道其研究和进展所需的空间将被压缩; 另外,随着问题的累积, 补丁的方法开始失效, 有一天爆发了, 多少开发人员会翻船呢?那会儿, 我们还有精力学习本来多少年前就有机会接触的其它手段吗? 是的,从历史来看,结构化 到面向对象, 是一个渐进和升级, 但我们能保证所有的变化, 都是以这种温和的方式吗?

至少有一点是可以判定的, 那就是:即使社会上大多数开发者和商业公司, 跟着一些流行明星瞎吵吵,以至于社会资源的绝大部分分配到对现有开发手段在方法论和产品上的改进(对商业公司保护投资和一般开发者有都好处的),也只能延缓,而不能阻止“破坏性技术”的出现(让一般开发者的岗位甚至商业公司的某一块现有业务消失的)。 注意我括号里的两个说明, 就可以体会做技术行当, 大多数人和组织的恐惧到底出自哪里; 或许, 投靠技术明星, 和火烧布鲁诺, 在根源上并没有什么区别。

当然, 对现有手段的改进本身是好的, 只是对流行方法论的追捧所造成的各种浪费, 至少对于我们个人而言, 并不能解决什么: 50岁饿肚子比30岁饿肚子, 唯一的区别就是那时候我们重新选择的机会要小得多。所以从整体来看, 流行方法论改进的尝试, 仍然值得鼓励, 但我们的热情应该比现在的追随者们谨慎的多: 当成一种临时性的措施, 也许是一种不错的态度。

我们的路在何方?

那我们怎么才能保证自己的安全呢? 说实话, 这个问题我不知道。 我能想出的道路, 也就这么几种: 改行, 世界上还有的是暂时不会被机器取代的活儿;成为应用或应用推广者, 这样每一个变化都只能让我受益; 成为方法论倡导者, 不过想和Fowler之流一争高下也不容易; 成为龟兔赛跑“落后者”, 也许最终的下场更惨。 这又回到了认清自己是干嘛地的这一问题, 也是我曾经提过的职业规划的重要性。 只是上述可能性,无论哪个角色哪种选择, 都不会包括“把技术明星和他们倡导的东西当回事”这一要素。

我倒不会特别抗拒被踢出局那一天的到来, 甚至我们应该欢迎它:正是一些科学怪老头儿的贡献, 让很多没啥独特之处的二把刀坐在这里写程序; 那么一些新的怪叔叔又把这些二把刀轰出门去了又如何呢?我无法掌握自己的命运,毕竟我是这些二把刀其中一个; 如果不那么圆滑而且真小人一点, 顺便做个“我倒霉你也别想好”的提醒,  看这篇文章的你9.9成的也是。 一个简单的判断标准是, 如果你是那0.1成,不凑巧看到本文, 你不会因为我说了什么难受或者生气 :)。

话说到这里, 点到为止, 也许我是杞人忧天、不知所云、愤青、幼稚、浮躁、无事生非也不一定。

更多的想法

事实上, 写到这里, 我已经开始犹豫这篇文章是不是应该发出去了。 我不祈求大多数人理解我说的是什么, 如果一个人心里已经有所选择, 而且扮演菜鸟和菜鸟的跟随者这个选择在未来可见的10年内,让他可以满足于相对于其它行业和本行业菜菜菜鸟的高收入甚至获得价值上的满足感, 让他自我否定基本是不可能的; 尤其如果他是一个见识广博的高手(当然这个高, 只是和我这个永远的初学者相比),已经投资了太多精力的话 。

要说的是, 我首先否认的就是自己, 考虑到这一点, 也许反感我的人就可以稍稍舒服一点。 更多的, 这篇文章可以看做对和我抱有相同疑虑的人的一种鼓励。 对于和我相似的人, 我不希望他们被流行趋势逐渐吸引, 那样我又少了一个伙伴, 如此而已。当然,我可能是错的, 如果我是错的, 我自己首先就是一个受益者; 其次, 如果我的素质决定了我也永远只能是一个菜鸟, 菜菜鸟, 或者菜菜菜鸟, 就像上面说的, 我也只能屈服; 10年之后,也许你会看到我也在鼓吹什么“真谛”也不一定。

不过无论我最终采取的做法是什么,我仍然认为,仅仅知道菜鸟的解决方法是不够的; 知道谁(包括我自己)是一个菜鸟, 并且知道为什么是一个菜鸟, 本身是有益的。无意争执, 听着顺耳的不顺耳的, 一笑泯之吧。

也许这样说更接近于过去和未来已经发生和将要发生的事情: 到80年代为止的计算机科学的成就, 让我们今天可以做到这里参与这个工作,因为这成果还不够好, 需要低水平的人力参与;80年代末到今天,在这些参与其中的人力中间, 出现了一些聪明人, 试图解决二把刀干活不利索的问题; 不久远的未来, 新的成就由于不再需要更多的人力, 最终彻底解决了这个问题。 这不是IT简史, 而是我们身在其中的开发史, 或者说, 我们自己就是活的历史。

最后, 又有多少人记住我们这特殊的一群呢?



鉴于我人微言轻, 提示一下, 在B4我之前, 请想想为啥还存在McConnell这样的作者不像其它“大牛”那样热衷于宣传某一方法论, 也了解一下Joel抽象泄漏的说法, Linus所谓的精神包袱, Knuth对一些流行事物的评价,Gabriel著名的“坏的成了好的”, 等等。这些东西和我的文章虽然不见得有直接关系, 但是如果对这些讨论有所思考, 也许会对理解我可笑的忧虑有所的帮助。

这些资料Baidu不到的,可以在wiki和英文Google上找到。 我相信,主动的获取, 应该比被动接受来的要好。

Update: 1楼真强, 在我关闭评论以后还能发帖, dudu查一下吧。我决心开放评论了, 敢说, 就要敢于挨骂。 不过我不会具体争论某一个方法论的好坏, 那没有意义: 就像我所说的, 作为一个菜鸟, 说不准我自己或多或少就在使用它; 但是如果我只能停留在使用“旨在帮助有限的人脑”的方法论的水平上, 我能不担心吗?

posted on 2008-06-27 05:17  怪怪  阅读(5803)  评论(55编辑  收藏  举报

导航