谁是你最爱的编程语言:Python, Ruby or JavaScript?

标签:JavaScript, Python, Ruby

陆陆续续学了10几种编程语言,也该停下来思考下了。

先列出学过的语言名单:
低级语言:80x86汇编语言
中高级语言:BASIC、C、C++、Java、C#、ABAP
脚本语言:JavaScript、PHP、Python、Ruby
数据库查询语言:SQL、GQL
标记语言:HTML/XHTML,XML
其他语言:CSS,YAML,JSON

最开始接触编程语言是小学5、6年级,一台“山寨”学习机上玩BASIC语言。
那是实实在在的玩,照书抄了个超级玛丽的小程序,然后就和弟弟妹妹一起玩了。
而且没法存储,每次玩还得敲2、3个小时代码…
之后一直很懒,到了高三快毕业时,闲得无聊又玩起文曲星来。在那上面写了不少原创的BASIC游戏,总算对编程入门了。
不过写起长程序来就感觉到BASIC的不足了:麻烦的行号限制了可扩展性,到处都要GOTO,还有那该死的end标记,以及文曲星上无语的堆栈溢出错误。
优点也很明显:简单易学,支持多平台(不知道还有哪门语言可以在学习机和文曲星上使用)。

大一接触了C,花了1周把教材啃完了,发现我在教材上标记了近百处错误,于是谭浩强的书便再也不看了。
然后转向了国外的书籍,终于把C的大部分语法啃下来了。那段时间最主要就钻指针、struct,以及语法的细枝末节,结果除了考试,很多东西基本上不会用到。
刚接触C时,给我的感觉是很简洁,很轻巧。不用写烦人的行号,用括号代替了该死的end,好像天堂般的感觉。
用久了又渐渐觉得别扭了,标准库里可重用的东西太少了,一个很简单的应用都要自己发明轮子。而且就算能重用,用起来也不是那么舒服。
例如操作文件是件非常恶心的事,要做好多我得对照书才能写出来的步骤。
还有那该死的字符串,标准库提供的函数都不安全,到头来只能重写。
我想很多人都曾在这2个问题上栽过:用户输入了错误的数据,然后输入缓冲区就没法正常读取了;printf("%f", 10 / 3);为什么输出的是0.0
而且C还有个很严重的问题:名字太短了,于是搜索时很难找到相关内容。之前学校的教育网是屏蔽Google的,百度的结果我就不说了,单就学校图书馆里搜索C,会出来一堆乱七八糟的东西这点,就让我很无语了。

之后半年,我又开始学习C++了。不幸的事再次发生,花了一周读完那本250页左右的教材,我大约标记出300处错误…于是基本不再看中国人编写的书了。
然后翻了几本很厚重的书,才把C++的语法啃了下来,觉得它实在太好了:书写简洁,标准库比C丰富很多,性能优秀,使用面也很广。
我感觉C++已经很符合我的口味了,至少字符串是对象了,至少引用比指针漂亮多了,至少cin和cout比scanf和printf方便多了。而且我很喜欢它的操作符重载,确实是个好东西。
只是随着我的深入,C++越来越让我感到困惑了:阅读《C++ Templates》这本书,用掉我2周时间。我不得不惊讶其模板系统的强大和方便,直到今天仍觉得这是区别于其他任何语言最重要的东西。可是那晦涩的语法规则,以及写错后莫名其妙的语法错误提示,让我觉得真是灾难。
在查询方面,C++比C表现得更差,因为+号在查询时被当成“与”操作了…
可纵使C++让人头晕,我却一直没有停止对这门我觉得最复杂的语言的热爱,直到最近…

然后学习了汇编语言,不得不说这门语言对于理解C/C++是非常有帮助的。
通过将C++的语句在脑海里翻译成汇编语言,我了解了很多C++语法的实现,也就明白了怎样做效率更高,以及为什么C++会采用这种语法。
然而在我看来,虽然对于C/C++程序员来说,汇编语言是门不可不学的语言,而且语法也并不复杂,但写起来实在太费劲了。
至今还记得多重循环时,那些让人头昏眼花的寄存器…反正打死我也不去干汇编程序员=。=

