由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - functional programming 哪本书经典适合入门
相关主题
感觉Erlang不错,有必要学习一下吗?一直不习惯immutability
大牛给推荐个fp语言王垠 -- 拳打南山魏老 脚踢北海好虫
未来15年,服务器端语言,除了标准的java,我看好scala,go 前端FP更接近人的思维
王垠新文 为Java说句公道话对scala很失望 (转载)
FP 之我见 (长)看了眼scala,觉得很杂
Haskell很难学。。王垠:为Java说句公道话 (转载)
functional programming的两个方面批判 go
板上的高人们能给科普比较functional programming language么从今天开始起,学C++!
相关话题的讨论汇总
话题: functional话题: clojure话题: haskell话题: oop
进入Programming版参与讨论
1 (共1页)
s********k
发帖数: 6180
1
语言无所谓,erlang,scala,haskell,Closure 都行啊,主要介绍思想的,求推荐
d****i
发帖数: 4809
2
表了,FP都是左逼用来装逼的。

【在 s********k 的大作中提到】
: 语言无所谓,erlang,scala,haskell,Closure 都行啊,主要介绍思想的,求推荐
y******s
发帖数: 29
3
racket
d******e
发帖数: 2265
4
http://learnyouahaskell.com/

【在 s********k 的大作中提到】
: 语言无所谓,erlang,scala,haskell,Closure 都行啊,主要介绍思想的,求推荐
l*********s
发帖数: 5409
5
learn yourself haskell for great good,
s***o
发帖数: 2191
6
yep if just for pure learning purpose, haskell is your best bet

【在 l*********s 的大作中提到】
: learn yourself haskell for great good,
p***o
发帖数: 1252
7
这本书挺好, 可惜里面好多代码从去年春天Haskell加了AMP以后就没法用了。

【在 l*********s 的大作中提到】
: learn yourself haskell for great good,
p***o
发帖数: 1252
8
等你学明白了,人家把标准库一改,你还得再学一遍。

【在 s***o 的大作中提到】
: yep if just for pure learning purpose, haskell is your best bet
s***o
发帖数: 2191
9
那不正好嘛,活到老学到老,反正也不用

【在 p***o 的大作中提到】
: 等你学明白了,人家把标准库一改,你还得再学一遍。
H****S
发帖数: 1359
10
Functional programming in Scala
Haskell programming from first principles

【在 s********k 的大作中提到】
: 语言无所谓,erlang,scala,haskell,Closure 都行啊,主要介绍思想的,求推荐
相关主题
Haskell很难学。。一直不习惯immutability
functional programming的两个方面王垠 -- 拳打南山魏老 脚踢北海好虫
板上的高人们能给科普比较functional programming language么FP更接近人的思维
进入Programming版参与讨论
w***g
发帖数: 5958
11
Programming in Scala, Martin Odersky
非要学FP, scala学了或许还有点用。Haskell自然是最好的,就是没啥工作机会,
而且曲线太陡,不破monad transformer,写不了实际有用的程序。

【在 s********k 的大作中提到】
: 语言无所谓,erlang,scala,haskell,Closure 都行啊,主要介绍思想的,求推荐
l******t
发帖数: 55733
12
这个不错。各方面结合的比较好

【在 w***g 的大作中提到】
: Programming in Scala, Martin Odersky
: 非要学FP, scala学了或许还有点用。Haskell自然是最好的,就是没啥工作机会,
: 而且曲线太陡,不破monad transformer,写不了实际有用的程序。

r**m
发帖数: 1825
13
Martin Odersky 在coursera上的那门课很好,
https://www.coursera.org/course/progfun
去google视频下载

【在 s********k 的大作中提到】
: 语言无所谓,erlang,scala,haskell,Closure 都行啊,主要介绍思想的,求推荐
n*w
发帖数: 3393
14
觉得找个语言能用在做的项目最好。学习效率最高。

【在 s********k 的大作中提到】
: 语言无所谓,erlang,scala,haskell,Closure 都行啊,主要介绍思想的,求推荐
h*i
发帖数: 3446
15
这几种FP语言其实不太一样,思想很不同。Erlang是actor model; Haskell注重type,
一堆范畴论monad啥的;Scala是一锅粥,往OOP上加FP;Clojure是Lisp,讲究一切都
是data,但也有些OOP的特性。
我觉得现在没有什么书能涵盖这些不同的FP思想,根据自己需求选一个学吧。

