Hello World
Spiga

读完《Scala程序设计》,随便谈一些想法吧

2010-08-15 23:13 by 老赵, 14041 visits

虽然我对Scala还算熟悉,但还是在china-pub上订阅了一本图灵引进的《Scala程序设计》。上上周五在公司收到了这本书,顺手带回家,在路上简单翻了翻。周六用来欢乐,周日懒觉睡觉中午,直到下午才又拿起这本书,不过加上周一上班途中的工夫也算将这本不到200页的小册子浏览完了。这本书的内容本身并没有给我留下太深刻的印象,但我也想谈一些有关Scala语言和其他一些方面的想法。

“编程语言”这东西自然是和“编程”相关,刚出版的8月份《程序员》杂志的专题是“语言”,其中田春(binghe)写了一篇关于Common LISP的文章,里面有这么一句话:

作为一门以编程为职业的程序员,时间是如此宝贵,以至于绝对不能把宝贵的时间浪费在不断跟进各种草率设计的新语言上,而忽略了对编程语言本质和一般编程方法(算法、数据结构上)的理解上。

这句话从道理上来看似乎是没错的,不过给我的感觉多少有些原教旨主义了。或者应该这么说:要理解这句话,还得谈一下“什么是编程语言本质”及“哪些是草率设计的新语言”等话题。我不懂“本质”,各种东西的“本质”我都不懂,就像我理解不了《建筑的永恒之道》对于学习GoF设计模式有哪些帮助一样。但如果你真要我谈一下心目中编程语言的“本质”,我可能会说是“更好地表达人类思考”,“辅助人类解决问题”一样。举个例子,C语言体现了编程语言的本质吗?在我看来,没有,因为它体现的是冯诺依曼机的本质,是操作机器的本质,和“表达人类思考”,“辅助人类解决问题”无关。因为,要不是有冯诺依曼机就不会有C语言;同时,在我看来人类也不会在“思考”时关心指针、地址、堆/栈、偏移量、字节等事物。

当然,如果您是一位C语言粉丝,看到这里也不要急着反驳。首先,我只是说“C语言不能代表编程的本质”,并没有说“不本质就不好了”,也没有对C语言做出“不重要”或是“不值得了解”之类的评价。其次,我不都已经说过我不懂所谓“本质”了嘛。

回到这个话题来说,什么样的语言算是“本质”了呢?按照我的标准,就是能够“更好地辅助人类解决问题”的语言,再通俗地讲,就是生产力更高的语言。比如人们发现C/C++中的内存管理造成了很大的麻烦,于是出现了垃圾收集机制;人们发现C++过于复杂,而Java语言便可以视为是它的一种简化。虽然我一直说Java是种劣质语言,但也必须承认它的历史地位,它在十几年前绝对是一种突破,只不过多年来的不思进取、固步自封让它成为了“现今标准”下的劣质语言——这很正常,因为即便是C# 2.0,在现在看来也是一种劣质语言。语言在发展,它的评价标准也在不断提高。

刚获得Jolt图书大奖的《Masterminds of Programming》一书中,作者向Anders Hejlsberg问起过有关C#和Java在语言演化方面的问题:

When I compare C# to Java, C# seems to have a stronger push toward evolution. The Java people seem to want a baseline where everyone’s code looks more or less the same. Whether you’ve programmed Java for a decade, never programmed before, or just graduated from a six-month course on Java, all of your code will look the same. C# seems to pull in new ideas from Haskell or from F#. Is there a desire to add new features that people who’ve just finished the six-month C# course haven’t seen and won’t immediately understand?

Anders回答道:

What is it that powers the Internet revolution and the electronic revolution that we’ve seen? It’s the fact that we’re constantly evolving. I bring it back to that. The minute you stop evolving, I don’t know that you’re adding any value. This is, again, taking it to the extreme. Of course, there is value in stability of the platform, but I think you provide that value by ensuring backward compatibility. You are free to get off the bus at C# 1.0 and just not move any further. For those people that really want to be more productive and want to build newer kinds of apps like SOA or whatever and get into more dynamic styles of programming—adaptable programs and more declarative styles of programming like we’re doing with LINQ—then you’ve got to evolve or get out of the way, or something else will replace you.

人们对生产力的探索和追求是无止境的,“固步自封”是一种违背潮流的行为。

