有很多年,我都认为编程语言只是一种工具,练到一定的程度自然可以超越语言本身,至于你使用哪种工具就显得不是很重要了。就如武侠小说中的各门各派的武功各有长短,但每个门派的武功练到极致都可以成为万人敬仰的大侠,对于站在巅峰的大侠人门是从来不会在意他们用的是哪个门派的武功。
而且最后大侠往往会告许你最高的境界是“无”,无招无势无剑无我。我一直被这些思想影响着,所以一开始用C和 Delphi,后来在因公司项目转到 JAVA,包括中途有一阵子用过 Symbian C++ 和 WinPhone 的C#,也只是“随缘”而已自己并没有在意过它们。
而最近的阅读和思考,受到了一些不同的启发,发现对于语言自己有很多错误的认识。现在,我更多的把语言理解成一种思维,而不是单纯的工具。最近看了 Ruby 语言之父*的《代码的未来》,*在一个讲座中给学生出了一个题目“想象一下 20 年后的编程语言”,你现在使用的语言还会存在 20 年吗?其实也可以简单的这样问,你现在的思维模式能适应 20 年后的时代吗?
纵观这半个多世纪以来产生的编程语言,其思想并不没有发生很大的飞跃,你现在使用的很多语言的特性,在上个世纪五六十年代就已经存在了。如 GC,函数式编程。而计算机硬件正如摩尔定律描述的那样,发现了翻天覆地的变化,从这方面上来比较,虽然近十来年也诞生了各种编程语言,但编程语言的发展仍处于停滞状态。
从汇编语言开始,编程语言的进化一个显著的特点就是“抽象化”。抽象化就是提供一个抽象的概念,使用者即便不具备关于其内部详细情况的知误,也能够对其进行运用。人类一次所能掌握的概念数量是有限的,有说法称,大部分人一次只能驾驭7(加减2) 个左右的概念。这样一来,如果能够让问题的处理方式更加抽象,也就可以解决更复杂的问题。所以*在《代码的未来》中也给我们讲解了 DSL(特定领域语言)相关的知识,DSL 的优点是,可以直接使用其对象领域中的概念,集中描述“想要做到什么”(What)的部分,而不必对“如何做到”(How)进行描述。
Android 应用的开发者肯定接触过 DSL,虽然你并不一定知道什么 DSL。看看自己的 Android Studio 中的 .gradle 文件。
关于不同编程语言,网上常有各种争吵,而且也存在一些“鄙视链”的说法,如 C++ 程序员鄙视 Java 程序员。这里并不想引起或者延续不同编程语言的争论,只是想说明:“如果不同的编程语言代表不同的思维,那么编程语言之间是有很大的区别的,使用不同的语言会返过来对程序员的思维方面产生影响。”
那么,你受到它们的影响了吗?有没有感觉无法接受别的语言了呢?我觉得这才是我们要想清楚的问题,如果我们的思维模式被固定死了,万一我们使用的编程语言过不了多久就被时代淘汰,是否也说明受这种思维影响的程序员们也很容易被淘汰呢?
所以,我才感觉自己被害了。并不是说 Java 这种语言不好,而是我只把它当成工具,而忽视它各内在的东西,自己的思维模式却在不知不觉中受到它的影响,最终自已给自己建了一道围墙。
拆掉思维的围墙,去找一个 20 年后还可能存在的编程语言学学,代码的未来也许就是程序员的未来。