接着接触了Java,我不得不说一句,《Thinking in Java》写得很烂,而且语法陈旧,以至于看完后,我对Java没产生半点兴趣。
在我看来,Java能做的,C++同样能实现;而某些C++能做到的,Java却难以实现,或者根本不支持。
其实我判Java死刑的关键点就在于不支持操作符重载,以及模板比C++难看多了。
不过大三时读了本台湾人写的入门书(书名忘了,只记得出版了2、3个版本,我读的版本是红色的封面),又对Java产生了兴趣,便开始玩起Java来。
不得不说的是,Java对我的吸引力就2点:众多的类库,以及eclipse这个IDE。如果当时VC++能做得和eclipse一样好的话,我或许根本不会关注Java吧。
之后陆陆续续写了些Java程序,可无论是桌面程序,还是JSP这种WEB程序,都让我觉得Java很憋屈。
无奈Java当时是主流,我仍得强迫自己用它。记得当时写编译器的某个模块,3天写了2000行代码,人累得不行了;可是如果让我用C++去写,我认为我能在500行内搞定那个模块。
而且由于Java的火爆,我觉得自己根本学不过来:今天学J2EE,明天改名JavaEE了;今天学习JSP,明天EJB从2升到3了;今天研究Struts,明天Spring又来了;今天弄懂了JDBC,明天Hibernate和iBATIS又流行了…不是我不想学,你丫消停点行不行…
最终,我的职业与Java擦肩而过,于是我扔掉了Java。然而扔掉的最重要的原因是:处理异常麻烦得想死,eclipse占用的内存足够我那破机器开虚拟机了。

学习C#则纯粹是打发时间,因为图书馆里想读的书读完了,于是看了看C#。
看上去是门很无聊的语言,汇集了一大堆的东西,唯一让我觉得有用的是getter和setter…
抵制微软也不是第一次了,大二时看到C++/CLI就去钻了下,发觉这根本不是C++,有种上当的感觉。
对于VC++我也很迷茫,对我而言,它唯一派上用场是在我编写吉里吉里的插件时(因为只提供C++的接口,还必须弄成DLL)。
曾经还在情人节写过小程序给mm,结果被无视了[:em39]
倒是觉得MFC这个框架写得不错,只是我没空去研究,因为微软的东西实在太多了…

接着就工作了。
莫名其妙地从Java转到了ABAP,然后硬着头皮学了。
这门语言给我的第一印象是BASIC的翻版,好多语法都很相似。学完后,感觉实在是门简单的语言。
可就是这门简单的语言,却是当今语言中身价最高的,也是去年编程语言排名提升最多的。原因不在于它难学,而在于难入门,以及难领悟。
你愿意花6万学费学习4周,并再花6千参加通过率大概1/4的认证考试吗?我相信如果不是公司出钱,你打死也不会去。
好吧,既然容易,自学总可以了吧?抱歉,这门语言并不是装上就能用的:你得弄台服务器,装上支持的操作系统(例如Windows2000,据说WindowsXP是不支持的),再安装数据库和SAP系统。硬件开销就不说了,光SAP的软件就在7位数以上,每个账号每年还需要5位数的开销。
当然,中国人历来是支持盗版的,所以这点也不一定让你望而生畏。可是除了语法,一个ABAPer还得学习SAP中的很多东西,你至少得有一个行业的专业知识,这可是一般的程序员所不会具备的。
继续回到语言本身吧,ABAP的关键字特别多,在不同的场合表达的意义又各不相同,相信除非你能背出Java标准库的所有方法的参数,否则你没法记住每个关键字的全部用法。
然而除了关键字,ABAP还有很多非常神奇的函数(例如打印条形码),这些也够你琢磨很多年了。
可虽然有那么多可用资源,ABAP的语法却非常繁琐。对于初学者来说,重名也够你头痛了。
此外,对OO的支持不是很完善,很多东西还停留在初级阶段,而且OO的语法超级麻烦(要敲好多无聊的代码),不过事件机制确实很有用。
说了那么多缺点,还得说说优点:
ABAP Workbench是个很强大的IDE,不过由于SAP的处理机制,响应太慢是个很严重的问题。
此外,ABAP程序的核心过程基本就是取数据,处理数据,输出数据,所以你不得不与数据库打交道。虽然之前也用过JDBC,不过真正掌握数据库,我却是从ABAP开始的。也许把取数当成关键字的,除了ABAP,就只有SQL这种数据库查询语言了吧…
顺便说下SAP的数据库很烂,没有可扩展性,表也不能定义唯一索引。
总结就是,基本上你不会喜欢上这门语言…所以SAP自己也认识到了这点,掺入了越来越多的Java,甚至Groovy。

工作实际上是很闲的,于是便开始学习WEB编程了。
比较了一番后,我选择了PHP,并开始尝试Discuz!和WordPress。
在自己改写插件的同时,我将PHP一点一滴地掌握了,也发现了Discuz!里很多遗留的错误(虽然标明的是XHTML,但很多用的是HTML的语法)。
PHP确实是门很简单的语言,有着类似C++的语法,可以很方便地与HTML整合,而且有无数免费的PHP主机,这是其他任何语言都难以比拟的。
20M的空间,你就可以搭建一个Apache+Mysql+PHP的平台,可以拥有自己的网站,这是多么令人兴奋的事。
缺点我也没什么发言权,毕竟很多网站都是PHP搭建的,大部分的场景都可用它。真要说的话,主要就是调试麻烦(我不喜欢用臃肿的IDE),以及语法没带给我新鲜感。

