Redian新闻
>
讨论程序语言没什么意思,functional programming还是不错的
avatar
讨论程序语言没什么意思,functional programming还是不错的# Programming - 葵花宝典
M*8
1
EE master, 找个8个月, 好不容易才找了个full time consultant的活, $20/hour,
40hours/week, 呜呜, 好可悲
做 coding, 用F# 和C#
avatar
H*F
2
pkg从17到19,值得吗
avatar
d*c
3
语言只是工具,选好用的,自己喜欢的就是了。
语言对人影响很大,反过来人的思维不进步的话,还是可能以旧方式用新语言
最近读 functional thinking这本书,还不错,例子举得很好。
http://nealford.com/books/functionalthinking.html
用R用久了之后有了体会,再看functional就比较清楚了。回到python就发现过于过程
化。
区别在哪里?
R的性能一般,你有动力尽量用vectorized的现成函数,而不是写loop。实际上现成函
数能解决很多问题。这就强迫你把问题分解了。
vectorized,意味着每个函数都是pipeline的一环,每个处理一遍。相比一个巨型for
loop里面多个环节在一起,可能性能上有一点点优势,就是只遍历一遍,但是太多东西
纠缠在一起。从修改,测试角度多个独立函数要容易的多。函数要独立,就需要尽量没
有副作用,没有全局变量,这样逻辑上是简单的,想起来也轻松。
OO是封装,把方法封装在自己内部,太多内部变量,这适合不同的人,不同的部门相互
合作。functional里函数是一级成员,独立存在,重用函数比重用类容易的多。
一个人写程序的话,看看java程序,太多boiler plate了,太多行完全是冗余信息,有
价值的就10%。如果再搞TDD,再对那些不可能错的地方做测试,这完全就是为了增加代
码行数...
avatar
L*o
4
先恭喜,至少你已经有了工作能养活自己了. 刚开始工作工作经验
是最重要的. 别想得太糟糕.
顺便问一句: 什么是F#?
avatar
Z*a
5
你这就是来bso一下,其他什么内容都没有,光看两个数字有毛用

【在 H***F 的大作中提到】
: pkg从17到19,值得吗
avatar
n*7
6
python也能functional style
map reduce filter lambda
关键还是写代码的人
R变量的scope是个大问题
还有自动转换等各种坑
avatar
M*8
7
多谢鼓励, 呵呵
http://en.wikipedia.org/wiki/F_Sharp_(programming_language)
F# (pronounced F Sharp) is a multi-paradigm programming language, targeting
the .NET Framework, that encompasses functional programming as well as
imperative object-oriented programming disciplines. It is a variant of ML
and is largely compatible with the OCaml implementation. F# was initially
developed by Don Syme at Microsoft Research but is now being developed at
Microsoft Developer Division and will be distributed as a full

【在 L*******o 的大作中提到】
: 先恭喜,至少你已经有了工作能养活自己了. 刚开始工作工作经验
: 是最重要的. 别想得太糟糕.
: 顺便问一句: 什么是F#?

avatar
I*a
8
当然值得。
不跳2年后就是overpaid, 因为你这2年做的是同样的事,老板还得每年象征性的给你加
点钱。
跳了2年后反而是underpaid, 因为你2年又学了新东西,说不定又能往上跳
avatar
d*c
9
有个so的讨论帖,python还是不太适合,有几个关键点没有做到。我讨论的那些点主要
不是map reduce之类,实际我几乎没用过。
https://stackoverflow.com/questions/1017621/why-isnt-python-very-good-for-
functional-programming
r的scope没啥问题啊
自动转换注意就好了,js这方面不更恶心,注意就行。
avatar
L*o
10
谢谢 :)
我也看到了,看来要学习新的知识了。 IT这行更新太快,一天
不学习就跟不上发展。
avatar
l*t
11
得看除了package的其他东西吧。
如果其他都一样。你的命题和地上有一块钱和两块钱的票子,你捡哪个一样?不是
nobrainer么?

