由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 为什么design pattern对FP language来说就是渣
相关主题
今天跟公司confirm了,没有人用Scala介绍一个学习Clojure的好地方
王垠新文 为Java说句公道话这年头有哪几个公司是用函数式编程的呢?
clojure这语言真不错感觉clojure很强大呀
scala 的感悟周末上点有用的信息
Scala 1-star, would not program againnode来势凶猛,已经完胜Ruby了
Clojure和Javascript涨势喜人对web 编程厌倦的, try try Lift framework
我觉得在scala上浪费时间没意思客观总结vert.x
macro is evil俺最近写lisp写得很开心
相关话题的讨论汇总
话题: fp话题: clojure话题: pattern话题: design话题: sql
进入Programming版参与讨论
1 (共1页)
n***p
发帖数: 110
1
因为FP language不需要design pattern就能做到同样效果
以Clojure为例:
http://mishadoff.com/blog/clojure-design-patterns/
OO developer自认为很有价值的design pattern, 在FP developer眼里是不足挂齿的
burden而已。
x****u
发帖数: 44466
2
这不是优点是缺点
DP是为了限制死程序的写法,防止小屁孩天马行空穷折腾俩礼拜后看不懂自己的代码这
种悲剧

【在 n***p 的大作中提到】
: 因为FP language不需要design pattern就能做到同样效果
: 以Clojure为例:
: http://mishadoff.com/blog/clojure-design-patterns/
: OO developer自认为很有价值的design pattern, 在FP developer眼里是不足挂齿的
: burden而已。

n***p
发帖数: 110
3
OO lanuage要用DP才能让自己看懂code,你这是高级黑啊 :)

【在 x****u 的大作中提到】
: 这不是优点是缺点
: DP是为了限制死程序的写法,防止小屁孩天马行空穷折腾俩礼拜后看不懂自己的代码这
: 种悲剧

x****u
发帖数: 44466
4
说的是FP
OO程序让你写你根本想不出来DP以外的模式,最多也就是重发明几十次轮子

【在 n***p 的大作中提到】
: OO lanuage要用DP才能让自己看懂code,你这是高级黑啊 :)
x***4
发帖数: 1815
5
工作现在用scala。很想试试clojure。有什么project可以业余试试?

【在 n***p 的大作中提到】
: 因为FP language不需要design pattern就能做到同样效果
: 以Clojure为例:
: http://mishadoff.com/blog/clojure-design-patterns/
: OO developer自认为很有价值的design pattern, 在FP developer眼里是不足挂齿的
: burden而已。

h*i
发帖数: 3446
6
FP的好处在于,程序员只需要去想如何解决问题本身,不用去想如何绕开程序语言强加
的各种限制,什么封装啥的。DP其实就是绕开语言的人为限制的一些花招,你得把这些
花招都记住,还要知道什么时候用什么花招来解决问题。这些其实就是脱裤子放屁,等
于是你得先研究如何脱裤子,不同的裤子有不同的脱法,等等。这些知识,其实与回字
的不同写法一样,都是没啥用处的知识,因为你其实可以不用脱裤子。
至于说用DP就能看懂代码了,这其实是假象。就像八股文,貌似很熟悉,到底啥意思,
其实很隐晦。比如Java代码稍微一看让人觉得都很熟悉,但就是不知道这些东西合在一
起是怎么工作的。代码其实非常难懂,一层层的DP,一个功能散放在各种地方。所以从
来没听说过一个Java工程能让别人不用看文档就能上手的。会用个轮子都值得写简历上
,说明这些轮子多么难用,需要花多大功夫。
而Clojure世界里面,大家几乎都不用文档。想要理解一个轮子,最简单的办法就是去
看代码。Clojure本质上是更高层的语言,其核心的词汇量要比Java这种底层语言多很
多。而且词汇和人的需求更接近。熟悉之后,其实很容易懂。我老用过这么多计算机语
言,Clojure绝对算是比较简单的,几乎没有什么坑。
当然人也老了,也不想学啥鸟语言了,Clojure很适合做一个最后的语言,因为它是寄
生型的,各种场合都可以有Clojure。其实我这种老程序员不少,只想做事情,不想折
腾工具了。我发现在招人的时候,语言用Clojure的话,招资深马公有优势,就是因为
有很多类似的老马公。