之所以设计出新的语言,主要原因大都是设计者对现有语言的不满——当然也不排除一些商业上的因素,例如当年Sun迫使微软不得触碰Java语言,于是微软设计了.NET和C#语言与之竞争(无独有偶,Oracle最近又和Google展开了有关Java的专利诉讼)。例如,Groovy在考虑到Java语言的平滑升级的基础上融入了有更好生产力的元素,而F#和Scala都在并发编程和DSL方面给予了加强。那么,它们都是草率设计的语言吗?可能有人说,是的,因为这些语言里的语法糖特别多。那么,语法糖便意味着草率吗?

我的看法是否定的,一个特性是否草率或是是否重要,关键不在于它是不是个所谓的“语法糖”,而是要看它有没有带来编程思维上的改变,或者说,它有没有遵循语言设计者的文化。我们可以从各种语言找到许多此类“有文化”的“语法糖”:

  • C#的Lambda表达式是匿名委托的语法糖,但是它带来/鼓励了函数式编程及无副作用编程的思维。
  • Haskell中的“$”运算符,和F#中的“<|”运算符的作用是简单地“改变优先级”,让程序员可以省略括号,写出流畅的代码。
  • Scala中的方法调用a.method(b)可以省略点和括号,写为a method b,这样开发人员便很容易写出one day ago这样的DSL。

Scala还有许多用于“省略”或是“替代”的规则,目的就是让程序员可以写出更为漂亮而紧凑的代码,这便是Scala的文化(之一)。Scala是我认为最有机会,也是最适合代替Java的语言。因为从JVM上的语言来说,Jython和JRuby都是“另一种语言”,程序员甚至需要在“Ruby的Date对象”和“Java的Date对象”间进行切换;Clojure是一种类LISP的语言,它的编程模型和思想与Java相距太远;Groovy是Scala的有力竞争对手,因为它考虑到了Java程序员的平滑过渡,只不过它是一门动态类型语言,这点和Java程序员的习惯有所不同;而Scala是一门静态编译型语言,性能很高,能够和Java一样进行面向对象和命令式编程,也可以表现出和Java一样的对象模型——自然还有额外的提高生产力的语言特性。

有些朋友认为Scala过于复杂,难以掌握。关于这点我想说:有利自然有弊,Scala既然可以带来更好的生产力,自然需要您进行额外的学习,从Java语言切换到Scala并非一蹴而就的,但是这些付出在我十分值得,因为Scala是一门挺有想法的语言。再者,Scala真难学吗?或者说,它比Java语言难学吗?在我看来真不见得。这里有一个事实是:Java的语言规范Scala的语言规范要多得多,因此其实从某些角度来说,Scala要比Java要简单的多。出现这个情况的原因也很容易理解:因为Java是一门十分死板的语言,它需要用大量篇幅来表示各种限制和规定,而Scala只是提供一些最基本的语法描述和变化规则,剩下的都是这些规则的自由组合了——此正所谓Scalable。

例如,在Scala中,“1 + 2”这个基本表达式,从概念上说也是一个Int对象上的方法调用,其完整形式为“1.+(2)”。那么,试想在语言规范中,还需要定义次方运算或是求模运算吗?这些篇幅都可以省下了,因为这些“运算符”都已经变成了“类库”,要知道整数之间有哪些运算符,只要去浏览文档就行了。至于“+”方法最终表现为一个加法指令而不是方法调用,这便是编译器在优化时所做的事情了。“语言”有自己的文化,“编译器”也有自己的优化策略。

当然,语言规约的规模并不能直接用于论证语言的复杂度,“变化”有时也会带来复杂度。其实我只是想说,Scala语言并不可怕,作为一个程序员,比这门语言难以掌握的东西有太多了。在C#这边也有人经常抱怨说“C# 3.0太复杂,不能保证团队里人人都会”,对此我的说法是,当年我在创业时,招了几个工资在3000左右的程序员,他们都能在一个星期里学会C# 3.0的新特性(原本就会C# 2.0)——假如说一份能力一份待遇的话,那么您的期望薪资是多少呢?

