虽然,我相信技术之间有很多相通的地方,但是我不得不开始承认从Java到C++,从J2EE到DirectX,从高层应用开发到底层开发,这个跨度太大了。不论从WinMain函数的两个修饰符PASCAL和WINAPI中,还是从可以通过数种方法获得一个DirectDraw7接口中,我都发现了我所面对的世界是那样的无序,或者说,是有非常非常多的规则,我还没有办法及时去follow。不管怎么样,我发现我的关注点已经不同了。
原来公司的老总曾经给公司员工做过一个讲座,我已经渐渐淡忘了这个讲座的内容,但是我还是很清晰的记得他强调的一点:“当客户在陈述他们的需求的时候,要认真听,要把自己摆在一个不懂得技术的位置上去考虑用户的需求。但是我们很多程序员在听用户的需求的时候,在心里就会想该用什么技术完成,要如何提取对象,要如何设计数据表等等。这样是不行的,我们要关注的不是这些,而是用户真正的需求。”我开始怀疑了解__stdcall含义的价值了,因为这样的细节耗费了大量的时间,让我无法专注到我真正需要实现的东西上来。然而这是蜕变不可避免的痛苦,这些细节就是Windows开发领域里面的规范。为了能够更好解决问题,或者说,要想在Windows开发的世界里生存,就得好好了解这些规范。疑虑也就这样打消了,在冰箱里准备好足够多的Pizza和可乐,然后再加上一台不太好的NoteBook和一根与外界相连的网线,努力达到自己想要的高度吧。噢,我又想到了偶像——卡马克。呵呵~~
其实,当进入一个新的技术领域的时候,会有很多的规则需要去了解和掌握,否则没有办法将自己的注意力集中在所要解决的问题域上。就好象说,不懂得篮球的规则,没有篮球的基本功——如运球、投篮等,是不可能打好篮球的。当然樱木花道这样的天才除外了。我想,技术就是软件领域中的规则,丢掉了规则,不可能做出符合用户要求的软件。在Java的世界里,在语言上的规则要比其他主流语言要少得多,要集中得多;而在J2EE领地里,满眼的都是规范——J2EE 1.4,EJB 2.0等等,数不胜数。为什么Java降低了企业级开发的门槛,我想,其根本就是将规则收集,提炼,然后开放,让开发人员更加容易去follow,并且必须去follow。然后这个世界虽然很缤纷(开源项目层出不穷),但是并不纷扰,因为这个世界大部分情况下是有序的。反观Windows的开发领域里就没有这等好事了,通常都得靠一些牛人来写下汗牛充栋的Inside系列,Unleashed系列,其他开发人员才能领悟其精髓。或许是领域的不同,造成了两者在制定属于自己世界的规则的时候有很多的不同吧。不管怎么样,无以规矩,不成方圆。为了能够更好的解决客户的问题,就要将问题所在范围内的规则了解清楚,才能准确而快捷的解决问题。
大家都会赞同,真正的技术架构师不需要对技术的细节花费过多的时间,他需要将时间花在整体的把握上。我想如果从我以上的论述来看,架构师本身就是一个执行规范乃至于制定规范的专家。他需要时间来让程序员做得更规范,更准确有效。
知识范围就象一个圆圈,当你知道的越多,未知的也就越多。软件领域也是如此,如果只关注规则便会很快淹没在技术的海洋之中而无法自拔。我们需要不断地学习新的规则,更重要的是依据规则去将事情做好,从而培养自己对于规则的把握能力。就好比你通常不知道法律的每一个条款,但是你无形之中遵守了法律,因为还有道德这把尺子在规范着你的行为。因此我们需要花费足够多的时间去了解更多不同世界的规则,进行更多的实践,以打造这样一把尺子,以便我们能够准确的度量已知乃至未知世界的规则。
PS:看了Sumtec老大的文章,偶也来思考一下…… 这不,还好写完了,要不上帝的肚子都快笑穿了。