软件行业理论太多 实践太少

来源:互联网 发布:linux mv和cp效率 编辑:程序博客网 时间:2024/04/29 03:31

一、中心思想

    本文将从理论和实践的角度分析在软件行业理论与实践的差距,将着重表达提高实践在整个软件行业的作用和意义;但是,本文不会刻意贬低理论的价值,理论同样非常重要。


二、软件行业理论密切依赖于实践

    软件行业理论和实践似乎比其它行业更加密切,原因就在于使用它的实在太多了,不论国防、科技、教育、互联网以及日常生活。所以,分析软件行业理论和实践可以举的例子特别多。也正因为经常接触,它的理论和实践结合程度才显得更加重要。

    在此时此刻,已经有许多理论,它们可以指导着实践该如何如何去进行。但是不可否认,经常出现这种情况,本认为一种情况应该是如何,可是经过实践发现,它似乎是有问题的,问题的原因可能莫名其妙,又或者很离奇。

    为什么会有这些莫名其妙的情况?一则是因为对于理论理解有误,理解不全面,理解上有个人因素,错误地运用到了实践;二是实践环境不平常,或者环境中的子模块不平常,导致由理论产生的代码不恰当地运用到了实践。

    而,对于软件行业,因为硬件不同、操作系统不同、操作系统上的支撑软件不同、应用程序兼容性、用户使用情景不同等原因造成实践和所谓的理论不相符太多太多。由此也能更加证明软件行业理论密切依赖于实践这句话。


三、理论多数只是说说

    理论这个东西,不是随便就能理解的;有的经过了数次实践尝试,有的经过多年实践才能最后确认,当然不能认为它一定是永远的真理,至少在这个时期可以看成事实上的真理。

     对于理论,教科书已经说得够多了,说多了,很容易产生一种默认接受的想法。虽然这样无妨,但是它也可能让我们形成一种错误的认识:看熟了这个理论,从几个或者多个实践中理解了这个理论,就想当然地认为已经完全或者基本上理解了这个理论。当然,和那些理论创立者相比,学习者确实还差好远好远。

    就像,比如说编译器(广义上的编译器)的作用之一是将源代码编译成目标文件,最终可以生成一个可执行文件供使用。理论上描述,包括预处理、编译源代码为目标文件、链接成为目标可执行文件等过程。再具体到细节,预处理就像文本替换一样,编译源代码为目标文件似乎才是最主要的工作,链接过程会根据目标平台的可执行文件格式不同而创建不同的文件;

    就例如,预处理,简单地理解文本替换就行了吗?是如何文本替换的?哪些文本需要替换?如果是头文件包含,替换后会不会打乱之前的代码?如果打乱了原来的代码,如何恢复?

    编译源代码为目标代码过程,如果出错了,错误位置如何准确定位?源代码过长或者变量、表达式过长,采用什么方式合理存储?语法树的优化如何去做?编译器效率过低,如何提高?

    链接过程,如何记录不同目标文件代码段位置?最终可执行文件依赖的动态库信息存储在哪里?

    试想,如果要做这个东西,光有最初的那些理论有多少帮助呢?

    再例如,如果发现某个地方显示数据是乱码,原因是什么?当然,一般来说,很可能是编码错误。一堆问题就来了,是当前的应用程序使用的数据对应的编码不对吗?还是支撑软件的编码不对?抑或是操作系统采用默认的处理使得乱码了?或者又是本身传入的数据就错误了?又或者是病毒的错误干扰导致了这种错误发生?

    如果可以确定是某个模块(广义的模块)出错了,那么能否给出为什么其它模块都正确的内部原因呢?

    同样对于编码,某个应用程序使用的编码在二进制级别表示是什么含义?UI界面上的编码怎么能知道是什么?编写的代码使用编码又是什么?

    对于界面显示,字符的显示依赖于什么?字体库在哪里?它们是如何作用的?

    对于应用程序,操作系统是如何加载它们的?都加载了应用程序的什么?应用程序执行时所谓的虚拟地址是什么?

    对于库,库内部包含什么符号?如何将一个库拆分成不同的目标文件?库中各个函数或者变量使用的地址是虚拟地址吗?它使用的地址是如何计算的?运行时是如何转换成实际地址的?

    对于操作系统,它是如何调度的?对于操作系统,时钟是必须的吗?操作系统如何管理虚拟内存?硬件的异常如何通知操作系统?

    ......

    ......

    总之,实践中遇到的东西远比理论要多,经历了几次实践,很多时候它和理解理论差的还很远;随便用理论来说明或者试图证明实践应该怎么样可能会遇到很多问题。


四、软件开发的低要求导致理论和实践差距加大

    中国不是软件的发源地,更多地技术都是从外国传入,更多的方便使用的IDE工具也层出不穷,大量的支撑软件、类库还有大量现成的示例代码或者开源代码,让更多的开发没有时间甚至不想去进一步理解实践和理论内部的关系,也许仅仅是心理上的一种暗示。

     不可否认,这种情形只会导致理论和实践的差距进一步加大。换句话说,开发像一个用户一样来开发软件。

     同样不可否认,对于实践过程中出现的问题的解决确实是对理论理解提升的一种的方式。但是,也不可否认,中国当前有无数多的开发在经历这个过程,甚至一遍一遍地重复着重新理解理论的痛苦过程,它是一种事实,很难改变。


五、差距意味着什么

    理论和实践的差距一方面意味着中国的软件还很低级,另一方面意味着现实让中国的软件很狼狈,为了跟随世界潮流不得不抛弃那么多理论,最后一方面它还意味着中国的软件业还很浮躁。

     如果只从钱的角度出发,只从最终是否造出软件的角度,他们做对了;当然,也造成了一个不可否认的事实,它不利于提高中国软件在世界的整体水平。


xichen

2012-6-1 17:08:47


原创粉丝点击