首先,把程序员解脱出来,让计算机实现自动编程的想法,是很有意义的,也不完全是天方夜谈。据我所知,“自动编程”的概念,已经在演化计算(智能计算的一 种)中提出了,而且,在一些相对简单而却实用的领域,已经可以有很好的实践。如我们系的老师康立山教授所举的例子,他取三峡大坝岩石的数据,曾演化设计出 一段程序,对其问题获得很好的模型。
如文中所言,或许未来真可以使程序员的身份转变,他们不再是“程序员”,而不得不成为“辅助程序员”;计算机可以自动编程,所以对于一般问题,只需购买一 些自动编程组件(原文如此称呼之),让辅助程序员操作一定的接口就可以由计算机完成编程工作,而且比人做的更好。
然而,科学的“自动编程”概念,还处于刚刚提出的阶段,事实上目前所做的工作,还是在相对简单的问题领域上进行的。所依据的原理,所达到的成果,和我们的目标还有很大差距。如原文所言的大规模工程上的使用,还差之千里万里。
为什么如此呢?原文中并没有深入的谈。而说到如何实现“自动编程”,原文只是说需要人工智能的发展,并利用海量网络信息。但是,其中颇为艰辛呢。
我就从高级语言C++的编程谈起。
最简单的问题领域,我们取整数的加法、减法运算。比如下面的问题:
问题. 使用C++语言,编写程序模块完成对两个整数a与b求和。
程序员对其编程,就会完成如下的一个程序:
//compute the sum of a and b
int Sum(const int a,const int b)
{
return a+b;
}
程序员完成这个编程工作,一般思考步骤为:
1,对于该问题,所用到的数据结构是整型数,C++语言提供数据类型int。两个整数为a和b。
2,对于该问题,所用到的算法为整数相加求和,C++语言提供‘+’运算操作符。
3,对于该问题,程序员对模块进行设计,模块名为Sum,输入参数为const int a和const int b,返回类型为整型数。
显然,其中1与2是程序的核心,是传统意义上的程序定义。3是程序的结构,我觉得程序的结构也是非常重要的,尤其对于近年来,计算机软件的复杂度越来越 高,注意设计良好的程序结构,是必然的要求。如对于本问题,使用“函数”设计模块当然是可以的,然而使用C++类来封装也未尝不可。
所以,对于计算机程序,目前我理解的概念是:
计算机程序 = 数据结构 + 算法 + 程序结构。
这个简单的问题,由计算机自动编程来实现是否能完成?
事实上,目前演化计算的“自动编程”,是启发于“计算机程序 = 数据结构 + 算法”的思想的。我们来看一看它对上述问题的解决。
对于该问题,建立计算机自动编程的基础——两个集合:
data = { a,b },op = { + }.
计算机自动编程所得到的程序,为data与op的一种关系,我们用字符串表示。如
s1 = aa+ ;// 即 s1 = a + a ;
现在对于一个字符串s,计算机便可以进行自动设计:
s = a; // 尚未成功
s = aa; // 尚未成功
s = aa+; // 不合要求的程序,舍弃
s = a; // 尚未成功
s = a+; // 不合法的程序,舍弃
s = a; // 尚未成功
s = ab; // 尚未成功
s = ab+; // 程序成功,退出
换言之,计算机自动编程的程序,这里定义为
计算机程序 = data * op .
当然,获得一个合要求的计算机程序,不是一个枚举的过程。演化计算的方案是使用随机策略、通过演化获得好的程序。
data和op两集合,是自动编程的基础,可相对于问题的领域与复杂度而设计(好比程序员所需要的计算机语言复杂程度也不同一般)。比如,上述的data再加入两个整型变量x,y,就完全可以设计出和Sum模块功能相等的程序。如果data和op扩充如下:
data = { a0,a1,a2,...an,n,x },op = { +,-,* }.
其中x是实型变量,那么就可以由计算机自动编程来设计多项式逼近的程序。
而且,逻辑操作如if,else,还有循环操作,都可以加入到op集合中。那么,自动编程可解决的问题领域会更大。
然而,自动编程仍只是刚刚开始。说它要代替程序员的工作,还为时尚早。
首先,计算机自动编程是基于集合data和op的,这两个集合可比于计算机自动编 程的语言,但这个语言还非常的不完善。对于个别的问题可以设计一个可行的语言,但大部分问题还没有办法找到合适的语言,更不用说设计出一个较为普遍的语 言。而程序员所使用的计算机语言,则已到了相当完善的程度。而OO语言出现后,程序员可以设计自己的数据类型,计算机的自动编程目前是无法做到这一点的。
比如对于上面的问题,程序员可以设计一个数据类型对整数进行封装(我们不谈它对本问题的实际意义,很显然我们重视它的抽象意义):
//define new type :Integer
class Integer {
//...
public:
//...
};
由此,程序员对于现实世界进行建模的时候,表达工具(计算机语言)是相当得力的。然而计算机自动编程的data与op,对工程计算与简单逻辑判断,可以很好的建立模型,但在深度与广度上却远远落后于程序员。
其次,我觉得计算机程序的概念,必须要加入“程序结构”的因素;程序结构的因素,对于大规模工程应用具有重要的意义,而且是程序员智慧体现的精彩处。一个 复杂问题的程序,糟糕的结构,往往是致命的。比如一个全局的指针对象,就会有太多的陷阱,能让设计不好的系统彻底瘫痪。然而好的结构则不然。另外,程序员 充分利用“程序结构”上的经验,总结出好的设计模式,开发出性能良好的类库、程序框架,使得程序设计的继续得以良性循环。
但目前自动编程尚没有规划这方面的问题。一开始的定义,就是基于data与op的,而data*op的过程,目前由演化计算来做,就如处于汇编语言程序设计时期的程序员,可考虑的程序结构是很少的,只能拼命般的用聪明的脑袋对付问题的复杂度。
最后,当然是目前计算机的制约。就目前自动编程的主要问题,还是难以处理的复杂度。计算机本身性能的进一步提高,好的算法进一步开发,会使得自动编程进一步发展。但问题并非孤立的,解决问题的复杂度,当然也得考虑自动编程自身理论的发展,如突破上述的界限等。
原文中还提到利用网络信息资源,与计算机的学习能力,当然,这些步骤都是必然的。自动编程肯定要面临这些学科资源。但这涉及的问题更多。集中的说,网络和 分布式系统,与人工智能,都要解决大量的问题,才可在工程上更充分进入自动编程的范围。目前来看,还是智能计算与自动编程关系最为紧密,也是主要的推动学 科。
这里所说的,都是从软件的角度。原文另外提到跨系统(比如windows与UNIX)的自动编程,我想这个问题程序员更为头痛些。不妨更宽泛的说,由于偶 然或必然的原因,计算机体系结构目前是多种多样的,自然程序员的编程都是基于某种体系结构的计算机。一个CISC机器的程序,在RISC机器上运行肯定有 问题;那么在前者上编程(无论是程序员还是自动编程),如何无缝移植到后者上去,我想这就不仅是程序设计的问题了。
原文中提出“辅助程序员”的说法,我觉得很有意思。既然编程的工作,下放给计算机,那么辅助程序员就是要管理那些进行“自动编程”的计算机了,这有些项目经理的味道了。
很显然程序员在程序设计的时候,受软件工程上的一些规律制约。而这个过程的管理,是十分复杂的;大部分项目经理都有经验的。那么,如果多个计算机在“协同 自动编程”的时候,又会是个什么样子?其中有那些规律可探讨?我想虽然计算机可以自动编程了,程序员从编程的工作中解脱了;但行业对人的要求并没有降低是 吗?
或许应该说,时代在发展,行业对于人的要求,永远都是在提高的。
除非,人工智能彻底的成熟,机器和人具有一样的行为方式了。人或许可以休闲了。
那么,“辅助程序员”们,你们怕不怕?这个问题就不仅仅是行业内部问题了,计算机也要薪水的话,整个社会就会关注它了。
相关推荐
【标题】"商业编程-源码-计算机二级C语言上机编程.zip" 是一个与计算机二级C语言考试相关的源码集合,它包含了用于理解和实践商业编程场景中的C语言技巧。这个压缩包很可能是为了帮助备考者熟悉C语言在实际商业环境...
本文总结了 XJA0400 套件数控加工工艺设计与自动编程的毕业论文,涉及计算机辅助设计、计算机辅助制造、自动编程等方面的知识点。 1. 计算机辅助设计(CAD) 在本文中,作者使用计算机辅助设计软件对 XJA0400 套件...
总的来说,这个Python少儿编程课程涵盖了编程基础知识、逻辑思维训练、项目实践和竞赛准备等多个方面,为孩子们提供了一个全面的学习路径。通过这些课程的学习,孩子们不仅可以掌握编程技能,更能培养出解决问题、...
通过自动化、机器学习和自然语言处理等技术,计算机可以变得更加智能和自主,从而在各种应用场景中发挥更大的作用,如数据分析、监控、智能家居、自动驾驶等。实现这样的系统不仅需要技术上的突破,还需要对应用场景...
标题“计算机软件-编程源码-自动计划.autoplan.zip”暗示了这个压缩包包含的是一个与计算机编程相关的源代码,具体是关于自动化计划或调度的软件。描述中的内容与标题一致,进一步确认了这是一个用于自动计划的编程...
计算机编程手册(CPM)是软件开发过程中的一个重要组成部分,它为程序员、项目经理和团队成员提供了指导和标准,确保项目的高效、规范和成功执行。在这个压缩包文件“软件项目模板-25 - 计算机编程手册(CPM).zip”中,...
总的来说,面向对象编程是现代软件开发中的基础技能,无论是Java还是Python,都提供了强大的工具和方法来实现这一理念。通过深入学习和实践,开发者可以创建出结构清晰、可维护性高的软件系统。
本文将通过一个具体的VB示例程序,介绍如何利用编程手段实现自动记录计算机开机时间的功能。 #### 知识点一:理解程序结构 程序主要分为两个部分:`Command1_Click`事件处理子程序和`Form_Load`事件处理子程序。...
3. 计算机程序设计入门:入门篇一般针对初学者,内容涵盖基础的编程知识和技能,是学习计算机程序设计的第一步。该入门篇可能包括诸如算法基础、数据结构、编程语言(如C++、Pascal)的初步知识,以及使用编程工具...
同时,该设计也为学生提供了一个学习和实践计算机辅助制造技术和自动编程技术的机会。 在该设计中,我们还可以应用一些其他技术,例如计算机视觉技术和机器人技术,以提高生产效率和加工精度。这也为学生提供了一个...
计算机软件-编程源码-PB脚本注释、自动缩进、脚本美化工具.zip
玩具赛车底盘自动编程设计--毕设论文 本文总结了玩具赛车底盘自动编程设计的关键要素,涵盖了现代数控加工的基本工艺理论、UG 自动编程技术、数控加工技术等多方面的知识点。 首先,本文通过对零件的工程图进行...
总的来说,"计算机软件-编程源码-Ehlib自动编号及自适应列宽演示.zip"提供了一个学习和实践Ehlib组件功能的实例,对于想要深入了解Ehlib以及提高Windows Forms应用程序UI设计能力的开发者来说,这是一个宝贵的资源。...
随着计算机技术和制造业的发展,NC 加工自动编程技术也在不断发展和改进。目前,NC 加工自动编程技术已经广泛应用于各种制造业,例如机械制造、汽车制造、航空航天等。然而,NC 加工自动编程技术在国内外的发展还...
iCAM自动编程系统2018是一款专为制造业设计的高效、精确的计算机辅助制造(CAM)软件。这款系统主要用于生成数控机床(CNC)的加工代码,使得复杂零件的制造过程更加自动化和高效。2018版是该系统的某个重要版本,...
计算机控制----光感自动窗帘控制系统设计 计算机控制技术是一门综合性强的技术,涉及到计算机硬件、软件、控制系统等多个方面。在本设计中,我们将设计一个基于89C51单片机的光感自动窗帘控制系统,实现手动控制...
标题中的“nc加工自动...总的来说,这篇论文可能深入研究了nc加工自动编程技术的各个方面,包括历史背景、技术现状、系统设计、界面开发、CAD集成以及重要的技术细节,为读者提供了全面的nc编程技术理解和实践指导。
这种系统允许用户在不手动下载和安装新版本的情况下,自动检测并完成软件更新,提升用户体验,同时也方便开发者发布新功能和修复错误。 【描述】中的“计算机软件-编程源码”说明了提供的内容是关于计算机软件开发...
源码软件对于开发者来说具有很高的价值,因为它能够展示软件内部的工作原理,有助于提升编程技能,同时也可以作为二次开发的基础。 【压缩包子文件的文件名称列表】"源码合集Internet" 没有给出具体的子文件名称,...