由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 我来挖坑, 谈谈OOP/FP/SQL和人类思维习惯
相关主题
OOP里面的Object其实是actor代码复用:复制粘贴是一个很好的办法,不亚于继承
C语言高级就高级在指针上我刚刚学计算机,有很多问题,所以大家不要笑话水平低
问个 C++到C的问题面向数据的编程与面向对象的编程
学FP不是为了写代码, 而是为了优秀的架构.地址空间里的一个BYTE不能写入(是合法地址)
JS就应该杜绝OOP自学C语言-书和online resources (转载)
Why oop is bad?C语言,结构体转字符串。简单的难题
7年C的经验想转去C++开发难不难?{C语言}请教如何通过变量访问结构体内的各个属性
问个过时的问题Scala,F#或haskell怎么用DI?
相关话题的讨论汇总
话题: fp话题: oo话题: opaque话题: oop话题: struct
进入Programming版参与讨论
1 (共1页)
n****1
发帖数: 1136
1
版上无数大佬声称OOP比FP更加符合人类的思维方式,俺个土鳖来唱个反调.
所有的程序,不管采用什么模式,架构, 其最终目的都是IO+persistence, 70%以上的应
用仅仅是CRUD外加个包装而已. 大多数应用的persistence是tabular database, 这包
括mysql这类ACID数据库, 也包括big table/cassandra这类的分布式数据库. 当然也有
OO database, 但普及率/接收度/性能都不如前者.
我们不妨回想在电脑诞生之前, 人类对一个复杂问题是如何建模与解决的.复杂问题千
奇百怪,比如生物学家要对物种进行门纲目科属种的划分, 这种划分能够体现各物种之
间的异同程度. 再举个例子,统计学家要做个人口普查,那就要建立个大表格,每一行都
对应一个人, 行中记录包括生日/性别/籍贯等等各种信息,这样我们从一个表里就可以
得到籍贯分布,人口年龄结构,地域与受教育程度的关联等等.
事实上在OOP普及以前,人类对事物种类的划分是有限的, 因为现实中存在的东西就那么
几样, 人们也不大需要过研究什么抽象物体. 可OOP发明后就不一样了, 程序员们几乎
把脑子里所有的概念都抽象成物件了. 譬如一个bank account是一个物件, 每个
account有自己的private state,比如余额/利息率, 每个account还有自己的动作,比如
deposite/withdraw/query. 一个bank account被码农们想象成了能跑能跳的活物,50年
代的建模家一定觉得这帮人都疯了.
而对于列表型的问题, 我们的思维基本没变, 电脑只不过是让我们的表越做越大而已.
让我们回到IO+persistent的现代世界. OOP在处理IO时得心应手, 可在persistent那边
却很头痛, 因为复杂的OO类型很难嵌入到tabular数据库里, 写惯了OO的猴子们很不习
惯sql的思维方式,于是各种OO relational mapping被捣鼓出来,被OO猴子们奉为神器.
而FP则正好是另一个极端, FP在IO方面是漏洞百出, 可在persistent上却得天独厚, 因
为表格是FP的bread&butter, SQL语言甚至就是FP的一个DSL. SQL的理论基础,
relational algebra在FP里面可以完美表达. 利用FP的composibility, FP的猴子们用
一个fmap, 就能直接把一个int-> int这种简单函数变为table->table这种函数, 而且
完全不需要考虑异常(Maybe Monad自动解决). OO猴子绝大部分时间在做boxing/
unboxing + exception handling, 而FP在语言级别就解决了.
我同意FP很诡异,现阶段(也或者是永远)难以让主流所接受, 但我不同意OO更接近人类
思维方式, 至少是不同于pre computer时代人类思维方式.
n****1
发帖数: 1136
2
其实excel/spreadsheet里面的VBA之类的程序,实际上是FP的特殊形式. 如果你从来没
接触过FP,想要理解FP是什么, 那么最直观的例子就是excel. Excel基本没有处理IO的
能力, 却能很好地支持data persistent.
最简单的excel编程就是在C1里写个"=A1 + B1",然后双击C1格子右下角. 这样A列和B列
中数字都被加到一起,放到C列了.哪怕是A或B列中有很多空格子,你也不用当心抛出个异
常. 这种小学生都能学会的编程,怎么能说不符合人类思维习惯呢?
这是我从wiki上抄的:
Computer scientist Alan Kay used the term value rule to summarize a
spreadsheet's operation: a cell's value relies solely on the formula the
user has typed into the cell.[17] The formula may rely on the value of other
cells, but those cells are likewise restricted to user-entered data or
formulas. There are no 'side effects' to calculating a formula: the only
output is to display the calculated result inside its occupying cell. There
is no natural mechanism for permanently modifying the contents of a cell
unless the user manually modifies the cell's contents. In the context of
programming languages, this yields a limited form of first-order functional
programming.
大家也可以google下"spreadsheet functional programming", 有一大堆资料.
c*******9
发帖数: 9032
3
开个玩笑。我觉得OO话是人类追求安定的结果,就像婚姻一样,两个人都要被个圈子捆
绑套牢才安心。
但实际上,现代婚姻在财产(相当于共享数据)上还是有不安全因素。
FP到像共产主义,社会大同:财产可copy,按需分配;知识深度共享(pattern 高度重
用)。

【在 n****1 的大作中提到】
: 版上无数大佬声称OOP比FP更加符合人类的思维方式,俺个土鳖来唱个反调.
: 所有的程序,不管采用什么模式,架构, 其最终目的都是IO+persistence, 70%以上的应
: 用仅仅是CRUD外加个包装而已. 大多数应用的persistence是tabular database, 这包
: 括mysql这类ACID数据库, 也包括big table/cassandra这类的分布式数据库. 当然也有
: OO database, 但普及率/接收度/性能都不如前者.
: 我们不妨回想在电脑诞生之前, 人类对一个复杂问题是如何建模与解决的.复杂问题千
: 奇百怪,比如生物学家要对物种进行门纲目科属种的划分, 这种划分能够体现各物种之
: 间的异同程度. 再举个例子,统计学家要做个人口普查,那就要建立个大表格,每一行都
: 对应一个人, 行中记录包括生日/性别/籍贯等等各种信息,这样我们从一个表里就可以
: 得到籍贯分布,人口年龄结构,地域与受教育程度的关联等等.

n****1
发帖数: 1136
4
说些我对FP更极端点理解: 每一个pure functional program都是一个特殊的数据库软
件(不是数据本身!).
下面是解释:
通过relational algebra在haskell中的现成实现, haskell可以轻松实现一个adhoc的
sql关系数据库(haskell 有software transactional memory可以实现database
transaction), 那么通过其他的数学结构,haskell也可以实现其他结构的数据库软件.
数据库软件本身不带状态, 而我们通过insert/update/query来添加或改变状态. 这个
状态就是FP的整个runtime snapshot,它随着程序的开始而建立,当程序死亡时也随之消
失. (类比sql数据库,启动时从硬盘导入,关机时export到硬盘)
也就是说,pure functional program的行为和mysql类似, 它们对每一个request给出一
个response,但不肯能主动action.
这个和web时代的web server/SOA很像, FP不适合做最终的IO glue code, 不是全能选
手,但能够在Request/response模式中得心应手. 原因是R/R模式中IO很简单,FP能扬长
避短.
T*******x
发帖数: 8565
5
我觉得你谈的主要是list processing.外加一点immutable variable.
SQL最大的特点是list processing.我认为这个是他的本质。
现在有三样东西常和functional programming联系在一起:
1. first class function
2. immutable variable
3. list processing
我认为
1. functional programming的本质是first class function
2. 我认为上面三样东西是正交的。一个语言完全可以有这个没那个。
list processing主要是因为lisp的影响,
所以把他和functional programming联系在一起了。

.

【在 n****1 的大作中提到】
: 说些我对FP更极端点理解: 每一个pure functional program都是一个特殊的数据库软
: 件(不是数据本身!).
: 下面是解释:
: 通过relational algebra在haskell中的现成实现, haskell可以轻松实现一个adhoc的
: sql关系数据库(haskell 有software transactional memory可以实现database
: transaction), 那么通过其他的数学结构,haskell也可以实现其他结构的数据库软件.
: 数据库软件本身不带状态, 而我们通过insert/update/query来添加或改变状态. 这个
: 状态就是FP的整个runtime snapshot,它随着程序的开始而建立,当程序死亡时也随之消
: 失. (类比sql数据库,启动时从硬盘导入,关机时export到硬盘)
: 也就是说,pure functional program的行为和mysql类似, 它们对每一个request给出一