【在 s********k 的大作中提到】
: 语言无所谓,erlang,scala,haskell,Closure 都行啊,主要介绍思想的,求推荐
h*i
发帖数: 3446
16
对,边干边学最有效了。

【在 n*w 的大作中提到】
: 觉得找个语言能用在做的项目最好。学习效率最高。
s********k
发帖数: 6180
17
什么样的项目用functional能比普通python,java之类性能或者工程复杂度提供非常多?

【在 h*i 的大作中提到】
: 对,边干边学最有效了。
h*i
发帖数: 3446
18
一般来说,FP适合情况复杂需要更灵活更高的抽象的用例,而不是只是追求速度的用例
。这其实就是目前大部分应用程序,比如一个复杂的网站。其主要好处是提高生产力。
比如你有一个很复杂的应用,需要整合各种各样的数据,作复杂的操作,你只有一个很
小的团队,工期很紧。这种情况阿三经理会忽悠上级,狂招一堆阿三,同时把工期拖长
来处理。你不是阿三,没有那个本事,怎么办?是熬夜写Java, Python呢,还是早九晚
五写Clojure? 作为一个53俱乐部的成员,我选择早九晚五写Clojure.
写波音737 MAX的飞行诊断系统的团队作了同样的选择,六个程序员,用了两年,一万
六千行Clojure
代码搞定了这个机载诊断系统,细节见 https://www.youtube.com/watch?v=
iUC7noGU1mQ

多?

【在 s********k 的大作中提到】
: 什么样的项目用functional能比普通python,java之类性能或者工程复杂度提供非常多?
c*********e
发帖数: 16335
19
scala是java的scripting版本,和fp有啥关系?

【在 w***g 的大作中提到】
: Programming in Scala, Martin Odersky
: 非要学FP, scala学了或许还有点用。Haskell自然是最好的,就是没啥工作机会,
: 而且曲线太陡,不破monad transformer,写不了实际有用的程序。

n******7
发帖数: 12463
20
一年多前摸过clojure,觉得很有意思
由于你不断的鼓吹
对clojure更感兴趣了
可惜对找工作用处不大
实际工作中间用什么也不是自己可以决定的
只有你这种自己作主的才能爽

【在 h*i 的大作中提到】
: 一般来说,FP适合情况复杂需要更灵活更高的抽象的用例,而不是只是追求速度的用例
: 。这其实就是目前大部分应用程序,比如一个复杂的网站。其主要好处是提高生产力。
: 比如你有一个很复杂的应用,需要整合各种各样的数据,作复杂的操作,你只有一个很
: 小的团队,工期很紧。这种情况阿三经理会忽悠上级,狂招一堆阿三,同时把工期拖长
: 来处理。你不是阿三,没有那个本事,怎么办?是熬夜写Java, Python呢,还是早九晚
: 五写Clojure? 作为一个53俱乐部的成员,我选择早九晚五写Clojure.
: 写波音737 MAX的飞行诊断系统的团队作了同样的选择,六个程序员,用了两年,一万
: 六千行Clojure
: 代码搞定了这个机载诊断系统,细节见 https://www.youtube.com/watch?v=
: iUC7noGU1mQ

相关主题
对scala很失望 (转载)批判 go
看了眼scala,觉得很杂从今天开始起,学C++!
王垠:为Java说句公道话 (转载)抛砖引玉,来谈谈functional programming
进入Programming版参与讨论
c*********e
发帖数: 16335
21
en,同意。公司用什么,你就得用什么,公司不用java,你就是java高手也没用。

【在 n******7 的大作中提到】
: 一年多前摸过clojure,觉得很有意思
: 由于你不断的鼓吹
: 对clojure更感兴趣了
: 可惜对找工作用处不大
: 实际工作中间用什么也不是自己可以决定的
: 只有你这种自己作主的才能爽

w***g
发帖数: 5958
22
专家系统用lisp写是有传统的。