【在 H***F 的大作中提到】
: pkg从17到19,值得吗
avatar
d*c
12
R的设计一开始就是vector,单个元素也是长度为1的vector,许多函数可以接受vector
输入,产生vector输出,这样你根本不需要filter
v > 1 就能产生一个logical vector,然后用它去index就行了
v[v>1]
named vector可以用来做lookup table,也是直接按name index,就能做到lookup转换。
R设计上聪明的东西是很多的,还有method dispatch等等。
R的package尤其是做的很好,用惯了之后再比较python的库,安装,依赖,自己做
package方面都强很多。
avatar
M*8
13
俺也不懂, 刚刚知道有个F sharp的。 估计项目中可能会用的俺的EE背景, 才给这个
机会的, 呵呵。

【在 L*******o 的大作中提到】
: 谢谢 :)
: 我也看到了,看来要学习新的知识了。 IT这行更新太快,一天
: 不学习就跟不上发展。

avatar
p*o
14
最近看了写functional programming的书,感觉python真不算是这个范畴内的。基本的
思维方式就不同。这个map,reduce,filter就算函数编程,真是很误导人。

【在 n******7 的大作中提到】
: python也能functional style
: map reduce filter lambda
: 关键还是写代码的人
: R变量的scope是个大问题
: 还有自动转换等各种坑

avatar
v*n
15
gxgx~~

hour,

【在 M*******8 的大作中提到】
: EE master, 找个8个月, 好不容易才找了个full time consultant的活, $20/hour,
: 40hours/week, 呜呜, 好可悲
: 做 coding, 用F# 和C#

avatar
n*7
16
矢量化是优势,也是局限,不是所有问题都适合矢量化的
R对于它target的领域,比如做做统计分析,还是挺好的
但是局限太多,其实正是很多所谓聪明的东西阻碍了它被更广泛的应用
所谓成也XX,败也XX
不过这也没啥,该用的时候用就成了

vector
换。

【在 d******c 的大作中提到】
: R的设计一开始就是vector,单个元素也是长度为1的vector,许多函数可以接受vector
: 输入,产生vector输出,这样你根本不需要filter
: v > 1 就能产生一个logical vector,然后用它去index就行了
: v[v>1]
: named vector可以用来做lookup table,也是直接按name index,就能做到lookup转换。
: R设计上聪明的东西是很多的,还有method dispatch等等。
: R的package尤其是做的很好,用惯了之后再比较python的库,安装,依赖,自己做
: package方面都强很多。

avatar
p*j
17
gong!
similar to me.
I am still looking for new job.
avatar
n*7
18
不要拘泥于定义,其实FP也没有一个明确的定义
FP好的地方,即使你不用所谓的FP语言,也可以借鉴
比如合适的时候用我说的那些代替for loop
比如没必要的时候尽量不产生side effect
这个python java c# coding都是很有好处的

【在 p****o 的大作中提到】
: 最近看了写functional programming的书,感觉python真不算是这个范畴内的。基本的
: 思维方式就不同。这个map,reduce,filter就算函数编程,真是很误导人。

avatar
p*w
19
不错了

hour,

【在 M*******8 的大作中提到】
: EE master, 找个8个月, 好不容易才找了个full time consultant的活, $20/hour,
: 40hours/week, 呜呜, 好可悲
: 做 coding, 用F# 和C#

avatar
m*n
20
list comprehension可以解决绝大部分你认为需要functional programming的运用
另外functional programming不是什么新鲜高级的概念,excel公式就是functional
programming
现代程序需要一阴一阳两大要素,数据和算法函数
函数式编程想抛弃数据,尤其是中间数据,本来就是痴心妄想
avatar
p*a
21
bless!
avatar
o*n
22
我老早年用logo metapost的确觉得比较舒服,现在已经完全没感觉了
avatar
d*c
23
函数式一大好处是可以比较容易引入并行。能够几乎不改变代码就支持并行就是新鲜高
级的东西,10年前有吗?各种语言和库都支持吗?天底下没有新鲜事,但是很多东西的
做法不同,context不同,效果完全不同。
你给我来个python list comprehension并行看看。GIL从根子上就限定了python,
python作者自己说了一大堆python不是函数式的话,实际上他就不怎么喜欢。看他的文
章,完全是因为别人要,别人加的,他是持保留态度的。
I have never considered Python to be heavily influenced by functional
languages, no matter what people say or think. I was much more familiar with
imperative languages such as C and Algol 68 and although I had made
functions first-class objects, I didn't view Python as a functional
programming language.
http://python-history.blogspot.com/2009/04/origins-of-pythons-functional-features.html
还有excel公式就是函数式编程,瞎扯也得有点限度。你公式的输入是基于地址引用的
,这能叫函数式?你是把公式就叫函数吗?
什么时候函数式抛弃数据了?