p*****2
发帖数: 21240
6
我基本能不用OO就不用OO,我感觉什么都OO的思维很恶心。
n****1
发帖数: 1136
7
不同意这个正交观点
由于immutable, 如果function不是first class, 那程序就不是图灵完备. 所以
immutabel和1st class function是必须在一起的
List只不过是一种特殊的数据结构, 它是monad的一种. lisp全用它, 只是因为结构简
单好理解,可以用来构建其他结构罢了. 要知道在haskell里, list不是primitive,而是
个libary实现. 你完全可以实现自己的list.
Pure Functional最强调的:
1. Immutability
2. Composibility
3. Polymorphism (both adhoc and parametric polymorphism)
Composibility主要是来源于特殊的数学结构,比如functor/arrow/monad, 每种结构都
有很强的限制性假设,这个和FP语言无关.
Haskell里面的adhoc polymorphism是由typeclass来实现的, parametric
polymorphism是parametric datatype免费得到的.
最后说下IO Monad. 这个是整个haskell里面最丑陋,最不intuitive的monad. 要学
monad应该从Maybe Monad或list monad开始. 但很多人误以为haskell里面的monad就是
为了解决IO, 以为IO=Monad, 但看半天也没看懂IO Monad到底想干啥. 所以这个吓跑了
很多人.

【在 T*******x 的大作中提到】
: 我觉得你谈的主要是list processing.外加一点immutable variable.
: SQL最大的特点是list processing.我认为这个是他的本质。
: 现在有三样东西常和functional programming联系在一起:
: 1. first class function
: 2. immutable variable
: 3. list processing
: 我认为
: 1. functional programming的本质是first class function
: 2. 我认为上面三样东西是正交的。一个语言完全可以有这个没那个。
: list processing主要是因为lisp的影响,

l*********s
发帖数: 5409
8
very interesting!
p*****2
发帖数: 21240
9

最后说下IO Monad. 这个是整个haskell里面最丑陋,最不intuitive的monad. 要学
monad应该从Maybe Monad或list monad开始. 但很多人误以为haskell里面的monad就是
为了解决IO, 以为IO=Monad, 但看半天也没看懂IO Monad到底想干啥. 所以这个吓跑了
很多人.
顶这个。以前以为monad就是为了解决IO才出现的。总是这么道听途说。

【在 n****1 的大作中提到】
: 不同意这个正交观点
: 由于immutable, 如果function不是first class, 那程序就不是图灵完备. 所以
: immutabel和1st class function是必须在一起的
: List只不过是一种特殊的数据结构, 它是monad的一种. lisp全用它, 只是因为结构简
: 单好理解,可以用来构建其他结构罢了. 要知道在haskell里, list不是primitive,而是
: 个libary实现. 你完全可以实现自己的list.
: Pure Functional最强调的:
: 1. Immutability
: 2. Composibility
: 3. Polymorphism (both adhoc and parametric polymorphism)

n****1
发帖数: 1136
10
我记得二爷是js/closure一脉的吧
对我来说,Pure FP最大的好处就是very easy to reason the program. 从人的角度来
讲,只要你读懂了代码,基本不会有啥pitfall,所以读完代码就基本可以放心了. 而c/
java则不同,除了读懂代码本身,还要考虑各种乱七八糟的同步,死锁.
从机器的角度来讲,easy to reason的结果是compiler capture most error, 而
Runtime error的可能性极小. 所以pure FP省去了很多debug的时间. 听说很多语言要
花80%的时间来debug,太痛苦了.
而js/closure完全反其道而行之, 不仅是mutable,而且是duck typing, 程序几乎无法
reason, 结果就是all bug is runtime bug. 与其这样,我还不如用java.

【在 p*****2 的大作中提到】
: 我基本能不用OO就不用OO,我感觉什么都OO的思维很恶心。
相关主题
Why oop is bad?代码复用:复制粘贴是一个很好的办法,不亚于继承
7年C的经验想转去C++开发难不难?我刚刚学计算机,有很多问题,所以大家不要笑话水平低
问个过时的问题面向数据的编程与面向对象的编程
进入Programming版参与讨论
p*****2
发帖数: 21240
11

all bug is runtime bug是所有dynamic language的通病吧? dynamic language的好
处是productivity and flexibility.
我用strong typed, dynamic都没啥问题。Pure FP就不行了。FP不错,但是纯了就搞不
定了。
JS的优势其实不是语言上的。如果Google没做个V8出来,情况可能就截然相反了。

【在 n****1 的大作中提到】
: 我记得二爷是js/closure一脉的吧
: 对我来说,Pure FP最大的好处就是very easy to reason the program. 从人的角度来
: 讲,只要你读懂了代码,基本不会有啥pitfall,所以读完代码就基本可以放心了. 而c/
: java则不同,除了读懂代码本身,还要考虑各种乱七八糟的同步,死锁.
: 从机器的角度来讲,easy to reason的结果是compiler capture most error, 而
: Runtime error的可能性极小. 所以pure FP省去了很多debug的时间. 听说很多语言要
: 花80%的时间来debug,太痛苦了.
: 而js/closure完全反其道而行之, 不仅是mutable,而且是duck typing, 程序几乎无法
: reason, 结果就是all bug is runtime bug. 与其这样,我还不如用java.

r*******n
发帖数: 3020
12
我认为还是OOP更容易被人接受或者说符合人类的思维。
FP可以直接拿数学类比, 喜欢学数学的人还是少数,尤其那些证明对很多人来说是很
头疼的,
就是对数学家来说也不简单,看数学史,数学体系漂亮的结果也是不断从丑陋演进来的。
FP核心优势是 reasoning, 跟数学的证明推理一样,人不太容易接受,人更原意接受具
体静态的分析,而FP是纯动态的分析。 但我也认为结果上FP建模的系统比OOP建模的系
统要简洁的多。

【在 n****1 的大作中提到】
: 版上无数大佬声称OOP比FP更加符合人类的思维方式,俺个土鳖来唱个反调.
: 所有的程序,不管采用什么模式,架构, 其最终目的都是IO+persistence, 70%以上的应
: 用仅仅是CRUD外加个包装而已. 大多数应用的persistence是tabular database, 这包
: 括mysql这类ACID数据库, 也包括big table/cassandra这类的分布式数据库. 当然也有
: OO database, 但普及率/接收度/性能都不如前者.
: 我们不妨回想在电脑诞生之前, 人类对一个复杂问题是如何建模与解决的.复杂问题千
: 奇百怪,比如生物学家要对物种进行门纲目科属种的划分, 这种划分能够体现各物种之
: 间的异同程度. 再举个例子,统计学家要做个人口普查,那就要建立个大表格,每一行都
: 对应一个人, 行中记录包括生日/性别/籍贯等等各种信息,这样我们从一个表里就可以
: 得到籍贯分布,人口年龄结构,地域与受教育程度的关联等等.

k**********g
发帖数: 989
13
Procedural Programming 才是符合人类思维方式。人类工作方式本来就是 Spaghetti
code。
另一种符合人类思维方式的编程方式是 actor model。对应西方独立思想人格。
c*******9
发帖数: 9032
14
Procedural Programming --原始社会。

Spaghetti

【在 k**********g 的大作中提到】
: Procedural Programming 才是符合人类思维方式。人类工作方式本来就是 Spaghetti
: code。
: 另一种符合人类思维方式的编程方式是 actor model。对应西方独立思想人格。

p*****2
发帖数: 21240
15

Spaghetti
顶这个。

【在 k**********g 的大作中提到】
: Procedural Programming 才是符合人类思维方式。人类工作方式本来就是 Spaghetti
: code。
: 另一种符合人类思维方式的编程方式是 actor model。对应西方独立思想人格。