【在 n***p 的大作中提到】
: 因为FP language不需要design pattern就能做到同样效果
: 以Clojure为例:
: http://mishadoff.com/blog/clojure-design-patterns/
: OO developer自认为很有价值的design pattern, 在FP developer眼里是不足挂齿的
: burden而已。

h*i
发帖数: 3446
7
先从搞业余爱好的项目开始,研究一下开发环境如何搭。如果是Web项目,我建议从
luminus微框架开始,http://www.luminusweb.net/ 如果想要短平快的,Clojurescript挺好,比如https://github.com/anmonteiro/lumo,直接npm安装,下面是node.js.
开发环境和项目搭好架子了之后,我建议还是要稍微刷刷题的。学Clojure编程主要的
难点在于programming in the small,就是学习如何不用赋值和循环来编程的技能,所
以刷题是必要的。4clojure.com啥的刷刷,看看别人是如何写的,把常用函数和用法都
掌握了。然后就是要问问题,slack, reddit什么的,有问题就问,不要憋着。

【在 x***4 的大作中提到】
: 工作现在用scala。很想试试clojure。有什么project可以业余试试?
n***p
发帖数: 110
8
Java能做的,Clojure都能做。
所有existing Java library都可以直接拿那用。

【在 x***4 的大作中提到】
: 工作现在用scala。很想试试clojure。有什么project可以业余试试?
p*****2
发帖数: 21240
9
FP也有design pattern吧?
n***p
发帖数: 110
10
对,语法简单是lisp一类语言的共性。虽然简单但又很powerful,这是最吸引人的地方。
Java貌似简单,容易上手,但是大的project各种class错综复杂,dp加上Generics,
lambda等等混在一起用,maintain起来并不省心。

【在 h*i 的大作中提到】
: FP的好处在于,程序员只需要去想如何解决问题本身,不用去想如何绕开程序语言强加
: 的各种限制,什么封装啥的。DP其实就是绕开语言的人为限制的一些花招,你得把这些
: 花招都记住,还要知道什么时候用什么花招来解决问题。这些其实就是脱裤子放屁,等
: 于是你得先研究如何脱裤子,不同的裤子有不同的脱法,等等。这些知识,其实与回字
: 的不同写法一样,都是没啥用处的知识,因为你其实可以不用脱裤子。
: 至于说用DP就能看懂代码了,这其实是假象。就像八股文,貌似很熟悉,到底啥意思,
: 其实很隐晦。比如Java代码稍微一看让人觉得都很熟悉,但就是不知道这些东西合在一
: 起是怎么工作的。代码其实非常难懂,一层层的DP,一个功能散放在各种地方。所以从
: 来没听说过一个Java工程能让别人不用看文档就能上手的。会用个轮子都值得写简历上
: ,说明这些轮子多么难用,需要花多大功夫。

相关主题
Clojure和Javascript涨势喜人介绍一个学习Clojure的好地方
我觉得在scala上浪费时间没意思这年头有哪几个公司是用函数式编程的呢?
macro is evil感觉clojure很强大呀
进入Programming版参与讨论
h*i
发帖数: 3446
11
Not really.
Can you give an example of FP design pattern?

【在 p*****2 的大作中提到】
: FP也有design pattern吧?
w***g
发帖数: 5958
12
monad

【在 h*i 的大作中提到】
: Not really.
: Can you give an example of FP design pattern?

h*i
发帖数: 3446
13
Never used monad.
I know Clojure has some libraries providing these category theory stuff, but
never used them. There's no need for everyday programming.

