Redian新闻
>
我来挖坑, 谈谈OOP/FP/SQL和人类思维习惯
avatar
我来挖坑, 谈谈OOP/FP/SQL和人类思维习惯# Programming - 葵花宝典
s*0
1
Condo,房价20万,租金可以cover hoa, tax和mortgage(30年,20% down)。这个账
是不是这样算的,4万本金,房子自己养自己,30年之后20万变成自己的,等于利润16
万,等于每年13%的利润?这个房子的好处是好租,租住人群比较单纯,而且基本不会
有空置期。我会不会算错或者考虑太简单了?
avatar
C*e
2
替国内同学急问, 多谢!
avatar
e*u
3
白羊座
这是第一个星座,所以第一对这个星座有着非比寻常的意义。即使是最温和自卑
的白羊座,内心深处,也有着凡事争先的欲望。但与其它星座不同的是,争取第一对白
羊座而言,是目的而非手段,哪怕是毫无意义或者非常表面化的第一。这也是这个春天
星座孩子气的最可靠的证明。白羊座的孩子气还体现在,他们毫无城府的气质和几乎从
不掩饰的自私之中。如果你喜欢一个白羊座,你必须要面对的一个事实是,他们在热情
消褪之时,是从不顾及别人的。这个星座对道德的理解,仅限于一时冲动的义气和最自
然基本的亲情。
白羊座是艺术家辈出的星座,我想,单纯和激情是造就这种情况的根源。卓别林
,格列高利派克,马龙白兰度,成龙。。。。还有一个将白羊座的特征达到的极致的,
梵高。想最深入的理解白羊座的人,就去理解梵高吧。鲜明,纯粹,热情,这就是白羊
座的本质。
白羊座的男人,起码从表面看,最具备男子气概,这和它的守护星——火星有关
。但实际上,白羊座的男人在社会生活中都比较胆小。我能给出的解释是,现代复杂的
社会环境对单纯直接的气质有着天生的压抑。除非,在他们被激怒的时候。一个被激怒
的白羊是连天蝎座
avatar
o*n
4
像ipad,AT&T提供$30的unlimited data plan,有没有给smartphone(不带voice plan
号码)的这种plan阿?
我问的原因是觉得两个人都给手机加办$30每月的data plan有点浪费,因为平时真的没
啥用,只是偶尔出差时有用,如果有一个只有data plan没有和voice plan绑定的
smartphone,就可以只办一个plan,两个人都可以用。
avatar
n*1
5
版上无数大佬声称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时代人类思维方式.
avatar
s*8
6
你要算复利,不能算单利啊。所以是5.5%. 1.055^30=5.
avatar
A*i
7
成龙这种男人还叫艺术家..嗯,对,这个.这个.表演是第八类艺术.

【在 e******u 的大作中提到】
: 白羊座
: 这是第一个星座,所以第一对这个星座有着非比寻常的意义。即使是最温和自卑
: 的白羊座,内心深处,也有着凡事争先的欲望。但与其它星座不同的是,争取第一对白
: 羊座而言,是目的而非手段,哪怕是毫无意义或者非常表面化的第一。这也是这个春天
: 星座孩子气的最可靠的证明。白羊座的孩子气还体现在,他们毫无城府的气质和几乎从
: 不掩饰的自私之中。如果你喜欢一个白羊座,你必须要面对的一个事实是,他们在热情
: 消褪之时,是从不顾及别人的。这个星座对道德的理解,仅限于一时冲动的义气和最自
: 然基本的亲情。
: 白羊座是艺术家辈出的星座,我想,单纯和激情是造就这种情况的根源。卓别林
: ,格列高利派克,马龙白兰度,成龙。。。。还有一个将白羊座的特征达到的极致的,

avatar
l*e
8
有那种接笔记本的3G上网卡!
avatar
n*1
9
其实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", 有一大堆资料.
avatar
t*t
10
一种叫做insurance的东西被忽略了?小钱也是钱啊。
avatar
e*u
11
绝对演技派啊,八卦不挖出那些事,谁不以为他是绝世好男人啊
同理,岳不群也是著名表演艺术家噻

【在 A***i 的大作中提到】
: 成龙这种男人还叫艺术家..嗯,对,这个.这个.表演是第八类艺术.
avatar
o*n
12
我知道,还有netbook的,但1是就算是netbook也太大了些,2是这些都是有limited比
如250MB的,不像smartphone和voice plan绑定的data plan都是unlimited。

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

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