a****n
发帖数: 1887
16
不同的人思维不一样,不能指望一个项目组的人都和你一样,符合大多数人思维的东西
才是好东西。
n****1
发帖数: 1136
17
我想表达的是,OO是个人造的东西, 现在的程序猿大多被OO污染过了,所以OO思维能在[
程序猿]这个[人类的子集]里占大多数.
没被OO污染的人,或者是pre-computer时代的人,不会觉得一个能跑会跳的bank account
比 excel更加 intuitive

【在 a****n 的大作中提到】
: 不同的人思维不一样,不能指望一个项目组的人都和你一样,符合大多数人思维的东西
: 才是好东西。

c*******9
发帖数: 9032
18
可以说人类被现代文明污染了。oo还是比较符合现代普通人思维的,但不一定符合原始
人与末来人的思维。普通人耍的是安稳,需要被框框套住循规蹈矩以牺牲自由为代价得
到安全感,那么这是个错觉或心理安慰。

account

【在 n****1 的大作中提到】
: 我想表达的是,OO是个人造的东西, 现在的程序猿大多被OO污染过了,所以OO思维能在[
: 程序猿]这个[人类的子集]里占大多数.
: 没被OO污染的人,或者是pre-computer时代的人,不会觉得一个能跑会跳的bank account
: 比 excel更加 intuitive

k**n
发帖数: 3989
19
靠。。这个版又开始来搞剑宗与气宗活动了。。
p*****2
发帖数: 21240
20
今天跟组里讨论了,以后拒绝用OO来写code了。
相关主题
地址空间里的一个BYTE不能写入(是合法地址){C语言}请教如何通过变量访问结构体内的各个属性
自学C语言-书和online resources (转载)Scala,F#或haskell怎么用DI?
C语言,结构体转字符串。简单的难题关于不同类型的smart pointer
进入Programming版参与讨论
c******o
发帖数: 1277
21
这个问题时你们还用imperative 么?其实OO和FP 大部分不冲突。
如果不用,难道只用 IO/ST monad?

【在 p*****2 的大作中提到】
: 今天跟组里讨论了,以后拒绝用OO来写code了。
p*****2
发帖数: 21240
22

用imperative

【在 c******o 的大作中提到】
: 这个问题时你们还用imperative 么?其实OO和FP 大部分不冲突。
: 如果不用,难道只用 IO/ST monad?

d***n
发帖数: 832
23
下面这句真不敢苟同。另外OO符合大部分人思维不觉得有什么好争议的。
--所有的程序,不管采用什么模式,架构, 其最终目的都是IO+persistence, 70%以上的应
用仅仅是CRUD外加个包装而已.
不过呢,这么瞎聊聊我觉得也挺有意思的,还是得鼓励一下
c*******9
发帖数: 9032
24
OO思维是伴随私有化而产生的properties要分清归属。原始人是过程话思维,东西都是
全局共有的,只享受过程,不想持久拥有。
FP思维是declare需求,实现自动, 只有未来文明高度发展之后才会兴盛,那时候按
需分配,只有想不到,没有做不到。

【在 c*******9 的大作中提到】
: 可以说人类被现代文明污染了。oo还是比较符合现代普通人思维的,但不一定符合原始
: 人与末来人的思维。普通人耍的是安稳,需要被框框套住循规蹈矩以牺牲自由为代价得
: 到安全感,那么这是个错觉或心理安慰。
:
: account

n****1
发帖数: 1136
25
FP也有自己的data type来做到encapsulation, 连C也有struct, 怎么能说是OOP独有
呢?
早期的C++/java类的OOP, 所做的就是随便划分猫猫狗狗的类型,做到type
inheritance, 用来减少duplicate code而已。
后来这帮人终于看到缺点了,开始提倡interface, 反对inheritance了。 譬如golang
就是完全没有inheritance的。
其实就算在OOP里面,不同时代的风格也是完全不同。 如果OO思想真那么自然, 那猴子
们为啥要那么长时间才理解到inheritance is bad?

【在 c*******9 的大作中提到】
: OO思维是伴随私有化而产生的properties要分清归属。原始人是过程话思维,东西都是
: 全局共有的,只享受过程,不想持久拥有。
: FP思维是declare需求,实现自动, 只有未来文明高度发展之后才会兴盛,那时候按
: 需分配,只有想不到,没有做不到。

p*****2
发帖数: 21240
26

golang
顶。我记得我从procedural 换到 OO 还是花了一段时间的,不是一蹴而就的。

【在 n****1 的大作中提到】
: FP也有自己的data type来做到encapsulation, 连C也有struct, 怎么能说是OOP独有
: 呢?
: 早期的C++/java类的OOP, 所做的就是随便划分猫猫狗狗的类型,做到type
: inheritance, 用来减少duplicate code而已。
: 后来这帮人终于看到缺点了,开始提倡interface, 反对inheritance了。 譬如golang
: 就是完全没有inheritance的。
: 其实就算在OOP里面,不同时代的风格也是完全不同。 如果OO思想真那么自然, 那猴子
: 们为啥要那么长时间才理解到inheritance is bad?

a****n
发帖数: 1887
27
我理解OO主要目的是dependency management,
没用FP做过大项目, 不过想知道FP 怎样管理dependencies?
p*****2
发帖数: 21240
28

也没有用过procedural?

【在 a****n 的大作中提到】
: 我理解OO主要目的是dependency management,
: 没用FP做过大项目, 不过想知道FP 怎样管理dependencies?

a****n
发帖数: 1887
29
12年前用asm/c做项目, 不过感觉没什么好办法manage dependency

【在 p*****2 的大作中提到】
:
: 也没有用过procedural?

p*****2
发帖数: 21240
30

耦合度太高?

【在 a****n 的大作中提到】
: 12年前用asm/c做项目, 不过感觉没什么好办法manage dependency
相关主题
help abt C++C语言高级就高级在指针上
如何提取一个executable的所有dependency?问个 C++到C的问题
OOP里面的Object其实是actor学FP不是为了写代码, 而是为了优秀的架构.
进入Programming版参与讨论
a****n
发帖数: 1887
31
大概130万行代码, 耦合很高, 编译一次的7~8个小时, 虽然分了20多个模块, 但
是dependencies 像是蜘蛛网。。。另外还有DLL 版本问题(DLL Hell)
OO 的优点是提供了一系列设计原则, 可以manage/revert dependencies,
没怎么接触过FP的大项目, 想知道FP如何处理类似问题。
n****1
发帖数: 1136
32
你是说java里面那些dependency injection container之类的么?
那个恰好是java最薄弱的地方,所以才弄出那么复杂丑陋的pattern, 最搞笑的是还要单
独写xml, 莫非你觉得这个很可爱?
任何与FP沾边的语言, 只要function是first class citizen, 甚至包过C语言(有函数
指针), 都完全可以轻松解决dependency injection的问题. 不信你随手搜一下"python
dependency", 看看其他人怎么说的.
Why people say they prefer OOP when they don't know what is OOP?

【在 a****n 的大作中提到】
: 我理解OO主要目的是dependency management,
: 没用FP做过大项目, 不过想知道FP 怎样管理dependencies?

p*****2
发帖数: 21240
33

量比较大。你觉得用C++能好很多吗?

【在 a****n 的大作中提到】
: 大概130万行代码, 耦合很高, 编译一次的7~8个小时, 虽然分了20多个模块, 但
: 是dependencies 像是蜘蛛网。。。另外还有DLL 版本问题(DLL Hell)
: OO 的优点是提供了一系列设计原则, 可以manage/revert dependencies,
: 没怎么接触过FP的大项目, 想知道FP如何处理类似问题。

a****n
发帖数: 1887
34
我说的是OOP的本质, 不是指哪个framework...
Why people say they hate OOP when they don't know what is OOP?

python

【在 n****1 的大作中提到】
: 你是说java里面那些dependency injection container之类的么?
: 那个恰好是java最薄弱的地方,所以才弄出那么复杂丑陋的pattern, 最搞笑的是还要单
: 独写xml, 莫非你觉得这个很可爱?
: 任何与FP沾边的语言, 只要function是first class citizen, 甚至包过C语言(有函数
: 指针), 都完全可以轻松解决dependency injection的问题. 不信你随手搜一下"python
: dependency", 看看其他人怎么说的.
: Why people say they prefer OOP when they don't know what is OOP?

