刘韧

当哲学书读才是计算机编程入门的正确姿势

①抽象之刀

②算法捷径

1990年,中文系的刘韧放下尼采与萨特,拿起《数据结构》,读不懂,记不住,都不要紧,抽象它,将“不懂”控制住,用懂的,想象“不懂”。


一、打破第一个错觉:计算机不是"聪明的机器"

计算机的本质是严格执行指令的确定性机器。它没有理解力,没有判断力,没有任何"智能"——除非程序员把"智能的规则"提前写进去。这一点至关重要:当你听到"人工智能"时,背后不是一个会思考的大脑,而是数以亿计条规则的堆叠,每一条都由人写定,由机器执行。

Brookshear在《Computer Science: An Overview》开篇就确立了这个认知底座:计算机科学研究的不是机器,而是"计算"这件事本身——什么问题可以被计算,什么问题在数学上永远无法被计算,以及如何高效地计算。机器是载体,思维是核心。


二、计算机的物理层:从开关到思想

理解计算机,必须从最底层开始,否则所有上层概念都是悬空的。

计算机内部,一切归结为电的有无。一个晶体管,通电为"1",断电为"0"。这不是比喻,是物理事实。把数十亿个这样的晶体管集成在指甲盖大小的硅片上,就是CPU(中央处理器)。

"1"和"0"构成二进制。文科生学过十进制:0到9,逢十进一。二进制只有两个数字:逢二进一。十进制的"5",二进制写作"101"(1×4 + 0×2 + 1×1)。看起来繁琐,但对机器而言,用两种状态(有电/无电)表示数字,是自然界给出的最可靠方案——没有歧义,没有模糊地带。

从二进制出发,人类建立了一套编码体系。文字如何用0和1表示?ASCII码规定:字母"A"是65,二进制是01000001。汉字用Unicode,每个字符对应一个全球唯一编号。图片?把每个像素的颜色分解为红、绿、蓝三个分量,每个分量用0-255的数字表示,存成二进制。声音?把声波按时间切片,每片记录振幅数值,同样是二进制。

计算机处理的一切——文字、图像、音乐、视频——本质上都是数字。数字本质上都是二进制。二进制本质上都是电的开关。这是计算机科学最重要的第一原理。


三、程序是什么:给机器的乐谱

一部钢琴,没有乐谱,只是木头和钢丝。程序之于计算机,相当于乐谱之于钢琴演奏。

但这个类比需要修正:乐谱是由人演奏的,演奏者可以处理模糊性("渐强"是多快渐强,由演奏者判断)。计算机不同——它执行的每一步必须绝对精确,没有任何解释空间。因此,程序是由形式语言写成的、无歧义的操作指令序列。

人类发明了编程语言,来弥合人类思维与机器指令之间的鸿沟。最底层是机器语言:纯二进制串,CPU直接执行,人类几乎无法阅读。往上一层是汇编语言:用英文缩写(MOV、ADD、JMP)代替二进制,仍然与硬件紧密对应。再往上是高级语言:Python、C、Java、JavaScript——语法接近人类逻辑,由编译器或解释器翻译成机器能执行的形式。

这个层次结构是计算机科学最核心的设计哲学之一:抽象(Abstraction)。每一层对下一层的细节保持无知,只使用上一层提供的接口。文科生写Word文档时,不需要知道"保存"按钮背后调用了哪个操作系统函数,操作系统也不需要知道硬盘磁头如何移动——每一层只负责自己的职责,整个系统才得以管理复杂性。


四、算法:思维的结晶,程序的灵魂

程序由算法驱动。算法是解决特定问题的有限步骤序列,三个关键词缺一不可:有限(必须终止)、步骤(必须具体)、序列(有明确顺序)。

用一个文科生熟悉的场景:在图书馆的书架上找一本书。

策略一(线性搜索):从第一本开始,逐本检查,直到找到或检查完。最坏情况,要检查所有书。100万本书,最坏检查100万次。

策略二(二分搜索):前提是书按字母顺序排列。翻到中间——目标在前半还是后半?确定后,再取那一半的中间,继续二分。100万本书,最多检查20次(log₂(1,000,000) ≈ 20)。

这个差距不是优化技巧,是数量级的跃迁。计算机科学用"时间复杂度"描述这种差距:O(n) vs O(log n)。当n=10亿时,前者需要10亿步,后者只需30步。算法选择,决定了一个系统能否在现实中运行,还是理论上正确却慢到无用。

这里隐含一个重要认知:编程不是打字,算法才是思维。会用Python语法,不代表会解决问题。算法设计是计算机科学的智识核心,它与语言无关,与硬件无关,是纯粹的逻辑结构。


五、数据结构:信息的组织方式决定解决问题的边界

算法操作数据,数据如何组织,直接影响算法的效率与可能性。

数组(Array):最简单,像一排座位,按编号存取。查询速度极快,但插入一个新座位要把后面所有座位往后挪——代价高昂。

链表(Linked List):每个元素只记住"下一个在哪",像一串链条。插入删除容易,但找第n个元素必须从头数起。

树(Tree):分层结构,一个根节点,向下分支。文件系统就是树(C盘→文件夹→子文件夹→文件)。二叉搜索树的每次查询相当于一次二分搜索,高效。

