`
java-mans
  • 浏览: 11413793 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

一、中心思想

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


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

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

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

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

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


三、理论多数只是说说

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

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

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

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

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

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

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

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

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

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

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

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

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

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

......

......

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


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

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

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

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


五、差距意味着什么

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

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


xichen

2012-6-1 17:08:47


分享到:
评论

相关推荐

    软件工程-理论与实践(许家珆)习题答案

    A) 软件成本太高 B) 软件产品的质量低劣 C) 软件开发人员明显不足 D) 软件生产率低下 7. 软件开发方法的主要工作模型有(A B C) A) 螺旋模型 B) 循环模型 C) 瀑布模型 D) 专家模型 8. 软件工程的目标...

    大话存储网络存储系统原理精解与最佳实践

    目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。  本书以特立独行的行文风格向读者阐述了整个网络存储系统。从硬盘...

    测试覆盖率

    而对于定制的行业软件来说,则是一再的返工、绵绵无绝期的修改和维护,既拖死了软件提供商,也耽误了客户的正常业务。  这一系列现状使用户对国内软件提供商失去信心,因此我们经常听到有人抱怨:国内软件没法用,...

    大话存储__网络存储系原理精解与最佳实践1of4

    目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。 《大话存储》以特立独行的行文风格向读者阐述了整个网络存储系统。...

    大话存储__网络存储系原理精解与最佳实践3of4

    目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。 《大话存储》以特立独行的行文风格向读者阐述了整个网络存储系统。...

    大话存储__网络存储系原理精解与最佳实践2of4

    目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。 《大话存储》以特立独行的行文风格向读者阐述了整个网络存储系统。...

    大话存储__网络存储系原理精解与最佳实践4of4

    目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。 《大话存储》以特立独行的行文风格向读者阐述了整个网络存储系统。...

    大话存储_网络存储系统原理精解与最佳实践

    目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。 本书以特立独行的行文风格向读者阐述了整个网络存储系统。从硬盘到...

    大话存储-网络存储系统原理精解与最佳实践.part1

    目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。 本书以特立独行的行文风格向读者阐述了整个网络存储系统。从硬盘到...

    大话存储-网络存储系统原理精解与最佳实践.part2

    目前国内阐述网络存储的书籍少之又少,大部分是国外作品,对存储系统底层细节的描述不够深入,加之术语太多,初学者很难真正理解网络存储的精髓。 本书以特立独行的行文风格向读者阐述了整个网络存储系统。从硬盘到...

    ProE理论与上机习题集

    太讲究方法和技巧会被其占用很多的时间和精力,而对学习的内容本身投入较少的时间和精力,因此反而会影响学习的效果。 2. 要勤奋。软件运用是一种技能,技能只有靠熟能生巧,要不断重复才会熟练,只有熟练了才会...

    计算机课程学习总结.docx

    计算机行业是个飞速开展的行业,日新月异,因此,不断加强理论学习,拓展知识领域,进行知识更新,是我们当前最为迫切的任务,在方远电脑学校这一个多月的学习当中,我总结了不少的经验,让我在以后的学习当中...

    机器学习实战 - k近邻算法(KNN算法)总结

    2计算量太大,所以一般数值很大的时候不用这个,但是单个样本又不能太少,否则容易发生误分 3样本不平衡问题(即某些类别的样本数量很多,某些类别的样本数量很少) 4可理解性比较差,无法给出数据的内在含义

    简单的逻辑学part01

    然而逻辑到底是什么,也许并没有太多的人有很清楚的概念。对门外汉或是初学者来说,本书都有切实的帮助。这本书的目的是向读者介绍逻辑学的初步知识和基本技巧。这是本小书。之所以说它小,第一是因为本书确实不厚,...

    经典PowerDesigner 数据库设计教程 完整版

    内容太多,工作量太多。2.原帮助文档特别周全,个人觉得可以在内容上作很大程度的压缩。姑决定按原帮助文档写,同时加入自己目前正在做的技术论坛分析设计过程以便于理解。 对本文档内容的几点说明: 1. 本文档只...

    2009年web设计大全

    仅仅提供站点的精美快照,却很少讨论站点设计方面的书已经太多。考虑到Web易变的特性,还未等到纸上的墨迹变干,那些有趣的站点已经发生了改变,以至于只留下一些记录站点曾经样子的纸张。不幸的是,那些纸上记录的...

    PowerDesigner教程

    内容太多,工作量太多。2.原帮助文档特别周全,个人觉得可以在内容上作很大程度的压缩。姑决定按原帮助文档写,同时加入自己目前正在做的技术论坛分析设计过程以便于理解。 <br>对本文档内容的几点说明: <br>...

    自己动手写操作系统(含源代码).part2

    第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...

    自己动手写操作系统(含源代码).part1

    第三,实践类的操作系统书籍还是太少了,以至于你要想看看别人是怎么做的,除了读以《操作系统:设计与实现》为代表的极少数书籍之外,就是一头扎进源代码中,而结果有时相当令人气馁。我自己也气馁过,所以我在第二...

    数电课程设计-八路彩灯.doc

    5.数点课程实验是大学中为我们提供的唯一一次动手实践的机会,增强动手实践的能力。 二、 任务和要求 实现彩灯控制的方法很多,如EPROM编程、RAM编程、单板机、单片机等,都可以组成大型彩灯控制系统。因为本次实习...

Global site tag (gtag.js) - Google Analytics