g*****g
发帖数: 34805
35
OO的精髓不是inheritance,是encapulation, 用private property来拒绝外部直接访
问,保持数据一致性,C的struct哪有这个特性。你这连基础知识都没整明白,就出来
指点
江山了。
也没有inheritance is bad这种傻逼说法。从JDK到Spring,inheritance大量使用,都
是公认质量很好的类库。
充其量在某些情况下会说composition over inheritance,那完全是另一回事。

golang

【在 n****1 的大作中提到】
: FP也有自己的data type来做到encapsulation, 连C也有struct, 怎么能说是OOP独有
: 呢?
: 早期的C++/java类的OOP, 所做的就是随便划分猫猫狗狗的类型,做到type
: inheritance, 用来减少duplicate code而已。
: 后来这帮人终于看到缺点了,开始提倡interface, 反对inheritance了。 譬如golang
: 就是完全没有inheritance的。
: 其实就算在OOP里面,不同时代的风格也是完全不同。 如果OO思想真那么自然, 那猴子
: 们为啥要那么长时间才理解到inheritance is bad?

p*****2
发帖数: 21240
36

可以在文件级别,类库级别封装吧?

【在 g*****g 的大作中提到】
: OO的精髓不是inheritance,是encapulation, 用private property来拒绝外部直接访
: 问,保持数据一致性,C的struct哪有这个特性。你这连基础知识都没整明白,就出来
: 指点
: 江山了。
: 也没有inheritance is bad这种傻逼说法。从JDK到Spring,inheritance大量使用,都
: 是公认质量很好的类库。
: 充其量在某些情况下会说composition over inheritance,那完全是另一回事。
:
: golang

g*****g
发帖数: 34805
37
这恰恰是java最强的地方,eclipse能轻松得几千万代码,每年一个release,几百个
commiter隶属于不同公司,Python差了老鼻子远。

python

【在 n****1 的大作中提到】
: 你是说java里面那些dependency injection container之类的么?
: 那个恰好是java最薄弱的地方,所以才弄出那么复杂丑陋的pattern, 最搞笑的是还要单
: 独写xml, 莫非你觉得这个很可爱?
: 任何与FP沾边的语言, 只要function是first class citizen, 甚至包过C语言(有函数
: 指针), 都完全可以轻松解决dependency injection的问题. 不信你随手搜一下"python
: dependency", 看看其他人怎么说的.
: Why people say they prefer OOP when they don't know what is OOP?

n****1
发帖数: 1136
38
软件的耦合度应该是人来控制的,不是语言能解决的吧.
C/C++程序的问题就是滥用include, 而且不注重hide implementation from API, 所以
编译一个.c文件可能要访问几千个.h文件.
解决方案就是a)注重hiding, 参见http://en.wikipedia.org/wiki/Opaque_pointer
b)现代编译器现在有precompiled header, 能把所有头文件放到一个盒子里, 能让编译
时间最多小几个数量级.

【在 a****n 的大作中提到】
: 大概130万行代码, 耦合很高, 编译一次的7~8个小时, 虽然分了20多个模块, 但
: 是dependencies 像是蜘蛛网。。。另外还有DLL 版本问题(DLL Hell)
: OO 的优点是提供了一系列设计原则, 可以manage/revert dependencies,
: 没怎么接触过FP的大项目, 想知道FP如何处理类似问题。

a****n
发帖数: 1887
39
做过最大的c++项目是OpenOffice(800万+行代码),做了三年, 虽然OOP提供了
dependency manage的可能,但是大多数人都在乱用,添加了很多不必要耦合,甚至出
现过循环依赖。所以情况并不见得好多少。
在我理解,大项目最大的困难在于人的本能, 对大多数人来说, 他们更倾向于省事儿
而丑陋的方式
FP是否更对此有所改善呢?

【在 p*****2 的大作中提到】
:
: 可以在文件级别,类库级别封装吧?

n****1
发帖数: 1136
40
你在java界可能很牛,但也太自以为是了吧.
C的struct完全可以做到hidding和encapsulation, 这玩意叫Opaque struct. 看看这个
http://en.wikipedia.org/wiki/Opaque_pointer
现在的开源C程序里面到处都用的这个.
我看你是写java写得太high了,连基础老本都忘了

【在 g*****g 的大作中提到】
: OO的精髓不是inheritance,是encapulation, 用private property来拒绝外部直接访
: 问,保持数据一致性,C的struct哪有这个特性。你这连基础知识都没整明白,就出来
: 指点
: 江山了。
: 也没有inheritance is bad这种傻逼说法。从JDK到Spring,inheritance大量使用,都
: 是公认质量很好的类库。
: 充其量在某些情况下会说composition over inheritance,那完全是另一回事。
:
: golang

相关主题
学FP不是为了写代码, 而是为了优秀的架构.7年C的经验想转去C++开发难不难?
JS就应该杜绝OOP问个过时的问题
Why oop is bad?代码复用:复制粘贴是一个很好的办法,不亚于继承
进入Programming版参与讨论
a****n
发帖数: 1887
41
这个只是一些tips 并不能解决根本问题,
根本问题在于, 模块之间的相互依赖关系应该是什么样子的,怎样实现这样的关系?
OOP的优势在于,他提倡interface programming, 提倡reverse dependency. OOP的核
心就是假定接口是稳定的, 而实现应该依赖于抽象,

【在 n****1 的大作中提到】
: 软件的耦合度应该是人来控制的,不是语言能解决的吧.
: C/C++程序的问题就是滥用include, 而且不注重hide implementation from API, 所以
: 编译一个.c文件可能要访问几千个.h文件.
: 解决方案就是a)注重hiding, 参见http://en.wikipedia.org/wiki/Opaque_pointer
: b)现代编译器现在有precompiled header, 能把所有头文件放到一个盒子里, 能让编译
: 时间最多小几个数量级.

p*****2
发帖数: 21240
42

FP能大大的减少代码行数是真的。从这个角度来讲是有帮助的。其他的我也说不好。项
目大了都不好搞,所以现在要搞SOA。

【在 a****n 的大作中提到】
: 做过最大的c++项目是OpenOffice(800万+行代码),做了三年, 虽然OOP提供了
: dependency manage的可能,但是大多数人都在乱用,添加了很多不必要耦合,甚至出
: 现过循环依赖。所以情况并不见得好多少。
: 在我理解,大项目最大的困难在于人的本能, 对大多数人来说, 他们更倾向于省事儿
: 而丑陋的方式
: FP是否更对此有所改善呢?

n****1
发帖数: 1136
43
Frankly this is the first time I hear about "我理解OO主要目的是dependency
management". Could you please give me even a single source/article
supporting your argument?
If not, I don't think you know OOP better than me at all.

【在 a****n 的大作中提到】
: 我说的是OOP的本质, 不是指哪个framework...
: Why people say they hate OOP when they don't know what is OOP?
:
: python

a****n
发帖数: 1887
44
准确的说, 为什么C++里面既有struct, 又有class,
因为他们在概念上是不同的东西。。。
class 是hide data, expose behaviors, struct 是 expose data
这种实现上的技巧更类似于语言上的hack

【在 n****1 的大作中提到】
: 你在java界可能很牛,但也太自以为是了吧.
: C的struct完全可以做到hidding和encapsulation, 这玩意叫Opaque struct. 看看这个
: http://en.wikipedia.org/wiki/Opaque_pointer
: 现在的开源C程序里面到处都用的这个.
: 我看你是写java写得太high了,连基础老本都忘了

a****n
发帖数: 1887
45
OOP的理解每个人都不一样。我最早认为是继承,多态, 后来觉得是interface
programming, 现在认为是dependency management. 我也不认为我懂得比你多,这个
我也不想和你争
你可以看youtube 上 Robert C Martin 的演讲
另外两个人 Martin Fowler, Eric Evans的video你也可以看看
还有些书。
PEAA
DDD
Agile Software Development, Principles, Patterns, and Practices


【在 n****1 的大作中提到】
: Frankly this is the first time I hear about "我理解OO主要目的是dependency
: management". Could you please give me even a single source/article
: supporting your argument?
: If not, I don't think you know OOP better than me at all.

n****1
发帖数: 1136
46
比较新的开源C项目里边, dependency都是直接写
struct xxx;
而不是
#include "xxx.h"
如果xxx需要暴露某个public变量, 大家也会写
struct {
int public;
void* priviate;
} xxx;
而不是无脑地 #include "xxx.h"
然后函数指针在开源程序里面到处都是, 不知道你们的项目里用了多少.