图(Graph):节点加连接,描述关系网络。社交网络是图(人是节点,关注关系是边);地图是图(城市是节点,道路是边);互联网是图(网页是节点,超链接是边)。

文科生学语言时,了解语法结构是为了读懂句子。计算机科学家了解数据结构,是为了理解任何复杂系统的内在组织逻辑。当你用Google Maps搜索最短路径时,背后是图的最短路径算法(Dijkstra算法);当你在电商网站看到"猜你喜欢",背后是对用户行为数据的树形分类与聚类。


六、操作系统:不可见的城市基础设施

没有人直接面对硬件工作——操作系统居于程序与硬件之间,是整个计算机系统的"市政府"。

操作系统干三件核心的事:

第一,资源管理。CPU只有一颗(或几颗核心),但你同时开着浏览器、音乐播放器、Word文档。操作系统把CPU时间切成极短的片段,轮流分配给各程序,切换速度快到人类感知不到——这叫"时分复用",造成"并行"的幻觉。

第二,抽象硬件。程序员写代码时不说"把数据写到磁盘第3427号扇区",而是说"保存文件到路径/Documents/note.txt"。操作系统把这个高层指令翻译成具体的硬件操作。不同厂商的硬盘、不同型号的显卡,程序员都不必关心——操作系统屏蔽了差异。

第三,安全隔离。一个程序崩溃了,不能把整个系统拖垮。一个用户的文件,不能被另一个用户随意读取。操作系统在各进程之间、各用户之间建立边界,维护秩序。

这与城市基础设施的逻辑一模一样:你用电不需要懂发电站,你开车不需要懂公路施工。但一旦基础设施崩溃——停电、断路——所有上层活动立刻瘫痪。操作系统的稳定性,是整个数字世界正常运转的前提。


七、网络:计算机如何彼此"说话"

单台计算机是孤岛。互联网把孤岛变成大陆。

网络通信的核心问题是:如何把一段信息从A可靠地传到B?

答案是分组交换(Packet Switching):把信息切成小包(packet),每包附上目标地址,独立在网络中路由,到达目的地后重新拼装。这比"占用一条专线直到通话结束"的电话模式高效得多——网络资源被所有人共享。

互联网依赖TCP/IP协议族。IP负责寻址(每台设备有唯一IP地址,相当于门牌号);TCP负责可靠传输(确认每个包都到达,丢失则重传)。HTTP是网页传输协议,建在TCP/IP之上。HTTPS在HTTP基础上加密,防止传输途中被窃听。

**协议(Protocol)**是计算机网络最重要的概念——它是通信双方事先约定的语言和规则。两台不同厂商、不同操作系统的电脑能互相通信,不是因为它们"兼容",而是因为它们都遵守同一套协议。协议是标准,标准是秩序,秩序催生网络效应。


八、计算理论的边界:哪些问题永远无法被计算

这是计算机科学最深刻、也最少被外界了解的部分。

1936年,图灵证明了停机问题:不存在一个通用程序,能判断任意程序在任意输入下是否会终止运行。这不是技术限制,是数学证明——这种程序在逻辑上不可能存在。

这意味着,计算机的能力有数学上的边界。存在一类问题,不管计算机多快、算法多巧妙,在合理时间内永远无法求解——NP完全问题(旅行商问题、蛋白质折叠、密码破解)。

对文科生,这个认知的价值在于:当有人告诉你"只要计算能力足够强,人工智能就能解决一切问题"时,你知道这是错的。计算的边界是由数学划定的,不由硬件决定。图灵给了计算机科学一把尺——量出可能与不可能的界线。


九、人工智能:从规则到学习

传统程序是规则驱动:程序员写"如果A则B",机器执行。

机器学习颠转了这个方向:给机器大量数据(输入+正确答案),让它自己找出规则。神经网络是其中最强大的形式:模拟神经元连接,通过无数次调整权重,使输出越来越接近正确答案。

ChatGPT这类大型语言模型,本质是:在数以万亿计的文字数据上训练,学会"给定前文,预测下一个最可能出现的词"。它流利、博学,但它没有理解,没有意图,没有自我——它是一个极其精密的模式匹配引擎。

理解这一点,才能正确评估AI的能力与局限:它在模式密集的领域(语言、图像、围棋)表现超人;在需要真实世界因果推理、常识判断的任务上,仍然脆弱。


十、给文科生的认知框架总结

层次
是什么
类比
硬件
晶体管/二进制/CPU
乐器本身
操作系统
资源管理/抽象硬件
乐团指挥
算法与数据结构
解题逻辑/信息组织
乐谱结构
编程语言
人机通信桥梁
记谱法
网络
协议/分组交换
邮政系统
人工智能
数据驱动的模式识别
经验丰富的演奏家
计算理论
可计算性边界
音乐的物理极限

计算机科学的核心不是代码,是抽象、算法、系统三个思维模式的结合。文科生学习计算机科学最大的收益,不是学会写程序,而是获得一套分析复杂系统的语言——理解层次、识别约束、看见隐藏在技术现象背后的逻辑结构。

这套语言,在这个万物皆被数字化的时代,是任何领域的思考者都需要的元能力。


参考框架:J. Glenn Brookshear & Dennis Brylow, Computer Science: An Overview, 13th Edition