最后再回到《Scala程序设计》这本书吧,这是本连附录也只有180页的小册子,很明显只能是Scala语言的概述和入门,并没有企图让您精通这门语言。这本书的副标题是“Java虚拟机多核编程实战”,这我认为只是个“噱头”而已,因为这本书对于Scala引以为豪的Actor库也只用了20页不到的篇幅。不过话说回来,即便是《Programming in Scala》这本近800页的,覆盖了Scala语言方方面面的“巨著”,其中关于Actor的那章也只有30多页——因为Scala的Actor模型本身也只是以标准库的形式提供的,且十分简单,并不是Scala的重点。如果您对这方面感兴趣,我觉得更应该关注的是akka这个类库而不是Scala的标准库。而如果要将Actor模型和并发编程的方方面面都讲清楚的话,估计又需要整本书的篇幅了。

总体来说,《Scala程序设计》可以算作是一本“称职”的书,即使您无法在工作中使用Scala语言,甚至您不是个Java程序员,也不妨可以从这本小册子里简单地体会一下这门语言。许多开发人员常说“静态语言”的开发效率如何如何低,其实也只是被Java这门劣等语言给误导了,事实上Haskell、C#,F#和Scala都是静态语言的典范,了解Scala也有助于开阔眼界。《Programmatic Programmer》里建议开发人员每年学一门新的语言,Scala也是个不错的选择。与此相比,如果让一个C#程序员去学习Java,那投资回报率则实在是太低了。

最后我也在想,可能这种小册子形式的书也是有不少价值的,例如阅读的代价较低,也比较容易快速地翻译引进,而像《Expert F# 2.0》这样的由语言设计者(还是个科学家)亲自编写的砖头,受众面自然会狭窄许多。

Creative Commons License

本文基于署名 2.5 中国大陆许可协议发布,欢迎转载,演绎或用于商业目的,但是必须保留本文的署名赵劼(包含链接),具体操作方式可参考此处。如您有任何疑问或者授权方面的协商,请给我留言

Add your comment

