您的位置:首页 > 理论基础

《计算机技术领域当前的主流技术及其社会需求调查报告》

2015-12-07 00:08 218 查看
    随着我国进入了计算机和网络时代,与计算机技术相关联的各类技术都在不断进步和发展中。在这些技术中,作为计算机技术主要组成部分的计算机软件开发技术在这个背景下也取得了极大的发展。就现阶段的软件开发技术而言,我国的软件开发工作者在实际的工作中取得了一些工作成绩。但是,就现在我国软件开发工作的现状也值得进行研究分析工作。

一、软件编程领域当前的发展状况
    在现阶段我国的软件开发工作中,就技术方面而言,软件开发工作者根据社会需求的实际情况结合了国际先进的软件开发技术进行了融合式的研究工作,在实际的软件开发工作中取得了一定的成绩。就现阶段软件开发技术的现状一共可以分为以下的两点。
1、国际软件开发技术产业的现状
    在现阶段的软件开发工作中,取得领先技术优势的是以美国、欧洲国家为代表的西方国家。这些国家因为是计算机技术的起源地,其软件开发技术工作起步较早,拥有很多的专利性技术和领先的技术理论,同时在教育工作中也培养出了很多的专业性软件开发的技术人员。在这些优势的帮助下,西方国家在软件开发工作中具有极大的技术优势和知识优势。与之相对应的是以中国、印度等后来的发展中国家的软件开发工作。这些后来加入软件开发工作的国家因为受到技术理论、技术力量、人才储备等诸多的因素影响,在计算机软件开发工作中的技术等问题落后于西方的软件开发产业。但是在这些发展中国家的软件开发工作中,因为受到国家的重视大力的发展相关的技术工作,同时又受到全球一体化进程和网络信息化的影响,在软件开发技术领域的力量已经加强了。在这种现状中,国际计算机软件的开发技术得到了全面的发展。目前在国际的软件开发技术中,以高端计算、高效处理、开放源码等为代表的先进的软件开发技术的出现就是在这样的背景下产生的。
2、国内软件开发技术产业的现状
    在我国的计算机软件开发工作中,因为这项工作的起步较晚,同时受到技术,人才等因素的影响,在在整体的技术领域是落后于国际的先进水平的。但是随着我国改革开放工作的开展,社会整体对于技术力量的重视程度越来越强。在这种背景下,我国的计算机软件开发技术得到了很大的进步空间。特别是在于中文软件的开发工作中,我国的软件开发工作者积极地结合国家的实际情况,利用国际中的软件开发先进技术,在软件开发工作中开发出了许多的优秀的中文软件。在这种情况的影响下,我国的软件开发业得到了极大的发展。在我国的北京、广州、上海等城市都形成了具有一定规模的软件开发产业基地。同时我国软件产业的生产值也得到了很大的发展。