avatar
l*r
14
add repair and maintenance cost.
avatar
p*m
15
搞sero吧,又出来了
弄个wifi router什么都解决了
avatar
n*1
16
说些我对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能扬长
避短.
avatar
f*c
17
add 8% management cost as well
avatar
s*i
18
恩,sd那个link是工作的

【在 p*******m 的大作中提到】
: 搞sero吧,又出来了
: 弄个wifi router什么都解决了

avatar
T*x
19
我觉得你谈的主要是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给出一

avatar
x*2
20
还要除去每年3.5%的通胀率。
avatar
l*u
21
Link, Please!

【在 s*****i 的大作中提到】
: 恩,sd那个link是工作的
avatar
p*2
22
我基本能不用OO就不用OO,我感觉什么都OO的思维很恶心。
avatar
w*n
23
还有房子贬值的可能
avatar
s*i
24
前面发了

【在 l****u 的大作中提到】
: Link, Please!
avatar
n*1
25
不同意这个正交观点
由于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的影响,

avatar
f*8
26
good

16

【在 s********0 的大作中提到】
: Condo,房价20万,租金可以cover hoa, tax和mortgage(30年,20% down)。这个账
: 是不是这样算的,4万本金,房子自己养自己,30年之后20万变成自己的,等于利润16
: 万,等于每年13%的利润?这个房子的好处是好租,租住人群比较单纯,而且基本不会
: 有空置期。我会不会算错或者考虑太简单了?

avatar
o*n
27
sd是谁?不好意思,我初来乍到,刚才考古了一下sero,是个好的东西。我google出来
的都是2008年的一些办理办法,现在的方法还是一样么?去店里要个email,然后去这
个link?
http://delivery.sprint.com/m/p/nxt/epc/epclanding.asp
多谢帮忙!

【在 s*****i 的大作中提到】
: 恩,sd那个link是工作的
avatar
l*s
28
very interesting!
avatar
h*n
29
房子也有增值的可能。还要考虑每年有无rental income tax要交。

【在 w***n 的大作中提到】
: 还有房子贬值的可能
avatar
o*n
30
为什么我在我发的那个link下plan details里没看到$30的plan?
http://a676.g.akamaitech.net/f/676/773/12h/images.delivery.net/cm50content/sprint/eprp/EPRP.html

【在 o**n 的大作中提到】
: sd是谁?不好意思,我初来乍到,刚才考古了一下sero,是个好的东西。我google出来
: 的都是2008年的一些办理办法,现在的方法还是一样么?去店里要个email,然后去这
: 个link?
: http://delivery.sprint.com/m/p/nxt/epc/epclanding.asp
: 多谢帮忙!

avatar
p*2
31

最后说下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)

avatar
s*u
32

Landlords can claim depreciation cost on their income tax returns.
Factoring that in, 楼主 would not need to pay any tax on his/her
rental income, especially when this condo does not generate
a positive free cash flow.

【在 h***n 的大作中提到】
: 房子也有增值的可能。还要考虑每年有无rental income tax要交。
avatar
n*1
34
我记得二爷是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的思维很恶心。
avatar
h*n
35
问一个问题,房子卖掉时这些depreciation是不是要交税交回来?

【在 s********u 的大作中提到】
:
: Landlords can claim depreciation cost on their income tax returns.
: Factoring that in, 楼主 would not need to pay any tax on his/her
: rental income, especially when this condo does not generate
: a positive free cash flow.

avatar
c*e
36
可以去eBay买别人转让的sero。
我有一条sero线不准备要了,$80转让,有兴趣可以联系我

【在 o**n 的大作中提到】
: 看来现在的sero data plan确实变成$59.99了,那就没什么意思了。唉,没赶上好时候
: 阿。

avatar
p*2
37

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.

avatar
r*e
38
抵税的时候是regular rate,卖房的时候是capital gain rate。

【在 h***n 的大作中提到】
: 问一个问题,房子卖掉时这些depreciation是不是要交税交回来?
avatar
k*e
39
给个link吧?

【在 s*****i 的大作中提到】
: 恩,sd那个link是工作的
avatar
r*n
40
我认为还是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, 但普及率/接收度/性能都不如前者.
: 我们不妨回想在电脑诞生之前, 人类对一个复杂问题是如何建模与解决的.复杂问题千
: 奇百怪,比如生物学家要对物种进行门纲目科属种的划分, 这种划分能够体现各物种之
: 间的异同程度. 再举个例子,统计学家要做个人口普查,那就要建立个大表格,每一行都
: 对应一个人, 行中记录包括生日/性别/籍贯等等各种信息,这样我们从一个表里就可以
: 得到籍贯分布,人口年龄结构,地域与受教育程度的关联等等.

