主流 01
首先().首先(nullptr):关于 CS
TheFirstlyFirstly::AboutCS主流 01|首先().首先(nullptr):关于 CS - TheFirstlyFirstly::AboutCS
“ 计算机科学 ” 这个名字本身就很糟糕。
首先,它不是一门科学;其次,它所关心的其实也并非计算机本身。
— Hal Abelson,MIT 6.001《计算机程序的构造和解释》Lecture 1A(节译)
01. 何为 “CS” ?
正如麻省理工学院传奇老教授 Hal Abelson 所说,“计算机科学”是一个容易令人误解的名称。
不过这里所谓“它不是科学,也不关于计算机”,更像是一种教学上的修辞。
计算机之于 CS,正如粒子加速器之于物理学,焖子之于良子。
这些都是重要的工具或研究对象,却不是其全部。
严格而言,今天的 CS 是一门独立但边界开放的学科。
它研究计算能够做什么、如何实现计算、需要多少资源,以及信息如何被表示、变换、存储与传递。
其内部包括算法、程序语言、体系结构、操作系统、网络、图形学、人工智能和安全等众多方向,同时广泛借用离散数学、线性代数、概率统计与工程学的方法。
对我而言,CS 更像是现代文明诸多领域智慧的交汇处。
它不像一座边界封闭的孤岛,而是在与数学、工程、自然科学甚至人文社会科学持续交换方法的过程中发展起来的。
我认为,学科从来不是彼此隔绝的孤岛。
知识如同数据,在文明庞大的网络中川流不息;它们于交汇处相遇、碰撞,又携带新的意义奔向远方。
中华文明亦在无数族群与思想的交流中汇流成河;现代文明的璀璨,也恰恰诞生于这些从未停歇的流动与交汇之中。
02. CS 概述
CS 全称为 “Computer Science”,中文通常直接译为 “计算机科学”。
请不要把它与 Counter-Strike 搞混(缩写同为 CS),哪怕它真的很好玩(基于作者 500小时+ 调查时长)
实际上,计算机科学这玩意大得离谱。
它的一端研究某个问题究竟能不能被计算,以及计算它需要付出多少时间与空间。
另一端则试图让数十亿枚晶体管、遍布世界的机器,以及数量同样惊人的不可靠人类共同完成一件事情。
如果非要粗略地画一张地图,那么,理论计算机科学关心 “什么能够被计算”。
算法与数据结构则关心 “怎样更有效地计算”。
程序语言与软件工程关心 “怎样把人的想法变成可理解、可执行、最好也可维护的程序”,
而不是产出今天只有我和上帝能看懂,明天只有上帝能看懂的项目。
(至于我们苦命的全栈开发者,则经常拿着一个人的工资,同时干前端、后端、设计以及另外几个人的活。)
再向下看,计算机体系结构、操作系统与编译器负责让软件最终落到真实机器上。
数据库、计算机网络与分布式系统负责保存、处理与传递信息,并让多台机器能够协同工作。
计算机安全与密码学则试图在一个并不总是值得信任的世界里建立有限的信任。
图形学、人机交互和人工智能又将计算重新带回人类能够感知的世界:图像、语言、声音、决策,以及那个永远理解不了 “任意按键” 是什么玩意的用户。
当然,这并不是一棵必须从底部依次点亮的技能树。
你完全可能在不知道 TCP 如何工作时写出一个网站,在不理解编译器时使用十种编程语言,
甚至在不知道自己为什么能跑起来时,让程序成功跑起来,顺带再安装几百个依赖库——这通常被称为 “现代软件开发”。
贯穿这些领域的一个重要思想,是抽象。
我们把电压的变化解释成 0 与 1,把比特组合成数字和指令,把指令组织成程序,再把程序连接成操作系统、网络与数字世界。
每一层都暂时隐藏更底层的复杂性,使我们能够站在前人搭建的阶梯上继续思考。
因而,学习 CS 并不只是学习如何使用计算机。
它也是在学习:人类如何划分问题、建立模型、隐藏复杂性,并最终让一块由沙子炼成的芯片在承载思想的同时变得聪明。