代码自动生成技术的历史非常长,人们采用过各种代码自动生成系统,取得了程度不同的成功。例如各种IDE中的Wizard,可以视为被动式代码生成的成功例子,目前还在各种IDE中广泛存在。在诸如PHP、Python的Web开发中,大量使用的模板技术,如Smarty和Mako,也可以视作主动代码生成的一个成功案例。目前在很多大公司内部,也都或多或少的应用了代码自动生成技术。

但是这些成功应用的实例,虽然在各自领域取得了不俗的成绩,但是距离人们希望利用代码自动生成,取代人工编程的希望相差甚远。

近年来,随着深度学习和人工智能的崛起,是不是能够利用这些最新的技术,实现自动代码生成呢?在这一点上,研究者们还真没闲着,推出了各种模型,多数是利用递归神经网络(RNN)或长短时记忆网络(LSTM),通过学习现有代码,然后生成新的代码段,有些模型甚至可以根据人工给出的核心代码,扩充成完整的代码。但是这里生成的代码只是像代码而已,是完全没有意义的代码,只是为生成代码而生成代码,对实际应用来说没有什么实际意义。最近比较流行的Neural Programmer似乎进了一步,可以通过RNN或LSTM来理解人们的需求,生成正确的SQL语句。再有就是前一段时间报道过的DeepCoder,利用梯度学习算法来做代码生成工作。

但是个人觉得,这些方法虽然在学术上很有价值,但是离实际应用还有很长的距离。以现在比较流行的利用深度学习算法进行代码生成为例,其还是将代码生成过程当成一个黑盒子,通过大量例子的学习,来使网络具有一定的“编码”能力,实际上是生成式网络的一种应用。

其实代码生成,以人类的程序员为例,基本是基于规则的创造性过程,目前这些基于连接主义的自动编程系统,由于将代码生成过程视为一个黑盒子,就忽视了编程过程中的各种规则,让网络去随机探索,在所有程序组成的空间中,找出适合的程序,效率太低了。

综上所述,代码自动生成,还是应该走与当前流行的连接主义不同的思路,我们应该大力借鉴的是早前曾经流行过的符号主义思维模式。当前在实际中得到广泛应用的代码生成技术,应该是基于模板的代码生成技术。

例如在Python中,代码生成用的最多的技术就是进jinja2,这是一种基于模板的代码生成技术,最主要的应用场景是在Web应用开发中,程序员通过Jinja2语法,将表达式、逻辑控制等嵌入到HTML文件中,形成模板文件,在程序运行时,系统会自动求出表达式的值,执行逻辑控制代码,从而动态生成HTML页面内容。

我在这个系列的博文中,就是想向大家展示一下,通过利用Jinja2技术,再辅以一定的人工智能技术,可以完整的生成一个管理信息系统。我们将以Java8为主要开发语言,采用PWA开发技术,做类似于单页面应用(SPA)。具体应用场景,我们选择的是急诊分诊系统。之所以选择急诊分诊系统,主要是由于医疗信息化项目,通常业务逻辑异常复杂,以这样的例子作为试金石,可以验证我们的代码生成技术是否具有实用价值。

下面来讨论一下我们的指导原则。首先,我们在这里不准备采用ORM映射技术,也不准备太强调分层技术。采用分层技术,一个重要原因就是让具有不同技能的人员,组成一个代码流水线形式来进行工作,提高工作效率,同时ORM映射是解决程序员只懂OO不懂关系型数据库的问题。而我们这里是自动生成代码,从表现层到业务逻辑层都由程序实现,因此没有必要按照技能的不同来分层,完全应该按照更加自然的方式来分层。其次,我们不会太强调设计模式和可维护性。因为我们是自动代码生成,生成过程往往以秒计,多数设计模式还是以人工写代码为指导思想,通过设计模式,模块间松籍合,来达到减轻代码不一致性和维护的难度,但是在代码自动生成中,如果有更改需要,重新生成一遍代码即可,即使有成千上万处同样的代码,也会准确无误地进行更新,因此代码简洁性的重要性将大大提高,而复杂的结构却往往处于不利的地位。最后,我们将非常重视单元和功能测试,尽量将其自动化,使得回归测试变得简单可行,这样我们如果对代码生成引擎进行了修改,我们可以运行一下回归测试,如果没有问题,则证明我们的修改是正确的。

