这是一个字节的奇妙之旅,也是初学编程者的入门书,它诞生在一个计算机蓬勃发展的伟大时代。计算机以惊人的生命力蔓延、侵入、扎根到每一个领域,并在智能制造、电子商务、直播视频、广告推荐这些领域做出了自己的卓越贡献。不仅如此,计算机本身的各分支也毫不削减自己的发展速度,如深度学习、分布式软件架构、网络安全、数据库的每个领域都同时在学术界与工业界吸引了最聪明的人才与最大笔的投资。在这个时代,凡人力所不能及之处,皆有计算机的身影。
在这背后支撑整个计算机世界的,就是程序员,也就是我们。从计算机学院教授到互联网公司员工,每一个从业者在他们各自职业身份之前,都是一名程序员。
很多人在涌入计算机行业,他们的第一道门槛就是编程。可惜的是,编程的学习曲线并不平缓。光面对Hello World编译报错,很多人可能就要浪费一整天时光。这本书的写作动机就是把编程讲得更简单些,让学习曲线不那么陡峭,最好再开阔一些视野,通过编程看到背后的思想,激发对计算机编程的热情。
为此,我虚设三个角色:计算机科学家、电子科学家、数学家,代表各自的领域知识,通过对话阐明计算机系统设计背后的动机。编程中的很多实践并不是拍脑袋决定的,其实需要计算机系统知识的支撑。想要知其所以然,常常需要从数学、电子科学的角度去理解。颜师古注《汉书》云:“穷波讨源”,就是设置三个角色的宗旨大纲。
编程是一门非常独特的技艺,它像是一个纯粹的形式逻辑游戏。数学系学生做数理逻辑证明题,哲学系学生做分析哲学论述,程序员则是把一些字符串变成另一些字符串。但如果这样看待计算机,其实写不出优秀的程序。这是计算机科学本身特点所决定的,程序员必须深入思考这门游戏的载体,计算机本身。不要“在数学中”编程,而是“在计算机体系结构中”编程。程序员需要先在脑海中构想软件架构、设计模式、数据结构、储存系统,通过多个层次的抽象控制复杂度,再运用编程技巧落实到软件中,使得计算过程变为一个个字节,运行在计算机中。
为了说明这些计算机科学中的伟大思想,我会与读者一道编程。本书所有程序都可以在Linux中编译运行,读者可以选择一个简单易用的Linux发行版本(我的选择是Ubuntu),搭建自己喜欢的编程环境。不过,关于本书代码需要说明两点:首先是代码的排版,毕竟出版物被印刷在纸上,所以不得不在螺蛳壳里做道场,代码排版只得辗转腾挪。还有就是代码逻辑,所有代码只运行Happy Path。这是因为书中代码都只作示例,不宜用于任何生产环境。
希望本书对读者学习计算机有所增益。但书中错谬在所难免,读者发现错误还请不要嘲笑,如不吝告知,则将不胜感激。
编者
2024年8月