Blogn - 记录个人历史 Ver 3.0.0
http://www.bloggern.com
首页  留言本  注册  用户名: 密码:  
我为什么放弃scala
作者:小猪   5502字节   点击:22793   回复:1048   所属分类:挨踢的人
创建时间:2014-08-03 22:05:15   最后修改时间:2014-08-03 22:05:15  
说起来放弃scala已经快一年多了吧,今天早上突然心有所感,觉得还是写出来记录一下吧。

首先呢,所谓放弃,其实也不完全,我手上还有新作的代码仍然是选择scala的,因为scala支持多行字符串,而我的某些程序几乎80%的代码都是sql,scala代码只是作为胶水存在,这个情况下,scala显然比java方便。不过,因为多行字符串选择scala这样的理由显然太特殊了,所以从一般意义上说,我仍然是放弃scala了。

其次,我仍然觉得scala是非常好的语言,很多东西都非常漂亮,这里我只想用一句话来形容我的感受:“那都是很好很好的,可是我偏不喜欢”。嗯,今天早上就是突然想到了李文秀这句话,然后才觉得无论如何还是要写一篇文章来记录一下。

好了,言归正传,我为什么要放弃scala呢。细数起来可以数上很久,但根本的原因,还是对scala的函数式编程的思维方式无法认同吧。写到这里,大概有人要喷了,哦哦哦,你智商不够,所以理解不了函数式编程的美妙之处。我想说的是,其实我也认同这一点啊,智商不足的人的确很难理解函数式编程的美妙。不过智商这个说法略微有点不雅,我且换一个平和点的说法,不擅长数学的同学大概都不大容易理解函数式编程的内涵。那我是不是也因为不擅长数学所以无法理解呢?

事实是我还是很擅长数学的,但是呢,也没有擅长到学霸的地步,我的数学能力差不多可以算是踩在学霸的门槛上,一方面在学渣们眼中呢,我的地位就是学霸了,但在真正的学霸眼中呢,对我多少还是有些同情的,这家伙真可惜啊,总是差点意思。

不过这样的数学能力,或者更广泛的说,我在理工科方面的智力水平也差不多是同样的,踩在学霸门槛上接受学霸们的同情,这样的水平,倒是给我了一个独特的视角和感受,让我在接触和使用scala的一年多的时间中,有了一些跟一般使用者不同的体会。

一般对于函数式编程的评价,是很极端的,赞成的人,会大声疾呼,函数式编程才是王道和未来,一旦品尝了函数式编程的美味,你就没法再用其他方式写代码了。而另一方面,不赞成的人呢,一般的态度就是,哦,这玩意儿太难了,完全理解不了嘛,有必要把简单的事情搞这么复杂吗?

我的数学最搞不定的是什么呢,通常就是最后压轴的证明题,哦,我真的推导不出来那个结果啊,即使我看了答案之后会恍然大悟,但考试的时候,我真的就是想不明白,绕不过来呀,运气不好的时候,压轴两道题都是证明题,我基本也就拿点步骤分,好了,扣掉20,运气好的时候,最后会有一道复杂的计算题,哦也,我最喜欢计算题了,再复杂我都能算出来,哪怕整张卷子都被我写满了计算式,哪怕我的计算方法和过程跟标准答案差得老远,但我都能算出来,没办法,我就是擅长计算啊,这个时候我就能多拿10分,反而,很多同情我的学霸们,经常会在复杂计算题上栽跟头,哦也,我也同情他们。

说这么多废话想说明什么呢?我的感受就是,函数式编程类似于证明题,你已经知道答案了,你需要用数学的方式将这个结果推导出来,即使你已经做过无数的练习题目,但遇到一个难题,你可能就是推导不出来,而面向过程的编程则不同,更类似于计算题,只要做的练习足够多,你总能找到step by step的计算的路子。

