深夜想起来,就乱写两句。

  我希望的,不是挣很多钱,当然要有;也不是有很多各种身份的头衔,那些还不如多点钱好呢;也不是到处能金屋藏娇,当然是想找一个中意的女孩相伴一生的(现在还没,大家有合适的快介绍来了解救我呀)。我希望的是,找到银弹。不管是别人已经做出来的,还是需要自己去做,我想找到它。

  人月神话历时三十年,从没有银弹,到依然没有银弹,难道说,软件业就真的只能象现在这样在危机里,如同焦油坑里的巨兽一样,挣扎下去吗?我想不是的,我的有生之年,应该是可以看到的,因为自我感觉有生之年应该会很长,至少八十年,说不准能上百年咧(很有可能哦)。

  从六十年前计算机在战火中诞生,我们就开始编写程序了。最开始的时候,自然是机器码,汇编码,到处是jmp,也就是goto了。许多意大利面条式,我们现在所谓“混乱”的程序,却把卫星送上了天(当然,也有一些上去一半的)。这样混乱的局面没持续太久——仅仅针对历史学家而言。

  首先出现的“救世主”是结构化编程,我想,标志应该是1971年N.Wirth教授提出Pascal语言吧。而且有数学证明了,所有的程序流程,都可以通过简洁明了的选择、循环、顺序三种结构来实现,把goto送到了冷板凳上面。同时也出现了软件工程的进步,瀑布模型的提出,自顶向下分析方法。最初学BASIC语言,看谭浩强教授的书,就对“自顶向下,逐步细化”印象很深刻。这些软件开发方法学方面的进步,虽然没解决最终的问题,但是无论如何,是迈出了很大一步。

  然后,就是面向对象编程思想的提出了吧。具体的时间,我不知道,但是C++的开发是在八十年代开始的,而那时候还有SmallTalk可以借鉴,应该是在七十年代提出的。还有泛型编程、迭代开发等等,他们,同样不是把软件开发方法很大的提高了么?当然,他们依然没有解决最终的问题,但是我想,到了这里,就已经可以解决我们在日常开发中的大部分问题了——之所以依然存在,那是因为我们还不合格。

  接着的,就是对面向对象思想的发展了。就我目前接触到的东西(我接触到的很有限),还没比面向对象更具有革命性的编程思想的提出。在对面向对象的发展中,我最欣赏的是设计模式和针对契约编程。设计模式确实是经典的总结,但是它经典的地方不在于总结出了模式,而是它对面向对象思想那炉火纯青的应用。在真正开始学习设计模式之前,我对virtual关键字毫无了解,但是看完了设计模式,印象最深刻的,就是virtual!抽象、提炼、统一接口是我在学习了设计模式以后印象最深刻的东西,具体的模式,还真的记不得了——二十三个,你能都记住吗?看那本书的目的,不应该是学习那二十三个已经总结出来的模式,而是应该学习那二十三个模式是怎么使用面向对象的思想来解决问题的。不过个人意见,设计模式仅仅是发展和总结,没有进步。针对契约编程,我了解的很少,到目前为止还仅仅是知道了个皮毛,但是我觉得它就不仅仅是发展和总结了,而是在总结的基础上的进步,因为我感觉,它是在一个数学的基础上,提出了对错误处理的解决方案。它是一个突破性的进展,虽然很小。

  最近的,我知道的是敏捷开发、测试驱动开发、UML、RUP等等。可惜对它们没有什么心得,但是它们的出现,一方面的意义固然是提高了软件开发的效率啊,但是我觉得,更重要的是如此泛滥的软件开发方法学的提出标志着,我们,依然在进步,而且是在以远远超过以前的速度在进步。我们进步的方向,就是那颗能解决危机的银弹。

  银弹是否存在,姑且不论。但是看看计算机科学的发展,难道不是一直在进步吗?而且经常有很大的进步呢。结构化编程的提出,在那个只有JMP和goto的年代,不是近似乎划时代的进步吗?面向对象的提出,在大家只知道三种结构的时候,不也是给人豁然开朗般的感觉吗?每提出一种可行的新理论,我们就更加接近银弹,只要这样下去:

  如果银弹存在,我们就一定能找到它;

  如果它不存在,我们就一定能无限逼近它。

[原文在百度空间已经关闭]