关于编程语言的想法


C是我学习的第一门语言,我也很庆幸如此。
在之后学习C++的时候,一切都是那么自然而优美。

在接触过现代的各种语言(主要是Python和Go)之后,我想很难再有像C/C++一样「完美」的语言了。因为「C/C++」(或者说C)就是高级语言的「默认版本」:它提供高级语言的编程方式(用人类的语言,英文进行编程),但是它不会做任何「假设」,不会「自作主张」地为你做任何事情,一切都是可控而自然的。

现代的各种语言,在某个领域都会比「C/C++」更好用,但是前提是你要接受其设计者的「理念」,学习这门语言的「潜规则」:那些并非为逻辑服务的规则。(交给程序员是不是更好?)

「C/C++」有它的问题,这一点我想大部分人都会同意。比如编译打包、分发代码等,都不是简单的事情。MS的vcpkg,我(在现实中)很少过有人用;CMake这种屎山,还在被大部分C/C++项目使用。

但是我最喜欢的编程语言仍然是「C/C++」,我喜欢一切可以掌控的感觉。只是现在的我已经没有了「技术洁癖」,我愿意接受一些人为制定的「潜规则」,只要它能为我带来便利和工作效率,那么对「优雅」的追求也可以稍稍降低。比如Go,让我不用担心编译链接的错误;比如Python,让我可以轻易使用成千上万第三方lib。

另外一点区别是,C/C++ 指定的是语言标准,比如C++ 11,C98等。我们基本不需要关注编译器版本,编译器也有很多不同的实现(GUN,MS,Apple等)。但是现代的大部分语言,都是需要程序员明确分清楚编译器、解释器的版本的(因为这确实会有影响),比如 Python,Go。在2025年我的g++默认语言标准还不是C++11,但是一个npm包只是因为不是最新版就会给你报告Warning了,廉价感确实不同。

计算机科学是工学,不要用数学的标准要求它。有时候,我们这些干活的,手就是要弄脏的。