【在 w***g 的大作中提到】
: monad
x***4
发帖数: 1815
14
我公司来了新人,之前做java的,进来就说为什么我们的scala FP codebase里面不用
mock object。哈哈哈。

【在 h*i 的大作中提到】
: Not really.
: Can you give an example of FP design pattern?

h*i
发帖数: 3446
15
what is mock object?
我的新人进来都先进入bootcamp, 给我做clojurescript koan,先做题再说话。
进FB还要学PHP呢,哈哈。

【在 x***4 的大作中提到】
: 我公司来了新人,之前做java的,进来就说为什么我们的scala FP codebase里面不用
: mock object。哈哈哈。

w**z
发帖数: 8232
16
人家没用过 Scala, 问问题,很正常,为什么要笑别人?

【在 x***4 的大作中提到】
: 我公司来了新人,之前做java的,进来就说为什么我们的scala FP codebase里面不用
: mock object。哈哈哈。

w****e
发帖数: 1883
17
半瓶醋的典型特点。Scala这种已经被时代抛弃的语言还拿来秀安全感也真够二的。

:人家没用过 Scala, 问问题,很正常,为什么要笑别人?

【在 w**z 的大作中提到】
: 人家没用过 Scala, 问问题,很正常,为什么要笑别人?
x***4
发帖数: 1815
18
澄清一下,我不是想笑人,如果你觉得我有笑人的意思,我先道个歉。
我只是想举个例子说,在很多java的pattern在fp的地方其实
都不怎么需要,比如说你要mock一个function的behavior,直接写一个dummy func就可
以了,不太需要专门用一套mock的轮子。

【在 w**z 的大作中提到】
: 人家没用过 Scala, 问问题,很正常,为什么要笑别人?
w********m
发帖数: 1137
19
比较好奇Clojure怎么处理database的连接。
如果没有ORM,每次都用raw sql吗?
j********g
发帖数: 61
20
Good. Mark, Mark.
相关主题
周末上点有用的信息客观总结vert.x
node来势凶猛,已经完胜Ruby了俺最近写lisp写得很开心
对web 编程厌倦的, try try Lift frameworkGo被人吐槽了
进入Programming版参与讨论
h*i
发帖数: 3446
21
Clojure底层也用JDBC的啊。你说的是程序员的UI吧。
以前流行DSL,用数据结构来表示SQL,类似于ORM,当然没有object啥的。
后来觉得SQL其实就是最好的DSL了,搞一个别的DSL与它总是有不合拍的地方, 干嘛不
直接用SQL?
所以现在流行的,是类似于SQL模版的一种办法,就是写SQL文件,每个SQL声明里面含
有模版变量,声明的注释里面定义变量名,函数名啥的,然后每个这样的SQL声明被编
译成一个Clojure函数来用。
这种办法,开始于yesql https://github.com/krisajenkins/yesql
现在其他各种语言也开始照搬, javascript, go, php, C#这些里面都有类似的东东了。

【在 w********m 的大作中提到】
: 比较好奇Clojure怎么处理database的连接。
: 如果没有ORM,每次都用raw sql吗?

N********n
发帖数: 8363
22

但凡一个语言可以不考虑类型只管写操作,那写起来快着呢,看着也容易。静态
不检查类型等运行出错后再调试那就是另外一码事了,尤其是程序量变大之后。

【在 x****u 的大作中提到】
: 这不是优点是缺点
: DP是为了限制死程序的写法,防止小屁孩天马行空穷折腾俩礼拜后看不懂自己的代码这
: 种悲剧

x***4
发帖数: 1815
23
请问能讲讲dynamic typing这样保证类型安全?通过unit test?

了。

