谈到这个话题,一定会有两种人跳出来。 一种人说,PHP 是世界上最好的编程语言;另一种人说,编程语言都大同小异,掌握了思想,什么都简单了。
首先我认为所有切实存在,功能重叠的事物,都是可以比较优劣的,有时不说出真相,只是真相太残酷。『优秀』并非是主观的,而是客观存在的,世界上存在着被广泛认同的『优秀』。否则,作家,设计师,设计编程语言的科学家,应该以什么为目标来工作呢?
那么什么又是编程的思想呢?是循环,回调,面向对象这些么?但似乎并非每个编程语言都有这些元素。我在知乎『优秀的程序员应该掌握多少门编程语言』中列举了几种我了解的,各自具有代表性的编程语言:
C, 使用原始的内存管理的系统编程
Java, 工业级的面向对象的,静态类型的虚拟机语言
Python, 脚本语言,动态类型的虚拟机语言
Javascript, 基于事件回调的函数式编程
HTML/CSS, 声明式的语言
Golang, 并发编程
可以看到,它们风格迥异,使用的领域似乎完全没有重叠。
非要找共性的话,大概是它们都具有『抽象』的能力,描述『算法』的能力,这也是有些人口中的『思想』,但我不认同。 抽象是为了找到解决问题的方法,而编程语言是为了将解决问题的过程(算法)表达出来。 知道如何解决问题,不代表就能够用编程语言表达出来;掌握编程语言,也不代表知道如何解决问题。
我们学习一门编程语言本身的时间并不多,更多的时间在学习它的函数库,以及特定编程环境下的限制。 例如学习 C 语言,我们需要知道计算机如何管理内存,如何实现函数调用,还要学习如何通过标准库进行输入输出,而 C 语言本身的语法,完全可以用一个小时描述清楚。
所以,我们抛开这一切,去寻找世界上最好的编程语言呢。但结果是不存在,因为现在流行的编程语言设计者目光都太短浅。 没错,优秀的不一定是用的人最多的,不一定应用得最广泛,所以编程语言的设计者需要折中,拿出不那么优秀的设计作为最终方案。
我认为世界上最好的编程语言需要有这样的特征:
核心足够小
可以扩展语法
围绕一种数据结构展开
优秀的抽象能力
可以被编译成本地代码
比如 PHP 之所以流行,是因为支持 PHP 的虚拟主机最便宜。 比如 C 之所以流行,只是因为有太多项目一开始是用 C 写的。 比如 Python 之所以流行,只是因为库足够多。 比如 Javascript 之所以流行,因为在浏览器里这是唯一选择。
他们都不是因为语言本身被设计得有多么优秀而流行的。
世界上最好的编程语言应当是全能的,否则如何和其他编程语言做比较呢?要做到这一点,就要保证这个语言的核心部分是最小的,不偏向于任何一个领域,也减少学习成本。
这方面的正面例子有 Lisp, Lisp 中的一切都是列表,核心部分仅包括不到十个基本运算符。从这个角度来看,你根本不知道 Lisp 是被设计用于什么领域的——这是世界上最好的编程语言所必须的要素。
但是 Lisp 没有火起来,因为有个笑话说的是一个 Lisp 程序末尾要有整整一页的括号。
所以世界上最好的编程语言需要能够灵活地扩展语法,这个概念通常被称为元编程,例如 Ruby 就号称支持元编程,虽然我没有体验过。 除了扩展语法之外,最好还要能够改变程序在编译时的行为,这会加强元编程的能力,也会对提升性能有一定帮助。 比如 PHP 和 Python 都支持用 C 编写扩展,如果这种语言支持用自己本身来写扩展,并且能够干预编译器的行为,那么这种改造会让它适合几乎所有领域的编程。虽然干预编译器的行为是很危险的行为,只有少数人会编写这种扩展,但是这总要比设计一门新的领域特定的语言要容易。
可以扩展语法,这是保证世界上最好的编程语言能够快速适应各种特定领域编程的重要条件。
世界上最好的编程语言应该内置一种数据结构,能够方便地在程序内,甚至包括程序外进行数据交换,让整个语言围绕着这种核心的数据结构展开,具有一种『一致性』的美感。 这方面正面的例子是 Lisp 和 Javascript, 但 Javascript 做得还不够好,类型系统中有很多陷阱。
世界上最好的编程语言还应该有优秀的抽象能力,比如 C 的抽象能力就不够,组织大型项目会非常麻烦。Lisp 的抽象手段又太单一,Java 和 C++ 的特征又过于复杂。
『可以被编译成本地代码』这才是最具有挑战性的一个特征,前面我提了很多变态的需求,它们都需要在可以被编译成本地代码的条件下实现。可以被编译成本地代码,表示这种语言不需要虚拟机,可以自行提供各种功能,性能上也有更多的优化空间。
世界上最好的语言,当然这个问题的答案我相信大家都有共识:汉语普通话!不过说到编程呢,作为一名光荣的码农,木偶已经在代码的土地上播种里7年,现在讲心得与大家分享一下。
首先在度娘里搜一下,“世界上最好的编程语言”,木偶看到大家的讨论热情堪比皇帝驾崩举国服丧的气势。
以木偶的身份标签来说,javascript当然是最好的语言,目前它已经发展为一门pc、移动、嵌入式三栖开发语言,如果说世界上还有哪种语言能做到的话能与之媲美的恐怕寥寥无几,当然以木偶为代表的一大批程序员也以45度仰视它的存在。
但是编程并不只是做业务,如果是做通信呢?如果是做图形处理呢?如果是做游戏开发呢?如果是做桌面应用呢?
说到这里木偶仅怀着无比下作的心理对各位看客说一句话:每一个不同的行业都有一个世界上最好的语言。
至于说同一个行业里如何选择最好的语言呢?比如web开发我要怎么筛选php、java、.net、nodejs呢?
首先木偶认为要先考虑公司的业务方向,如果是新闻类业务对后台计算要求不高,完全可以使用更快更优秀更简单的php,nodejs之类,但如果后台需求中包涵大数据分析或者比较复杂的业务流程,则就要考虑java,.net之类的语言了。
几年前木偶有幸加入了一家大型技术公司,当时公司的业务层完全是.net开发,服务器也完全是windows平台,貌似也没有像网上主流说法一样网站非常不稳定,毕竟木偶的专业范围不在服务器维护管理方面,这里不做过多评价。但是木偶依然仅怀着无比下作的心态补充一句:在Linux的众多发布发版本中桌面版只占有极少一部分,更多的则是命令行界面,而能够使用命令行界面的基本都属于木偶以45度角仰视的大神,而windows的发行版绝大多数都是桌面版,原本就不保证7*24小时不宕机,如果要进行比较可以拿windows的server版本和linux比较一下(据木偶了解,windows server2012已经加入纯命令行模式)。
其实固定行业中最优秀的语言无非一下几个因素:价格(比如.net的visual studio是收费的,windows服务器也是收费的)、领导层意愿(有些懂技术的领导可能会要求开发人员使用一种他们更容易管控的方式来开发)、团队元老们最熟悉的技术(比如公司刚刚起步的时候雇佣的第一批员工熟悉的语言)、当地人才招聘情况(比如木偶超喜欢nodejs,但目前很难招聘所以打算逐步转往java,只在特定的几个场景使用nodejs)。
不过最终不论哪个原因,码农们总会杀他人威风,涨自己志气(比如使用grunt的人肯定能对gulp吐槽一堆,使用gulp的也能细数grunt十大罪状,最新的webpack似乎也没有完全占上峰的姿态)。
所以木偶要在这里总结一下:世界上最好的语言是能够为你所在公司带来最大利益以及你所在团队最容易接受学**或者因为历史原因(创始人使用的技术)遗留下来的编程语言——既存在,必合理。
最后,木偶这段时间一直在写一个大中型平台网站,后期会逐步将该网站关键技术分享出来,中间也会掺杂一些前端细节知识点总结,毕竟荀子曰:能积微者速成。
