谈一谈自动编程

智数探微者
• 阅读 2647

这里所说的自动编程,是运用人工智能技术来自动生成程序,尽量免除人类劳动。

在自动产生程序之前,先要知道需求是什么吧?要能把需求准确地描述给机器,这就需要一种需求描述语言。假如我们制造了这种需求描述语言,它进一步发展,越发规范,成为了一种DSL(领域特定语言)。嗯,这就变成了DSL编程。

假如要生成一个应用程序,要选择一些开发框架、中间件和技术方案吧?人类开发时要考虑开发成本和效益的权衡,但是机器既然已懂得多种技术方案,对它来说开发成本为0,那么选择最好的那一个技术方案就行了。这就相当于存在一套最好(也可能最复杂)的框架,用DSL在框架之上编程。

闹了半天就是DSL和框架啊?智能到哪去了?

要想真正发挥人工智能的作用,我有两个思路:

  1. 自动提问
    就算有了需求描述语言,人类就能准确描述需求吗?如果描述得不好,机器能否通过一些分析,针对不足之处,向人类提问,用答案来完善需求描述呢?
  2. 自主学习
    人工智能的精髓是自主学习。如果机器能学习世界上现有的代码,不需要人类特意为它提供需求描述语言和技术方案,就方便多了。最好是人类直接说需求,机器自己思考,有问题就提问。

有一个有趣的事——最初的自动编程是什么呢?当编译器技术刚发明时,它就是自动编程:自动把高级语言代码转化成汇编码或机器码。

我个人认为,凡是能给人类省事的技术,哪怕是if-else,也可以算是某种人工智能。

现在要求高了,编译器是硬编码的智能,而我们还要可扩展、甚至自动扩展的智能。现在的自动编程主要有两个流派:基于规则推理的、基于机器学习的(包括统计学习、深度学习等)。学术界对自动编程有一个更特别的说法——程序合成(Program Synthesis)。

由于机器学习的火爆,比较流行的似乎是基于机器学习(+深度学习)的自动编程,其中一种是通过学习输入输出数据的样本,自动“猜”出一个能处理这些数据的程序。

对此,摘录马毅教授的一条微博:数学告诉我们,无论overfit了多大的样本数据,经验事实如何震撼,也取代不了逻辑严格的推理证明——这是唯一能将结论从有限样本扩展到无限的方法。

例如一个递归程序,只有数学归纳法能准确生成它,任何有限样本都无法准确生成它(只能近似猜测)。对于有一点小bug就能出大事的程序,不能松懈啊。

因此我不是很赞成基于机器学习的自动编程,即使要用,也只是辅助手段吧。啊哈哈~

点赞
收藏
评论区
推荐文章
浅梦一笑 浅梦一笑
4年前
学Python后到底能干什么?
Python是一种什么语言?Python是一种计算机程序设计语言。你可能已经听说过很多种流行的编程语言,比如非常难学的C语言,非常流行的Java语言,适合初学者的Basic语言,适合网页编程的Java语言等,Python是他们其中的一种。首先,我们普及一下编程语言的基础知识。用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等,
九路 九路
5年前
Gradle技术之一 Groovy语法精讲
Gradle技术之一Groovy语法精讲gradle脚本是基于groovy语言开发的,想要学好gradle必须先要对groovy有一个基本的认识1.Groovy特点groovy是一种DSL语言,所谓的DSL语言,就是专门针对某一特定领域的语言,专精而不专广是一种基于JVM的开发语言,也是编译成class字节码文件结合和Pytho
Wesley13 Wesley13
4年前
java视频网站源码下载
据官方数据统计,在全球编程语言工程师的数量上,Java编程语言以900万的程序员数量位居首位。而且很多软件的开发都离不开Java编程,因此其程序员的数量也是非常之多。而在以Java编程为核心的开发领域中,javaEE程序员的需求量10年来一直居于首位!学习Java技术,给大家推荐一套非常好的学习视频源码:2018年底新录制的学习视频教程:链接敏感私聊
Stella981 Stella981
4年前
Sass用法指南
学过CSS的人都知道,它不是一种编程语言。你可以用它开发网页样式,但是没法用它编程。也就是说,CSS基本上是设计师的工具,不是程序员的工具。在程序员眼里,CSS是一件很麻烦的东西。它没有变量,也没有条件语句,只是一行行单纯的描述,写起来相当费事。很自然地,有人就开始为CSS加入编程元素,这被叫做"CSS预处理器"(csspreproces
Stella981 Stella981
4年前
Gradle的基本使用
Gradle的介绍Gradle是一个基于ApacheAnt和ApacheMaven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置。面向Java应用为主。当前其支持的语言限于Java、Groovy和Scala,计划未来将支持更多的语言。Gra
Easter79 Easter79
4年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
程序员小五 程序员小五
2年前
融云 IM SDK 国际化支持程度如何?
融云IMSDK默认支持三种语言,简体中文,英语,阿拉伯语,系统设置为对应语言后,SDK默认展示为对应语言。其他语言变体需要客户端单独适配。IMKitSDK增加本地化语言问题描述应用程序集成了AndroidIMKit,需要支持多语言。分析(根因分析、需求分析
近屿智能 近屿智能
10个月前
人人可开发AI应用!百度“秒哒”上线,学AI就选近屿智能
百度宣布国内首个“对话式”应用开发平台秒哒正式全量上线,用户仅需通过自然语言描述需求,即可自动生成完整功能代码。秒哒采用“无代码编程多智能体协作多工具调用”的技术组合,用户仅需通过自然语言描述需求,就能自动生成完整功能代码,包括小游戏、H5、网站或轻应
智数探微者
智数探微者
Lv1
君埋泉下泥销骨,我寄人间雪满头。
文章
3
粉丝
0
获赞
0