软件浅谈(一):敢问路在何方
流行的开发语言琳琅满目,总给人一种一入侯门深似海的感觉。新鸟初入,看着犹抱琵琶半遮面的种种语言,有的人犹疑不决,有的人则多多益善。
软件中凌乱的琐事大都过于抽象,所以隐喻往往是一种很好的诉说方式。小李想要买一把锤子,来到工具店后发现原来锤子有这么多种型号,于是他便呆呆地站在工具店的柜台前看着各种型号的锤子为选一把而发愁。营业员问:“先生,您买锤子是要干什么用”?小李恍惚道:“这个。。。我还没想好”。相信你也会为小李而感到好笑,都不知道要用来干嘛还买什么锤子,但这正是一些程序初学者的真实写照。
有一个想做出点什么的想法,就能更容易的选择工具,如果小李只是想给自己的爱犬建造一个小窝,那么他至少不会买一把攻城锤。并且当小李想要再做一组厨具的时候,之前买的锤子依旧可以使用,只是可能不再那么合适了而已。 因而初学者先给自己定义一个明确的目的是解决彷徨的好主意,比如要做一个简单的窗口程序,做一个简单的web动态页面,做一个简单的窗口输入输出程序。。。。。。之后你会发现选择一个入门语言其实没有那么麻烦。当然,你的选择一定要切合实际,你如果在没有其他高层理论、工具、人力的支持下挑着竹篓去搬山,那还不如安心的搬砖,因为你在没有感动天神之前就一定会被扭送精神病院的。
有些人担心这样选择可能会吃亏,现在面向对象的语言如此火爆,如果自己选了个过程语言进行学习不是比窦娥还冤?
两个汽车马达,一个动力十足,另一个丝毫不能提供动力,你觉得哪一个马达是有用的呢?“汽车马达”这个对象在失去了“提供动力”这个过程之后,就是一个可以随时丢进回收站的废品,所以对象永远不能脱离过程单独存在。更确切的说,过程的好坏恰恰是评价对象好坏的重要标准之一,就如同马达的动力是区分马达好坏的重要标准之一一样。
再美妙的对象也只能更好的封装和隐藏过程的实现,而不可能丢弃过程的实现,如同高端的马达有着硬朗的外观,合乎业界规格的外部接口,详细明确的使用说明,但这一切只是隐藏了“提供动力”这个过程的实现,而不是抛弃了它,因而学好过程语言是福非祸。
那语言的差异在哪呢?就像是霸气侧漏的攻城锤面对壁橱上松动的钉子也只能一边呆着干瞪眼一样,除了本身的使用环境、使用规则的差异以外,最大的差异还是来自于适用范围。有的语言适用于较高精度的科学运算,有的适用于实时控制,有的适用于编制网页,有的较适用于教学。。。。。。仅此而已。优劣之说,不过是座谈的闲话,百无聊赖的调剂,虽有可取之处,但更多的是自我安慰罢了。
不需要把眼光过度的关注于所用的语言,所有语言的诞生都源于一个本质目的——与设备交流,所以它们理论上是可以一通百通的,当然,前提是你在驾驭语言,而不是被语言的形式所束缚。深入一门语言,才能超脱一门语言,这看起来是一个悖论,但却是不朽的事实。只有不属于这个行业和在这个行业中未窥门径的人才会把语言的编写看做一件值得羡慕的事情,而老手们却在望向远方,他们知道,这只是整个浩大的软件工程中最基本的事情罢了。