我们并不需要那么强大的编程语言

随着Python在机器学习领域的广泛应用,甚至超过了Java,Python进入了更多公众视野,也就如同其他刚刚崛起的语言一样遭受更加苛刻的评论,本文虽然狠狠黑了Python一把,但是也许促使我们更多人思考,我们到底需要什么样的语言?像文字文本语言那样自由更富有表达性?还是像数学语言那样更富有逻辑性,更经得起推敲呢?

下面是将该文大概意思转述如下,完整原文见:
We need less powerful languages - All Unkept

首先,我们说更强大(more powerful)或更不强大(less powerful)是什么意思?所谓强大就是指你想做任何事情的自由和能力。在语言这个领域它和富有表达性(expressiveness)比较类似。

某方面的自由意味着另外一些方面的放弃,你在编写语言每行字节代码时能够获得的自由是通过放弃整个过程其他方面获得的,这个其他方面是指当"消费consuming"你编写生产的代码时,当你创建生产好你的代码后,一个团队中会有其他角色消费使用你的代码,消费者角色不但包括人,还包括软件维护工具,编译器和其他开发工具。这些消费者代表者人类世界所关心的性能和正确性。

富有表达性这个领域最低端的案例就是数据库和其数据表结构Schema,你可以称为其数据而不是语言,但是原理一样,在实践中,你会发现很多人使用“自由文本”类型作为数据表字段类型,因为自由文本字段是终端用户所关心的“强大”要求导致,他们可以将他们喜欢的任何东西放进去,也就是说,这是最有用的字段,你可以用它放任何东东。但是因为它非结构化,即使搜索技术也对其无可奈何。只有我们限制代理人者权力(也就是自由),这个代理者指将数据放入系统这一过程,也就是你设计字段类型实际是委托数据库代理将数据放入系统,当我们只有限制字段类型设计时,我们才能在以后使用和消费该字段内的数据时获得更大权力和自由。这就体现了强大权力(Power)或自由(freedom)是有所限制才能获得。

Key-value的NoSQL数据库不像关系数据库那么结构化有Schema,是非结构化,这意味着可以让你有更大自由和权力使用自由文本,但是同样存在缺点,当你需要从数据中寻找某些信息或做任何数据消费时,你无法保证你能根据Value数据内容直接寻找到它的key(这需要通过专门的分析工具类似Hadoop Spark进行,NoSQL未来正在向这方面努力,所以,对作者该观点持保留意见)。

另外一个案例是Html,Html/CSS如此强大与自由,你甚至不能称它们为编程语言,而是markup语言,这才是语义Web出现的原因,试图通过机器来分析阅读人类自由编写的数据信息格式,这需要通过一种共同约束才能达到。

W3C principle实践模式就告诫:在Web网络上请使用只有足够能够表达信息的适度强大语言,也就是对语言要求不是那么强大,只要适合正好表达你要表达的信息即可,不要过于强大的意思。(Good Practice: Use the least powerful language suitable for expressing information, constraints or programs on the World Wide Web.)

如果你有几种语言可以选择,其他方面都是相同的,错误只可能在于你选择了更加强大的那个语言。

该文作者对Python具体几个方面进行详黑了一把,从Python setup.py MANIFEST.文件,到URL的正则分析翻译,正则表达式和Django模板以及Python方法执行顺序问题等等长篇累牍地分析了一把,精通Python者可以查看原文。

作者指出,Python确实很强大,但是已经强大到从其环境中其他工具中抢夺权力的地步,也就是说,其权力是通过剥夺其他人的权力获得的。这些环境工具需要对代码进行分析维护,比如源码维护工具 VCS或其他重构工具,在你更改Python源码某个函数名称以后无法发现,从而也就不能对依赖这个函数名的其他依赖者进行版本判断和升级,这就是语言让人觉得强大的同时丧失了机器自动化使用消费该语言的能力。

当你从整个系统和所有代码参与角色,包括其他软件工具和人,你越是高效地生产创造编码,就会导致越长的代码维护期,不那么强大的语言其实这时显得更强大,这也是“奴役即自由slavery is freedom”辩证原理,这是一种在自由表达性和可质疑性逻辑性之间的平衡。

对人而言更强大的语言意味对软件工具更多负担,需要更多复杂的工作去完成,这些工具包括:
1. 编译器:暗含着性能问题
2. 自动化重构工具和VCS工具:暗含着维护性问题

当然,对人的负担也会同样增加,需要理解你的自由艺术代码,需要修改它们。

我们的本能直觉是寻找更强大的解决方案,实际上从理性角度看正好相反,我们只要寻找适合解决问题适合的相应有力的方案即可。


[该贴被banq于2015-11-15 11:29修改过]