【在 a****n 的大作中提到】
: 准确的说, 为什么C++里面既有struct, 又有class,
: 因为他们在概念上是不同的东西。。。
: class 是hide data, expose behaviors, struct 是 expose data
: 这种实现上的技巧更类似于语言上的hack

a****n
发帖数: 1887
47
xD
SOA一个的好处是强迫所有user, 都要通过interfaces 来调用相关模块。

【在 p*****2 的大作中提到】
:
: FP能大大的减少代码行数是真的。从这个角度来讲是有帮助的。其他的我也说不好。项
: 目大了都不好搞,所以现在要搞SOA。

n****1
发帖数: 1136
48
我不是和你争占有率, 我只想问, 如果OOP/java的的dependency那么强,为啥人们需要
写xml呢?

【在 g*****g 的大作中提到】
: 这恰恰是java最强的地方,eclipse能轻松得几千万代码,每年一个release,几百个
: commiter隶属于不同公司,Python差了老鼻子远。
:
: python

n****1
发帖数: 1136
49
Come on! FP enforces SOA structure at the most granular level. It's not only
modular level, but also file level, function level, variable level.
All the good words you have about SOA can be used on FP.

【在 a****n 的大作中提到】
: xD
: SOA一个的好处是强迫所有user, 都要通过interfaces 来调用相关模块。

g*****g
发帖数: 34805
50
你丫脑残了就打补丁,LOL。尼玛前面提的是struct,一个完全没encapsulation的结构
。一打脸就变成
opaque pointer了。你说 opaque pointer有encapsulation是一回事,struct啥时候跟
opaque pointer
等价了?还有脸谈基础知识。

【在 n****1 的大作中提到】
: 你在java界可能很牛,但也太自以为是了吧.
: C的struct完全可以做到hidding和encapsulation, 这玩意叫Opaque struct. 看看这个
: http://en.wikipedia.org/wiki/Opaque_pointer
: 现在的开源C程序里面到处都用的这个.
: 我看你是写java写得太high了,连基础老本都忘了

相关主题
我刚刚学计算机,有很多问题,所以大家不要笑话水平低自学C语言-书和online resources (转载)
面向数据的编程与面向对象的编程C语言,结构体转字符串。简单的难题
地址空间里的一个BYTE不能写入(是合法地址){C语言}请教如何通过变量访问结构体内的各个属性
进入Programming版参与讨论
n****1
发帖数: 1136
51
Poor man, you do not have a single clue about the connection between opaque
pointer and opaque struct, do you?
Can you given give me a precise definition of opaque pointer? It is a
pointer to some struct, right? Why should people call it opaque pointer if
it does not point to a opaque struct?

【在 g*****g 的大作中提到】
: 你丫脑残了就打补丁,LOL。尼玛前面提的是struct,一个完全没encapsulation的结构
: 。一打脸就变成
: opaque pointer了。你说 opaque pointer有encapsulation是一回事,struct啥时候跟
: opaque pointer
: 等价了?还有脸谈基础知识。

g*****g
发帖数: 34805
52
你问的问题很奇怪,我都不明白你想问啥,是dependency injection, 还是
dependency managerment?
不管是哪个,xml都不是必须的。有的类库用xml来做一些configuration,我也没看出
有啥问题。如果你把configuration看成可变的部分,为了避免重新编译代码,使用xml
是很自然的事情。动态语言不编译,自然做法可以不一样。

【在 n****1 的大作中提到】
: 我不是和你争占有率, 我只想问, 如果OOP/java的的dependency那么强,为啥人们需要
: 写xml呢?

g*****g
发帖数: 34805
53
你丫吹到天上去,opaque pointer也不不会跟struct等价。不服找个索引大家看看。傻
逼了就承认,打肿脸充胖
子有用吗?

opaque

【在 n****1 的大作中提到】
: Poor man, you do not have a single clue about the connection between opaque
: pointer and opaque struct, do you?
: Can you given give me a precise definition of opaque pointer? It is a
: pointer to some struct, right? Why should people call it opaque pointer if
: it does not point to a opaque struct?

n****1
发帖数: 1136
54
Can you given give me a precise definition of opaque pointer? It is a
pointer to some struct, right?
Why should people call it opaque pointer if it does not point to a opaque
struct?
Of cause you can assume me to be stupid enough to do that, then you win.

【在 g*****g 的大作中提到】
: 你丫吹到天上去,opaque pointer也不不会跟struct等价。不服找个索引大家看看。傻
: 逼了就承认,打肿脸充胖
: 子有用吗?
:
: opaque

g*****g
发帖数: 34805
55
pointer to struct != struct. Period. Not to mention its definition is not
declared in header => opaque pointer is a pointer to a special form of
struct. How can these two be equal? You are so stupid it's not even funny.

【在 n****1 的大作中提到】
: Can you given give me a precise definition of opaque pointer? It is a
: pointer to some struct, right?
: Why should people call it opaque pointer if it does not point to a opaque
: struct?
: Of cause you can assume me to be stupid enough to do that, then you win.

c******o
发帖数: 1277
56
要想拿到FP最好的一面,确实要pure, pure FP根本不学要担心耦合/封装/dependency/
AOP
all non issue, no side effect, highly abstract, highly polymorphic根本从开始
就把这些东西都解决了。
但是pure FP 产生了一大堆IO/ST方面的麻烦和问题,最后只好在这边打补丁。。。搞
的编个程序,pattern比要解决的问题还麻烦。
现在我觉得还是自己掌握好,需要啥用啥。
n****1
发帖数: 1136
57
Still can not believe a senior software architect could discuss with others
with this kind of attitude.
Ok, I'm stupid and I'm happy to admit that. Please do not bother to post
more gold here.

【在 g*****g 的大作中提到】
: pointer to struct != struct. Period. Not to mention its definition is not
: declared in header => opaque pointer is a pointer to a special form of
: struct. How can these two be equal? You are so stupid it's not even funny.

g*****g
发帖数: 34805
58
FP固然有适用的范畴,比如concurrency,immutable好用,出了这几个特定的范畴作为
通用语言没啥前途。fp也不是啥新鲜事物,比C++出现得还早,要发达早发达了。弄了
几十年,到现在最大进步就是能跑在jvm上了,就能翻身了,我是不信的。

dependency/

【在 c******o 的大作中提到】
: 要想拿到FP最好的一面,确实要pure, pure FP根本不学要担心耦合/封装/dependency/
: AOP
: all non issue, no side effect, highly abstract, highly polymorphic根本从开始
: 就把这些东西都解决了。
: 但是pure FP 产生了一大堆IO/ST方面的麻烦和问题,最后只好在这边打补丁。。。搞
: 的编个程序,pattern比要解决的问题还麻烦。
: 现在我觉得还是自己掌握好,需要啥用啥。

g*****g
发帖数: 34805
59
You are wrong, and it's OK to be wrong, but you didn't want to admit it.
That's what makes you look stupid.

others

【在 n****1 的大作中提到】
: Still can not believe a senior software architect could discuss with others
: with this kind of attitude.
: Ok, I'm stupid and I'm happy to admit that. Please do not bother to post
: more gold here.

n****1
发帖数: 1136
60
车子!=车牌, 所以我在谈车子的时候,引用了一个关于车牌的wiki, 就成了混淆是非的
傻逼,以为牌子等同于车子. oh yeah!
相关主题
Scala,F#或haskell怎么用DI?如何提取一个executable的所有dependency?
关于不同类型的smart pointerOOP里面的Object其实是actor
help abt C++C语言高级就高级在指针上
进入Programming版参与讨论
n****1
发帖数: 1136
61
我很好奇, 你看到我哪个帖子说了 opaque pointer = opaque struct?
g*****g
发帖数: 34805
62
At best opaque pointer is a way to hack C and make encapsulation possible.
But encapsulation is never a feature of C, and it's never being promoted
that way. A feature is something that's nature for a language by design.

【在 n****1 的大作中提到】
: 车子!=车牌, 所以我在谈车子的时候,引用了一个关于车牌的wiki, 就成了混淆是非的
: 傻逼,以为牌子等同于车子. oh yeah!