人工智能自动代码生成1---前言相关推荐

  1. 2019年上半年收集到的人工智能自动驾驶方向干货文章

    2019年上半年收集到的人工智能自动驾驶方向干货文章 颠覆性技术丨无人驾驶 解析|自动驾驶的核心技术是什么? TC专访Waymo首席技术官:谷歌自动驾驶的过去和未来 全面解读自动驾驶的关键组成部分 史 ...

  2. java排班_使用java规则引擎Drools自动排班前言.doc

    使用java规则引擎Drools自动排班前言 使用java规则引擎Drools自动排班前言本文以一个经简化的运输车队自动排班需求为例,详细讲解了如何使用java规则引擎Drools进行商业规则的形式语 ...

  3. Matlab/Simulink 自动代码生成 基于模型设计学习教程(1)---- 环境配置

    在接触不断开发深入STM32的时候,我经常在直接用C语言编写一个很发杂的算法,比如PID控制,傅里叶变换,卡尔曼滤波之类的基本需要的算法,然而对于一个初学者来说,编写这样的算法,费时费劲,甚至不一定能 ...

  4. yii学习笔记—gii 自动代码生成工具

    其实 ajax 的一个很简单的实现原理就是建立一个隐藏的 iframe 然后通过这个 iframe 提交信息,再取 iframe 的返回信息,这样页面没有刷新,刷新的只是那个隐藏的 iframe Yi ...

  5. 人工智能自动sql优化工具--SQLTuning for SQL Server

    SQL语句是对数据库进行操作的惟一途径,对数据库系统的性能起着决定性的作用.对于同一条件下的SQL语句写法有很多,其中一些写法往往对性能又有很大影响.但是每个人掌握SQL语言的水平不同,如何才能保证写 ...

  6. 什么是人工智能自动编程?它只是一个噱头吗?

    简介:一个普通的开发者是否已经有了一些有用的工具,这些工具使用人工智能技术提高了他的生产力? 作者 | 梧忌 毫无疑问,人工智能将改变软件开发的方式 -- 我们已经看到了一些尝试将人工智能应用到软件开 ...

  7. copilot 让AI帮你编程(人工智能自动完成)

    copilot 让AI帮你编程(人工智能自动完成) 官方地址 前不久,GitHub和OpenAI联合为程序员们送上了编程神器--GitHub Copilot. 但是,Copilot目前不提供公开使用, ...

  8. ai自动写JAVA代码,人工智能自动写作软件2.0时代(示例代码)

    大家好,人工智能人工智能(ai)的定义是计算机科学的一个分支,自20世纪70年代以来被称为世界三大最先进技术之一(空间技术.能源技术和人工智能).它有许多定义,它们都是有意义的,没有对错之分.人工智能 ...

  9. 一文弄通STM32F103基于simulink自动代码生成CAN/USART/GPIO/TIM(stm32cubemx+stm32target+matlab2018b)

    一文弄通STM32F103基于simulink自动代码生成CAN/USART/GPIO/TIM(stm32cubemx+stm32target+matlab2018b) 写在前面 1.stm32cub ...

最新文章

  1. R可视化包ggplot2修改可视化图像的字体大小
  2. nginx三大功能(之二负载均衡)
  3. C语言程序设计第三次作业——选择结构(1)
  4. node.js入门 - 9.api:http
  5. PPT 下载 | 神策数据张涛:企业服务客户全生命周期运营三步曲客情诊断 解决方案库...
  6. ATT汇编leave指令
  7. spring中事务配置的3种方式-2
  8. linux配置4g网络命令_树莓派移动网络连接(配置4G网卡)
  9. python3.6安装dlib,一直不成功的解决办法
  10. 轨迹相似性度量方法总结
  11. JAVA 网络编程 Socket 详细说明,实现客户端和服务端相互推送消息
  12. Android 功耗(9)---MTK功耗基础知识
  13. 其它行业半路转web前端,优势和不足有哪些?
  14. 《jBPM4工作流应用开发指南》这本书
  15. linux 查看 pub文件夹,linux 文件/目录的属性及权限
  16. 2017-2018-1 20155320 嵌入式C语言——时钟
  17. 啊哈c语言114页习题:设计一个小人,让它从右边向左边奔跑
  18. 百度坐标拾取html,使用百度批量拾取坐标点-汇总
  19. 大压缩文件解压错误,台服wow common-2.MPQ 文件损坏
  20. Android 软键盘的那些坑,原理篇来了!

热门文章

  1. after interviewing,test and learning.
  2. 第五章 kubernetes创建kubeconfig 文件
  3. 五大资源负载监控与调优
  4. python中保留两位小数的函数_python中round函数保留两位小数的方法
  5. php如何实现上一篇下一篇
  6. SQL Server 2008 R2数据库镜像部署图文教程
  7. 分享134个ASP整站程序源码,总有一款适合您
  8. Hbase 根据数据入库时间戳查询入库数量
  9. 同元国产化建模仿真与代码生成解决方案
  10. 霍尔闭环电流传感器在电动观光旅游车上的应用-安科瑞黄安南