【在 h*i 的大作中提到】
: 一般来说,FP适合情况复杂需要更灵活更高的抽象的用例,而不是只是追求速度的用例
: 。这其实就是目前大部分应用程序,比如一个复杂的网站。其主要好处是提高生产力。
: 比如你有一个很复杂的应用,需要整合各种各样的数据,作复杂的操作,你只有一个很
: 小的团队,工期很紧。这种情况阿三经理会忽悠上级,狂招一堆阿三,同时把工期拖长
: 来处理。你不是阿三,没有那个本事,怎么办?是熬夜写Java, Python呢,还是早九晚
: 五写Clojure? 作为一个53俱乐部的成员,我选择早九晚五写Clojure.
: 写波音737 MAX的飞行诊断系统的团队作了同样的选择,六个程序员,用了两年,一万
: 六千行Clojure
: 代码搞定了这个机载诊断系统,细节见 https://www.youtube.com/watch?v=
: iUC7noGU1mQ

q*c
发帖数: 9453
23
为啥现实里面用 fp 的都是大量降低生产力呢?
这个现实和理论不符合的时候,我们要如何看待现实,才能让它和理论符合呢?

【在 h*i 的大作中提到】
: 一般来说,FP适合情况复杂需要更灵活更高的抽象的用例,而不是只是追求速度的用例
: 。这其实就是目前大部分应用程序,比如一个复杂的网站。其主要好处是提高生产力。
: 比如你有一个很复杂的应用,需要整合各种各样的数据,作复杂的操作,你只有一个很
: 小的团队,工期很紧。这种情况阿三经理会忽悠上级,狂招一堆阿三,同时把工期拖长
: 来处理。你不是阿三,没有那个本事,怎么办?是熬夜写Java, Python呢,还是早九晚
: 五写Clojure? 作为一个53俱乐部的成员,我选择早九晚五写Clojure.
: 写波音737 MAX的飞行诊断系统的团队作了同样的选择,六个程序员,用了两年,一万
: 六千行Clojure
: 代码搞定了这个机载诊断系统,细节见 https://www.youtube.com/watch?v=
: iUC7noGU1mQ

s********k
发帖数: 6180
24
很酷啊,为啥functional特别适合处理复杂和更灵活更高抽象的问题,普通OOP面对这
样问题的局限在于?

【在 h*i 的大作中提到】
: 一般来说,FP适合情况复杂需要更灵活更高的抽象的用例,而不是只是追求速度的用例
: 。这其实就是目前大部分应用程序,比如一个复杂的网站。其主要好处是提高生产力。
: 比如你有一个很复杂的应用,需要整合各种各样的数据,作复杂的操作,你只有一个很
: 小的团队,工期很紧。这种情况阿三经理会忽悠上级,狂招一堆阿三,同时把工期拖长
: 来处理。你不是阿三,没有那个本事,怎么办?是熬夜写Java, Python呢,还是早九晚
: 五写Clojure? 作为一个53俱乐部的成员,我选择早九晚五写Clojure.
: 写波音737 MAX的飞行诊断系统的团队作了同样的选择,六个程序员,用了两年,一万
: 六千行Clojure
: 代码搞定了这个机载诊断系统,细节见 https://www.youtube.com/watch?v=
: iUC7noGU1mQ

h*i
发帖数: 3446
25
问题是我都在说事实,你全在说理论。
你起码要举出例子来,不要动不动就一概而论,动不动就上升到了理论高度。你这不像
一个关心具体事物的工程师,更像一个关心思想斗争的红卫兵。你认真想想,是不是入
错行了?

【在 q*c 的大作中提到】
: 为啥现实里面用 fp 的都是大量降低生产力呢?
: 这个现实和理论不符合的时候,我们要如何看待现实,才能让它和理论符合呢?