g*****g
发帖数: 34805
63
你分明没提opaque pointer, 提了一下C也有struct然后就大谈OO特性了。正常人提
struct,不会把它跟opaque pointer等价。

【在 n****1 的大作中提到】
: 我很好奇, 你看到我哪个帖子说了 opaque pointer = opaque struct?
n****1
发帖数: 1136
64
我的原话是这样的:
"任何与FP沾边的语言, 只要function是first class citizen, 甚至包过C语言(有函数
指针), 都完全可以轻松解决dependency injection的问题"
我是把c当成一个极限情况来谈, 也没吹鼓C的opaque方案多么elegant, 只是说连C都可
以做到. 这个不矛盾吧.
如果你再纠结于 函数指针!=opaque指针的话, 咱就真没法继续谈下去了.

【在 g*****g 的大作中提到】
: At best opaque pointer is a way to hack C and make encapsulation possible.
: But encapsulation is never a feature of C, and it's never being promoted
: that way. A feature is something that's nature for a language by design.

g*****g
发帖数: 34805
65
你的原话是这样的,你如果说连C也可以用opaque pointer hack,我也不跟你计较。你
这个差得也十万八千里了。
发信人: nod101 (exchange), 信区: Programming
标 题: Re: 我来挖坑, 谈谈OOP/FP/SQL和人类思维习惯
发信站: BBS 未名空间站 (Fri Dec 20 01:23:39 2013, 美东)
FP也有自己的data type来做到encapsulation, 连C也有struct, 怎么能说是OOP独有
呢?

【在 n****1 的大作中提到】
: 我的原话是这样的:
: "任何与FP沾边的语言, 只要function是first class citizen, 甚至包过C语言(有函数
: 指针), 都完全可以轻松解决dependency injection的问题"
: 我是把c当成一个极限情况来谈, 也没吹鼓C的opaque方案多么elegant, 只是说连C都可
: 以做到. 这个不矛盾吧.
: 如果你再纠结于 函数指针!=opaque指针的话, 咱就真没法继续谈下去了.

n****1
发帖数: 1136
66
严格来说opaque pointer是你先体的. 我只是引用了一个超链接, 里面包括一串字符"
Opaque_Pointer"(还是加了下划线的).
我也没说那个链接是给出opaque struct的定义. 我给个链接, 目的不过是给个C语言封
装的例子罢了

【在 g*****g 的大作中提到】
: 你分明没提opaque pointer, 提了一下C也有struct然后就大谈OO特性了。正常人提
: struct,不会把它跟opaque pointer等价。

g*****g
发帖数: 34805
67
你还没完了,总之提encapsulation,拿C的struct做例子,就是2B行为。不如先去读读
struct的定义再来。

【在 n****1 的大作中提到】
: 严格来说opaque pointer是你先体的. 我只是引用了一个超链接, 里面包括一串字符"
: Opaque_Pointer"(还是加了下划线的).
: 我也没说那个链接是给出opaque struct的定义. 我给个链接, 目的不过是给个C语言封
: 装的例子罢了

n****1
发帖数: 1136
68
可能因为我opaque见得太多了,以为提以下struct 大家就知道我在说什么. 没说清楚很
抱歉.
在开源项目C中, 基本所有的struct都是以opaque struct形式提供api的

【在 g*****g 的大作中提到】
: 你的原话是这样的,你如果说连C也可以用opaque pointer hack,我也不跟你计较。你
: 这个差得也十万八千里了。
: 发信人: nod101 (exchange), 信区: Programming
: 标 题: Re: 我来挖坑, 谈谈OOP/FP/SQL和人类思维习惯
: 发信站: BBS 未名空间站 (Fri Dec 20 01:23:39 2013, 美东)
: FP也有自己的data type来做到encapsulation, 连C也有struct, 怎么能说是OOP独有
: 呢?

T*****u
发帖数: 7103
69
no free lunch, no free lunch
g****r
发帖数: 1589
70
说的有道理,OO语言就是太繁琐了

【在 n****1 的大作中提到】
: 版上无数大佬声称OOP比FP更加符合人类的思维方式,俺个土鳖来唱个反调.
: 所有的程序,不管采用什么模式,架构, 其最终目的都是IO+persistence, 70%以上的应
: 用仅仅是CRUD外加个包装而已. 大多数应用的persistence是tabular database, 这包
: 括mysql这类ACID数据库, 也包括big table/cassandra这类的分布式数据库. 当然也有
: OO database, 但普及率/接收度/性能都不如前者.
: 我们不妨回想在电脑诞生之前, 人类对一个复杂问题是如何建模与解决的.复杂问题千
: 奇百怪,比如生物学家要对物种进行门纲目科属种的划分, 这种划分能够体现各物种之
: 间的异同程度. 再举个例子,统计学家要做个人口普查,那就要建立个大表格,每一行都
: 对应一个人, 行中记录包括生日/性别/籍贯等等各种信息,这样我们从一个表里就可以
: 得到籍贯分布,人口年龄结构,地域与受教育程度的关联等等.

相关主题
C语言高级就高级在指针上JS就应该杜绝OOP
问个 C++到C的问题Why oop is bad?
学FP不是为了写代码, 而是为了优秀的架构.7年C的经验想转去C++开发难不难?
进入Programming版参与讨论
l******t
发帖数: 55733
71

学会用FP思考以后对用OO思考的智商上有优越感

【在 n****1 的大作中提到】
: 版上无数大佬声称OOP比FP更加符合人类的思维方式,俺个土鳖来唱个反调.
: 所有的程序,不管采用什么模式,架构, 其最终目的都是IO+persistence, 70%以上的应
: 用仅仅是CRUD外加个包装而已. 大多数应用的persistence是tabular database, 这包
: 括mysql这类ACID数据库, 也包括big table/cassandra这类的分布式数据库. 当然也有
: OO database, 但普及率/接收度/性能都不如前者.
: 我们不妨回想在电脑诞生之前, 人类对一个复杂问题是如何建模与解决的.复杂问题千
: 奇百怪,比如生物学家要对物种进行门纲目科属种的划分, 这种划分能够体现各物种之
: 间的异同程度. 再举个例子,统计学家要做个人口普查,那就要建立个大表格,每一行都
: 对应一个人, 行中记录包括生日/性别/籍贯等等各种信息,这样我们从一个表里就可以
: 得到籍贯分布,人口年龄结构,地域与受教育程度的关联等等.

m*h
发帖数: 2750
72
说的挺有意思的。
LZ可能属于新新生代的,从这一句话
“我同意FP很诡异,现阶段(也或者是永远)难以让主流所接受”
其实OO之前,FP 是主流。
a*w
发帖数: 4495
73
在OO之前的是PP,不是FP

【在 m*h 的大作中提到】
: 说的挺有意思的。
: LZ可能属于新新生代的,从这一句话
: “我同意FP很诡异,现阶段(也或者是永远)难以让主流所接受”
: 其实OO之前,FP 是主流。

q*c
发帖数: 9453
74
同意。
LOL, 作为苦逼的中国人, 年龄足够大的, 都知道小范围内的共产主义那是多么多么
的美好!那是人类能想象和实现的最美好的东西。
但是。。。一旦作为 general system 推开了, 嘿嘿, 三千万苦逼死亡的冤魂才过去
不久, 我们还没必要立刻就演示人类不断重复同样错误的特性吧?

【在 c*******9 的大作中提到】
: 开个玩笑。我觉得OO话是人类追求安定的结果,就像婚姻一样,两个人都要被个圈子捆
: 绑套牢才安心。
: 但实际上,现代婚姻在财产(相当于共享数据)上还是有不安全因素。
: FP到像共产主义,社会大同:财产可copy,按需分配;知识深度共享(pattern 高度重
: 用)。

q*c
发帖数: 9453
75
1. all bug is runtime bug
2. dynamic language的好 处是productivity
1 和 2 是互相矛盾的。

【在 p*****2 的大作中提到】
:
: FP能大大的减少代码行数是真的。从这个角度来讲是有帮助的。其他的我也说不好。项
: 目大了都不好搞,所以现在要搞SOA。

