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 | |
n***p 发帖数: 110 | 10 对,语法简单是lisp一类语言的共性。虽然简单但又很powerful,这是最吸引人的地方。
Java貌似简单,容易上手,但是大的project各种class错综复杂,dp加上Generics,
lambda等等混在一起用,maintain起来并不省心。
【在 h*i 的大作中提到】 : FP的好处在于,程序员只需要去想如何解决问题本身,不用去想如何绕开程序语言强加 : 的各种限制,什么封装啥的。DP其实就是绕开语言的人为限制的一些花招,你得把这些 : 花招都记住,还要知道什么时候用什么花招来解决问题。这些其实就是脱裤子放屁,等 : 于是你得先研究如何脱裤子,不同的裤子有不同的脱法,等等。这些知识,其实与回字 : 的不同写法一样,都是没啥用处的知识,因为你其实可以不用脱裤子。 : 至于说用DP就能看懂代码了,这其实是假象。就像八股文,貌似很熟悉,到底啥意思, : 其实很隐晦。比如Java代码稍微一看让人觉得都很熟悉,但就是不知道这些东西合在一 : 起是怎么工作的。代码其实非常难懂,一层层的DP,一个功能散放在各种地方。所以从 : 来没听说过一个Java工程能让别人不用看文档就能上手的。会用个轮子都值得写简历上 : ,说明这些轮子多么难用,需要花多大功夫。
|
|
|
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 | |
|
|
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 的大作中提到】 : 你要说类型安全是不存在的需求,这个有点过了。 : 小学生考试做应用题就知道,如果时间少,验证一下单位对不对。
|
|
|
n***p 发帖数: 110 | 31 https://clojure.github.io/java.jdbc/
【在 w********m 的大作中提到】 : 比较好奇Clojure怎么处理database的连接。 : 如果没有ORM,每次都用raw sql吗?
|