我用scala的时候,其实我还是能享受到一些乐趣的,对于大多数日常的编程任务,用scala函数式编程,还是java过程式编程其实对我区别是不大的,而函数式编程的简洁优雅的确还是让我很享受的。但是问题是,对于一些稍微复杂的问题解决,我真心没法用数学的函数来进行推导,我觉得用面向过程的方式解决起来明显更加方便。当然,scala本身也支持java style的编程,但这不是问题的关键,关键是思维方式的切换,如果不用函数式编程,我用scala还有什么意义?多行字符串?

另外,我身边大爱scala的三个同事,两个是大学数学系出生,另外一个是计算机系做自然语言分析出生的,他的世界基本也只有各种函数了(他的代码也是最函数的,经常让我抠脑袋),我觉得这不是巧合而是必然,只有更习惯数学思维的人,才会更习惯和喜欢函数式编程。

综上,我放弃scala第一个原因就是,在函数式编程的过程中,我享受到的愉悦并没有超过我感受到的痛苦,所以,我并不介意放弃scala。

接下来,说第二点,稍微具体一些的理由,scala世界中的缩写和符号太多了,多到让人畏惧的地步,刚开始的时候我其实真的理解不了为什么有人会这么喜欢简短的变量名和符号,后来我发现我身边真的有同事从来不使用编辑器的代码提示功能,所有的类名,变量名,函数名都是全部手工输入的时候,我终于明白了,对于脑容量够大的人来说,使用代码提示等待的时间成本,是远远大于记住所有需要记住的东西然后以极快的手速输入的成本的。这里,我无意争论说谁更方便,我自己一直是不记任何东西完全依赖IDE的代码提示的,所以java世界的裹脚布一般的类名和方法名从来没有让我困扰过,而我那些完全依赖手工输入的同事们,一提起java就摇脑袋,太啰嗦了。这大概就是个人习惯的不同,或者说,人生哲学的不同吧。。。

这就是第二点放弃scala的理由了,简短的代码不但没有让我提高效率,反而因为IDE的不成熟代码提示功能的不完备加重了我的负担,我不得不额外记忆更多的东西,额外输入更多的东西,这让我不大舒服。

接下来,说说大概容易被喷的第三点,scala社区有一种高智商的傲慢情怀,在scala的官网论坛上,我经常会看到类似的帖子:某人问,这个问题用scala怎么解决呀,某人很热心的回答,说哎呀,这个用scala太简单啦,3行代码就搞定了,然后给出了3行天书。这些天书代码呢,我通常需要花一点时间才能理解过来,然后我就很在意回答者说,“这个太简单了”,简单你个妹呀,我这个算是站在学霸门槛上的人还能勉强应付一下,你让那些还没进门的人怎么办?割腕上吊么?老实说我搜到这样的帖子,一般来说,是因为我有同样的问题需要解决,我看到了3行天书,花了3分钟理解它,然后在自己的代码中使用它,对我来说,谈不上有多痛苦,但要说愉快,也是绝对谈不上的,我没法享受超过我智商水平的娱乐。

最后,说说我对函数式编程的未来的一些看法,纯粹的函数式编程模式或者语言,haskell或者scala是很难称为主流的,理由就是我的第一点,并不是所有人都习惯和擅长数学式的思维方式的。但另一方面,函数式编程语言,尤其是scala,在编程的效率和简介性方面的尝试,是非常有意义的,java8引入lamda我觉得很大程度上应该是来源于scala的努力。scala的未来仍然是光明的,java永远不会变成scala,而喜欢函数的程序员,仍然会更倾向于scala。

题外话,我经常跟同事描述我为何不喜欢scala和函数式编程,一个非常敏锐的同事立刻提出了一个让我为难的问题:你不喜欢函数式编程为啥那么喜欢javascript?哦,哦,哦。。。。这个。。。再议。。。。。
附件:
评论:

本文允许匿名评论

发表评论:(最长不得超过128KB)
验证码:


您不能对本文发表评论。