q*c
发帖数: 9453
76
为啥 OO 污染程序猿这么容易, 根本不需要人疯狂的喊叫, 一旦出现就立刻席卷天下,
而 FP 拼命的想污染, 结果哪怕有大数据这个东风的推动, 多年还是步履维艰捏?
容易被接受的东西, 就是符合人类习惯的东西。

account

【在 n****1 的大作中提到】
: 我想表达的是,OO是个人造的东西, 现在的程序猿大多被OO污染过了,所以OO思维能在[
: 程序猿]这个[人类的子集]里占大多数.
: 没被OO污染的人,或者是pre-computer时代的人,不会觉得一个能跑会跳的bank account
: 比 excel更加 intuitive

c******o
发帖数: 1277
77
最近自己试着实现
http://www.haskell.org/haskellwiki/Typeclassopedia
的所有结构 (在scala里),很奇妙,很提高
其实Typeclassopedia也不全, 在跟的还有
contravariant functor/bifunctor/profunctor/zipper/lens
同时学了一下 trampoline (可以完全避免各种recursive的stackoverflow,同时保持
immutable, no loop)
stream processing 的 pattern有
iteratee/pipe/conduit/machine其实那些牛的library (storm/spark etc.) 里都在用
各种结构之间的联系最有趣。
monad 是最powerful的,也是限制最大的。 怪不得能有monad的 type 都在库里实现了
monad 给你用。
FP的东西其实很多,很有用的也很多。
q*c
发帖数: 9453
78
汇编都能控制的好 - 只要你足够小心。
但是人满身都是弱点, 每天都必须犯错误, 好的语言就是让你极大的机会减小犯错误
。 人这种东西, 你只要有缺陷, 他就要 abuse. 这是人的本性。
空谈 “只要我们都遵守好习惯 *** " 是毫无意义的。这就合共产主义一样, 只要能
实现, 保证秒杀一切其他制度。
* 只要能实现 *。

【在 n****1 的大作中提到】
: 软件的耦合度应该是人来控制的,不是语言能解决的吧.
: C/C++程序的问题就是滥用include, 而且不注重hide implementation from API, 所以
: 编译一个.c文件可能要访问几千个.h文件.
: 解决方案就是a)注重hiding, 参见http://en.wikipedia.org/wiki/Opaque_pointer
: b)现代编译器现在有precompiled header, 能把所有头文件放到一个盒子里, 能让编译
: 时间最多小几个数量级.

q*c
发帖数: 9453
79
确实 - 省下的敲键盘的时间 * 10 都用来 debug 了,
我在用 FP 的公司, 身边80% 的人都在骂 FP. 只是小程序员没啥决定权, 都是开
始的 founder 决定的, 后面的人没啥选择, 就算这样用 java 的人也是越来越多。

【在 p*****2 的大作中提到】
:
: FP能大大的减少代码行数是真的。从这个角度来讲是有帮助的。其他的我也说不好。项
: 目大了都不好搞,所以现在要搞SOA。

q*c
发帖数: 9453
80
强迫是关键
人这种地等生物, 必须强迫。 只要有机会, 人早晚一定 abuse. 这是百万年人进化
的本性, 靠什么高手的约定 都是搞笑, 一定淹没在敌手的汪洋大海里面。
好的语言就是适当的强迫你 不干坏事。 就和民主和独裁一样
民主 long run 就赢了。 因为他能强迫你 不干 特别坏的事情。

【在 a****n 的大作中提到】
: xD
: SOA一个的好处是强迫所有user, 都要通过interfaces 来调用相关模块。

相关主题
问个过时的问题面向数据的编程与面向对象的编程
代码复用:复制粘贴是一个很好的办法,不亚于继承地址空间里的一个BYTE不能写入(是合法地址)
我刚刚学计算机,有很多问题,所以大家不要笑话水平低自学C语言-书和online resources (转载)
进入Programming版参与讨论
d****i
发帖数: 4809
81
这个对的,OO之前都是procedural唱主角,C, Fortran, Pascal, Basic, Cobol,后来
C++作为OO的广为流行的开端,然后Java, C#等等。FP从Lisp以来从来没有流行过。

【在 a*w 的大作中提到】
: 在OO之前的是PP,不是FP
q*c
发帖数: 9453
82
人类的各种规则更繁琐 ~ 红灯没车你可以走?
或者你愿意去一个红灯没车就可以闯的地方?呵呵。

【在 g****r 的大作中提到】
: 说的有道理,OO语言就是太繁琐了
n****1
发帖数: 1136
83
我看OO的限制就像70年代,各家各户的口粮都是分配好的,买个东西要写报告请求组织批
准.
其实OO才是共产主义,架构师中央集权, 计划经济, 分配任务. 其他人无脑执行, 换哪
个阿三都可以.

【在 q*c 的大作中提到】
: 人类的各种规则更繁琐 ~ 红灯没车你可以走?
: 或者你愿意去一个红灯没车就可以闯的地方?呵呵。

n****1
发帖数: 1136
84
Pure FP根本就是compiler capture 99% bugs.
拜托不要把Python/Ruby/Js之类的叫"用FP的公司".
相比Python/Ruby/Js,我还是更喜欢Java/Golang的.



【在 q*c 的大作中提到】
: 确实 - 省下的敲键盘的时间 * 10 都用来 debug 了,
: 我在用 FP 的公司, 身边80% 的人都在骂 FP. 只是小程序员没啥决定权, 都是开
: 始的 founder 决定的, 后面的人没啥选择, 就算这样用 java 的人也是越来越多。

X***o
发帖数: 125
85
FP是好东西,主要问题还是推广和效率,否则操作系统开发也FP了。正是计算技术早期
对硬件
效率的追求,造成declarative和procedural编程的大行其道,等开始解决工商业问题
的时候,危机了,抓瞎了。OOP就是来填PP的窟窿的。OOP的核心理念就是来解决软件危
机的,比较注重普通团队作业。等OOP横行霸道的时候,大学里也只能教这些相关的知
识了,而这些知识很多跟FP没多少关系。如今,计算机系最核心的数据结构与算法课有
教授pure functional data structures and algorithms的么?没有。这基本的基础都
不存在,注定FP只能是几个专家的玩具。别以为动手写了几行haskell就FP了,最简单
的,往一个表里加个元素,能讲得清楚是咋回事么?别管啥数组、链接表的实现不同啥
的,都不是一回事。FP,这世界上没几个人整的清楚。
c******o
发帖数: 1277
86
我最近研究了这么多FP/OO/Imperative. 发现OO才是那个说不清楚的。
FP的定义很清楚,明确。
1. programming with only pure function.
2. pure function means referential transparency.
3. referential transparency means you can substitute the function with its
output and the program will be exactly same as before.
你来说说啥是OO?

【在 X***o 的大作中提到】
: FP是好东西,主要问题还是推广和效率,否则操作系统开发也FP了。正是计算技术早期
: 对硬件
: 效率的追求,造成declarative和procedural编程的大行其道,等开始解决工商业问题
: 的时候,危机了,抓瞎了。OOP就是来填PP的窟窿的。OOP的核心理念就是来解决软件危
: 机的,比较注重普通团队作业。等OOP横行霸道的时候,大学里也只能教这些相关的知
: 识了,而这些知识很多跟FP没多少关系。如今,计算机系最核心的数据结构与算法课有
: 教授pure functional data structures and algorithms的么?没有。这基本的基础都
: 不存在,注定FP只能是几个专家的玩具。别以为动手写了几行haskell就FP了,最简单
: 的,往一个表里加个元素,能讲得清楚是咋回事么?别管啥数组、链接表的实现不同啥
: 的,都不是一回事。FP,这世界上没几个人整的清楚。

s***o
发帖数: 2191
87
大牛比较一下spec2跟scalatest吧。你们为什么选用spec2,还有没有其他比较好的选
择?

its

【在 c******o 的大作中提到】
: 我最近研究了这么多FP/OO/Imperative. 发现OO才是那个说不清楚的。
: FP的定义很清楚,明确。
: 1. programming with only pure function.
: 2. pure function means referential transparency.
: 3. referential transparency means you can substitute the function with its
: output and the program will be exactly same as before.
: 你来说说啥是OO?

c*******9
发帖数: 9032
88
看了一小段haskell road to logic, 感觉fp清淅简炼完美。不过多数人不喜欢精简,
就像多数人看烂的透顶的网络小说,也不愿意翻翻经典著作。