顺便再说下HTML/XHTML和XML。
优点就不用说了:非常简单。
缺点也很恼火:对齐标签很麻烦。
不知道谁设计的这么无语的关闭标签,当层次多起来,而之前并未缩进时,想找到一个对应的标签非常麻烦(我不知道有没有IDE可以做到,反正我没用过)。
此外,升级老是淘汰旧标签/属性,导致很多都不符合标准了。

然后由于Chrome浏览器的问世,我又钻研起JavaScript来了。
毋庸置疑的,《悟透JavaScript》这篇文章是真正让我迷上JavaScript的原因。
很难想象一门没有class关键字的语言,竟然会是面向对象的,而且OO起来是如此巧妙。而随意地增删属性,也让我见识到了动态语言的强大。此外,JSON这种表示方法,也比XML简洁多了。而最欣赏的就是JavaScript的匿名函数,那时才明白吉里吉里的TJS中的匿名函数原来是源自JavaScript的。
接着又学习了jQuery这个库,于是顺便把CSS也掌握了。
顿时对JavaScript的感情无以言表了。其实现在想来,这估计是我厌倦了臃肿的IDE后,自然就对只需要文本编辑器和浏览器就能编写运行的JavaScript产生了好感。
不过JavaScript的缺点也蛮严重的,那就是各种浏览器的标准不统一。当然也不能算是语言自身的缺点,我还是蛮喜欢它的语法的。

继而又玩起Google的服务来了,Google App Engine自然是重点。
经过几天的学习,我被Python折服了,实在太简洁了…
再加上完备的模块库和文档,很多底层的事都无需处理(例如int溢出会自动转成long,而long的长度是无限的),无论干什么都很方便。而且可以充当胶水语言,与C进行结合;此外,由于字典和JSON的表示方法完全相同,它们之间的转换也不费吹灰之力。并且支持超多的平台(甚至有Jython和IronPython),还是动态语言,实在比Java方便多了。
你甚至可以不必为了WEB服务去安装Apache,一行命令就能启动Python的WEB服务器和MAIL服务器。
如果你细心点的话,你会发现Google的很多服务都采用了Python,而且开放的API中,大多数都支持Python。
当然,Python也有不足之处:
  • lambda函数不如JavaScript的匿名函数强大,只能为一个表达式。
  • print等语句不是函数,导致没法在lambda函数中使用(3.0虽然改了,但目前主流版本仍在2.6或之前)。
  • 强制使用缩进。这直接导致了在命令行敲代码时缩进很麻烦,而且也为执行字符串中的代码带来了麻烦。最无语的是,为此我改掉了使用tab来缩进的情况(因为Python不支持tab和空格混用)。
  • 定义方法时的self参数显得很臃肿。
  • 没有多行注释。

昨天我心血来潮,又钻研了下Ruby,立马拜服了。
原本对这种用end标记的语言很反感,但经历了Python的强制缩进后,对此我也认可了。
真正让我无语的是Ruby的block,居然把匿名函数用更简洁的方式表示出来了。
什么东西都是对象,连整数都能调用方法,稍微有点不适应。(虽然Python的整数也是对象,但却不能调用字面量整数的方法。)
而且很多别名和简写,例如print和puts都是标准输出,可以用%w来简化数组的定义,还有@标识符代替this,函数的最后一行代码默认return等,真是极尽简约啊。
基本上Python的不足,Ruby都没有,而且更为优美和惬意。
此外还有个杀手级的RoR。
不过Ruby的库似乎不如Python,文档和书籍也不如Python,语法比Python复杂,太过简约(例如书写对象的方法名会直接调用该方法,使得函数式编程不得不增加block),速度也要慢很多。
而且有个很严重的入门问题,最新的1.9.1版没有Windows的安装版。我下了2进制版后,发现bin文件夹下的ruby.exe没效果。之后才明白要运行irb.bat,不过也弹出个错误,提示我重新安装Ruby…好在貌似不影响使用。
待我好好研究一番Ruby后,再决定自己的最爱吧~

不过你的最爱找到了吗?如果还停留在静态语言的话,不妨关注下动态语言,至少1天内你可以学完Python的大部分语法,基本不会耽误你的工作和学习。

26条评论 你不来一发么↓ 顺序排列 倒序排列

    向下滚动可载入更多评论,或者点这里禁止自动加载

    想说点什么呢?