avatar
s*u
41
可以做一个1031 exchange, trade up 成更好的自住房。 可以规避这个 depreciation
recapture tax

【在 h***n 的大作中提到】
: 问一个问题,房子卖掉时这些depreciation是不是要交税交回来?
avatar
k*g
43
Procedural Programming 才是符合人类思维方式。人类工作方式本来就是 Spaghetti
code。
另一种符合人类思维方式的编程方式是 actor model。对应西方独立思想人格。
avatar
c*e
44
1031不能自住

depreciation

【在 s********u 的大作中提到】
: 可以做一个1031 exchange, trade up 成更好的自住房。 可以规避这个 depreciation
: recapture tax

avatar
l*o
45
哥当年搞了两条线 结果现在啥好手机都换不了
有得有失...

【在 o**n 的大作中提到】
: 看来现在的sero data plan确实变成$59.99了,那就没什么意思了。唉,没赶上好时候
: 阿。

avatar
c*9
46
Procedural Programming --原始社会。

Spaghetti

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

avatar
s*a
47
这个1031只是一个tax-deferred, not tax free,总有一天要交出去的吧?

depreciation

【在 s********u 的大作中提到】
: 可以做一个1031 exchange, trade up 成更好的自住房。 可以规避这个 depreciation
: recapture tax

avatar
p*2
48

Spaghetti
顶这个。

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

avatar
f*8
49
操作上是否有难度,比如是否两个transactions要差不多同时间close?

【在 s********a 的大作中提到】
: 这个1031只是一个tax-deferred, not tax free,总有一天要交出去的吧?
:
: depreciation

avatar
a*n
50
不同的人思维不一样,不能指望一个项目组的人都和你一样,符合大多数人思维的东西
才是好东西。
avatar
h*g
51
recaptured depreciation 是25%的税,比capital gain高

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

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

avatar
s*u
53
有loophole. 出租两年以后可以convert 成自住房。 我的reference 是 wall street
journal real estate 专栏作家 David Crook 的书
complete real-estate investor guidebook

【在 c*******e 的大作中提到】
: 1031不能自住
:
: depreciation

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

account

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

avatar
s*u
55
有loophole. 出租两年以后可以convert 成自住房。 我的reference 是 wall street
journal real estate 专栏作家 David
Crook 的书
complete real-estate investor guidebook

【在 c*******e 的大作中提到】
: 1031不能自住
:
: depreciation

avatar
k*n
56
靠。。这个版又开始来搞剑宗与气宗活动了。。
avatar
s*u
57
作为自住房卖出的话, married couple 50 万以内利润不缴税

【在 s********a 的大作中提到】
: 这个1031只是一个tax-deferred, not tax free,总有一天要交出去的吧?
:
: depreciation

avatar
p*2
58
今天跟组里讨论了,以后拒绝用OO来写code了。
avatar
t*t
59
能不能简单讲讲?convert 自住房是说自己要去住?那之前住的房子呢,出租?要住多
久才行?

street

【在 s********u 的大作中提到】
: 有loophole. 出租两年以后可以convert 成自住房。 我的reference 是 wall street
: journal real estate 专栏作家 David
: Crook 的书
: complete real-estate investor guidebook

avatar
c*o
60
这个问题时你们还用imperative 么?其实OO和FP 大部分不冲突。
如果不用,难道只用 IO/ST monad?

【在 p*****2 的大作中提到】
: 今天跟组里讨论了,以后拒绝用OO来写code了。
avatar
M*s
61
-----
这个应该不是 loophole,而是自己假装忘了以前出租的事实吧?
-----
似乎,正确的方法应该是,可以转成自住房,但是卖自住房时,再把以前的
depreciation recapture 补回来。
-----
这本书真地这样介绍 loophole?那也未必可信了。
-----

street

【在 s********u 的大作中提到】
: 有loophole. 出租两年以后可以convert 成自住房。 我的reference 是 wall street
: journal real estate 专栏作家 David
: Crook 的书
: complete real-estate investor guidebook

avatar
p*2
62

用imperative

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

