# 编程的意义——使用,而不是创造工具

date: 2021-10-25

author: 西风镭

location: 深圳,华为软件中心

# 前言

当我开始准备去写这样一套教程的时候,还是 2021 年初。当时的我还是一个普通 211 大学计算机学院的一名普通的应届毕业生,在南京的一家小公司做着普普通通的全栈开发实习。时光荏苒,一晃大半年的时光在挥霍中快速流逝。我获得了大厂社畜的新身份,在新的城市里做着更有难度的全栈开发工作。21岁的我拿到了同龄人里大约是top10%的工资,在一线城市过着还算比较宽裕的生活。回首过去的四年,从一名编程小白一步步走进大厂,其中的固然有足够多的运气成分,但其中的经历,或许也值得一谈。

因为家庭的原因,我接触电脑可以说是比较早了。但在接触电脑的过程中,我并没有像许多人一样自行打开编程的大门,也没有像另一些人一样沉溺于游戏的虚幻世界。我仅仅是学会了运用一些工具,比如去修改游戏的文件或者二进制数值、安装操作系统、手机刷机越狱以及用命令行实现一些简单的功能。但由于我的成绩一向不佳,再加上南京教育里固有的内卷风气,我使用电脑的机会便一直很少。真正开始学习编程,大概还是到大一的时候。但或许是因为先前的经历,我把编程视为使用工具的过程,而非创造工具的过程。于我而言,编程的目的是使用工具而提升生产力。因此,我并没有很系统的针对性对于某一门语言去学习,而是通过大量的实践,来逐渐体会编程本身的意义,以及享受其带来的乐趣。

我大学一开始就读的是经济学专业,但在计算机编程的学习中,我逐渐意识到了我对计算机的兴趣,因此决定转专业去往计算机学院。尽管这在当时说不上是一个好或者坏的决定(全专业仅我一人选择转出),但三年后,当疫情带来的经济下行冲击着社会的每一个角落,原专业的同学们在就业大潮中苦苦挣扎时,我能够凭借码农的身份,在大厂的象牙塔中谋得一席之地。这或许也是运气的眷顾使然。三年后的今天,各行各业都在转计算机,但是,大家真的懂计算机吗?大家真的理解,什么是编程的意义和快乐吗?我想,大约未必。

# 正文

编程和代码,对大家来说意味着什么?是程序员的高工资,还是稀疏的头发?互联网时代,无数人前赴后继的卷进了码农的道路,却终究只能在黑心的外包厂或者资本家的血汗牢笼里暗无天日,在升级的大小周压迫下,期待着有朝一日能享受仅仅是 996 的福报。为了一点微薄的薪水,他们放弃了自己的自由,也忘记了,所谓编程,本身的意义。

在工业革命的过程中,生产力得到了快速的发展,推动生产力发展的,不仅仅是机器本身,更重要的,是机器所代表的程式化生产流程。从此,生产环节脱离了效率低下且出产质量不稳定的匠人时代,走上了以标准化和流水线生产为代表的大机器工业时代,生产力得到了极大的进步。多年的积累才能培养出的一个匠人被流水线下培训数天就能上岗的工人所取代,手工制造由效率质量低下逐步转变为精工细作的代名词,少数的能工巧匠凭借高额的产品附加值生存着,而更多的匠人只能被淘汰。

精密机械的发展催生了电力工业。电气时代的出现可以是必然的,因为电是一种传输效率极高的中间能源。化石燃料通过燃烧实现火力发电并入交流电网,瞬息之间就能传递到千里之外。电力的出现需要更高能效的能量产生装置,比如内燃机,也就是二次工业革命的核心。流水线作为一种生产组织形式登上了历史舞台,在这里,人就是机器,为机器配工人成了一道新的景象,生产力提升到了人力所能达到的最高水平。

电力工业的发展需要越来越复杂的装置以及越来越精密的操作,于是电子工业逐渐出现了。电子工业的核心是通过各种各样的电子设备实现机器大生产,人逐渐被驱离生产过程,精度极高的全自动生产线和机器人成为了生产工具,效率远超过人所能达到的范畴。越来越多的东西变成产业,人类逐渐不再依靠自己的劳动换取温饱,以金融为代表的服务业开始成为主角。

一切的一切背后,是一切生产被标准化程式化的工序所规范,这就是一开始的编程。编程本身是指导生产,计算机编程是指导计算机生产。编程应当是一个生产过程,而所有的编程工具本质上都是生产力工具。学习编程,某种意义上是解放我们自己的生产力

冯·诺依曼所定义的最早的计算机包含五个部件:运算器、控制器、存储器、输入设备和输出设备,对应了程序的五个过程:输入,运算,处理(控制),存储,以及输出,那么就牵扯到了两个东西,一个叫数据,一个叫算法。数据是你输入、输出、存储、运算和处理的内容,算法是运算和处理的方式,比如最小的程序,1+1=2,输入是数字 1 和 1,算法是加法,输出是数字 2,这也可以说是一个很小的程序,他完整具备这个流程。这也就是最早也是最基本的程序,面向过程的程序。

随着编程水平的进步,我们会逐渐发现,传入和传出的数据越来越复杂,可能是一组成绩,一份表格,一个人物,甚至一个集体。传入的数据包含了相当多格式不一的参数,甚至还自带有属于自身的算法。我们将这样的一个整体称为对象,相应的程序也就是面向对象的程序。在如今常用的一些解释型语言中,一切数据的本质都是对象。我们以面向对象的视角面向世界,或许世界本身也就是个上帝制造的程序而已。