推荐序三
如果把一个人看成一个小的文明,如何规划和培育你的知识树,在很大程度上决定着这个文明的兴衰,这一点对于程序员来说尤为重要。在过去的几十年里,计算机行业一直处于科技进步的前沿,新技术、新场景层出不穷:从分布式计算到云计算,从区块链到人工智能,从边缘计算到机器人。在资本洪流的冲刷下,你的知识树是能够扎稳根基随风起舞,还是被连根拔起无情抛弃,是每个程序员要认真考虑的问题。在这个被冯·诺依曼架构统治的时代,C/C++作为一个最接近于底层架构的高级语言,是程序员们扎稳知识树根基的一个优良选择。作为一个初级程序员,即使你对计算机的底层架构没有了解,你也可以完成很多任务。但是,随着职业生涯的发展,你会发现越来越多的挑战,一方面需要你具有更宏观的视野,另一方面则需要你可以穿透高层语言的封装,挖掘系统更深层次的潜力。花些时间,沉下心来,了解基本的计算机操作原理,数据结构和算法,是夯实你的知识树基础的必要投资。
随着生成式人工智能的爆炸式发展,技工型的程序员会面临越来越大的挑战。当越来越多的场景能够被客户直接以无代码的方式实现时,这些程序员的生存和发展空间会被不断压缩。在这个新时代下,如何把自己培养成一个有创造性的程序员,将是个体文明的一个决定性策略。打个比方:在过去数千年里,人类的炊具在不断进步,从陶器到铁器再到智能化的炊具,人类烹饪的方式在不断变化,但是不变的是一代代的大厨,在不停地追逐着色、香、味、意、形兼具的美食。把自己培养成软件大厨?还是炊具技师?决定着你在程序员之路上能走多远。技师是可以被替代的。当机器人能炒出配料、火候都精准无比的鱼香肉丝的时候,你亲手烹制的鱼香肉丝也就没那么香了。但是,机器人不能做的是根据食客和场合,调整烹饪的细节,为老饕加些辣,为长者少添糖,为盖饭或配酒调整芡汁,为不同地域的食客调整配菜,甚至整个菜谱……这些就是大厨和技师的区别。而要进入这随心所欲的自由世界,缺不了在必然世界的积累和历练。学习一款编程语言,并不是只要了解语言的语法,更是要体会用工具解决实际问题的方法。工具可以变,技法可以变,但是心法是可以传承的。程序员只有掌握了创造的技巧,人工智能才会成为一个助力的工具,而不是一个现实的威胁。在一个人人可以编码的时代,你的知识树根基才是你脱颖而出的优势。
说到解决实际问题,C/C++在很多领域都有着独特的优势。在边缘计算方面,C/C++的低需求、高性能和可控性,使得它成为一个嵌入式系统和实时系统上的得力开发工具,特别是在对系统资源、能耗和性能有着严苛要求的场景。在云计算方面,C/C++可以用来优化核心服务算法,从而降低运行成本。因为云的体量,1%的性能提升,往往意味着数以百万美元计的成本差异。在人工智能领域,C/C++是很多高效能训练和推理系统的基石,特别是在GPU和定制硬件的分布式训练和推理方面。即使到了量子时代,C/C++仍然是量子计算和经典计算结合的利器。当然,我不是说C/C++就是这些领域的不二选择。在边缘计算方面,Go、Rust以及新兴的Web Assembly也有着强大的活力。在人工智能领域,Python是很多程序员和研究人员的首选。在量子计算领域,有类似Q#和Quipper这样量子专属的编程语言。如今,越来越多的项目采用多语言开发,例如用Node.js写前端,用C/C++写后端,用Python开发AI等。实际上,这些高级语言的基本结构和思维方式是十分类似的,例如面向对象的编程思想,堆栈、图、队列等数据结构和算法(除了一些量子算法),基于职责分离、松散耦合等设计模式都是共通的。学会了C/C++的思想,再接触其他的语言,会发现其实并不难。
作为一个编码36年的老程序员,我见证了云计算的崛起、比特币的塌方、元宇宙的挣扎,也在窥探着普适计算和量子计算的曙光。很高兴受阿布之邀在这里分享一些心得与大家共勉。
微软软件架构师《云之禅》和《边缘计算与基于能力的架构》作者 白海石
2023年春于里斯本