【在 h*i 的大作中提到】
: Clojure底层也用JDBC的啊。你说的是程序员的UI吧。
: 以前流行DSL,用数据结构来表示SQL,类似于ORM,当然没有object啥的。
: 后来觉得SQL其实就是最好的DSL了,搞一个别的DSL与它总是有不合拍的地方, 干嘛不
: 直接用SQL?
: 所以现在流行的,是类似于SQL模版的一种办法,就是写SQL文件,每个SQL声明里面含
: 有模版变量,声明的注释里面定义变量名,函数名啥的,然后每个这样的SQL声明被编
: 译成一个Clojure函数来用。
: 这种办法,开始于yesql https://github.com/krisajenkins/yesql
: 现在其他各种语言也开始照搬, javascript, go, php, C#这些里面都有类似的东东了。

k****i
发帖数: 101
24
lispy三大件,fp,dp和sexp。
逻辑与形式不可方物,
熟读sicp,宁静致远。

:因为FP language不需要design pattern就能做到同样效果
h*i
发帖数: 3446
25
所谓类型安全是不存在的需求。比如你说说什么叫“保证类型安全”?这程序不是人自
己写的么,程序又不会自己变。写对了不就行了么。
关键在于写的时候,Clojure讲究bottom up, REPL driven。从一个小函数开始,写的
时候不停用REPL试各种case,试好一个,把这些REPL操作直接复制到unit test文件里
面,改成合适的格式,就成了unit test。这样从底层开始逐步把函数一层层垒起来,
每一层都是些简单函数,都可以独立测试。
不存在”类型安全“的问题,因为”类型“这种东西是不存在的,存在的只有输入数据
,函数,输出数据。
要保证一个函数的输入数据是正确的输入,这一般是在程序的边缘,API层面才需要的
东西。实现这种检查,那有各种办法。以前Clojure有一些轮子来做这样的runtime
check,当然对performance有点影响。现在有core.spec,可以检测数据,看是不是长
成想要的样子,还可以根据spec来自动产生数据,用来做property based test,看一
个函数是不是有正确的输入输出。这些可以在compile time搞。总之比较灵活,是可选
的,根据需要来用,而不是语言层面强制性的到处都必须用的。

【在 x***4 的大作中提到】
: 请问能讲讲dynamic typing这样保证类型安全?通过unit test?
:
: 了。

h*i
发帖数: 3446
26
sicp is a bit dated.
It's written before immutable data become practical.

【在 k****i 的大作中提到】
: lispy三大件,fp,dp和sexp。
: 逻辑与形式不可方物,
: 熟读sicp,宁静致远。
:
: :因为FP language不需要design pattern就能做到同样效果
: :

w********m
发帖数: 1137
27
哦。一直FP和OOP混着用,觉得FP什么都强,就是到了database access就英雄无用武之
地。
ORM可以帮助省去很多SQL,要不然SQL就太多了。

了。

【在 h*i 的大作中提到】
: Clojure底层也用JDBC的啊。你说的是程序员的UI吧。
: 以前流行DSL,用数据结构来表示SQL,类似于ORM,当然没有object啥的。
: 后来觉得SQL其实就是最好的DSL了,搞一个别的DSL与它总是有不合拍的地方, 干嘛不
: 直接用SQL?
: 所以现在流行的,是类似于SQL模版的一种办法,就是写SQL文件,每个SQL声明里面含
: 有模版变量,声明的注释里面定义变量名,函数名啥的,然后每个这样的SQL声明被编
: 译成一个Clojure函数来用。
: 这种办法,开始于yesql https://github.com/krisajenkins/yesql
: 现在其他各种语言也开始照搬, javascript, go, php, C#这些里面都有类似的东东了。

x***4
发帖数: 1815
28
好帖,赞!

【在 h*i 的大作中提到】
: 所谓类型安全是不存在的需求。比如你说说什么叫“保证类型安全”?这程序不是人自
: 己写的么,程序又不会自己变。写对了不就行了么。
: 关键在于写的时候,Clojure讲究bottom up, REPL driven。从一个小函数开始,写的
: 时候不停用REPL试各种case,试好一个,把这些REPL操作直接复制到unit test文件里
: 面,改成合适的格式,就成了unit test。这样从底层开始逐步把函数一层层垒起来,
: 每一层都是些简单函数,都可以独立测试。
: 不存在”类型安全“的问题,因为”类型“这种东西是不存在的,存在的只有输入数据
: ,函数,输出数据。
: 要保证一个函数的输入数据是正确的输入,这一般是在程序的边缘,API层面才需要的
: 东西。实现这种检查,那有各种办法。以前Clojure有一些轮子来做这样的runtime

