关于C++,Java与Python的一点看法

来自:http://www.zeuux.org/blog/content/753/

本人身在Java心在Python,这些日子与Java纠结不清,对于二者的一些看法

本人原来是C++的忠实粉丝,当然大学里真可谓C++的铁杆,Java声名大噪,就是我进大学那会儿,可是这么好的机会,我却“波澜誓不起,妾心古井水”啊,要不然,毕业时找工作,真是要疯得疯,要盂得盂啊,这当然是其他的话了。当时看了二十来本C++的书,基本市面上有些名气的书都看过了。后来C#出世,本人看在比C++还多了两个+,而且又是Delphi的大牛Anders操刀,也玩过一阵子。

进了公司6年多,前6年全都是C和C++d项目,要不是嵌入式的开发用C,就是CAD类软件,讲究一个快,所以用C++。但是本人越用C++,越觉得C++不爽的地方。首先不爽的,当然是他的学习曲线了。当年大学里,不停的研究C++的细微末节,乐此不疲,略有小成,到了公司,也由此受到器重,沾沾自喜。但是到了自己开始带队伍的时候,有时候看到新人不怎么会用C++,写出些令人咋舌的代码来,忍不住就要教训两句,然后想给他讲解一些,为什么这样写会错,或者说不好,但是讲着讲着,我就发现,一下就掉到细微末节的沟里去了。我讲得累死,对方听得也累死,还五里雾中。我渐渐发现,C++既为了和C兼容,又为了OOP,又有对性能的承诺,几方的相互作用下,造成了一个死结——就是无法逐步的加深了解。学习C++,要不就是初学者,要不就是精通。另外,缺乏metadata,没有明确统一的标准(C++的规范可能是所有语言里最含糊不清的规范了,连最简单的 int i = a++ + b++,各个编译器都解释不一),万众瞩目的C++ X0标准,看来也要跳票了。

我后来不知不觉就是用上了Python,当然我也肯定是看了不少关于Python的介绍啦,但是我真的不记得自己是从什么时候用上Python的,感觉很自然就上了Python的贼船。起初只是作为一种简单易用的脚本语言来进行一些小工具的制作,比如算算编了几行代码,有时就是替换某个目录夹里的文件内容等等,后果就是我当年苦苦学习的sed,grep等细节,现在都忘得差不多了,因为基本linux都自带Python了。也写过一个代理服务器,不过那是用curl的python绑定写的,实在没有什么技术含量(基本我没做过啥有技术含量的东东,咔咔)。当时项目用到的一个核心库,竟然有Python的绑定,当时也用它做了一个工具,不过由于那个是CAD软件,所以性能上还是达不到要求,就作罢了,所以对Google正在开发的Unladen Swallow还是挺关注的。

长期看limodou的博客,Django开始的时候,我也跟风学了一段时间,后来也跟着朋友一起研究过Pylons,当时确实觉得挺厉害的,原来网站还可以这样设计(之前我只有PHP和ASP的网站设计经验)。不过也没有觉得有什么震撼的。(现在越用Java开发web,越觉得Django,Pylons,Turbo Gears这样的框架NB啊,也真正感觉到Python果然强,以前是身在福中不知福啊)

到了今年3,4月份,接到一个欧美项目,是做网站的,和对方一起开发。他们公司的IT Guys,全都是Javaer,所以自然就用了Java了。这时,这些年来一直无法理解的Python的好,全都顿悟了。当然说是Python的好,也可以说是动态语言的优点。

首先就是Spring那个IoC,我就觉得这个概念很奇特啊,后来看懂了才领悟,哦,原来对于Python来说,这些功能是自然而然的事,不需要库来支持,就好像对于C++而言,不需要写一套支持OOP的库一样。

然后就是XML,当时对方Interview的时候,问我对XML有什么了解,我说我写过一个自动测试的工具,配置就是XML的,感觉是一种类似ini的东西吧,当时对方就High了,跟我讲了很多内容,目的就是一句话——XML是世界上最NB的编程语言(我同学毕业后做了IT顾问,他的一个课题,就是要让别人相信,PowerPoint是世界上最NB的编程工具,呵呵)。真正接触到项目,才发现,果然Java的工程里,一半是Java代码,一半是XML啊,对于我一个Python的粉丝而言,这不是自己找抽吗?

最后是反射,当然这是Java能够绝地反击的一个原因吧。你看面对动态语言的进攻,C++只能靠着自己性能的优势来维持了,而Qt什么的,索性就自己弄个metadata出来,所以有了moc这样的工具。也就是说,它就不能你玩了,反正C++就是木有这个功能的。而Java呢,靠着反射机制,也玩出些动态的特性出来,虽然代码量会多很多,有时还会绕圈子的实现,总算能实现吧。不过经常是Python两三句就搞定的事,Java又要接口,继承,又要反射的,用好多倍的代码来实现它。C++么,索性就不挣扎了。

当然,Java也是有方便的地方的。首先静态语言+metadata,就可以使得工具可以发挥最大的作用,我先后用了Eclipse和Netbeans,他们的功能确实比C++的IDE强很多啊。代码的自动生成,代码的重构,代码的自动检查等等,以至于让我这个从C++和Python过来的人发出由衷的感叹——还要我们人来凑什么热闹,让IDE自己去玩吧!

另外,Java的社区真的强大到逆天啊,虽然什么功能,都能找到大牛写的jar,通常都是free+opensource的,论坛发个帖,回帖又快又多,当然C++也可以找到,但是C++由于标准不统一,很麻烦,我当初写一个视频播放软件的时候,用到两个库,都实现了一个mutex的class,我真正用时,都不知道用哪个好,最后全用了,真是囧啊。Java一般就不会这样,它的标准很明确,基本库里的东西也非常齐全。

而Python呢,由于是动态语言,又是弱类型的,IDE就不会这样NB了,但是呢,我感觉是完全走另外一条路的。它经常可以写一行代码,抵上其他语言写几十行甚至上百行的,所以它的重构,是人力所能及的范围,而代码量一多,就不得不靠工具了。就感觉华山上,所谓的气宗和剑宗一样,Python是属于气宗的,讲究心法,擅长灵活多变,一招胜十招,一个vim或者emacs,就可以闯江湖了,就好像高手随便拿一根树枝,就能当剑使一样;而Java呢,则是剑宗,讲究的是武器的强大,虽然剑法的变化显得不够自由,但是可以更好的和剑融为一体,发挥出剑的最大威力。当然气宗剑宗,无所谓谁强谁弱,金庸小说里也说了,他们相斗的结果,最后是两败俱伤。

C++呢?个人感觉,如果D语言能得到像Google这样的大公司的支持的话,多半可以取而代之。D语言现在最缺的,就是商业支持了。个人感觉罢了。

所以我特别希望,能够有一种方法,可以融合二者的优点,Jython和IronPython都是很好的尝试,不过好像不是很流行。我还是很乐意看到两者相互配合的,希望能产生更大的生产性,同时也是很好的切入点,否则硬生生要抛弃一切,改用Python,估计没几个公司愿意冒这样的风险。

你可能感兴趣的:(java,C++,python,django,D语言,Pylons)