h*i
发帖数: 3446
26
个人觉得,原因是这样:普通编程还是基于mutate state in place来工作的。说来说
去这比较底层,是由目前我们用的机器的体系机构决定的,而不是由人的思维和我们要
解决的问题的本质来决定的。当你需要解决的问题比较复杂,就需要更复杂的
primitive,就这么简单。传统语言一切问题都用三个primitive来解决:赋值,条件,
循环,当然什么都能干,但效率就有局限,所以需要更高层的抽象概念。所以我们有了
OOP。
但OOP的问题,在于其提供的高层抽像概念,对象,对象继承等等,其实不够普适。它
们真正适合的范围其实有限,但人们削足适履,非要一切都OOP,结果就搞出各种复杂
的design pattern,framework, architecture之类的,带来很多不是问题本身蕴含的
的复杂性。传统OOP抽象的一个重要的缺陷,就是action不是第一性的,这就是所谓的
“kingdom of nouns"的问题。所谓OOP design pattern,其实大多是对这个问题的
workaround。所以现在Java也要加lambda啥的,也要functional。为什么,因为
functional把action放在第一位,适用范围更广。
我个人觉得,functional只是目前编程发展的一个阶段。从大的方向看,编程发展总是
越来越远离机器特征,越来越高层和自动化。下一步是什么,我不知道。但肯定也不会
是啥新东西。
Computer science的特征在于,它是一个science of artificial,都是人想出来的东
西,所以出新东西很难,你能想到的前人都想过了。新的突破往往不在于新思想,而在
于新的硬件,新的需求,更好的条件,等等。比如现在deep learning啥的,其实没啥
新思想,就是现在GPU厉害了,数据多了。

【在 s********k 的大作中提到】
: 很酷啊,为啥functional特别适合处理复杂和更灵活更高抽象的问题,普通OOP面对这
: 样问题的局限在于?

l******t
发帖数: 55733
27
屁。你说的是groovy

【在 c*********e 的大作中提到】
: scala是java的scripting版本,和fp有啥关系?
l******t
发帖数: 55733
28
你们那的人是有多笨

【在 q*c 的大作中提到】
: 为啥现实里面用 fp 的都是大量降低生产力呢?
: 这个现实和理论不符合的时候,我们要如何看待现实,才能让它和理论符合呢?

p*****2
发帖数: 21240
29
oop的各种理论和pattern相互冲突 很烦人
让oop承认函数的存在怎么那么难呢 只要承认函数 很多问题就迎刃而解

【在 h*i 的大作中提到】
: 个人觉得,原因是这样:普通编程还是基于mutate state in place来工作的。说来说
: 去这比较底层,是由目前我们用的机器的体系机构决定的,而不是由人的思维和我们要
: 解决的问题的本质来决定的。当你需要解决的问题比较复杂,就需要更复杂的
: primitive,就这么简单。传统语言一切问题都用三个primitive来解决:赋值,条件,
: 循环,当然什么都能干,但效率就有局限,所以需要更高层的抽象概念。所以我们有了
: OOP。
: 但OOP的问题,在于其提供的高层抽像概念,对象,对象继承等等,其实不够普适。它
: 们真正适合的范围其实有限,但人们削足适履,非要一切都OOP,结果就搞出各种复杂
: 的design pattern,framework, architecture之类的,带来很多不是问题本身蕴含的
: 的复杂性。传统OOP抽象的一个重要的缺陷,就是action不是第一性的,这就是所谓的

s********k
发帖数: 6180
30
immutable好处确实有,但是是不是需要的存储空间会增大很多,因为任何一个变量的
值都会被存储下来?另外functional的这个function怎么理解才是最合适的,我看到有
些说把函数当做变量参数传递,这个C里面也大量用啊

【在 h*i 的大作中提到】
: 个人觉得,原因是这样:普通编程还是基于mutate state in place来工作的。说来说
: 去这比较底层,是由目前我们用的机器的体系机构决定的,而不是由人的思维和我们要
: 解决的问题的本质来决定的。当你需要解决的问题比较复杂,就需要更复杂的
: primitive,就这么简单。传统语言一切问题都用三个primitive来解决:赋值,条件,
: 循环,当然什么都能干,但效率就有局限,所以需要更高层的抽象概念。所以我们有了
: OOP。
: 但OOP的问题,在于其提供的高层抽像概念,对象,对象继承等等,其实不够普适。它
: 们真正适合的范围其实有限,但人们削足适履,非要一切都OOP,结果就搞出各种复杂
: 的design pattern,framework, architecture之类的,带来很多不是问题本身蕴含的
: 的复杂性。传统OOP抽象的一个重要的缺陷,就是action不是第一性的,这就是所谓的

相关主题
functional programming?大牛给推荐个fp语言
有没有喜欢haskell的同学未来15年,服务器端语言,除了标准的java,我看好scala,go 前端
感觉Erlang不错,有必要学习一下吗?王垠新文 为Java说句公道话
进入Programming版参与讨论
l*********s
发帖数: 5409
31
That is a real concern, but you could count on language/compiler to improve
upon the situation.
Although you can pass function pointer in C, you cannot create functions
dynamically.

