为什么现在感觉很火热?之前为什么没有代替php或者ruby
“语言火不火主要表现的是市场的需求,和语言本身好不好是有相关性,没有因果性”
比如Python,我们七八年前就开始用了,当时有如醍醐灌顶,发现编程语言竟也可以如此优雅(原来一直用C++)。而大众觉得开始火的这几年,Python本身确没有『突然』增加什么更迷人的东西。
对于我来说,Python在很多年前我第一次打开python时就火了,同好不多,但个顶个的能扯上一翻。而现在动辄看到『python程序员』写的代码:
sum = 0
for i in range(len(num_list)):
sum += num_list
我就有种看到douban变成约炮网站的悲哀
从理想上看,Python和C++是十分相似的,它们都想做万金油。
C++是学术性的,大牛们都指着靠它扬名立万,设计哲学是『什么都想要』,首先要兼容C要快,其次是别的语言有的咱都要有,别的语言没有的咱也要有。但是一方面C语言本身也不是很完善(比如头文件这样的粗暴的机制),另一方面为了运行时的爽快把新功能的脏活累活全往预处理、编译上扔,导致C++的晦涩、艰深。用C++写代码有点像是用文言文写公文,逼格满满,文采飞扬,需要耗费大量的精力在内容以外的地方。而看文言文公文(C++代码)更是痛苦,首先你得熟悉各种反人类的语法(传值/传址/move语义、预处理、函数指针……),通晓历代典故(effective C++, ……)
Python的想法不一样,Python的核心是简洁直接清晰,Python认为最好的方式只有一种,它也只呈现那最好的一面。Python的语法本身就是一种伪代码的最佳实践,而且这个『伪代码』还是可以运行的。这造就了Python较低的使用门槛和极高的编程效率。用Python开发只要『有事儿说事儿』就好。ruby on rails最火的那几年,有人问guido叔(Python作者)怎么看,guido说的大概是:Python不需要杀手级应用,因为如果是这样的话,Python在其它方面的作用就被忽略了。
回到话题本身,为什么Python会显得越来越火?
python最大的问题在于性能。性能问题其实是在设计时最容易被误解的部分。C++以『接近C语言的性能』横行多年。随着物理硬件性能的显著提升以及软件复杂性的显著提升,人们开始对性能有了更正确的看法。
首先,有些时候性能并不重要。IO密集型的业务大部分时间都在等待IO,节省不到1ms让开发量增加几倍似乎不是很划得来。
其次,有些时候程序员的效率比机器的效率更重要。对于很多复杂的逻辑性功能,使用更加清晰的语言比晦涩的语言给程序减少的负担,可以大大增强软件的质量。(尤其是公司给的待遇招不到知乎上的大牛程序员的时候)
于是,Python/Ruby/Java开始崛起了。用Python的『inside battery』就可以做到过去需要反复造轮子、天天加班还做得不是那么好的东西。我在看Python的源代码时,突然有一种感觉:Python底层的源代码其实可以理解为C语言的一些常用功能的库(如hashmap实现的dict),Python进程就是加载了这些库然后读取配置文件(Python代码)执行相应的逻辑。相同的功能,Python进行了一次转义,肯定会比直接用C实现要慢,但你不一定能这么快的写出这样运行比Python快的C代码。(当然,知乎上的大牛还是除外)
于是,类似Python这样的语言们解放了程序员的时间,程序员们寂寞难耐的夜晚可以有了更多的产出,一个一个的项目建立起来了,社区建立起来了,迟滞的市场也开始有感知了。
即便这样,Python还有会心一击:我也可以不那么慢。Python可以十分方便地和C代码融合到一起。Python和C的组合彻底解决了后顾之忧:先用Python快速开发快速搭建产品原型,然后找出性能瓶颈有针对性的性能优化。所谓好钢用在刀刃上,节约时间,节省成本,减少风险,提高程序员的生活品质又有什么不对呢?
泛泛而谈,匿之
如果学校里教的是C++,那请你好好学,C++能学好的人证明素质还是相当不错的。就比如熟悉文言文的人一般也很容易写好白话文。当你学好C++之后,如果你不认同我的观点,那也没关系,C++的需求永远是那么旺盛,如果认同我的观点,那就更好了,以后你看其它编程语言时就能有一个对比从而加深理解。
学生或研究人员与工程技术人员是不一样的,工程技术人员只想又快又好的活儿干得漂亮,而学生即使多花点时间去研究一些不一定那么实际的问题也是很有必要的。
我最近招人,有一次,我问到C++,对方回答说『学校里学习过但经常上技术论坛大家都说C++不好』,可是如果你连C++虚函数都不知道是啥,又怎么讲得出C++的好或不好呢
麦子学院 /