闲扯计算机编程中的理论和实践

类别:软件工程 点击:0 评论:0 推荐:

转载自 ITBase.CN @ 基地论坛

http://bbs.itbase.cn/viewthread.php?tid=21&fpage=1

作者:Logos

转载请注明出处

-------------------------------------------------------------------------------

   我们知道,理论是来源于实践并经实践验证过的经验,有了这些已经确认的经验,我们在对未知世界探索过程中才可以更加快捷,准确。这就是所谓理论对实践的指导多用。而反之,只要经过多次的实践过程,我们总能得出一些或多或少的经验,而这些经验中或多或少的包涵着一些必然的因素,如果能从中加以提炼,也总会得出一些理论性的东西。这就是实践对理论的推动。任何探索和求知的过程不过都是理论与实践反复作用的循环,计算机编程技术也不例外。
     
    无奈我们在现实中经常看到重实践而轻理论的情况,太多太多的年轻人拥有满腔的热情,义无反顾地在多种开发工具中徜徉而乐此不疲,他们会因为多掌握一门语言而骄傲,会为了知道某个技巧而兴奋,会为了完成某个算法而自豪.......但却不从没有腾出过一点点时间来总结归纳-----或者他们不愿意,或者他们没有意识,但更多的可能是他们根本就不会。

    软件业有一个很有趣的笑话--------程序员30而衰,超过35岁的软件人员只能转行做管理。我之所以说它是笑话,是因为本人已经将至而立,但自我感觉比之以往的任何一年状态都好,而且我相信这种稳定上升的状态还会继续保持-------而这种情况在我所在的单位偏偏还不是特例,在我工作的4,5年间我所崇敬的几位前辈全都如此,我初来时他们都已全部跨过了而立之年,如今已至不惑的也不泛其人。   自然,我个人介绍性的文字不具备很大的说服力,但几乎每个IT人都知道的是这个所谓的“30而衰”定律好像只在我国生效,美国得程序员似乎到了30岁才说得上成熟,而50岁左右的程序员还是年富力强,其间最经典的例子就是当今世上可以称得上是世上编程第一高手的C#之父Anders Hejlsberg(同时它也是pascal和delphi之父,pascal的编译器其用汇编语言完成的)。

     究竟是什么造成了这样的差异呢?以创造性劳动为主的设计领域,似乎很少是这样的。

     很多人喜欢把IT业与建筑行业类比,我们便把目光也投入进来看看。我所知道的建筑设计院没有这种现象,建筑公司也没有,甚至连工程施工队也没有大量中年人面临淘汰的情况。那为什么偏偏在软件行业会有这样的情况呢?我也曾百思不得其解。

     随着年龄和经验的增长和我所在企业的壮大,我也渐渐有机会坐在考官的位置上给别人面试,也不可避免的接触到许多刚刚投入的这个行业的年轻人。慢慢的我终于揭开了这个谜底。

    现实的情况是现在中国软件业的门槛太低,而软件致富的泡沫又太大,加之国内教育在这方面处于一个低端水平,导致太多太多的满怀各种梦想的年轻人投入进来。可惜在这些海量的新生程序员中,又有太多人除了一个梦想之外别无所长。这些本不适宜钻研技术(甚至有些根本就不懂技术)的人混在其间滥竽充数,对团体而言是降低了整个软件行业的设计水平,而对于个体,面临的只是某种形式的淘汰。

     当然这种情况的发生也和我国软件业的现状有关,太多的软件公司从事的都是比较低层次的开发,市场的优势远远大于技术的优势。我们先抛去这些客观的不可抗因素,比较一下个体的差异。

     这些只能干到30岁的和50岁仍年富力强的程序员差异究竟在哪里呢?我逐渐发现,那些让人尊敬的前辈无一例外都拥有极其扎实理论知识作基础,而那些很容易被岁月所淘汰的也无一例外的好似水上的浮萍------虽然他们或多或少的有那么一张用来证明自己能力的纸片。

     看到这篇文章的每个人无疑都能熟练的读写汉字,但未必都能写出优美隽永的文章,因为我们缺乏必要的文字训练和修辞学等必需的文学基础和文字修养。同样,熟悉某种开发语言的人也不一定就能写出质量完好且运行高效的程序------如果他同样缺乏相关的实践和必要的理论知识。任何一种开发语言不过都是对计算机工作流的一种描述,因其着眼点和描述的方法不同,才有了各种语言之间的差异。所以我们可以得出结论:开发语言始终只是工具,而决定某种工具最大效用的只能是大脑。我们使用工具是为了得其便利,而万万不能比工具所束缚。而想不被它所束缚的唯一方法就是超越语言表象的限制,做到不畏浮云遮望眼,只缘身在最高层。

     众所周知的是编程语言里面最难的就是汇编,它是面向具体芯片和具体外围电路的。如果一个利用汇编开发的硬件工程师在选用了一款新的芯片(在嵌入式开发领域,这是最常见的事情),他该怎么办呢?他不得不去阅读该芯片的说明资料,学习这种芯片的汇编语言(一般高校作为教材由清华大学出版的汇编语言教程已经不能用了,那是只能针对Intel 8086/8088芯片的汇编,换了任何一款芯片,从寄存器数量到种类,栈的方向乃至字节存储顺序,指令字长等等等等都会不同),掌握一套全新的汇编指令集之后,才能进行开发工作。经常周而复始的更换最难的开发工具,他们是怎么做到的呢?因为他们的着眼点根本就不在语法细节的实现。他们所具备的知识和经验使得他们把握的是每种芯片和电器元件作为“物”的共性,而依托于其上的汇编也就很容易被他们看透。如果理解了这个,那么请你相信,有人转换高级语言只需要一本手册,而几乎不必花费什么时间。
    (未完,待续)   

本文地址:http://com.8s8s.com/it/it31547.htm