玩过一个星期haskell,帮人做作业,小赚了一笔,然后就忘记鸟-_-///
--
Any complex technology which doesn't come with documentation must be the best
available.
由于个人对语言有一些偏好,我也是希望能够学习更多的程序设计语言。但是,我选择语言,还会加入一个实用性的考虑。在我看来,没有经历过实际项目的锤炼,只能停留在"想"的层面上。
可以想这样一个问题,如果一个语言这么好,那么好,为什么大多数不能够接受它。一方面,大多数人接受新鲜事物,需要一定时间,另一方面,它是不是真的那么好。以Lisp为例,我在自己的一篇blog(http://dreamhead.blogbus.com/logs/29974721.html)中,提到一个观点,程序设计语言的发展,是Lisp的回归。Lisp有很多很好的特性,比如GC,但在当时的时代背景下,人们是无法接受的,因为代价太大,特别是机器性能方面。随着时代的进步,人们开始逐渐接受它。但在另一面上,Lisp那一堆堆的括号着实让人抓狂。这个世界上的多数程序员走的是传统路线,也就是说,类C的语法是他们最熟悉的东西。新语言可以加入一些新东西,比如C++加入类,Ruby加入闭包,但是,完全差异的东西只能让它们敬而远之。实际上,语法的差异背后是思想的差异。程序员的整体会不断进步,但步幅不能太大了。
Eric提到的几种语言中,Erlang、Haskell和Ocaml与类C语法差异太大,使得它们面临着巨大的接受度考验,其中Erlang略微好一些,毕竟,它打的旗号是与并发挂钩的,而且,Programming
Erlang给了大家一个更好了解Erlang的机会。D,很C,但是,它的前途很难让人看好,毕竟,它要挑战的是C/C++,而大佬在擅长的领域积淀太深,仅仅是语言上的发展是远远不够的。相对来说,Scala倒是一个很有趣的东西,它尝试结合OO和FP,而且寄生在JVM上,所以,让它有了一个非常好的切入点。正如我前面提到的,加入一些新东西,又不是全新。对于有Java经验的人来说,是一个探索FP的机会。
其实,对于个人学习而言,完全可以不必顾虑这些,随心所欲,介绍到处都是。如果真的是为了学一些思想,放下实用的包袱,也是一个不错的思路。
2008/10/11 Eric <xu.ma...@gmail.com>:
--
Everything is simple!
话虽如此,学习的时候lisp/scheme依然是最好的选择,核心简洁,囊括了几乎所有现代编程语言的各种特性,所以我觉得楼主看看sicp就足够了。
* dreamhead <dreamh...@gmail.com> [2008-10-12 00:11:10 +0800]:
--
jan=callcc{|jan|jan};jan.call(jan)
----------------------------------------------------------------------------------
Yours Sincerely
Kun
blog: www.forwind.cn
2008/10/11 pongba <pon...@gmail.com>:
就俺知道的一丝丝:
Erlang 是为解决大规模信息分布式处理问题而从实践中发明的语言,天然支持对象的分布式处理,对大型并发式数据处理有独到的解决思路;
OTP 是Erlang 在爱立信应用十多年以来积累而成的,恐怕也是人类最大的一个单体模块仓库,可以高效的解决几乎所有网络应用问题;
Haskell 是纯FP编译型脚本语言,以其极简单和高效的数字计算表述能力著称,执行效率和C是一个量级的;
Perl 6 的新编译器,就是用Haskell 来写的,,,
O'Caml 是编译型对象脚本语言,适用领域,不明,,,俺不知道,,
另外 Mozart OZ 也是个有一定积累的脚本语言,是有魔力的多范式语言:
感谢耶和华给我编程语言Mozart oz,想要的优点都有了
http://www.flashempire.net/showthread.php?t=219015
对于应用语言的综合介绍,推荐一个早已消失的网页(幸好俺收集到ScrapBook 中了)
程序设计语言介绍
http://floss.zoomquiet.org/data/20050206100400/index.html
> 2008/10/11 Eric <xu.ma...@gmail.com>
>>
>> 各位:
>>
>> 我常常在 reddit/programming 上看到各种各样的新语言。 我是挺好奇这些新的语言的,但是往往只看wikipedia并不能完全得
>> 明白这个语言的使用体验,看待世界的模型,以及解决的问题等等。 因此,借此贴问问各位有使用体验的人,这些新的(我认为新的)语言中你认为最核心的或
>> 者说最值得学习的特性有哪些? 对于一般的程序员(像我这样 C/Java/Python/LISP 路线上的程序员是大多数吧)值得看一下或者研究一
>> 下的语言又有哪些?有句话叫做如果一个语言不能给你一种全新的思维方式,这个语言就不值得学。 我倒没那么严格,可是时间的确有限,想学新的,却不像从
>> A到Z一个一个学,因此问问大家意见
>>
>> 以下是我看到的新的(我没碰过的)语言的一个不完全的列表:
>>
>> D.
>> Scala
>> Erlang
>> Haskell
>> Ocaml
>> ...
--
http://zoomquiet.org'''
过程改进乃是催生可促生靠谱的人的组织!
PE keeps evolving organizations which promoting people be good!'''
[HR]金山软件常年招聘大量Py/C++人才!
https://groups.google.com/group/python-cn/web/ot-py-c
简历直投俺就好;-)
武汉公交系统的交通灯控制好象有人用Ada 开发过支持系统,,
但是,资料真的不多哪,,,
> 2008/10/11 Eric <xu.ma...@gmail.com>
>>
>> 各位:
>>
>> 我常常在 reddit/programming 上看到各种各样的新语言。 我是挺好奇这些新的语言的,但是往往只看wikipedia并不能完全得
>> 明白这个语言的使用体验,看待世界的模型,以及解决的问题等等。 因此,借此贴问问各位有使用体验的人,这些新的(我认为新的)语言中你认为最核心的或
>> 者说最值得学习的特性有哪些? 对于一般的程序员(像我这样 C/Java/Python/LISP 路线上的程序员是大多数吧)值得看一下或者研究一
>> 下的语言又有哪些?有句话叫做如果一个语言不能给你一种全新的思维方式,这个语言就不值得学。 我倒没那么严格,可是时间的确有限,想学新的,却不像从
>> A到Z一个一个学,因此问问大家意见
>>
>> 以下是我看到的新的(我没碰过的)语言的一个不完全的列表:
>>
>> D.
>> Scala
>> Erlang
>> Haskell
>> Ocaml
>> ...
>>
--
> 2008/10/12 pongba <pon...@gmail.com>:
> > 提醒同学们注意,Eric
> > 问的是,如果你熟悉哪些语言,请把这门语言独特的地方,最本质的那个独特的特性以及背后隐藏的思想,说出来。减少其他人学习的成本。并不是要大家秀一下自己的学习路径即可的,那有啥子信息量呢?
> >
> 先建议个说法: 这些大多数,都不是新的语言,都是存在10年以上的了!
> 只是中国封闭的知识交流渠道,以致所有学生从来不知道有 C/VB/JAVA/PHP 以外的语言,,,
>
> 就俺知道的一丝丝:
> Erlang 是为解决大规模信息分布式处理问题而从实践中发明的语言,天然支持对象的分布式处理,对大型并发式数据处理有独到的解决思路;
> OTP 是Erlang 在爱立信应用十多年以来积累而成的,恐怕也是人类最大的一个单体模块仓库,可以高效的解决几乎所有网络应用问题;
> Haskell 是纯FP编译型脚本语言,以其极简单和高效的数字计算表述能力著称,执行效率和C是一个量级的;
> Perl 6 的新编译器,就是用Haskell 来写的,,,
http://en.wikipedia.org/wiki/Perl_6
"There are currently two implementation projects of Perl 6 underway,
Rakudo Perl and Pugs. Rakudo Perl is based on Parrot and PGE, and Pugs
is written in Haskell."
--
jan=callcc{|jan|jan};jan.call(jan)
其实学语言只是形式,编程语言的两极公认的是C和lisp,先把两极啃掉,然后随意选择学习,主要是纵向挖掘,毕竟所有的语言都只是用来"告诉"机器怎么动作的"剧本"而已
Eiffel:DbC
Spec#:编译期的契约,数学基础是定理证明。
Lisp:continuation,macro以及由此带出的一系列构造
Oz:并行、内建逻辑推理
> > 话虽如此,学习的时候lisp/scheme依然是最好的选择,核心简洁,囊括了几乎所有现代编程语言的各种特性,所以我觉得楼主看看sicp就足够了。
>
> SICP 我从高中开始看,英文版 中文版 英文版都看过,SICP 写的好,却不见得是因为“LISP几乎囊括了所有现代编程语言的各种特性” 我更
> 加倾向于: “几乎囊括了人用编程语言处理问题时的各种思考方式” 如数据抽象,层次抽象, 对象编程,消息传递,闭包等等 。 我想指出的是,
> LISP/Scheme 是很牛,但其它语言也是值得一学的。(当然不同的人理解不一样了,可能你觉得LISP是四海一家的解决之道,我还没融会贯通到
> 那个地步 :)
说的不错,我并没有说SICP好是因为lisp牛阿 :) 我也不是lisp的fans
我是觉得楼主有点儿面对层出不穷的语言无所适从的意思才这么说的 与其追新
不如抓住一些根本的东西 对于没看过的同学来说 先看一下大有帮助
>
> 顺带总结一下现有的一些评论,
> 1. dreamhead 兄言之甚好,的确要放下实用的包袱。我大一学习 sed/awk 的时候就是因为是特价书,买了放书架上,几年之后正式作科
> 研的时候天天搞文本处理的时候发现当年学的那些东西很有用。不过时间是很宝贵的东西,所以我想看看哪些语言值得关注。就算是主观标准吧,也希望各位发
> 言,让别人得到启示 :)
> 2. 看来 Haskell 是属于研究前沿的东西,应该值得一看(不知道离 LISP 多远 ?)
> 3. Erlang 其实我一直在关注了,只是我连环境都没有,所以没有投入去学,各位有在具体环境中用 Erlang 的么? 我现在在我的小
> cluster上只跑hadoop, 而且我以前搞过在 solaris/sparc 上面装 erlang, 貌似有问题,所以一直没有认真学
对Haskell非常感兴趣,正玩着呢
对Erlang则兴趣不大,因为我觉得
1. FP理论上都能很好的进行并行编程,
不知道Erlang比其他FP“更”适合的地方在哪里?
2. Erlang的语法很perl...
Thanks,
Jan
> 4. 看来大多数C轨迹上的程序员都准备或者已经有一两门通用脚本语言在身了,脚本的魔力的确大
> 5. SICP 是好书
> 6. 大多数人的学习轨迹上都有 FP 看来 FP 介入实际应用的趋势不可挡(当年unix 风靡工业界,原因之一就是当年大学生都用 unix 然
> 后毕业找工作就带着 unix 文化到工业界)
--
jan=callcc{|jan|jan};jan.call(jan)
不过确实很难学,是我到目前为止觉得最难学的。Haskell 背后的理论基础很漂亮,无论是 lambda
calculus,还是它的类型系统后面的 category
theory。特定情况下写出来的代码可以非常漂亮,最开始常举的一个例子就是一行就能搞定的快排算法,还有用 lazy evaluation
写出的无限长度的 Fibonacci 数列。
我的路线跟你差不多,C/C++/Java/Scheme/Ruby/Python/Common Lisp/Haskell,但是学
Haskell 之前的那些语言后感觉并没有跳出命令式语言和 OO 的框架。Common Lisp 支持的编程范式太多了,我用的时候忍不住用
OO 的想法,不停用 CLOS 这个被很多 Lisp 黑客诟病的东西,自己也觉得不爽,而 CL 提供的 loop/iterate
工具使我还是把 map 等操作和高阶函数扔在一边,反倒是 setf 一堆一堆的,写的代码还不如 C++ 的漂亮。
自从上次用 Haskell 做了模式识别里的两个简单的聚类算法以后情况就变了,刚开始不能用赋值和循环有些痛苦(事实上我暑假尝试过基于 CL
的语言 Qi,它也没有循环,所以当时就尝试使用底层 CL 提供的循环机制。但用 Haskell
的时候就没有这样的机会。),一个简单的算法需要多想想才能用函数式的风格写出来,不过一旦写完编译通过程序就一切正常的跑起来了,根本就没调试。
当然这个也要归结于静态类型的好处。事实上我现在开始倾向于静态类型的语言了,动态类型语言写的程序没有完全的测试实在是很悬,而我又不喜欢写很多测试。
之后再用 Python 的时候很自觉的开始用 map, filter, foldl, partial, compose 等操作。遇到有些
Haskell 提供了而 Python 没有提供的操作觉得不方便,另外没有原生的 partial application
支持也使得代码不够简洁。原来很讨厌 Python 的 self,现在开始觉得 Python 有更多的地方不爽了。
有一篇 06 的博客文章,Why learning Haskell/Python makes you a worse programmer,
http://lukeplant.me.uk/blog.php?id=1107301645
我觉得讲得很有道理,学过 Ruby/Python 之后我就很烦 Java,学过 Haskell 之后对 Python
不满的地方更多了一些。而且写程序变慢了,因为总想着用函数式的风格,但或许调试的时间变少了。文章作者不得不在工作时使用
C#,他越来越觉得沮丧,而用 C# 高级特性采用函数式风格写出来的代码让给他的同事带来了麻烦,最终给他自己带来了麻烦。
2008/10/11 Eric <xu.ma...@gmail.com>:
> 各位:
>
> 我常常在 reddit/programming 上看到各种各样的新语言。 我是挺好奇这些新的语言的,但是往往只看wikipedia并不能完全得
> 明白这个语言的使用体验,看待世界的模型,以及解决的问题等等。 因此,借此贴问问各位有使用体验的人,这些新的(我认为新的)语言中你认为最核心的或
> 者说最值得学习的特性有哪些? 对于一般的程序员(像我这样 C/Java/Python/LISP 路线上的程序员是大多数吧)值得看一下或者研究一
> 下的语言又有哪些?有句话叫做如果一个语言不能给你一种全新的思维方式,这个语言就不值得学。 我倒没那么严格,可是时间的确有限,想学新的,却不像从
> A到Z一个一个学,因此问问大家意见
>
> 以下是我看到的新的(我没碰过的)语言的一个不完全的列表:
>
> D.
> Scala
> Erlang
> Haskell
> Ocaml
> ...
>
>
--
Best regards,
Chen Yufei
2008/10/11 Jay True <gla...@gmail.com>:
--
Best regards,
Chen Yufei
2008/10/11 xxmplus <xxm...@gmail.com>:
> 2008/10/12 Jay True <gla...@gmail.com>:
>> 努力学习 Haskell 的路人甲飘过 ...
>
> 玩过一个星期haskell,帮人做作业,小赚了一笔,然后就忘记鸟-_-///
>
> --
> Any complex technology which doesn't come with documentation must be the best
> available.
F# 中采用了不少 Haskell 的特性的,听 Simon Peyton Jones 的采访的时候他说 F# 中其实就有
Monad,不过换了个不那么吓人的名字。
我也怀疑 Haskell 被大多数程序员接受的能力。但可以肯定的是接受 Haskell 的人肯定是对编程有热情的人。
2008/10/11 dreamhead <dreamh...@gmail.com>:
--
Best regards,
Chen Yufei
2008/10/11 dennis <killm...@gmail.com>:
> 我把学习新语言当成乐趣,很赞成dreamhead老大提的放下实用的包袱,其实每年学习一门新语言的要求很高吗?我看不见得。
忘了说了,Haskell 里面的 lazy evaluation 我觉得是很有必要注意的,其实也就是 SICP 里的 normal
order evaluation,用这个特性来构建 stream 是非常方便的,而有了 stream
的话再用函数式编程就非常方便了。有些问题可以通过 stream 优雅的得到解决。
就算不用 stream,函数式编程常用的
generate data -> filter -> map -> result
这个过程如果用 eager evaluation 的话整个 list 始终需要在内存中,list 大的话开销大。
而 lazy evaluation 可以使内存开销跟命令式语言中的循环操作差不多大(有些地方当然还是需要 eager evaluation
的,Haskell 也提供这样的机制)。就像是用函数式的风格写出了跟命令式代码中的循环一样的代码(Common Lisp 的 streams
宏的目的就在于此,可惜没有被标准接受。)
Python 的 generator 也可以避免 list 占用大量内存开销的问题。
就像你应该用 generator 写成
for i in xrange(100000) / map(func, xrange(1000000)
而不是
for i in range(100000) / map(func, range(1000000)
思想上是一样的,只到需要的时候再求值而不是先全部算好。Haskell 默认使用 lazy evaluation
使得编写函数式代码的时候不用担心 list 吃掉太多内存,当然更重要的还是支持 stream。而 normal order
evaluation 可能带来的重复求值的问题在 Haskell 里面也有不错的解决。(不过不是通过 memoization。)
很遗憾的是采用 lazy evaluation 的函数式语言不多,学过 Haskell 之后个人认为函数式语言都应该支持这个特性,否则我写
map 之类的操作时总会觉得浪费内存了。
实用的话还是 Python,跟大部分别人合作项目还是 Java,因为别人不会 Python。自己写东西现在还是尝试
Haskell,花了很久感觉脑子还是没有转过来,但是就是要去尝试。
2008/10/16 Fenix <feni...@gmail.com>:
一个是 Simon Peyton Jones 关于 Haskell 的访谈
g9 老大以前推荐过 Joe Armstrong 关于 Erlang 的访谈。提下 Erlang 的语法是从 Prolog 学来的。
http://www.se-radio.net/podcast/2008-03/episode-89-joe-armstrong-erlang
每个都在 50 分钟不到点,不会浪费太多时间,又可以练听力。
2008/10/16 Yufei Chen <cyfd...@gmail.com>:
On 11月25日, 下午9时45分, "小马xioama" <cnxia...@gmail.com> wrote:
> LOGO(初中) -> BASIC(高中) -> Fortran(大二)-> Pascal (大三) -> C (大三) ->
> SQL(大四) -> Ada(大四) -> Lisp(大四) -> Prolog(大四) -> C++(毕业后) -> Java (毕业后)
>
> 2008/11/25 yaoer <pian...@gmail.com>
>
>
>
> > 哈哈 碰到一个同学过LOGO的!
> > LOGO-> BASIC -> C++ -> JAVA
>
> > On 10月11日, 下午11时44分, "Jay True" <glac...@gmail.com> wrote:
> > > LOGO -> BASIC -> QBASIC -> Pascal -> C -> C++ -> Java -> Python ->
> > Haskell
> > > ,嗯嗯,还是很壮观的。- 隐藏被引用文字 -
>
> - 显示引用的文字 -