软件1.0与软件2.0

《明朝那些事儿》中让我印象最深的是对古代将领军事才能划分了几个档次,让人觉得军事指挥不再虚无缥缈。

教科书对软件的分类已经过时了。因此需要重新定义软件的档次。

软件1.0:

基于线程模型的软件开发技术。主要代表是用C/C++,JAVA,RUST、Python等开发。

这些编程语言有一个特点,不管他们的源代码以何种形式展现,对计算机而言,都是一串线性符号。理论上,所有的代码都可以写在一行上。

20世纪末,有一个计算机天才认为这些编程语言源自电报,就象火箭的直径受限于马屁股的宽度(马屁股的宽度决定车轴的宽度,车轴宽度决定铁轨的宽度,而火箭需要用火车运输,……,最后火箭直径不能超过3.5米)

电报自动化后,报文输入输出都写在一条纸带上,进一步抽象就是图灵机模型。

比如发一个电文:AA TGC BB。

如果双方没有事先约定,报文会不知所云,因此约定,AA是接收方代号,BB是发送方代号,TGC表示“货物已提交海关”。

问题是电报传输的信道是线性的,信道易受干扰。因为干扰TGC可能是其它字母组合:WB GEC ED。

为了保障传输的正确性,需要在通信协议中加入种种措施(纠错码,冗余等),降低差错率。

因此,计算机将大量的资源牺牲在保障协议的正确性上。

那种感觉就象为了圆一个谎言,需要编一千个谎言一样,软件1.0的电报模式将产生越来越多的工作量。

随着深度学习的兴起,软件开始向2.0发展。

有人将基于神经网络的软件开发视为软件2.0(这个定义还没有被广泛接受)。

软件1.0用编程语言生成一维处理逻辑过程,由这些过程去处理这些字符数据。

软件2.0通过训练调整神经网络每一层的参数,由这个神经网络去处理字符数据。

神经网络不再是一维结构了,基于神经网络的软件2.0开始突破电报模式的束缚。

已经开始有人尝试是神经网络分析github上的代码,未来有望用计算机自动生成代码,或者提示程序容易犯的错误,将错误消灭在编译之前。

站务

全部专栏