我见过太多的代码(我自己以前也是),只注重实现功能。国内绝大多数的程序员都以为实现了就成功了。在开始敲键盘之前,有多少人想过即将被创建的代码会有多少的可维护性?是准备创建用完就扔的代码,还是需要不断升级、改进的代码?如果是需要长期被维护、改进的代码,在最初的时候,如果只是注重实现,而忽略整体框架的设计,那么最终等待程序员的只是无数的bug和灾难。
其实,相对来说,实现是简单的。你能够实现的东西都是基于平台或者特定软硬件环境的。你所实现的,只是因为平台提供给了你这样的功能而已,这个实现并不是你创造出来的。而框架的设计就需要相当的经验。没有人可以一开始就完成一个优秀的框架。
在一次工作中,要为Delphi写几个简单组件,组件类之间有继承关系(很简单,只有两层而已)。对于这个非常微小的“框架”,在最初有了“想当然”的设计之后,就开始动手写代码了。完成父类层的组件后,在写派生类的组件时,才发现当初的“设计”存在问题。那时我奇怪自己当初怎么会有那么奇怪的想法,构建这样的框架。在写到派生类组件时,才发现有些东西是那么的理所当然,而在最初设计的时侯的想法却与之相反!于是,重新构建这些代码,幸好,代码量不大,即使重写,也没有花费多少时间。
我想说的是,即使一个那么简单的框架,我是在第三次重写后,才将其确立下来。同时,获取了宝贵的经验。设计的难处在于,人的思维习惯是从下往上,逐步抽象的。但是,在类的框架设计中,去需要从上往下的设计,也就是逐步细化。而一旦在原始类(如:VCL的TObject)的设计上存在问题的话,那么随着类层次的展开,问题将会逐步放大,最后可能会导致整个框架的崩溃。这就要求设计者具有丰富的经验!
我从不相信程序员的寿命只到35岁,也许35岁以后,实现能力(其实就是工匠能力)有下降的可能,而设计能力是随着经验的增加不降反升的。这才是最宝贵的。
国外的软件开发小组,一般的骨干都是40岁上下的人,那些才是大师级的程序员,而所谓的过了35岁就不能当程序员的程序员根本没有资格被称为程序员。
而软件工程是要将程序员变成编码员,变成流水线上的一环,设计工作由专门的设计师完成(如框架设计师)。也许,分工细化是趋势,但是,我们是满足于做编码员还是希望成长为设及师,取决于我们的眼光及努力。
放开眼光,而不是将自己局限于、沉迷于“实现高手”。实现能力是基础,有一定的实现能力才可能成长,但是,它只是必要条件,而不是充分的。否则,就象爬到山腰就以为自己到了山顶,停滞不前了。那么,你只可能是编码员,你的程序寿命也只到 35岁。
努力积累经验,并且要学会积累经验。有句话说得好,聪明人与笨人的区别并不在于其不犯错误。真正的区别在于,聪明人不会两次犯同样的错误。
|