【在 s********k 的大作中提到】
: immutable好处确实有,但是是不是需要的存储空间会增大很多,因为任何一个变量的
: 值都会被存储下来?另外functional的这个function怎么理解才是最合适的,我看到有
: 些说把函数当做变量参数传递,这个C里面也大量用啊

s********k
发帖数: 6180
32
这个create functions dynamically能有例子举个看看?

improve

【在 l*********s 的大作中提到】
: That is a real concern, but you could count on language/compiler to improve
: upon the situation.
: Although you can pass function pointer in C, you cannot create functions
: dynamically.

p*****2
发帖数: 21240
33
看看closure呀

【在 s********k 的大作中提到】
: 这个create functions dynamically能有例子举个看看?
:
: improve

s***o
发帖数: 2191
34
好久不见。你们tech stack选好了没有?go, node, vert.x, or something fancier?

【在 p*****2 的大作中提到】
: 看看closure呀
p*****2
发帖数: 21240
35

java + go
legacy的是node和python

【在 s***o 的大作中提到】
: 好久不见。你们tech stack选好了没有?go, node, vert.x, or something fancier?
h*i
发帖数: 3446
36
immutable是会有存储和运行时间上的overhead,但这些都会被硬件进步和优化技术解
决。研究各种优化技术是计算机科学应该搞的正事,也是计算机科学进步的动力。
目前来说,对绝大多数应用,现有的immutable data structure的效率足够用了。以
Clojure为例,我还从来没听说过有人抱怨过Clojure运行慢的(抱怨启动速度慢的很多
,那是Clojure编译器在JVM上实现的问题,在Javascript上就没有这么明显的问题)。
存储空间的话,我的经验是Clojure程序和一般的Java程序内存消耗差不多。其实如果
仔细研究一下immutable的工作原理,就会发现, 其实它并不会占用更多内存,因为用
不到的数据都会被垃圾回收,而用到的数据immutable和mutable没有太多区别。当然
immutable对垃圾回收器的压力要大些。Clojure有transducer这类技术,可以减少计算
中间结果数据的产生。
除了函数可以被传来传去,还有就是函数都是带closure的,我觉得这很重要。

【在 s********k 的大作中提到】
: immutable好处确实有,但是是不是需要的存储空间会增大很多,因为任何一个变量的
: 值都会被存储下来?另外functional的这个function怎么理解才是最合适的,我看到有
: 些说把函数当做变量参数传递,这个C里面也大量用啊

s***o
发帖数: 2191
37
there are lots of overlaps between these two. 这组合互补效应好像不那么明显

【在 p*****2 的大作中提到】
:
: java + go
: legacy的是node和python

p*****2
发帖数: 21240
38
一般用go
有个项目比较serious 用的java
跟个人喜好也有关系 我用了用go发现还不如java好用

【在 s***o 的大作中提到】
: there are lots of overlaps between these two. 这组合互补效应好像不那么明显
f*********g
发帖数: 25
39
Types and Programming Languages
有助于理解type和evaluation是怎么回事
n***p
发帖数: 110
40
不会增大很多,就像git track version change, 不需要用很大的空间,只需要keep
track change的部分。

【在 s********k 的大作中提到】
: immutable好处确实有,但是是不是需要的存储空间会增大很多,因为任何一个变量的
: 值都会被存储下来?另外functional的这个function怎么理解才是最合适的,我看到有
: 些说把函数当做变量参数传递,这个C里面也大量用啊

1 (共1页)
进入Programming版参与讨论
相关主题
从今天开始起,学C++!FP 之我见 (长)
抛砖引玉,来谈谈functional programmingHaskell很难学。。
functional programming?functional programming的两个方面
有没有喜欢haskell的同学板上的高人们能给科普比较functional programming language么
感觉Erlang不错,有必要学习一下吗?一直不习惯immutability
大牛给推荐个fp语言王垠 -- 拳打南山魏老 脚踢北海好虫
未来15年,服务器端语言,除了标准的java,我看好scala,go 前端FP更接近人的思维
王垠新文 为Java说句公道话对scala很失望 (转载)
相关话题的讨论汇总
话题: functional话题: clojure话题: haskell话题: oop