avatar
t*h
63
如果cash flow是正的,那么基本可以搞。
cash flow = gross rents - maintenance - property management commision -
Vancancy Allowance - insurance - property tax - mortgage - PMI (if LTV > 80%)
bottomline 就是cash flow >= 0
这是做投资房的第一个要素要参考的,决定了你入场的一瞬间是就能有利润
第二个要素就是appreciation,在保证了cash flow为正的情况下,可以去追求高
appreciation的地区的房子。但是appreciation 通常和 cash flow是负相关,这个自
己要做一个取舍,看自己的投资风格

16

【在 s********0 的大作中提到】
: Condo,房价20万,租金可以cover hoa, tax和mortgage(30年,20% down)。这个账
: 是不是这样算的,4万本金,房子自己养自己,30年之后20万变成自己的,等于利润16
: 万,等于每年13%的利润?这个房子的好处是好租,租住人群比较单纯,而且基本不会
: 有空置期。我会不会算错或者考虑太简单了?

avatar
d*n
64
下面这句真不敢苟同。另外OO符合大部分人思维不觉得有什么好争议的。
--所有的程序,不管采用什么模式,架构, 其最终目的都是IO+persistence, 70%以上的应
用仅仅是CRUD外加个包装而已.
不过呢,这么瞎聊聊我觉得也挺有意思的,还是得鼓励一下
avatar
t*h
65
更准确的说是,在你出售的当天算起,往前算,前5年之中,如果累计有两年时间,这
个房子是作为你的primary residence,那么,这个房子出售所有获得的利润的25万(
单身)或者50万(married)是不用交税的。有些人说这个是loophole,可以算是吧。
这个是congress给house owner的一个很大的tax benefit,不知道是否以后会改变。
另一个解决办法,如果不用这个 25万/50万自住屋的tax benefit。那么是可以做1031
"like-kind" property exchange的。这个就不用claim自住了,可以出租屋换出租屋(
land,comerical也行)

street

【在 s********u 的大作中提到】
: 有loophole. 出租两年以后可以convert 成自住房。 我的reference 是 wall street
: journal real estate 专栏作家 David
: Crook 的书
: complete real-estate investor guidebook

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

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

avatar
t*h
67
在第一个房子卖出之后的45天必须identify你要买的房子,卖出房子的第180天必须
close要买的房子

【在 f***8 的大作中提到】
: 操作上是否有难度,比如是否两个transactions要差不多同时间close?
avatar
n*1
68
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需求,实现自动, 只有未来文明高度发展之后才会兴盛,那时候按
: 需分配,只有想不到,没有做不到。

avatar
t*h
69
1031 是tax-defer,但是如果一直用1031 rollover depreciation,一直到死。
如果你在你死的前一天,把你最后拥有的最后的那个很大的property(properties),
这是carry了你一生所有投资房的depreciation的那个(那些)卖掉,所有deprecation
write-off 是要参与capital gain计算的,你是要pay capital gain tax的。
但是如果你不卖,一直hold到死,那么这些depreciation write-off会被重置,所有你
拥有的property会用市场价pass给你的继承人。这个才是真正的巨大的loophole

【在 s********a 的大作中提到】
: 这个1031只是一个tax-deferred, not tax free,总有一天要交出去的吧?
:
: depreciation

avatar
p*2
70

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?

avatar
M*t
71
祝纛满旗风
楼暗攒倡妇
主人熊轼任
心黑中先焦
想得读书窗
事将名共易
成贤必念旧
avatar
a*n
72
我理解OO主要目的是dependency management,
没用FP做过大项目, 不过想知道FP 怎样管理dependencies?
avatar
n*n
73
没看懂

deprecation

【在 t**********h 的大作中提到】
: 1031 是tax-defer,但是如果一直用1031 rollover depreciation,一直到死。
: 如果你在你死的前一天,把你最后拥有的最后的那个很大的property(properties),
: 这是carry了你一生所有投资房的depreciation的那个(那些)卖掉,所有deprecation
: write-off 是要参与capital gain计算的,你是要pay capital gain tax的。
: 但是如果你不卖,一直hold到死,那么这些depreciation write-off会被重置,所有你
: 拥有的property会用市场价pass给你的继承人。这个才是真正的巨大的loophole

avatar
p*2
74

也没有用过procedural?

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

avatar
a*n
75
12年前用asm/c做项目, 不过感觉没什么好办法manage dependency

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

avatar
p*2
76

耦合度太高?

