最近重新复习了 Java 这门我曾经非常熟悉的语言 , 翻阅到 Bruce Ekecl 的 ON JAVA 一书, 他在卷首就引用了维根斯坦(Ludwig Wittgenstein)的名言: 'The limits of my language means the limits of my world.' 我的语言的局限即我的世界的局限.
作为程序员, 一种语言会悄然无息的引导你进入某种思维模式, 同时远离其他思维模式.
看到这里, 我深有同感, 我现在用的最多的编程语言是 Python , 而 C++ , Java 和 JavaScript 也是我熟知的语言, 我用它们来谋生, 写过许多正式项目和 side project.
在语言之间我也曾经有过好恶, 对 JavaScript 我还写过一篇吐槽的文章 C++程序员眼中丑陋的 JS
可是随着年岁的增长, 我也渐渐领悟到不应局限于语言的边界, 很多编程语言为了解决机器语言的复杂性, 引入了更多的自身的复杂性, 当看到 Java 项目中那么多的注解, 那么多的 setter/getter , 各种框架的各种奇技淫巧, 我觉得 Java 把事情搞得有点过于复杂了.
然而,当我转过头来看 Python 时,它以其简洁优雅赢得了我的心,却又让我在某些场合深感无力。Python 的”人生苦短,我用 Python”俨然是一种哲学,但苦短的人生里,性能瓶颈和动态类型引发的神秘错误却也未必总是浪漫。要处理百万级请求?C++程序员笑而不语;要严谨的数据类型推导?Kotlin 不禁哼起了歌。
每种语言就像一个国家,有自己的文化、风俗和治理方式。Java 是个喜欢规规矩矩穿西装打领带的“商务精英”,一丝不苟地写注解,带着 setter 和 getter 出席每场会议。它的框架让你觉得这家伙的行事逻辑虽复杂,却极其可靠;但有时候你会被它的“繁文缛节”搞得头晕。Python 呢,就像那个穿着短裤坐在沙滩边的哲学家,轻松、灵活、心态平和。它告诉你“随便来就好”,但你一问细节,它却抬头望天:“呃……随缘。”
至于 JavaScript,哼!它是那个疯狂的艺术家,一边画着画一边对你喊“函数可以是对象!变量可以是全局的!”它让人又爱又恨,一会儿心旷神怡,一会儿吐血三升。它对 web 世界贡献颇多,却总喜欢打破规则,以至于你时常需要捂着脑袋回忆:undefined和null到底谁是谁?
C++ 则是那个老牌将军,手握重兵,沉稳而强大。它的丰富特性和近乎无限的可能性,让你能写出火箭程序,也能在调试指针错误时痛不欲生。它给了你巨大的自由,但自由的代价是责任,你用 C++ 编程时,总会感觉背后有一股声音低语:“用我的力量之前,你得先承担它的重量。”
所以,我渐渐学会不再责怪语言的短板,正如不再对国籍或性格大加评判。每种语言都有它的独特优势,也都有让你抓狂的地方。我们要做的,是学会扬长避短,借助它们的力量去完成适合的任务。
比如,写脚本自动化?Python 是最佳伴侣;搭建高性能服务器?C++ 当仁不让;做企业级应用?Java 能帮你一统江湖;开发动态的 web 页面?JavaScript 是一等一的工具。
当我从这个角度看待编程语言,它们不再是“对立的阵营”,而是工具箱里的各种工具——螺丝刀、锤子、电钻,各有其用,不必争个高低贵贱。正如 Bruce Eckel 引用的维根斯坦所言:语言的局限即世界的局限。当你跨越语言的边界,你的思维模式和解决问题的方式也会更加丰富。重要的是,灵活运用这些工具,把复杂的事简单化,而不是反过来。
最后,献上一句编程界流传的格言:“最好的语言是什么?适合这项任务的那一种。”