e*******o
发帖数: 4654
29
你要说类型安全是不存在的需求,这个有点过了。
小学生考试做应用题就知道,如果时间少,验证一下单位对不对。

【在 h*i 的大作中提到】
: 所谓类型安全是不存在的需求。比如你说说什么叫“保证类型安全”?这程序不是人自
: 己写的么,程序又不会自己变。写对了不就行了么。
: 关键在于写的时候,Clojure讲究bottom up, REPL driven。从一个小函数开始,写的
: 时候不停用REPL试各种case,试好一个,把这些REPL操作直接复制到unit test文件里
: 面,改成合适的格式,就成了unit test。这样从底层开始逐步把函数一层层垒起来,
: 每一层都是些简单函数,都可以独立测试。
: 不存在”类型安全“的问题,因为”类型“这种东西是不存在的,存在的只有输入数据
: ,函数,输出数据。
: 要保证一个函数的输入数据是正确的输入,这一般是在程序的边缘,API层面才需要的
: 东西。实现这种检查,那有各种办法。以前Clojure有一些轮子来做这样的runtime

h*i
发帖数: 3446
30
安全不见得要用“类型”来保证。
这个世界很复杂,不是用类型就能模拟的。起码每个人都有自己觉得对的对世界的看法
,也就是有各种不同的类型系统。在程序上强制执行一个类型系统,总是会与用户需求
发生碰撞的,特别是企业级用户(i.e. 需求是任意的,甚至是不合逻辑的,往往是政
治斗争的产物)。PHB们说要什么,就是什么,PHB们不关心什么类型不类型的事,为啥
么程序员要关心,这不是给自己找不痛快么?
用小学生做应用题的标准来说事,是不是有点too simple sometime naive?
为什么很多在大企业工作过的老马公发现Clojure之后如获至宝?因为他们终于找到了
能即让自己开心,也让PHB开心的工具,Get shit done fast while enjoy hacking
the shit. 因为觉大多数编程需求本身都是屎。很多程序员以为用了什么方法论就能把
屎变成不是屎了,其实大谬,屎就是屎。你唯一能做的,如何让弄屎的工作变得更有趣
。你又不是老板,把一坨屎搞成什么形状不是你的工作,你的老板也不关心,为什么你
要关心呢?

【在 e*******o 的大作中提到】
: 你要说类型安全是不存在的需求,这个有点过了。
: 小学生考试做应用题就知道,如果时间少,验证一下单位对不对。

相关主题
GO搞parallel computing有前途吗?王垠新文 为Java说句公道话
FP的好处是不是就是Concurrency?clojure这语言真不错
今天跟公司confirm了,没有人用Scalascala 的感悟
进入Programming版参与讨论
n***p
发帖数: 110
31
https://clojure.github.io/java.jdbc/

【在 w********m 的大作中提到】
: 比较好奇Clojure怎么处理database的连接。
: 如果没有ORM,每次都用raw sql吗?

1 (共1页)
进入Programming版参与讨论
相关主题
俺最近写lisp写得很开心Scala 1-star, would not program again
Go被人吐槽了Clojure和Javascript涨势喜人
GO搞parallel computing有前途吗?我觉得在scala上浪费时间没意思
FP的好处是不是就是Concurrency?macro is evil
今天跟公司confirm了,没有人用Scala介绍一个学习Clojure的好地方
王垠新文 为Java说句公道话这年头有哪几个公司是用函数式编程的呢?
clojure这语言真不错感觉clojure很强大呀
scala 的感悟周末上点有用的信息
相关话题的讨论汇总
话题: fp话题: clojure话题: pattern话题: design话题: sql