【在 a****n 的大作中提到】
: 12年前用asm/c做项目, 不过感觉没什么好办法manage dependency
avatar
a*n
77
大概130万行代码, 耦合很高, 编译一次的7~8个小时, 虽然分了20多个模块, 但
是dependencies 像是蜘蛛网。。。另外还有DLL 版本问题(DLL Hell)
OO 的优点是提供了一系列设计原则, 可以manage/revert dependencies,
没怎么接触过FP的大项目, 想知道FP如何处理类似问题。
avatar
n*1
78
你是说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?

avatar
p*2
79

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

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

avatar
a*n
80
我说的是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?

avatar
g*g
81
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?

avatar
p*2
82

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

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

avatar
g*g
83
这恰恰是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?

avatar
n*1
84
软件的耦合度应该是人来控制的,不是语言能解决的吧.
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如何处理类似问题。

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

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

avatar
n*1
86
你在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

avatar
a*n
87
这个只是一些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, 能把所有头文件放到一个盒子里, 能让编译
: 时间最多小几个数量级.

avatar
p*2
88

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

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

avatar
n*1
89
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

avatar
a*n
90
准确的说, 为什么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了,连基础老本都忘了

avatar
a*n
91
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.

avatar
n*1
92
比较新的开源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

avatar
a*n
93
xD
SOA一个的好处是强迫所有user, 都要通过interfaces 来调用相关模块。

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

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

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

avatar
n*1
95
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 来调用相关模块。

avatar
g*g
96
你丫脑残了就打补丁,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了,连基础老本都忘了

avatar
n*1
97
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
: 等价了?还有脸谈基础知识。

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

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

avatar
g*g
99
你丫吹到天上去,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?

avatar
n*1
100
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

avatar
g*g
101
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.

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

avatar
g*g
104
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比要解决的问题还麻烦。
: 现在我觉得还是自己掌握好,需要啥用啥。

avatar
g*g
105
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.

avatar
n*1
106
车子!=车牌, 所以我在谈车子的时候,引用了一个关于车牌的wiki, 就成了混淆是非的
傻逼,以为牌子等同于车子. oh yeah!
avatar
n*1
107
我很好奇, 你看到我哪个帖子说了 opaque pointer = opaque struct?
avatar
g*g
108
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!

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

【在 n****1 的大作中提到】
: 我很好奇, 你看到我哪个帖子说了 opaque pointer = opaque struct?
avatar
n*1
110
我的原话是这样的:
"任何与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.

avatar
g*g
111
你的原话是这样的,你如果说连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指针的话, 咱就真没法继续谈下去了.

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

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

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

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

avatar
n*1
114
可能因为我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独有
: 呢?

avatar
T*u
115
no free lunch, no free lunch
avatar
g*r
116
说的有道理,OO语言就是太繁琐了

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

avatar
l*t
117

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

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

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

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

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

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

avatar
q*c
121
1. all bug is runtime bug
2. dynamic language的好 处是productivity
1 和 2 是互相矛盾的。

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

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

account

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

avatar
c*o
123
最近自己试着实现
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的东西其实很多,很有用的也很多。
avatar
q*c
124
汇编都能控制的好 - 只要你足够小心。
但是人满身都是弱点, 每天都必须犯错误, 好的语言就是让你极大的机会减小犯错误
。 人这种东西, 你只要有缺陷, 他就要 abuse. 这是人的本性。
空谈 “只要我们都遵守好习惯 *** " 是毫无意义的。这就合共产主义一样, 只要能
实现, 保证秒杀一切其他制度。
* 只要能实现 *。

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

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

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

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

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

avatar
d*i
127
这个对的,OO之前都是procedural唱主角,C, Fortran, Pascal, Basic, Cobol,后来
C++作为OO的广为流行的开端,然后Java, C#等等。FP从Lisp以来从来没有流行过。

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

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

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

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



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

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

avatar
s*o
133
大牛比较一下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?

avatar
c*9
134
看了一小段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?

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

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

avatar
g*g
136
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?

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

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

avatar
g*g
138
人是用scala的。

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

avatar
g*g
139
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 是互相矛盾的。

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

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

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

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

avatar
c*o
142
听说你也做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 的人也是越来越多。

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

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

avatar
b*e
144
从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?

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

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

avatar
t*n
146
你那里老了?40都不到,版上50的CEO都有。还是老实点好。

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

avatar
n*1
147
虚心请教下, 啥问题?

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

avatar
b*e
148
过了,过了。OO这个可以有。

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

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