前言

为了能找个时间做一期播客来聊聊未来的交互方式,最近我一直在关注有关AI以及交互方面的新闻。几天前,内核恐慌更新了一期名为“编程的终结”的节目,讨论的话题主要为生成式人工智能是否预示着以编程为代表的人类智力劳动的终结,如此巧合。节目的质量非常高(毕竟是年更节目),令我产生了许多新的想法,便借此机会写一篇文章。

本文仅代表作者观点,若有差错欢迎指正。我的联系方式可以在网站的“联系我”页面找到。


如果编程语言不复存在,

取而代之的便是自然语言编程。随着这几十年科技的蓬勃发展,写代码这件事从只能由科班出身的人来做,到现在人人都可以学习编程,甚至有了各种各样的速成教程,门槛已经降低了如此之多。在当前生成式AI行业飞速发展的背景下,不难相信,在不远的将来,我们将抛掉繁琐、死板的编程语言,用上“自然语言编程” —— 计算机将能通过一系列算法和生成技术,理解用自然语言书写的指令并生成代码。

为了更直观的表达编程语言间的区别,我分别使用了低级编程语言,高级编程语言,以及自然语言编写了同一个程序:

用Intel Style的X86_64汇编语言(GPT4模型生成,我还不会汇编)写为:

section .data

  prompt db 'Enter two numbers: ', 0

  promptLen equ $-prompt

  format db '%d', 0

  result db 'The result is: %d', 0

 

section .bss

  num1 resb 4

  num2 resb 4

  result resb 4

 

section .text

  global _start

  _start:

      ; Print the prompt

      mov eax, 4

      mov ebx, 1

      mov ecx, prompt

      mov edx, promptLen

      int 0x80

 

      ; Read the first number

      mov eax, 3

      mov ebx, 0

      mov ecx, num1

      mov edx, 4

      int 0x80

 

      ; Convert the first number from string to integer

      mov eax, [num1]

      sub eax, '0'

 

      ; Read the second number

      mov eax, 3

      mov ebx, 0

      mov ecx, num2

      mov edx, 4

      int 0x80

 

      ; Convert the second number from string to integer

      mov eax, [num2]

      sub eax, '0'

 

      ; Multiply the two numbers

      imul eax, [num2]

 

      ; Print the result

      mov [result], eax

      mov eax, 4

      mov ebx, 1

      mov ecx, result

      mov edx, 4

      int 0x80

 

      ; Exit the program

      mov eax, 1

      xor ebx, ebx

      int 0x80

用C写为:

#include <stdio.h>

 

int main()

{

int a, b;

printf("first number: ");

scanf("%d", &a);

printf("second number: ");

scanf("%d", &b);

 

int r = a * b;

printf("%d\n", r);

 

return 0;

}

 

使用自然语言则为:

请获取我接下来输入的两个数值,将它们相乘并输出计算结果。

在阅读前两段代码时,假若你没有一定的计算机基础,或无从知晓其作用,而自然语言却是人尽皆知的。对于这样能进一步的降低编程门槛的趋势,我本人感到极其高兴。就如Matt Welsh所说

“Humans are not good at writing, maintaining, and understanding code”

我们人类对于特定方面的思维限制,以及我那一点点仅有的,从百忙之中挤出来的编程学习时间,让我对于自然语言编程无比的期待。在我看来编程应该作为一项工具来服务人类,就和大部分工具一样,不需要通过大量学习就可以直接上手使用,拿它做想做的事。

每个人应该都有编程的权力,我特别认同在Quora上对于问题“Is coding for everyone? Why or why not?”的一个回答:

“It really isn’t. But what is? I think everybody should have a go at simple coding. Everybody who can get through a high school maths and English class can do something simple. It’s just whether or not you end up liking it and find it intuitive or not. I enjoy driving my car. I’m not a rally driver. I like to cook. I’m no Gordon Ramsay. It’s that kind of difference.”

我可以像使用工具一样使用编程,可以用我的方式告诉电脑该做什么,但我不需要学习如何让电脑计算火箭发射轨道。

话说回来,就我个人而言,编程将很大程度上帮助我表达设计理念与想法。在产品设计领域,还有什么比一个Fully functional prototype(功能原型)更能表达设计师的想法呢?目前我想做的几个项目中都包含了一定程度的智能化以及自动化,所以学习编程是当务之急。然而,就算我在以前的学习中已经系统性的了解过了浅层的计算机结构以及代码的构成(伪代码),每个新的编程语言还是会需要一定的时间去学习、熟悉语法以及应用,这段学习的时间对我来说是快乐却又痛苦的。享受着逐渐掌握一门新技术的过程,我却又苦于没有足够的时间去完全精通这门技术。是故想要自然语言编程来高效化我的学习,让程序可以快速运用到产品上。从而可以不在学习与精通设计步骤上花更多时间,去把更多的时间花在设计本身。


自然语言交互?

若自然语言是对编程难度的降低,那对于人机交互来说情况会有所不同吗?

在前言我提到,交互模式是我“探索”AI领域的根本原因。于是在看了自然语言计算机*的概念后,我产生了一个“GUI的时代是否即将终结”的想法,却很快被我自己否认了。在讨论GUI与自然语言的关系之前,我想先引入一个例子:保存按钮(软盘)。这个随着科技发展迭代,存在了了几十年却仍保持不变的设计,并未因为技术迭代(硬盘/闪存芯片)而改变。我相信同样的理念也可以运用在操作模式上,实现互补,类似于现在的copilot,但是是系统层级的。

本文就不再多赘述交互模式了,感兴趣的朋友可以等一等我的第一期播客。


设想是美好的,现实是?

I do know from my own experience that it is a magical black box. And I don't understand how it works.

我们仍在寻找高效率训练及使用大型语言模型的方法,想起去年和朋友在国内的一家书店里看见一本《从零开始玩转ChatGPT》。当时朋友还调侃了一句“这书是教你咋用parameter吗”,没想到还真的有所谓“Prompt Engineering”研究。现今,我们想要理解大语言模型如何工作的难度并不亚于理解我们的大脑如何工作,也很高兴各大硬件厂商能不断开发“疯狂”的硬件,以超高的投入支持AI领域的工作。

人类不应该停止前行的脚步,即便前方是一片充满未知的迷雾。


Ref.

https://youtu.be/JhCl-GeT4jw?si=tUwtc-s5kLiFtsDU

https://www.quora.com/Is-coding-for-everyone-Why-or-why-not

https://pan.icu/68