【在 m*****n 的大作中提到】
: list comprehension可以解决绝大部分你认为需要functional programming的运用
: 另外functional programming不是什么新鲜高级的概念,excel公式就是functional
: programming
: 现代程序需要一阴一阳两大要素,数据和算法函数
: 函数式编程想抛弃数据,尤其是中间数据,本来就是痴心妄想

avatar
m*n
24
R那些apply骨子里是loop,并行得用snowball
另外AlphaGo用40台电脑,每台N核,用的是python不是R

with

【在 d******c 的大作中提到】
: 函数式一大好处是可以比较容易引入并行。能够几乎不改变代码就支持并行就是新鲜高
: 级的东西,10年前有吗?各种语言和库都支持吗?天底下没有新鲜事,但是很多东西的
: 做法不同,context不同,效果完全不同。
: 你给我来个python list comprehension并行看看。GIL从根子上就限定了python,
: python作者自己说了一大堆python不是函数式的话,实际上他就不怎么喜欢。看他的文
: 章,完全是因为别人要,别人加的,他是持保留态度的。
: I have never considered Python to be heavily influenced by functional
: languages, no matter what people say or think. I was much more familiar with
: imperative languages such as C and Algol 68 and although I had made
: functions first-class objects, I didn't view Python as a functional

avatar
d*c
25
谁说apply是并行了?哪里来的snowball?正确的package是parallel,在snow基础上改
进的
python GIL是无法解决的本质问题,路边新闻不能证明任何东西,你道听途说,一知半
解的东西太多了。
我也没有鼓吹R高性能并行,你立稻草人靶子已经成了习惯,逻辑问题太多。

【在 m*****n 的大作中提到】
: R那些apply骨子里是loop,并行得用snowball
: 另外AlphaGo用40台电脑,每台N核,用的是python不是R
:
: with

avatar
m*r
26
这贴写的太牛逼了 说到了核心. 难怪我晕菜了好多年。 R这个语言发明的应该在很早
以前 (S language),难道那个时代的人就琢磨出所谓functional programming了 ?
不知道functional programming, closure中文名字叫什么。
vectoriztion叫矢量化
avatar
d*c
27
S是bell lab的人发明的,有很多lisp的元素。

【在 m******r 的大作中提到】
: 这贴写的太牛逼了 说到了核心. 难怪我晕菜了好多年。 R这个语言发明的应该在很早
: 以前 (S language),难道那个时代的人就琢磨出所谓functional programming了 ?
: 不知道functional programming, closure中文名字叫什么。
: vectoriztion叫矢量化

avatar
d*a
28
Functional programming早就有了,和Turing machine一样古老,也可以说更古老,
都出现在有CS这个专业之前。:)
Functional programming有它的优点也有它的问题,主要的问题是程序运行的性能不好
(非常不好)。
closure的中文叫做闭包。

【在 m******r 的大作中提到】
: 这贴写的太牛逼了 说到了核心. 难怪我晕菜了好多年。 R这个语言发明的应该在很早
: 以前 (S language),难道那个时代的人就琢磨出所谓functional programming了 ?
: 不知道functional programming, closure中文名字叫什么。
: vectoriztion叫矢量化