二、当前主流编程技术
1. Java语言是当今最普遍使用的开发语言,它简单易学(相对C++,C和Objective-C),且跨平台性非常强,对网络开发的支持令人称赞。很多企业使用Java语言来开发商业相关的网络应用。此外,Java语言也是开发Android应用的必备工具。
2. C语言是几个主流开发语言(Java,C++,C#,Objective-C)的根基所在。常有人说,学好C语言,其它的语言就会一通百通。因此对硬件底层性能的支持超强,它的主要应用领域是嵌入式开发、游戏引擎开发等偏底层的部分。
3. PHP语言主要用于开发网络应用(特别是web服务器端,也就是用户不可见的部分,如结合MySQL进行后台数据传输处理等),相对其它几门语言,它非常容易上手。但它的局限性在于除了web应用,对其它应用的开发力不从心。
4. Javascript语言主要用于开发Web前端(也就是用户可见的部分),随着HTML5技术的兴起,Javascript语言必将是未来三到五年的主流Web开发工具。
5. C#语言是微软为了对抗Java语言的强势而自行开发的一种编程语言。它和Java一样简单易学(同样是相对的),但只能支持微软的平台。闻名业界的.NET就是C#语言的最佳搭配。关于C#有个更新点,目前最火爆的移动平台3D游戏开发引擎Unity3D主要支持C#和javascript开发,而windows手机平台的卷土重来也让C#有了新的机会。但随着微软在移动互联网领域的式微,C#的地位和前几年比起来大有下降。
6. Python,Ruby,Perl同PHP语言的作用类似,属于脚本语言,对于开发网络应用非常高效。其中Python和另一种脚本语言Lua还常在游戏中作为脚本语言使用。
7. Go语言,一门全新的系统级语言,由Google开发,于2009年发布。虽然它的历史非常短暂,但根据目前的发展来看,Go语言有望在未来十年成为一款成功的系统级语言。Go语言功能强大,可以替代C++
8. Basic(Visual Basic)语言,曾经风骚一时,若干年前很多编程入门课程必教的开发语言。其学习曲线非常平缓,易于上手,但实际项目中用到的不是很多。
9. SQL语言,这是目前最重要的关系数据库操作语言,其影响已经超出数据库领域,在很多其它领域得到采用,比如人工智能领域的数据检索,软件开发工具中嵌入SQL的语言等。SQL语言是一种交互式查询语言,允许用户直接查询存储数据,但它并不是完整的程序语言,没有DO或FOR类似的循环语句,但可以嵌入到另一种语言中,通过接口发送到数据库管理系统。
10. 汇编语言,虽然现在是高级编程语言的天下,但性能超强的直接面向硬件的汇编语言仍然在嵌入式开发领域占据着一席之地。只是汇编语言和硬件本身的关联很大,所以普及性一般。
11. LISP语言,一种相对冷门的函数式编程语言,其长处在于超强的运算能力。如今在人工智能领域和CAD绘图软件中仍有大量的支持者。
12. Erlang语言,一个结构化,动态类型编程语言,内建并行计算支持。起初是由爱立信专门为通信应用设计的,比如控制交换机或变换协议等,非常适合于构建分布式并行计算系统。

三、招聘企业对软件编程技术的需求
说白了软
ddc5
件编程就是软件开发,所以软件工程师是从事软件开发相关工作的人员的统称。它是一个广义的概念,包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位。这些岗位的分工不同,职位和/或级别不同,但工作内容都是与软件开发生产相关的。 
    软件工程师的技术要求是比较全面的,除了最基础的编程语言(C语言/C++/JAVA等)、数据库技术(SQL/ORACLE/DB2等)、.NET平台技术、C、C/S B/S程序开发,还有诸多如JAVA SCRIPT、AJAX、HIBERNATE、SPRING、J2EE、WEB SERVICE、STRUCTS等前沿技术。除此之外,关于网络工程和软件测试的其他技术也要有所涉猎,以利于操控全局。 
软件开发工程师的岗位职责概况来说,即配合技术主管、产品经理进行系统分析和设计,负责关键模块和核心构件的功能设计和程序开发,进行项目实施的二次开发分析管理。具体而言,主要有以下岗位职责:
1.负责开发项目的系统分析、研发与组织实施
2.负责开发符合系统要求的软件内容
3.修改以有的系统方案,以维持优良的操作性能及正常的信息沟通
4.MES程序的设计与开发
5.提高生产的效率,保障系统的稳定性及可靠性
6.适应性维护工作
7.掌握生产流程,优化生产控制
8.提供技术指导,促进系统操作技术和译码编程的有效使用
9.跟踪IT技术进展,做好技术储备
10.推广完善公司系统,完成项目接口、开发工作
11.协助相关应用软件的安装调试工作
    因此,软件工程师可谓是软件项目开发的掌舵者,一名优秀的软件工程师应当具有较强的逻辑思维能力,对于技术的发展有敏锐的嗅觉。虽然要求技术全面,但无须偏执于门门技术都精通,任何软件工程师都有自己的技术特长和偏向,对于自己手中的技术,可有精通-掌握-熟悉-了解之分,根据工作需要和职业发展的具体情况来划分。

四、未来软件编程技术的发展方向
    首先,编程语言会变得更加“声明式”,我们需要设法为语言引入一些如元编程,函数式编程的能力,同时可能也要寻找让用户有办法扩展语法,使他们可以构造领域特定语言等等。未来动态语言和静态语言的区别也很可能会消失了,这两者会合并为一种单一的常见的编程范式。在并发方面,语言会采纳一些特性,可以利用起隔离性,函数式的纯粹性,以及更好的不可变数据类型的编写方式。不过总体来说,对于编程语言,新的范式则是“多范式”编程语言。

方向(1):并发
    摩尔定理有个推论,便是说时钟速度将根据相同的周期提高,也就是说每隔大约24个月,CPU的速度便会加倍──而这点已经停止了。有些物理方面的基础因素让CPU不能运行的太快。然而,另一意义上的摩尔定理出现了。我们还是可以看到容量的增加,因为可以在同一个表盘上放置多个CPU了。目前已经有了双核、四核,Intel的CTO在三年前说,十年后我们可以出现80核的处理器。
    到了那个时候,你的任务管理器中就可能是这样的。你可以看到,计算能力已经完全用上了。这便是个问题,比如你在这台强大的机器上进行一个实验,你自然希望看到100%的使用状况,不过传统的实验都是在一个核上执行的,所以我们面临的挑战是,我们需要换一种写程序的方式来利用此类机器。我们已经不能写一个程序,然后对客户说:啊,未来的硬件会让它运行的越来越快,我们不用关心太多,除非你换种不同的写法。多核革命的一个有趣之处在于,它对于并发的思维方式会有所改变。传统的并发思维是在单个CPU上执行多个逻辑任务,使用旧有的分时方式、时间片模型来执行多个任务。但是,你想一下便会发现如今的并发情况正好相反,现在是要将一个逻辑上的任务放在多个CPU上执行。这改变了我们编写程序的方式,这意味着对于语言或是API来说,我们需要有办法来分解任务,把它拆分成多个小任务后独立的执行,而传统的编程语言中并不关注这点。可能你会有独立的任务但也可能没有,所以很多时候我们需要编程语言来关注这方面的事情。比如“隔离性(Isolation)”。

方向(2):声明式编程
    目前我们在编写软件时大量使用的是命令式(Imperative)编程语言,例如C#,Java或是C++等等。这些语言的特征在于,写出的代码除了表现出“什么(What)”是你想做的事情之外,更多的代码则表现出实现的细节,也就是“如何(How)”完成工作。这部分代码有时候多到掩盖了我们原来问题的解决方案。比如,你会在代码里写for循环,if语句,a等于b,i加一等等,这体现出机器是如何处理数据。首先,这种做法让代码变得冗余,而且它也很难让执行代码的基础设施更聪明地判断该如何去执行代码。当你写出这样的命令是代码,然后把编译后的中间语言交给虚拟机去执行,此时虚拟机并没有多少空间可以影响代码的执行方式,它只能根据指令一条一条老老实实地去执行。例如,我们现在想要并行地执行程序就很困难了,因为更高层次的一些信息已经丢失了。这样,我们只能在代码里给出“How”,而不能体现出“What”的信息。现在有两种比较重要的成果,一是DSL(Domain Specific Language,领域特定语言),另一个则是函数式编程。外部DSL是自我包含的语言,它们有自己特定语法、解析器和词法分析器等等,它往往是一种小型的编程语言,甚至不会像GPPL那样需要源文件。与之相对的则是内部DSL。内部DSL其实更像是种别称,它代表一类特别API及使用模式。每个配置文件都可能会变成一门编程语言。一开始可能只会用它表示一点点东西,然后慢慢你便会想要一些规则,而这些规则则变成了表达式,可能你还会定义变量,进行条件判断等等。而最终它就变成了一种奇怪的编程语言,这样的情况屡见不鲜。
方向(3):函数式编程
   关于声明式编程的还有一部分重要的内容,那便是函数式编程。如今我们在使用命令式编程语言写程序时,我们经常会写这样的语句,x等于x加1,此时我们大量依赖的是状态,可变的状态,或者说变量,它们的值可以随程序运行而改变。可变状态非常强大,但随之而来的便是叫做“副作用”的问题。在使用可变状态时,你的程序则会包含副作用,比如你会写一个无需参数的void方法,然后它会根据你的调用次数或是在哪个线程上进行调用对程序产生影响,因为void方法会改变程序内部的状态,从而影响之后的运行效果。而在函数式编程中则不会出现这个情况,因为所有的状态都是不可变的。你可以声明一个状态,但是不能改变这个状态。而且由于你无法改变它,所以在函数式编程中不需要变量。事实上对函数式编程的讨论更像是数学、公式,而不像是程序语句。如果你把x = x + 1这句话交给一个程序员看,他会说“啊,你在增加x的值”,而如果你把它交给一个数学家看,他会说“嗯,我知道这不是true”。然而,如果你给他看这条语言,他会说“啊,y等于x加一,就是把x + 1的计算结果交给y,你是为这个计算指定了一个名字”。这时候在思考时就是另一种方式了,这里y不是一个变量,它只是x + 1的名称,它不会改变,永远代表了x + 1。所以在函数式编程语言中,当你写了一个函数,接受一些参数,那么当你调用这个函数时,影响函数调用的只是你传进去的参数,而你得到的也只是计算结果。在一个纯函数式编程语言中,函数在计算时不会对进行一些神奇的改变,它只会使用你给它的参数,然后返回结果。在函数式编程语言中,一个void方法是没有意义的,它唯一的作用只是让你的CPU发热,而不能给你任何东西,也不会有副作用。在函数式编程中访问状态是十分安全的,因为状态不会改变,我可以把一个Point或List对象交给任意多的地方去访问,完全不用担心副作用。函数式编程的十分容易并行,因为我在运行时不会修改状态,因此无论多少线程在运行时都可以观察到正确的状态。两个函数完全无关,因此它们是并行还是顺序地执行便没有什么区别了。我们还可以有延迟计算,可以进行Memorization,这些都是函数式编程中十分有趣的方面。

方向(4):动态语言
一般地说,动态语言是一些不对编译时和运行时进行严格区分的语言。这不像一些静态编程语言,比如C#,你先进行编译,然后会得到一些编译期错误,稍后再执行,而对于动态语言来说这两个阶段便混合在一起了。动态语言有一些优势,而静态语言也有着另一些优势,这也是两个阵营争论多年的内容。长期来看,我认为结果应该是两者的杂交产物,我认为在语言发展中也可以看到这样的趋势,这两部分内容正在合并。

    量子物理学家Niels Bohr曾经开玩笑说,预测是非常不靠谱的,尤其是对未来的预测。但是在企业技术领域,未来的主流趋势和企业的选择方案还是比较容易预测的。
那么未来三到五年,软件开发的关键特征将会是什么呢?首先,胖客户的时代已经结束。原因很多,比如安全问题、管理问题以及成本问题。企业希望拥有更集中化的应用软件服务,员工对于应用软件的访问需要在中央管理的控制下进行。企业可以通过购买现成的软件实现这些控制,而且随着高级网络架构逐渐被企业采用,未来也会有越来越多的应用程序运行于服务器上。企业门户就可以完成这一任务,不论是员工、客户还是合作商,都可以通过浏览器访问企业门户,进而访问相应的应用程序和服务。
第二,应用软件服务将走向现实。随着企业发展,企业将拥有越来越多的IT资产,包括硬件和软件,软件或者系统的合并工作,在技术上应该可以实现,但是对企业来说,更重要的是应用软件服务模式的成功建立。很多企业早就希望将现有的应用软件转变为以Web为基础的软件,这不但可以大幅降低软件许可证和升级的成本,还可以降低管理成本,实现远程工作等功能。最明智的企业会从这两方面同时着手,在应用Web服务的同时,尽可能做好遗留软件的维护工作,最大限度发挥遗留软件的剩余热量。
第三是虚拟化。未来三到五年,虚拟化将成为一个必然的趋势,它将最大限度地从企业现有的硬件架构中榨取出可用资源。每个企业的CIO都希望通过采用工业标准的服务器提高IT效率,同时降低成本和管理复杂度。同时,虚拟化还可以让应用软件部署变得更简单,系统离线时间更短,同时更好地控制业务连续性对象。
将这三者明确联系起来的就是“软件既服务”的概念,这就是未来的应用软件架构:一个受控的,有预见性的,同时极具成本效益的应用软件架构,将改变企业的流程、服务,以及关键的业务软件,这个应用软件架构就是未来的IT变化,这不仅仅是美好的远景,因为目前那些敢于尝试新技术的企业,已经体验到了这种应用框架所带来的更安全、更灵活的软件部署方式。从早期的应用看,服务框架有效地避免了高昂的成本和冗长的集成项目。它对于传统软件、流行软件或者未来的软件都一视同仁,因此企业也不需要重新开发原有的应用程序,以适应新的访问通道,如IPTV或WiMax。这种服务架构对于IT预算也有很好的降低作用,而且如果当前的软件能够跟上这种趋势,对于企业的IT部门来说将是一个好消息。因为IT员工将不再被繁重的开发工作困扰,而是有机会站在更高的层次,进行与业务有关的项目的研究。而用户也不再为系统的各种安全问题以及稳定性所担心了,企业的CIO可以将他们的注意力完全集中在提供更具创新性的工作中,从而提高业务水平,再也不用为如何填补老系统的漏洞所分心了。这正是企业所希望看到的未来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