its

【在 c******o 的大作中提到】
: 我最近研究了这么多FP/OO/Imperative. 发现OO才是那个说不清楚的。
: FP的定义很清楚,明确。
: 1. programming with only pure function.
: 2. pure function means referential transparency.
: 3. referential transparency means you can substitute the function with its
: output and the program will be exactly same as before.
: 你来说说啥是OO?

c******o
发帖数: 1277
89
specs2 play 支持的好。
其实都可以,我们开始上specs2后来换就麻烦,以后可能会换个更好 TDD的。

【在 s***o 的大作中提到】
: 大牛比较一下spec2跟scalatest吧。你们为什么选用spec2,还有没有其他比较好的选
: 择?
:
: its

g*****g
发帖数: 34805
90
encapsulation, inheritance, polymorphism. 有啥说不清楚的?

its

【在 c******o 的大作中提到】
: 我最近研究了这么多FP/OO/Imperative. 发现OO才是那个说不清楚的。
: FP的定义很清楚,明确。
: 1. programming with only pure function.
: 2. pure function means referential transparency.
: 3. referential transparency means you can substitute the function with its
: output and the program will be exactly same as before.
: 你来说说啥是OO?

相关主题
C语言,结构体转字符串。简单的难题关于不同类型的smart pointer
{C语言}请教如何通过变量访问结构体内的各个属性help abt C++
Scala,F#或haskell怎么用DI?如何提取一个executable的所有dependency?
进入Programming版参与讨论
g*****g
发帖数: 34805
91
Pure FP根本就写不了啥像样的程序。以前举过的例子,两个FP最牛的大佬研究了半天
,才整明白了一个简单问题用fp怎么解决。

【在 n****1 的大作中提到】
: Pure FP根本就是compiler capture 99% bugs.
: 拜托不要把Python/Ruby/Js之类的叫"用FP的公司".
: 相比Python/Ruby/Js,我还是更喜欢Java/Golang的.
:
: 。

g*****g
发帖数: 34805
92
人是用scala的。

【在 n****1 的大作中提到】
: Pure FP根本就是compiler capture 99% bugs.
: 拜托不要把Python/Ruby/Js之类的叫"用FP的公司".
: 相比Python/Ruby/Js,我还是更喜欢Java/Golang的.
:
: 。

g*****g
发帖数: 34805
93
The cost of 1 production bug is at least 100 bugs at development time.

【在 q*c 的大作中提到】
: 1. all bug is runtime bug
: 2. dynamic language的好 处是productivity
: 1 和 2 是互相矛盾的。

g*****g
发帖数: 34805
94
我老说过很多次的短板原理,软件的质量是由最弱的一个工程师决定的。你每个人要求
都很高,出问题的概率就高。

【在 q*c 的大作中提到】
: 强迫是关键
: 人这种地等生物, 必须强迫。 只要有机会, 人早晚一定 abuse. 这是百万年人进化
: 的本性, 靠什么高手的约定 都是搞笑, 一定淹没在敌手的汪洋大海里面。
: 好的语言就是适当的强迫你 不干坏事。 就和民主和独裁一样
: 民主 long run 就赢了。 因为他能强迫你 不干 特别坏的事情。

c******o
发帖数: 1277
95
那么少到哪一个就不是oo 了呢?
很多人现在不用inheritance,那还是不是OO 呢?
其实AOP是break encapsulation的。
polymorphism这十几年方法也改的不少。
你要是看看各种定义,OO真没有什么精确的定义。object就不好定义。
FP倒是有精确的没有歧义的定义。
这个不是大问题,但是也说明OO其实是个筐,什么都往里装。

【在 g*****g 的大作中提到】
: encapsulation, inheritance, polymorphism. 有啥说不清楚的?
:
: its

c******o
发帖数: 1277
96
听说你也做scala? 有时间交流一下。
其实我以前也半信半疑。
但是http://www.manning.com/bjarnason/
这本书然我觉得FP是比现在的java编程方法好多了。
你可以看看。
这书的作者是 scalaz的作者,在S&P Capital IQ工作。
他们吧S&P Capital IQ的java infrastructure改成scala的(不清楚是不是全部)了,
而且效果很好。



【在 q*c 的大作中提到】
: 确实 - 省下的敲键盘的时间 * 10 都用来 debug 了,
: 我在用 FP 的公司, 身边80% 的人都在骂 FP. 只是小程序员没啥决定权, 都是开
: 始的 founder 决定的, 后面的人没啥选择, 就算这样用 java 的人也是越来越多。

b***e
发帖数: 1419
97
这个说过了。常用type system其实能抓的bug是非常有限的。有些牛逼的type system
能理论上抓所有的bug,但那不是凡人能搞清楚怎么写程序的。

【在 n****1 的大作中提到】
: Pure FP根本就是compiler capture 99% bugs.
: 拜托不要把Python/Ruby/Js之类的叫"用FP的公司".
: 相比Python/Ruby/Js,我还是更喜欢Java/Golang的.
:
: 。

b***e
发帖数: 1419
98
从type theory的角度上讲,existential types的确是封装的本质。

golang

【在 n****1 的大作中提到】
: FP也有自己的data type来做到encapsulation, 连C也有struct, 怎么能说是OOP独有
: 呢?
: 早期的C++/java类的OOP, 所做的就是随便划分猫猫狗狗的类型,做到type
: inheritance, 用来减少duplicate code而已。
: 后来这帮人终于看到缺点了,开始提倡interface, 反对inheritance了。 譬如golang
: 就是完全没有inheritance的。
: 其实就算在OOP里面,不同时代的风格也是完全不同。 如果OO思想真那么自然, 那猴子
: 们为啥要那么长时间才理解到inheritance is bad?

g****r
发帖数: 1589
99
不是所有的规则都是有用的,很多繁文缛节其实是没必要的
OO最蛋疼的就是要写代码检查object是不是null,随便写个函数,就得写若干这种
check,FP就完全不需要写这种东西

【在 q*c 的大作中提到】
: 人类的各种规则更繁琐 ~ 红灯没车你可以走?
: 或者你愿意去一个红灯没车就可以闯的地方?呵呵。

t*****n
发帖数: 4908
100
你那里老了?40都不到,版上50的CEO都有。还是老实点好。

【在 g*****g 的大作中提到】
: 我老说过很多次的短板原理,软件的质量是由最弱的一个工程师决定的。你每个人要求
: 都很高,出问题的概率就高。

相关主题
OOP里面的Object其实是actor学FP不是为了写代码, 而是为了优秀的架构.
C语言高级就高级在指针上JS就应该杜绝OOP
问个 C++到C的问题Why oop is bad?
进入Programming版参与讨论
n****1
发帖数: 1136
101
虚心请教下, 啥问题?

【在 g*****g 的大作中提到】
: Pure FP根本就写不了啥像样的程序。以前举过的例子,两个FP最牛的大佬研究了半天
: ,才整明白了一个简单问题用fp怎么解决。

b***e
发帖数: 1419
102
过了,过了。OO这个可以有。

【在 p*****2 的大作中提到】
: 今天跟组里讨论了,以后拒绝用OO来写code了。
c*******9
发帖数: 9032
103
这看什么程序了。用户界面这种东西很容易看到bug,不需要编译阶段查错很强,太弱
也不好(像javascript)。objective c这样的做用户界面就比较合适,刚柔相济。

【在 g*****g 的大作中提到】
: The cost of 1 production bug is at least 100 bugs at development time.
1 (共1页)
进入Programming版参与讨论
相关主题
Scala,F#或haskell怎么用DI?JS就应该杜绝OOP
关于不同类型的smart pointerWhy oop is bad?
help abt C++7年C的经验想转去C++开发难不难?
如何提取一个executable的所有dependency?问个过时的问题
OOP里面的Object其实是actor代码复用:复制粘贴是一个很好的办法,不亚于继承
C语言高级就高级在指针上我刚刚学计算机,有很多问题,所以大家不要笑话水平低
问个 C++到C的问题面向数据的编程与面向对象的编程
学FP不是为了写代码, 而是为了优秀的架构.地址空间里的一个BYTE不能写入(是合法地址)
相关话题的讨论汇总
话题: fp话题: oo话题: opaque话题: oop话题: struct