avatar
m*n
29
https://www.quora.com/What-hardware-does-AlphaGo-run-on-Is-it-customized-
hardware-for-best-performance
AlphaGo uses a distributed system of 1920 CPUs and 280 GPUs. AlphaGo uses
Nvidia GPUs for the system. This is comparable to the TU Dresden's Taurus
supercomputer that uses 256 GPUs. In their research paper on Nature, they
talk about how AlphaGo can be run on a single computer, but would have only
a 23% win rate against the distributed system with multiple cores and GPUs.
So, you can view the system as being customized/optimized. The AI however,
as mentioned above, can run on proprietary hardware, but would have
calculation difficulties compared to the "beefed-up" machines. For the
highest probability of winning, the DeepMind team used the distributed
approach when they challenged Lee Sedol 9p.
如果用的是NVidia的显卡进行计算,铁定不是R在算。因为NVidia显卡只支持C和Python
两种语言。

【在 d******c 的大作中提到】
: 谁说apply是并行了?哪里来的snowball?正确的package是parallel,在snow基础上改
: 进的
: python GIL是无法解决的本质问题,路边新闻不能证明任何东西,你道听途说,一知半
: 解的东西太多了。
: 我也没有鼓吹R高性能并行,你立稻草人靶子已经成了习惯,逻辑问题太多。

avatar
g*t
30
C 也是bell lab
卷积神经网也是


: S是bell lab的人发明的,有很多lisp的元素。



【在 d******c 的大作中提到】
: S是bell lab的人发明的,有很多lisp的元素。
avatar
a*e
31
Python list comprehension 可以并行啊,用 Numba 库:
http://numba.pydata.org/numba-doc/dev/reference/pysupported.html#list-comprehension
list comprehension 本身也是从 FP 来的概念,等同于 list monad,但 Python 的语
法略局限。

with

【在 d******c 的大作中提到】
: 函数式一大好处是可以比较容易引入并行。能够几乎不改变代码就支持并行就是新鲜高
: 级的东西,10年前有吗?各种语言和库都支持吗?天底下没有新鲜事,但是很多东西的
: 做法不同,context不同,效果完全不同。
: 你给我来个python list comprehension并行看看。GIL从根子上就限定了python,
: python作者自己说了一大堆python不是函数式的话,实际上他就不怎么喜欢。看他的文
: 章,完全是因为别人要,别人加的,他是持保留态度的。
: I have never considered Python to be heavily influenced by functional
: languages, no matter what people say or think. I was much more familiar with
: imperative languages such as C and Algol 68 and although I had made
: functions first-class objects, I didn't view Python as a functional

avatar
a*e
33
没这个说法吧,anaconda 装 numba 没问题,我从 source 装也没问题

【在 m*****n 的大作中提到】
: 你是怎么装Numba的?不是Anaconda只支持Numpy么?
avatar
m*n
34
我从source装numpy基本是失败的

【在 a*****e 的大作中提到】
: 没这个说法吧,anaconda 装 numba 没问题,我从 source 装也没问题
avatar
g*t
37
从多人多项目的大尺度平均来讲,语言和工具决定思维。而不是反过来。
个别例外不说明问题。我不同意c++ functional这种说法。

【在 d******c 的大作中提到】
: John Carmark QuakeCon keynote talk about functional programming
: https://www.youtube.com/watch?v=1PhArSujR_A
: article: In-depth: Functional programming in C++
: http://www.gamasutra.com/view/news/169296/Indepth_Functional_programming_in_C.php
: 用C++一样可以发挥functional programming的作用。关键是人的思维方法。

avatar
d*c
38
没有什么c++ functional的说法。
他必须用C++,然后用functional programming的一些原则,很多东西只是个设计思路
的区别。像John Carmark这样的传奇式人物在自己公司里推行的方法是可以得到执行的
,好好推广就是了。

【在 g****t 的大作中提到】
: 从多人多项目的大尺度平均来讲,语言和工具决定思维。而不是反过来。
: 个别例外不说明问题。我不同意c++ functional这种说法。

