无人编程让程序员失业
开发无人编程即编程自动化系统,让程序员失业
不久前我写了汉澳sinox无人工厂,引起很大反响,东莞开始有工厂实施无人工厂计划,取代工人。虽然目前即使开发无人工厂也可能只是0.1版本,然后有1.0,2.0,无人工厂不断升级版本,当然跟预想中的汉澳sinox无人工厂还有很大距离,但是毕竟提出了概念,并指明了方向,无人工厂技术研究很可能在中国引发新的工业革命。也为中国制造业指明了出路,不用担心产业转移等让中国丧失世界工厂的地位,无人工厂技术和资金投入会越来越多,保持中国制造业领先地位还是有可能的。
我有时在想,无人技术发展很快,比如无人机技术已经很成熟,最近无人驾驶也开始实用,无人工厂如果技术也成熟了,那么下一步发展的无人技术是什么?无人是指不需要人,完全自动化操控的技术,不是没有人。作为程序员,我很懒,我希望很多简单重复的工作不需要人去做,直接自动化编程就好,比如软件代工,没什么技术含量,总是由编码工人做重复工作,而不熟练的程序员还做不了,如果用机器来做,其实应该是软件来做,就不需要重复工作的编码工人了。软件设计不需要机器生产,只是脑力劳动,所以也没有无人编程工厂,应该是无人编程软件,用软件生产软件,只是高智慧的软件生产普通应用程序。无人编程工具,应该叫自动化编程系统,还是需要人输入需求的,否则软件不知道生产什么。需求千变万化,不像工厂生产的固定产品,软件生产需要面对复杂的应用程序生成,估计开发难度会比无人工厂大很多,甚至不可能。不过我觉得既然提出了无人编程,即使只是感念,也要把它完善,也许几十年以后无人编程会变成现实。
一旦无人编程技术成熟,程序员,这个最富智慧和脑力的职业,也要面临消失的可能。程序员将会继产业工人之后走向失业。而很多普通的工作比如理发,护理,打杂等,都可能由机器人完成,这个可能比较容易,要是能取代程序员,那么估计没有什么工作不可以由无人机器或者软件替代。这将是非常可怕,这样还需要什么工作呢?大家都失业在家,让机器人、智能软件接管世界?开发机器人可以由无人工厂完成,而开发机器人软件则由无人编程软件完成,最后只有开发无人编程软件的人员不失业。开发无人编程工具的人是谁?应该是各专业的顶尖科学家。
只有顶尖科学家可以工作,其他人都失业,成为类似原始部落社会的人,不用做事。这个扯远了,不过程序员应该是最后一批失业的产业工人。
好,现在已经知道有无人编程这个软件了,那么这个软件是怎么实现呢?说实话,这个软件现在技术还不成熟,我们只能探讨各种可能,并找到开发方法。
.net类库的优势
我用过汇编。c/c++,java,perl,php等各种编程语言和工具,直到我用了C#.net,才知道编程真的越来越容易了,汇编不用说了,用机器语言写程序,难。c语言,好些了,不过每个函数功能自己写,累。vc好点,但是mfc写界面还是很难,而且很多算法要自己实现,或者抄袭别人写的类。java更好点。而脚本语言perl.php等怎么说呢?管理系统和做网页是适合,但是做界面是很难的。最后出现了伟大的.net,很多功能函数,数据结构,算法都由.net类库分门别类实现好了,比如要把“1,2,3,4,5”字符串按逗号分开,用split函数就好了,以前见vb有这个函数,觉得很方便,但是c/c++是没有的,现在C#就特别方便了,直接用split就好。所以.net类库非常方便用户编程,而且界面控件也很方便实现,甚至web网页程序也可以用控件实现。.net让程序员开发速度快了好多倍。只可惜.net不能跨平台,windows贵且不好用,所以被抵制。java现在也开发了很多类库,跨平台很好,所以被unix/linux世界推崇。
.net类库让人类开发能力上了一个档次,虽然面对各种多样复杂的计算,还是需要设计数据结构和逻辑算法,但是大部分基础功能还是可以由.net类库实现了。
能不能把.net类库提升到一个档次?开发更多的函数功能应该是可能的。但是也不可能包罗万象,把所有计算都包含进去,比如新加坡总理李显龙写的数独求解算法,把算法加入类库,普通程序员就可以开发九宫这种数独游戏。不过数独算法应该找到源代码,这样不需要加入.net类库也可以引用。
又比如开发3d游戏,虽然可以直接用directx渲染引擎库,但是要实现游戏功能还不是简单调用api就可以,所以又有3D游戏引擎,把更多的函数功能封装成游戏调用接口,但是引擎接口也是很复杂的,熟悉引擎还要花时间,更不要说调用引擎完成游戏场景开发,而游戏数据结构设计,比如静态场景物体和动态物体,通关逻辑设计,对话等,内容非常复杂,不是会写程序就能解决的。我们能不能把游戏引擎再次加入.net类库,让.net类库功能无所不包呢。完全可能,只是这个是.net要做呢,还是属于开发人员引入的引擎类库?如果.net类库无所不包,不过也不可能解决所有的问题,如果有上百万个类,用户又怎么知道怎么使用呢?
用框架自动生成基础代码
.net类库无所不包,但是用户怎么用呢?我们开发3d游戏首先要用的是directx(简称dx)显示引擎,在此基础上再使用Unity3D游戏引擎,然后才可以设计数据结构和逻辑算法,现在Unity3D是在dx引擎之上更高一级的引擎,可见需要层层调用引擎。.net类库–>dx–>Unity3D–>游戏,要开发游戏要调用3层引擎,我们称为框架,基础代码,这些框架让我们节省大量工作,如果没有这些框架,开发一个游戏几乎是难以上青天。现在开发者只要集中在游戏逻辑设计以及图像设计就可以了,省去了底层编码。编程自动化就要首先调用框架,然后集中在逻辑设计,从而大大简化无人编程工具的开发。
我们写程序也是这样,是在操作系统这个框架平台上开发,否则从开发操作系统开始,设计程序简直是不可能。
我们设计几万个最佳的框架,放入无人编程工具里面,根据需要调用框架,从而实现编程自动化。数独最优解法也可以加入框架,属于数学类框架,供上层调用。
用脚本语言实现自动代码生成
有了框架基础代码,我们设计应用程序就集中在数据结构和逻辑算法设计,根据用户的数据结构和逻辑算法自动生成源代码。比如我们说的元语言编程,通过定义元语言,用脚本自动生成代码。我们可以用shell,perl,python等脚本语言自动生成代码,可以输入元语言脚本,自动生成某种语言的源代码。比如说要生成登录程序,会根据用户定义生成账户的注册,修改,删除,登录,验证码等包含数据库操作和界面交互的源代码,不再需要普通程序员编写代码了。脚本的定义和解释都是由用户写的脚本决定,可以根据需要修改脚本。这个方法可以生成大部分代码,只是灵活性不是很高,可能满足比较固定的应用程序代码生成。
用lisp等高级语言实现自动代码生成
lisp是表处理语言,拥有xml,元语言,模版等特征,可以用来生成新的应用程序代码,不过代码生成都用lisp实现,一旦改动,是不是也要修改lisp程序,跟脚本生成差别不是很大,不过对某些程序生成可能有用。比如cad用lisp脚本生成三维模型,也许在涉及开发制图程序,可能lisp很有用。比如很多模型可以用lisp保存。
现在已经有一些代码生成器软件,可以通过向导方式生成源代码。
用模版实现自动代码生成
我们开发大同小异的网页程序,为了满足个性化的界面输出,大量使用模版功能。在无人编程工具里面,我们是不是可以引入模版,从而满足大同小异的多样化应用程序生成需要。我们编程语言也引入了模版,也称为泛型,泛类型,开发程序用代表任何类型数据,这样写程序调用会有统一的接口,不管这个类型是整数,实数还是字符串,使用的时候指定T的类型就可以。
我们开发自动代码生成也可以用模版,比如指定数据库字段的名字和类型,就可以自动生成数据表字段,以及操作数据库的类,界面操作的类。而界面颜色用了模版,用户指定了某种颜色,就在生成的代码中产生指定的颜色,而不是固定死,对于动态生成颜色的代码可能没用。模版可能适合生成某些比较固定的模式。
用大数据云计算实现自动代码生成
我看到语音识别系统存入数百万个语音片段,而表情识别系统则有几百万个表情存入数据库,可见自动代码生成可能存入数百万个代码片段,然后有数百万个分门别类好的功能函数,大量的数据结构,大量的逻辑算法,甚至是逻辑算法生成模型。比如生成1到1万的素数和,就要调用循环代码,素数判断函数,累加几个功能,显然用大数据,模版等技术,生成生成1到1万的素数和代码是完全可能的。
更复杂的,游戏设计,设计背景物体,怪物,玩家数据结构设计,物体出现、运动、死亡的逻辑,要完全自动生成,需要开发人员定义很多元数据,而且可能还不够,需要设计独有的算法,只是编写代码是不需要了。应用程序复杂多样,可能自动生成工具也不是那么简单能实现,不过像教学类的,比如出题考试,无非是建立题库,出题逻辑算法,答案比较和分数生成,最难得是作文计分,这个智能程度很高,开发自动生成工具需要熟练的了解相关专业,然后可以生成一万个考题应用程序,甚至考题系统也能智能化,这个程序本身就能应付一万种考题系统,那么自动生成考题系统可能就不需要了。
综合多种技术人工智能自动生成代码
大数据可能还不能满足代码生成需要,可能还需要各种代码生成模型,我们说这是更高一级的代码生成人工智能,人工智能将应用上面提高的各种程序生成技术和手段,甚至自我学习能力,完成自动代码生成。人工智能的神经网络,深度学习技术,可能对代码生成很有帮助。
开发sepl自动编程工具
既然提出了编程自动化,我觉得sepl不应该只是满足于作为一个编程语言和集成开发工具,而是一个更高一级的无人编程工具。sepl无人编程工具拥有数百万个代码片段,数十万个框架,数十万个代码生成模型,大量的模版,用户只需要定义应用程序生成条件,就可以做到一键生成应用程序。这样就不再需要程序员,而只是需要需求分析员,程序代码自动生成。
新一代程序界面将智能动态输出界面,从而实现图形界面开发自动化
在多层逻辑实现的程序设计中,比如游戏,后台服务器端可能都差不多,游戏逻辑也接近,只是反映在界面上,个性化界面,导致界面设计很复杂,如果界面是静态的,那么几亿个用户,涉及界面设计,自动生成很难实现人性化界面。不过如果我们采用动态界面输出技术,系统根据个人喜好输出界面,就不再需要面对无数的个性化界面设计。动态的界面会根据个人喜好调整界面输出。这样自动化代码生成面临的复杂个性化界面输出就解决了,而后端逻辑设计,代码自动生成就变得容易了。
自动代码测试让程序合格出厂
生成的代码是否合格可用,如果用人去检查测试,也是很麻烦的。系统推出自动代码测试,生成源代码的时候也生成测试代码,可以对程序进行全面的完整的自动化测试,合格的产品可以出场了。
是噩梦还是光明?
自动代码生成系统出来后,写程序不再需要编码,程序员自然不需要很多。当人们还在因为写不好程序而困顿的时候,开发自动程序生成工具是不是早了一点。其实自动程序生成也不是不需要写程序,而是写一次程序,到处可以利用,不用重复写程序了,比如数独游戏一实现了自动生成,也许某个3d游戏需要数独游戏,这个3d游戏就不需要重新写数独程序, 而是开发工具自动生成。
就像java编写一次,到处运行一样,无人编程是写一次程序,到处可以使用,不需要写第二次了。
无人编程工具出现,编程速度会非常快,一个人顶上100个程序员,中国原来需要500万个程序员现在只需要5万个,99%的程序员失业了。
即使最复杂的应用程序都能自动生成,机器人等单一程序是不是更容易?
现在sepl无人编程工具还需要像visual studio那样到处散卖吗?估计也没有人买得起。