64 条回复

  1. infinte
    58.243.250.*
    链接

    infinte 2010-08-15 23:40:08

    大哥啊,快同步到typeof.net吧。军训爪机发文不能全靠你了。

    前排真软。

  2. akwei
    221.219.96.*
    链接

    akwei 2010-08-15 23:42:23

    此书只看了3/1,老赵翻书速度真快啊。感觉scala还是很有趣的。

  3. Dreampuf
    220.248.166.*
    链接

    Dreampuf 2010-08-15 23:50:31

    简短手册,不是很深入."不断跟进各种草率设计"这种深有体会,到了scala2.8一些语法变化注解由大括号变为小括号,应该是为了更类似Java?以前的例子都不起作用了,而且资料奇缺,本身IDE也不是很完备(自然不像F#有微软这样的鼎力支持)总之就是开源社区的一些不靠谱让我对于scala的学习表示很有压力。

  4. 013231
    65.49.2.*
    链接

    013231 2010-08-16 00:02:00

    借地请教: F#有什么好的入门教材?我感觉MSDN不适合入门学习,在介绍一个语言特性时又会牵扯不少没学到的特性,看着很不爽.

  5. 老赵
    admin
    链接

    老赵 2010-08-16 00:08:32

    @013231

    入门用《Programming F#》,提高用《Expert F# 2.0》。

  6. 老赵
    admin
    链接

    老赵 2010-08-16 00:15:37

    @Dreampuf

    Scala 2.8的Breaking Changes倒的确是有一些,Binary的自不必说(且1.4已经不支持了),Source级别也有部分改动。

    我有时候觉得奇怪,如Python这样的语言或是Rails框架,为什么在版本升级时都会明显破坏兼容性,可以说很不注重,如果是微软不注意这些的话还不被骂死了,呵呵。

  7. zzfff
    113.141.29.*
    链接

    zzfff 2010-08-16 01:08:33

    说到“更好地表达人类思考”,general-purpose language始终是“致命”的。无意浏览到Jetfire Workflow DSL,感觉和Axum差不多——披着C#羊皮的狼。Jetfire的实现用到Irony,我感觉C# 5.0要走Irony的路。只知道这两个新奇玩意的名字,没去研究,我对开源的东西有主观的反感,赌C# 5.0,盼它早点CTP。

    (妈的,又跑题了,虽然是形跑神不跑)

  8. 老赵
    admin
    链接

    老赵 2010-08-16 01:23:34

    @zzfff

    为什么对开源的东西有主观的反感?

  9. zzfff
    113.141.29.*
    链接

    zzfff 2010-08-16 01:37:06

    我不知道田春这样同学为什么感觉这么“良好”,我也看过点SICP,75%吧,也装模作样做过点题。我对SICP的看法是:最好的书也是最“烂”的书。好的方面就不说了,说下“烂”,它对日常工作毫无帮助,即便你把SICP的题做了100分,也不能将你学习WCF的时间减少一丁点!从程序员的工作上说,SICP==趣味数学==10万个为什么。

    身在工业界(贬低的说,码工,专业的说,software engineer),务实是第一重要的。看到《程序中的日期与时间》第一章 日期计算,作者业余时间研究倒也罢了,作者在富得流油的软件公司拿薪水研究也罢了,若是在温饱线上挣扎的软件公司拿薪水研究,他老大脑袋真有问题,哪个framework/library没封装DateTime啊!

  10. zzfff
    113.141.29.*
    链接

    zzfff 2010-08-16 01:39:29

    @老赵

    因为微软的东西做得太好了:)

  11. zzfff
    113.141.29.*
    链接

    zzfff 2010-08-16 02:19:16

    上面说的“毫无帮助”绝对了。SICP对程序员的日常工作性价比极低。同样,数学,数据结构,算法对大多数程序员的性价比很低。其实这些是科班的内容,没学或没学好也没什么遗憾的,你会去补习中学的物理化学吗?有多少人重温过高数呢?

  12. zzfff
    113.141.29.*
    链接

    zzfff 2010-08-16 02:34:36

    应该说田春同学雅得不食人间烟火,或牛得图灵转世;而我俗得好比牛粪,或比油菜花还还菜。

    哎,这个世界差异怎么就这么大呢?:)

  13. JeeChang
    60.168.86.*
    链接

    JeeChang 2010-08-16 08:44:49

    老赵的博文风格有所微调了。感觉看上去不那么一气呵成了,不知道是我的原因还是老赵的原因。

    最近在看python,不过也只是翻一遍,争取能从中读出点不一样的东西来(相较于C#传统编程)

  14. 躺着读书
    116.77.211.*
    链接

    躺着读书 2010-08-16 10:40:29

    我倒是很理解@zzfff啊

    Java程序员每年学一门新语言。好吧: PLSQL学了么?学深了之后应该是Pro*c吧。 CSS学了么? 稍微入门以后应该马上学JavaScript。

    大多数java程序都是基于数据库的,而大多数数据库指的是oracle。不了解数据库而在其之上开发,那就是一个茶几。存储过程不会写,函数不会写,包不会建,触发器不会弄,索引不知道怎么回事,批量导数据不会搞,是无论如何都说不过去的。

    而现在BS结构这么流行,不会JavaScript那简直是找死。

    为啥说Scala百无一用?资料奇缺是只是其一。函数编程语言难道还少么?LISP、Hashkell等早出来多少年了。好吧,Scala是基于java虚拟机的,可以最大程度支持多~~~核编程,又是函数式的可以构筑自己的DSL,噢对了最大的优势是“学习简单”。既然如此简单,那么工作上需要用到它的时候我再学习吧。真正有经验的程序员,1个月到3个时间就能完全掌握一门新语言,只是开发效率比别人差点而已。而现在国外国内真正用Scala开发的项目有几个?学一个东西而不去用它,几个月的时间早忘光了。这样的脑力投资风险太大。

    另外说一下java的DSL的构建和C#或者说ruby scala的不大一样。是通过aspectJ asm 等这些工具弄的。这些才是真正的工业环境下用的类scala工具。尤其是aspectJ,作为java程序员不用这个简直说不过去。

    至于Scala还是等它流行以后再去学吧,况且在浩如烟海的java扩展语言中,它也可能只是一朵浪花而已。

  15. 老赵
    admin
    链接

    老赵 2010-08-16 11:00:54

    @躺着读书

    别的就不说了,我的看法就是,老兄的思想真是“务实”哪。

  16. 躺着读书
    116.77.210.*
    链接

    躺着读书 2010-08-16 11:21:46

    @老赵

    学过Haskell,学过JR。对Scala不大感冒。 悲剧的是,3年以后,我的Hashkell忘得差不多了……当年可是很厉害的喔。用Hashkell写过类似VIM的编辑器。

  17. scala
    118.249.6.*
    链接

    scala 2010-08-16 11:40:32

    Java怎么算是劣等语言啊,现在在google android上,应用多火啊

  18. zzfff
    113.141.29.*
    链接

    zzfff 2010-08-16 12:05:27

    田同学说得太极端了,我只好用另一个更极端来banlance。虽然SICP、龙书前几章等书我看得稀里糊涂,我承认它们对我还是有点作用的。关键问题是,大多数人是凡人,慧根不够,或者慧根未来,我也见过些热衷“经书”同学,说实话,他们的慧根也许不及我:)

    哎,经书太高,现实太低。

  19. 信心
    114.176.248.*
    链接

    信心 2010-08-16 12:29:22

    不用自己买书就能看书的人真好,但是缺点就是要帮说好话.

  20. 老赵
    admin
    链接

    老赵 2010-08-16 12:56:59

    @信心: 不用自己买书就能看书的人真好,但是缺点就是要帮说好话.

    是在说我吗?没看第一段?我什么时候帮说好话了啊,我可是相当客观滴。

  21. 老赵
    admin
    链接

    老赵 2010-08-16 12:58:36

    @scala: Java怎么算是劣等语言啊,现在在google android上,应用多火啊

    用的人再多,再火,它还是劣等语言啊。就像中国人最多,但难道中国是世界上最好的国家?还有,Android上也能用Scala写程序的,所以快改用Scala吧。

  22. Paul Shen
    58.214.119.*
    链接

    Paul Shen 2010-08-16 14:07:06

    真正的语言是熵, 它不仅是数学的语言, 还是语言的语言。

  23. Paul Shen
    58.214.119.*
    链接

    Paul Shen 2010-08-16 14:43:12

    也就是这种语言的影响力。 开源且简洁的java战略上更胜一筹。

  24. 老赵
    admin
    链接

    老赵 2010-08-16 14:52:10

    @Paul Shen: 也就是这种语言的影响力。 开源且简洁的java战略上更胜一筹。

    Scala也是开源的,而且其实也挺简洁。Java其实相对于Scala的优势还是“底蕴”,时间长么没办法。

  25. Paul Shen
    58.214.119.*
    链接

    Paul Shen 2010-08-16 14:58:15

    cpu之上的C和C++ jvm之上的java和scala 一个道理吧。

  26. wgz
    60.191.94.*
    链接

    wgz 2010-08-17 09:38:41

    目前公司主要用C++,C#的在这边,时间那是很多很多的,不知道是杯具还是洗具(还没转正。。。),C#也用了差不多两年了,想学一门新语言,现在很郁闷的是学C++,还是学一门动态语言,各位牛人,能给点意见不?拜谢!

  27. fzwudc
    222.77.182.*
    链接

    fzwudc 2010-08-18 15:13:55

    “编程语言的本质”,我理解是否是计算模型,比如冯诺曼机命令式模型、lambda演算函数施用模型、逻辑程序设计模型、面向对象模型等等。如何把现实世界或者概念世界的东西转换成计算模型,或在计算模型间转换,就是程序设计语言和程序员的问题了。程序设计语言做得越多,程序员就做得越少。 “语法糖”虽然不是本质,但其提供的抽象层次是有帮助的。

  28. 老赵
    admin
    链接

    老赵 2010-08-18 15:37:18

    @fzwudc

    如果“语法糖”是辅助计算模型编程抽象的话,那么我就认为它是不可或缺的。我是支持语法糖的,当然也要看什么样的糖。

  29. 老赵
    admin
    链接

    老赵 2010-08-18 15:38:10

    @wgz

    我是不建议学习C++,我太笨了学不会……当然如果你对你工作有帮助就是另一回事情了。

  30. zzfff
    123.138.22.*
    链接

    zzfff 2010-08-18 17:12:00

    “跟进各种草率设计的新语言”是个伪命题。比如我工作中要用到WCF,那么至少需要C# 2.0,实际上需要C# 3.0。其实,学习掌握深入(这不好量化)任何一个non-trivial的framework/library(WCF,WF,WPF,WIF,Axis2,CXF..........)所需的成本要远远高于学习掌握(这也不好量化)一门语言(主要就是C#,Java Language)的成本!

  31. zzfff
    123.138.22.*
    链接

    zzfff 2010-08-18 22:23:14

    我觉得,“张口lambda,闭口FP”这真算不了什么,老赵,你这么热爱语言,不设计门新语言,实现个编译器,生活还有意思么?!

  32. 老赵
    admin
    链接

    老赵 2010-08-18 22:47:48

    @zzfff

    设计个语言实现个编译器什么的都太容易了,但是基本没法推广出去,所以就算了。

  33. zzfff
    123.138.22.*
    链接

    zzfff 2010-08-18 23:43:09

    其实我也灰常灰常热爱语言,曾经抱着龙书等书YY,奈何自己慧根不够(有些事情是不能强求的),只好认命,退而求其次,热爱framework/library。衷心希望国内的语言奇客们能学以致用,给世界来点震撼。

  34. zzfff
    116.55.249.*
    链接

    zzfff 2010-08-19 00:31:04

    还有PLP,心中永远的遗憾啊:(

  35. wgz
    60.191.94.*
    链接

    wgz 2010-08-19 09:13:58

    多谢回复 :),为未来投资,找门动态语言学学,不打算学F#了,对c#有点悲观了,待过和现在的公司,不算大也不算小,做项目都是作坊式的,感觉想经历个正规点的、大点的项目都好难.....。书也看了不少,没有经历感觉也是空的

  36. laogao
    112.64.178.*
    链接

    laogao 2010-08-20 18:10:37

    看到有人提起Groovy和Groovy++,上来说两句。

    Groovy可以看作是对Java语言层面上的优化,兼容Java源码让我们可以不用费很大力气学习新的思维方式,就写出更紧凑的代码,加上类型hint后性能也能做到不错。当然,Groovy为了实现很多动态特性并尽量追赶执行效率用到了不少编译期和运行期的"魔法",这个个人不是很欣赏,其他人请随意。

    Scala是全新设计的语言,从一开始就没有打算在源码层面讨好Java,而是下大力气把OO和FP两种编程风格各取精华集成在一起,成为一门表达力更强的语言。对Java工程师而言(假如你对Scala的类型系统、FP等等"高级"特性兴趣不大),Scala和Groovy最大的不同,在于其编译出来的bytecode和你按照同样的算法思路用Java实现的代码编译出来是一致的。或者说,Scala编译器更加符合一个静态Java程序员对它的预期。

    有人可能会觉得Scala的类型系统过于复杂,函数式编程也不好理解。我想说,用你理解的和对你有帮助的部分就好,其他的可以慢慢来。

  37. zicjin
    121.231.55.*
    链接

    zicjin 2010-08-21 22:19:27

    路过想问个问题,Scala可以给Java ME兼容设备写程序吗?

  38. 无聊的很
    122.235.204.*
    链接

    无聊的很 2010-08-29 22:13:02

    只是一个码农而已,却天天在这扯淡,不知道出于什么目的在那摇旗鼓噪

  39. 老赵
    admin
    链接

    老赵 2010-08-29 23:10:40

    @无聊的很

    当然是为了世界大同天下一家啊。

  40. Rock.C
    207.46.55.*
    链接

    Rock.C 2010-08-30 15:31:15

    我觉得讨论“编程语言的本质”这个事情太复杂了。

    很显然C语言没有完全体现编程语言的本质,不过: C语言体现了冯诺依曼机器的本质;冯诺依曼机器是一个具体化了的、可实现的、接近于图灵机的机器;而图灵机能代表很大一部分人类的思考活动。

    编程语言的本质存在于每一个编程语言之中。

  41. 链接

    张楚 2010-09-02 11:42:19

    C#还没搞多久. F#还没摸过, Scala还没看到过, ........... 哎,看来我像刚从乡下来.... 先搞好我手头的Asp.Net吧.吃饭要紧

    站在喜马拉雅山最底下,高高仰视站在山顶的老赵啊..我那个羡慕你的技术... 慢慢爬.俺....老赵多拉我下...

    (^__^) 嘻嘻

  42. abcdef
    218.89.32.*
    链接

    abcdef 2010-09-04 22:11:39

    其实学习有些新语言并不需要太多时间的,现在很多新语言的介绍里面,发明者都会很得意的把精华部分写成小程序展示一下,这时候你可以跟学过的语言比较一下,看看实现方法到底有何不同。

  43. 浮云
    119.123.111.*
    链接

    浮云 2010-10-23 11:37:22

    浮云。一切都是浮云啊!!!!

  44. Jacky
    119.6.9.*
    链接

    Jacky 2010-11-18 14:11:38

    我是从大约三个礼拜前真正接触scala的,虽然听说这门语言是在大约4个月前,那时候由于也是粗浅的了解了一下。也就在3个礼拜前,一次偶然的机会我发现了groovy,被其中的一些漂亮的表达形式(简洁)所吸引,我想也许,将来java会被逐步替换成groovy,虽然当时很多人都说我是在浪费时间,毕竟java已经是相当成熟,用户量也是相当的大。忍不住的,我还是继续在网上搜索一下关于groovy的资料,又是一次偶然的机会,我探索到一篇groovy原作者的文章,其中很奇怪的是作者极力的看好另外一门语言scala,并预示将来java很可能被scala替代(the java of future),这引起了我极大的兴趣。进一步的,我了解了一下scala的细节,发现它真的很强大!或者说很完美!关于楼主说的那本书,我也是在上周五才从china-pub上邮购的,拿回家很快浏览了一遍,给我印象最深的是函数式一节,真的是太强大了!现在我正在从后开始再来学习它,昨天刚在家把相应的eclipse插件安了。好吧,我很深刻的相信并告诉大家,只有当你真正用过它,你才发现它的美。现实就是如此,大家都不愿意从当前的环境中走出来,即使是那么一小步。有也那么一些人,他们认为语言这种东西太基础甚至没有任何意义,泛泛而谈的设计模式,沉在其中。我希望有越来越多的人去探索语言,毕竟这才是人类交流或者具体点是我们把我们所谓的模式反映出来的基本工具,舍它其谁。

  45. Jeff
    112.96.255.*
    链接

    Jeff 2010-12-25 02:57:04

    赵老师说的:"与此相比,如果让一个C#程序员去学习Java,那投资回报率则实在是太低了。" 这个怎么理解呢?我也是做c#开发的,到现在还是觉得C#也很难学,特别是一些高级概念. 赵老师能指点一二吗?

  46. tetsu
    119.107.213.*
    链接

    tetsu 2011-01-09 13:12:57

    Scala是一门静态编译型语言,性能很高

    这个话不知到从何而来。

  47. 老赵
    admin
    链接

    老赵 2011-01-09 23:05:14

    @tetsu

    不从何而来,我说的,哪里有问题?

  48. 劣质语言爱好者
    116.18.39.*
    链接

    劣质语言爱好者 2011-01-12 17:46:17

    我没见过其它语言用允许尖括号做函数名,也没见过用下划线代表所有的意思,难道说这种做法是先进?是更符合人们的思想?我看来只是增加复杂性而已。凡事须有个度,过了就不好了。java语言之所以被称为劣质,是不是Java太简单易学了呢?如果这是劣质,那我宁愿选择劣质。博主你高贵,你搞个简单易学易用的东西出来...

  49. 劣质语言爱好者
    116.18.39.*
    链接

    劣质语言爱好者 2011-01-12 17:48:11

    顺手再骂一句,博主高贵也是头高贵的猪而已,再高贵也变不成人。

  50. 老赵
    admin
    链接

    老赵 2011-01-12 22:02:26

    @劣质语言爱好者: 我没见过其它语言用允许尖括号做函数名,也没见过用下划线代表所有的意思

    光这句话就可以看出是你了解的东西太少了,多少著名语言都是这么做的,连这都不知道谈什么语言优劣啊……还有我说Java劣质,不是因为它易学,而是因为它难用。

  51. 江雪儿
    115.172.252.*
    链接

    江雪儿 2011-01-16 22:22:13

    也来凑个热闹。我C,C++当时学的还不错,后来公司开始用Java了,我也在看了一个星期之后开始做设计(建议初学者一定要学精一门语言)。没事的时候学过一阵子Python。前段时间看过一段同事写的转换ASN.1到Schema的Scala代码。对这几个语言说一下个人感觉。

    C:强大直接的控制力,可以直接预知所有行为。如果要我设计中小型系统级应用,那么非C莫属了。缺点是类库实在太少,开发的效率也不高。

    C++:在C的基础上加了面向对象、模板一类的高级功能,库(STL、Boost)也相对比C丰富。如果要设计可预知型苛刻的大型系统应用,那么可能会选C++。缺点就是C++的高手实在是太少了,有些高手喜欢用元模板会把其他人搞疯掉。

    Java:感觉和C++有相当地方的类似,现在很多企业应用都用Java写。优点是有相当多的使用人群,庞大的类库,不错的IDE。缺点就是语言相当繁琐,SDK中往往少了最基本的功能,XML的处理相当麻烦。

    Python:这是我目前最喜欢的一种语言,简洁舒适的语法,具有相当高的开发效率。如果要一个系统内部的逻辑设计语言,那么我就会选Python。以前测过一下,执行效率不是很高,不知道现在有多少改进。

    Scala:听说处理XML相当不错,开发效率也很高。好像还没有特别好用的IDE。语言层次太灵活了,很多人会写出一些稀奇古怪的东西。

  52. 杨博
    183.13.99.*
    链接

    杨博 2012-10-27 02:45:09

    Scala的1 + 2算什么?val 1 = 2这种逆天语句在Scala中也是合法的,吓尿了吧?

  53. Damon
    221.180.184.*
    链接

    Damon 2013-04-19 16:11:57

    最近在学习scala,今天才看到这篇文章,写的真不错。最近常听人说要想scala学的好就必须先精通java,想问一下真的是这样吗?难道不能纯scala开发吗?

  54. 老赵
    admin
    链接

    老赵 2013-04-19 16:14:09

    @Damon

    不懂啥叫精通Java,当然可以简单认为Scala语言是Java语言的超集。

  55. 小秃
    58.251.86.*
    链接

    小秃 2013-05-17 16:48:08

    靠,原来老赵那么早就当这本书的书托了。最近在公交上看这本书,感觉Scala很有意思嘛,连我这个C#程序员都可以接受,为毛部分java程序员抵制它。

  56. 饰轩
    183.16.198.*
    链接

    饰轩 2014-04-29 16:06:54

    以前在学校看过老赵的视频,觉得老赵是个牛人。 几年过去了,再看老赵发的这篇博客,哎! 不知道老赵对java是不是有深仇大恨,老说Java是种劣质语言,如果有人说,微软的东西都是劣质,老赵估计你也不舒服。

    有这个闲情,不如花点时间研究 1.数据结构与算法,2.数据库(商业数据库不开源,mysql或PostgreSQL),操作系统(微软操作系统也不开源,linux内核) 如果,对上面软件三大基础不感兴趣,也可以发表些 软件项目管理方面的经验

    存在即合理,任何语言都只是与计算机沟通的方式,仅此而已,对语言没必要有偏见。 如果四川人说广东话太难听了,这就挑起了四川人与广东人的争端,结果没有任何意义。

  57. 老赵
    admin
    链接

    老赵 2014-05-05 00:20:59

    @饰轩

    嗯,对语言半懂不懂的人都像你这么说,而且你对于“存在即合理”的理解也属于半文盲水平。

    说起来我说这些东西的意义,本来就不求被你这样只会讲大道理的小白理解呢。

  58. 一个计算专业的即将大二学生
    36.33.212.*
    链接

    一个计算专业的即将大二学生 2014-07-12 13:18:50

    学习时有时候会对计算机的一切产生很多疑问,不知道为什么计算机会出现? 很想一下子了解它的本质,感觉课堂上学的知识并不能帮助我思考,所以能不能麻烦一下给我一些建议。。。。。。 先谢谢你

  59. 老赵
    admin
    链接

    老赵 2014-07-12 20:58:59

    @一个计算专业的即将大二学生

    其实我挺不明白为什么老是还没学多少就去要去关注“本质”的东西呢,是不是就想着追求捷径?

  60. 一个计算专业的即将大二学生
    36.33.212.*
    链接

    一个计算专业的即将大二学生 2014-07-12 22:57:38

    关注本质是因为现在学的并不能很好的让我明白计算机的发展,个人感觉不太利于我的个人联想。 可能自己比较倔喜欢转牛角尖,不太清楚是不是想求捷径, 可能有点吧,应该有点,很谢谢您,我会继续坚持的 很感谢你的回复,有点浮躁希望得到过来人的意见,谢谢

已自动隐藏某些不合适的评论内容(主题无关,争吵谩骂,装疯卖傻等等),如需阅读,请准备好眼药水并点此登陆后查看(如登陆后仍无法浏览请留言告知)。

发表回复

登录 / 登录并记住我 ,登陆后便可删除或修改已发表的评论 (请注意保留评论内容)

昵称:(必填)

邮箱:(必填,仅用于Gavatar

主页:(可选)

评论内容(大于5个字符):

  1. Your Name yyyy-MM-dd HH:mm:ss

使用Live Messenger联系我