avatar
d*c
39
他的文章写的很清楚了
A large fraction of the flaws in software development are due to programmers
not fully understanding all the possible states their code may execute in.
In a multithreaded environment, the lack of understanding and the resulting
problems are greatly amplified, almost to the point of panic if you are
paying attention. Programming in a functional style makes the state
presented to your code explicit, which makes it much easier to reason about,
and, in a completely pure system, makes thread race conditions impossible.
No matter what language you work in, programming in a functional style
provides benefits. You should do it whenever it is convenient, and you
should think hard about the decision when it isn't convenient.
C++ doesn't encourage functional programming, but it doesn't prevent you
from doing it, and you retain the power to drop down and apply SIMD
intrinsics to hand laid out data backed by memory mapped files, or whatever
other nitty-gritty goodness you find the need for.
avatar
g*t
40
"
No matter what language you work in, programming in a functional style
provides benefits.
"
这话我认为是胡扯八道。拿着菜刀,要多高的功夫才可以当螺丝刀用?
多少次里面有一次能这样用。

programmers
.
resulting
about,

【在 d******c 的大作中提到】
: 他的文章写的很清楚了
: A large fraction of the flaws in software development are due to programmers
: not fully understanding all the possible states their code may execute in.
: In a multithreaded environment, the lack of understanding and the resulting
: problems are greatly amplified, almost to the point of panic if you are
: paying attention. Programming in a functional style makes the state
: presented to your code explicit, which makes it much easier to reason about,
: and, in a completely pure system, makes thread race conditions impossible.
: No matter what language you work in, programming in a functional style
: provides benefits. You should do it whenever it is convenient, and you

avatar
j*w
41
这还大牛呢,这软件工程里著名定律就是there is no silver bullet.这家伙吹的
functional programming好像就是万能,常识都没有。functional programming有很多
缺点就不提了,还是不知道。

programmers
.
resulting
about,

【在 d******c 的大作中提到】
: 他的文章写的很清楚了
: A large fraction of the flaws in software development are due to programmers
: not fully understanding all the possible states their code may execute in.
: In a multithreaded environment, the lack of understanding and the resulting
: problems are greatly amplified, almost to the point of panic if you are
: paying attention. Programming in a functional style makes the state
: presented to your code explicit, which makes it much easier to reason about,
: and, in a completely pure system, makes thread race conditions impossible.
: No matter what language you work in, programming in a functional style
: provides benefits. You should do it whenever it is convenient, and you

avatar
n*w
42
很多什么缺点?十个字


: 这还大牛呢,这软件工程里著名定律就是there is no silver bullet.这家伙吹的

: functional programming好像就是万能,常识都没有。functional programming
有很多

: 缺点就不提了,还是不知道。

: programmers

: .

: resulting

: about,



【在 j***w 的大作中提到】
: 这还大牛呢,这软件工程里著名定律就是there is no silver bullet.这家伙吹的
: functional programming好像就是万能,常识都没有。functional programming有很多
: 缺点就不提了,还是不知道。
:
: programmers
: .
: resulting
: about,

avatar
n*p
43
R有lisp老吗?
现代有几个functional programming language强过lisp了

【在 m******r 的大作中提到】
: 这贴写的太牛逼了 说到了核心. 难怪我晕菜了好多年。 R这个语言发明的应该在很早
: 以前 (S language),难道那个时代的人就琢磨出所谓functional programming了 ?
: 不知道functional programming, closure中文名字叫什么。
: vectoriztion叫矢量化

avatar
j*w
44
性能,效率,易学性都是大问题。

吹的
programming

【在 n*w 的大作中提到】
: 很多什么缺点?十个字
:
:
: 这还大牛呢,这软件工程里著名定律就是there is no silver bullet.这家伙吹的
:
: functional programming好像就是万能,常识都没有。functional programming
: 有很多
:
: 缺点就不提了,还是不知道。
:
: programmers
:
: .
:
: resulting
:
: about,

avatar
N*r
45

易学性其实真的不是大问题
性能和效率的确是问题、
现在鼓吹函数编程最大的好处,就是并行,但是并行要求你的函数编程是纯的。。
然后纯的函数编程是很烂的
所以...

【在 j***w 的大作中提到】
: 性能,效率,易学性都是大问题。
:
: 吹的
: programming

avatar
n*w
46
举个性能和效率低的例子?

【在 N*****r 的大作中提到】
:
: 易学性其实真的不是大问题
: 性能和效率的确是问题、
: 现在鼓吹函数编程最大的好处,就是并行,但是并行要求你的函数编程是纯的。。
: 然后纯的函数编程是很烂的
: 所以...

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。