阅读更多

6顶
4踩

编程语言

转载新闻 设计模式已经陨落了?

2014-03-11 11:47 by 副主编 WnouM 评论(40) 有18630人浏览
如果你是个程序员,在阅读下面的段落之前先写下你的答案吧。如果你现在坐在一个程序员旁边吗?如果是的话,那么在你读下面的段落之前,有一个简单的实验。让他们到一边去,问问他们两个问题并记录下答案。首先问他们“什么是设计模式?”然后再问“说出你能回忆的设计模式的名字。”

设计模式是用来解决软件开发中重复出现的问题,久经考验的方法。当程序员遇到反复出现的问题时,他们通过应用合适的设计模式来解决问题。设计模式是由最聪明的电脑科学家设计出来的,历经了时间的考验,它们被认为是好的方法。使用设计模式,程序员不需要自己想方法去解决所有的编程难题,他们可以使用设计模式。设计模式节约开发时间,能开发出更灵活,可靠和健壮的软件。设计模式重用了概念的想法,解决方法的设计理念,考虑了他人的使用。它是非常棒的想法,让许多事情更合理了。

但事实是:设计模式已经(几乎)陨落了。

设计模式应用的成功的先决条件是程序员在遇到重复出现的问题时能够意识到它们的存在。但如果程序员不能意识到问题的存在,他们将不会知道已经有人解决过类似的问题了,也不会知道还有设计模式的存在。他们不是应用设计模式来解决这些普遍存在的问题,而是闭门造车,用自己的方法来解决问题。他们花了更多的时间却写出可靠性差的代码。

设计模式的陨落是因为大部分程序员不足够了解它们,要解决问题时不能意识那些重复出现的问题的存在。如果他们不能意识到问题,他们就不能用设计模式来解决问题。

在面试中我要求过几千个程序员解释设计模式背后的概念,让他们写下每个他们能够回忆起的设计模式的名字。但相当多的程序员根本就不知道什么是设计模式,或者他们的相关知识太薄弱,以致于就算碰到问题时,他们的知识也不够处理这些问题。很少的程序员可以说出他们对设计模式的理解。非常少的人知道多于四五种。更少的人可以描述出设计模式能够解决的问题。这意味着大多数程序员在日常工作中遇到一些普遍的问题时,他们会用自己的方法去解决,而不是采用很普遍的解决方法(设计模式)。

不了解设计模式的程序员们当读到用设计模式开发的代码时会感到迷惑。他们不能够理解其他程序员为什么要用这种方法来解决问题。他们面对这样一些非常普遍的问题时或者遇见设计模式的代码时,显得笨手笨脚。

设计模式也是一种通用语——一种程序员皆知的语言,可以用术语来阐述复杂的问题,便于让其他人明白。但设计模式已经陨落了;你不能用一种你不懂的语言来交流,大部分程序员都不能作为一种概念来使用它们。设计模式是一种很少人会说的通用语。

但设计模式还没有完全衰退,许多聪明的程序员仍然知道它们,使用它们。这些人是个例外。正是他们努力推广的结果,才能让MVC这个设计模式让所有程序员都熟知,就算是对设计模式知之甚少的人都熟知。

设计模式已经衰退了是因为大部分程序员没有意识到它在计算机科学中的重要性。许多雇主会考察应聘者对设计模式知识的理解。如果你是一个专业的程序员,你应该对设计模式有深入的理解。你应该记住设计模式能够处理的问题,这样你碰到它们时,你能快速识别出它们。没有理由找捷径,也不能对它只一知半解。去成为一个设计模式方面的专家吧——努力学习,成为真正的专家。我们需要更多的程序员成为设计模式方面的专家。如果有了足够的专家,可能有一天我们可以说设计模式是一个成功。

原文链接: supercoders   翻译: 伯乐在线 - 唐小娟
译文链接: http://blog.jobbole.com/21578/
来自: 伯乐在线
6
4
评论 共 40 条 请登录后发表评论
40 楼 white_crucifix 2014-03-21 14:18
hooluupig 写道
white_crucifix 写道
@hooluupig
对不起,erlang在whatsapp中担任的是基础设施系统的角色,不要看个新闻标题就以为自己什么都了解。很多开源系统都是一些公司将内部基础设施剥离出来然后开源的,就像facebook的cassandra。
像你这样的java程序员,学了几天lisp,看了一些网上流传的论点,觉得标新立异,又以为别人不熟悉甚至不知道Lisp,就大放厥词。

你在说你自己,我没这么无聊。


哈哈,算了算了  
39 楼 hooluupig 2014-03-21 14:16
white_crucifix 写道
@hooluupig
对不起,erlang在whatsapp中担任的是基础设施系统的角色,不要看个新闻标题就以为自己什么都了解。很多开源系统都是一些公司将内部基础设施剥离出来然后开源的,就像facebook的cassandra。
像你这样的java程序员,学了几天lisp,看了一些网上流传的论点,觉得标新立异,又以为别人不熟悉甚至不知道Lisp,就大放厥词。

你在说你自己,我没这么无聊。
38 楼 white_crucifix 2014-03-21 14:03
@hooluupig
对不起,erlang在whatsapp中担任的是基础设施系统的角色,不要看个新闻标题就以为自己什么都了解。很多开源系统都是一些公司将内部基础设施剥离出来然后开源的,就像facebook的cassandra。
像你这样的java程序员,学了几天lisp,看了一些网上流传的论点,觉得标新立异,又以为别人不熟悉甚至不知道Lisp,就大放厥词。
37 楼 hooluupig 2014-03-21 13:44
另外我再声明一下:我这里说的是设计模式的缺点,我的观点已经阐述的很清楚了。我自始至终没有说过非oop,FP就是完美的,没有缺点的,事实上他们自身的缺点还有不少,但这与本文无关。我之所以点出来是因为总有人把自己的主观臆断强加在我的身上,给我扣帽子。
36 楼 hooluupig 2014-03-21 13:41
white_crucifix 写道
引用
大型工业化编程中FP依然可以,erlang就是例子 请举例,哪个系统
这还要举例子,天呐。whatsapp,爱立信,淘宝。
引用
factory能套个10几层
请举例,哪家公司这么做
哪家公司都这么做,最简单直接的办法,就去自己去看java api。
引用
oop.......可是这也是最不靠谱的,所以软件的可靠性也是想比其他工程最被诟病的。
请举例
除了会定义,你还会什么?
我反问你还会什么?你到底懂不懂什么叫soundness和correctness。
引用
很多脚本语言例如perl,ruby都有函数式编程的影子在里面
你以为perl ruby php在做web的时候都是用函数式吗?
原来你对函数式就是这么理解的,也难怪。
引用
异步回调这种10多年的古老的callback这种烂玩意你也好意思说node.js推向高潮
js(由nodejs主导)成为2013最热门语言之一,其主导的异步回调也被讨论的最热烈,2012年之前有人讨论过吗?理性点,不要睁眼说瞎话.

笑了,callback可能比你年纪都大。
引用
node.js的开发者正在搞类似于Go,erlang的这种并发模型,替换掉callback是迟早的
YY?
自己去twitter上follow node.js的开发者。
引用
你是在维护某个东西,我懂,但世界在变,你打下这几行字改变不了什么,不信的话去看看最新的java 8里面都加了些什么新东西进去。
这是又开始回避节奏了……哎……累……

对不起,是你一直在回避而不是我。
35 楼 white_crucifix 2014-03-21 13:27
引用
大型工业化编程中FP依然可以,erlang就是例子
请举例,哪个系统
引用
factory能套个10几层
请举例,哪家公司这么做
引用
oop.......可是这也是最不靠谱的,所以软件的可靠性也是想比其他工程最被诟病的。
请举例
除了会定义,你还会什么?

引用
很多脚本语言例如perl,ruby都有函数式编程的影子在里面
你以为perl ruby php在做web的时候都是用函数式吗?
引用
异步回调这种10多年的古老的callback这种烂玩意你也好意思说node.js推向高潮
js(由nodejs主导)成为2013最热门语言之一,其主导的异步回调也被讨论的最热烈,2012年之前有人讨论过吗?理性点,不要睁眼说瞎话。
引用
node.js的开发者正在搞类似于Go,erlang的这种并发模型,替换掉callback是迟早的
YY?
引用
你是在维护某个东西,我懂,但世界在变,你打下这几行字改变不了什么,不信的话去看看最新的java 8里面都加了些什么新东西进去。
这是又开始回避节奏了……哎……累……
34 楼 hooluupig 2014-03-21 13:19
white_crucifix 写道
@hooluupig
该说的我已经说了,我并不想帮助你,也不想听你承认错误,世界上不愿意承认错误的人不止一个
只是想说,请你不要再黑Lisp了,你的鼓吹完全就是反作用。我宁可听Bruce A.Tate 在Lisp上的故事。
再见,Lisp黑

你这是诽谤+人身攻击,不怕吃官司么
33 楼 hooluupig 2014-03-21 13:14
white_crucifix 写道

排版有些乱,将就着看吧。
32 楼 hooluupig 2014-03-21 13:09

今天就让你理解OOP和函数式的优劣
* OOP最佳的场合是业务性的大型工业化编程,这样的场景既需要软件性能,同时也需要协作性,高可读性,而OOP是所有模式里最接近人类社会思维的。在大型工业化变成中,可以不用OOP,但是代码运行的轨迹不会有任何的区别,同时提高了代码复杂度,得不偿失。这就是如今OOP在世界上广泛流传的本质。


『终于说的稍微靠谱了。好吧,那咱们就说道说道。』
【回复】:FP语言的性能比不低,大型工业化编程中FP依然可以,erlang就是例子;协作性和可读性,对不起,你这是在打设计模式的脸,factory能套个10几层,好意思说可读性,有了高阶函数,一等函数和lambda的支持,这些都是再自然不过的事情。oop最接近人的社会思维模式?可是这也是最不靠谱的,所以软件的可靠性也是想比其他工程最被诟病的。不用oop提高代码复杂度完全是你的臆测,你这是在诽谤。oop在世界流传的原因我上面已经说过,是GUI应用大量出现造成的,我依然坚持我的观点。

* 在技术领域除了业务性软件,还有数量比较少的基础设施软件,如果server,database,中间件等,这些系统是与cpu,memory,io,thread紧密联系的,这些事物无论从形式上还是实际上,用函数式语言更适合,使用oop反倒会增加复杂性和降低性能,比如oop的线程间加锁是一件很吃力不讨好的事情,但是如erlang的线程模型就完全没有这方面顾虑,甚至如被nodejs推向高潮的异步回调式线程模型也提供了另一种思路。这也是我说的Lisp适合科研或者教学的原因,因为完全没必要让Lisp去和User,account,product等等产生过多的联系,这些事情让java去做。
【回复:】反对。你对函数式语言的看法完全是错的。你说了一大堆无非就是想说oop适合搞业务类编程,而非oop适合搞密集型计算,你这这说法是完全不负责的主观臆断。事实上,很多脚本语言例如perl,ruby都有函数式编程的影子在里面,它们在很多场景比java更适合业务逻辑,例如php的快速原型设计,perl的强大灵活更是administrator的好帮手。异步回调这种10多年的古老的callback这种烂玩意你也好意思说node.js推向高潮?不怕告诉你,node.js的开发者正在搞类似于Go,erlang的这种并发模型,替换掉callback是迟早的。java的优势在于生态强大,在于企业内部使用的成熟框架多,切换新语言的成本和风险太大,老板也不愿花这钱,java在语法上除了依然保持着相比其他语言的简单性,除此之外没有半点好的,尽管我也是做java的。
* 为什么我说java走下坡路是谣言。因为就算oop在底层模型中不占优势,但是世界依然有很多java写的基础设施软件,而且性能优良。我疑惑的是,我用这一类server产品是来反驳你说的“这条路走不下去”,非常直接,直面,严肃,为什么你会理解为不要说扯淡的东西(什么xxx公司在用之类的废话,难道让你证明一个命题或者去面试回答面试官问题,你会给人家说xxx在用这个,xxx怎么怎么地这种话么?)
【回复】:你是在维护某个东西,我懂,但世界在变,你打下这几行字改变不了什么,不信的话去看看最新的java 8里面都加了些什么新东西进去。
31 楼 white_crucifix 2014-03-21 13:06
@hooluupig
该说的我已经说了,我并不想帮助你,也不想听你承认错误,世界上不愿意承认错误的人不止一个
只是想说,请你不要再黑Lisp了,你的鼓吹完全就是反作用。我宁可听Bruce A.Tate 在Lisp上的故事。
再见,Lisp黑
30 楼 white_crucifix 2014-03-21 12:53
@hooluupig

1.
引用
你能不能不这么发散,就挑一个点,或者说好的或者说不好的方面,这样我才能回复你
我一直在提问,你一直在回避,你哪怕有回答过我一个问题或者质疑吗?你以为你是马航?
2.
引用
总说这种"xx不行但xx也有好的地方",“xx好但xx也有不行的地方”,这不是废话么,
请举出我说的原话,举不出就是打脸(我对你的每一次质疑,都是有一定依据写给你看的,而你,从来没有)——只会定义,呵呵
3.
引用
开始对本人持续展开的吐槽和人生攻击
如果你觉得“理解力低”是人生攻击,那你太脆弱了。看看这里你说的
引用
我不会坐在电脑后面揣测对方是一只狗在打字还是.....
? 只能说你的自打脸技术一流,呵呵
4. 虽然你一直说我“扯谈”,但你自己说了什么有意义的内容吗?但是我退一步还是满足你,今天就让你理解OOP和函数式的优劣
* OOP最佳的场合是业务性的大型工业化编程,这样的场景既需要软件性能,同时也需要协作性,高可读性,而OOP是所有模式里最接近人类社会思维的。在大型工业化变成中,可以不用OOP,但是代码运行的轨迹不会有任何的区别,同时提高了代码复杂度,得不偿失。这就是如今OOP在世界上广泛流传的本质。
* 在技术领域除了业务性软件,还有数量比较少的基础设施软件,如果server,database,中间件等,这些系统是与cpu,memory,io,thread紧密联系的,这些事物无论从形式上还是实际上,用函数式语言更适合,使用oop反倒会增加复杂性和降低性能,比如oop的线程间加锁是一件很吃力不讨好的事情,但是如erlang的线程模型就完全没有这方面顾虑,甚至如被nodejs推向高潮的异步回调式线程模型也提供了另一种思路。这也是我说的Lisp适合科研或者教学的原因,因为完全没必要让Lisp去和User,account,product等等产生过多的联系,这些事情让java去做。
* 为什么我说java走下坡路是谣言。因为就算oop在底层模型中不占优势,但是世界依然有很多java写的基础设施软件,而且性能优良。我疑惑的是,我用这一类server产品是来反驳你说的“这条路走不下去”,非常直接,直面,严肃,为什么你会理解为
引用
不要说扯淡的东西(什么xxx公司在用之类的废话,难道让你证明一个命题或者去面试回答面试官问题,你会给人家说xxx在用这个,xxx怎么怎么地这种话么?)

莫名……
29 楼 hooluupig 2014-03-21 12:07
white_crucifix 写道
@hooluupig

1. 你开始焦躁了,说明理屈词穷越发的激烈

2. 我的论点很清晰:你鼓吹Lisp,黑OOP,那就举出什么样的场景适合Lisp,什么样的场景OOP乏力(这个问题是我最开始问你的,你现在却说我不肯回答,你的逻辑能力已经到底了)

3. 再次问你
引用
这条路走不下去
的谣言是哪里听到的,我一直不想用java的占有率来压你,因为觉得这样欺负人,所以我只能举一些server级产品的例子,可能你理解不了。

4.
引用
自己看看谁先在吐槽谁

对不起,从来没有在讨论谁先谁后的问题,只是说你的吐槽都是在打自己脸,特别响亮

5.
引用
说别人不懂这,不懂那

但是你事实就是不懂,懂的话你不会每一次都回避问题,诡辩

太多了。。。。太多了。。。。。

你从第3楼的回复开始就是废话,正确的废话,没有自己独立观点的废话。说出自己的看法错了不怕最起码是自己的思考,但不敢说出自己的观点,总说这种"xx不行但xx也有好的地方",“xx好但xx也有不行的地方”,这不是废话么,还要你说。你能不能不这么发散,就挑一个点,或者说好的或者说不好的方面,这样我才能回复你。不要说扯淡的东西(什么xxx公司在用之类的废话,难道让你证明一个命题或者去面试回答面试官问题,你会给人家说xxx在用这个,xxx怎么怎么地这种话么?),就从你对这些东西目前的了解程度来谈点技术上的观点,这才工科生该干的事情。
至于你从第3楼一楼开始对本人持续展开的吐槽和人生攻击,这些都是你的主观推断,在此声明:本人对此不持有任何观点,也无任何回复的必要,本人对此也不负任何法律责任,出了问题与本人毫无相干。但本人保留追求法律的责任和权利。
28 楼 white_crucifix 2014-03-21 11:37
@hooluupig

1. 你开始焦躁了,说明理屈词穷越发的激烈

2. 我的论点很清晰:你鼓吹Lisp,黑OOP,那就举出什么样的场景适合Lisp,什么样的场景OOP乏力(这个问题是我最开始问你的,你现在却说我不肯回答,你的逻辑能力已经到底了)

3. 再次问你
引用
这条路走不下去
的谣言是哪里听到的,我一直不想用java的占有率来压你,因为觉得这样欺负人,所以我只能举一些server级产品的例子,可能你理解不了。

4.
引用
自己看看谁先在吐槽谁

对不起,从来没有在讨论谁先谁后的问题,只是说你的吐槽都是在打自己脸,特别响亮

5.
引用
说别人不懂这,不懂那

但是你事实就是不懂,懂的话你不会每一次都回避问题,诡辩

太多了。。。。太多了。。。。。
27 楼 hooluupig 2014-03-21 11:22
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
设计模式本身的出现就说明一些OOP语言天生存在缺陷(例如不支持高阶函数,又例如花力气搞出的vistor模式其实在lisp等等这些函数式语言中不过是再自然不过的东西),用复杂的设计模式来弥补语言本身的不足。而现在随着函数式编程,多范式编程的出现和不断改进融合,为何还要搞这些东西。设计模式陨落是必然的。


拆东墙补西墙的心态不可取,呵呵

这可不是拆东墙补西墙,而是这些东西早就有了,例如lisp比c语言还老。oop语言完全走到了另一个方向(推波助澜的主要推手还是GUI应用的兴盛,OOP最鼎盛的年代简直就是宗教般的存在,是一种信仰),现在发现这条路似乎走到头了走不下去了,这才开始反思oop自身的问题,于是FP当中好的东西又重新被重视起来,就这么回事。


我说啊,您是最近开始学lisp还是写了几个helloworld的例子,就这么开始大肆鼓吹lisp。Lisp这种只适用于科研或者教学的语言就不要拿来和java比了。数学角度java的确不如Lisp,但是应用领域甩了Lisp不知道几条街。
真不知道“这条路走不下去”这种谣言从哪里听来的,现在世界上最流行的几个server级产品,hadoop, cassandra, mongodb,redis等等,一半都是java写的,功能就不说了,性能上java绝对不会输给其他语言。OOP是有不适合的场景,但是你不知道。函数式也有优势的方面,其实你也不知道。是不是你明天写了几个Haskell的demo,就开始鼓吹Haskell称霸世界呢?

你扯了一大堆可是还是等于什么都没说。


哟,出现万能语…… 是理屈词穷的表现吗?看来你真的是:

LISP的高级黑啊!


扯淡的话就别再回复我了,我不是词穷,而是因为我不知道怎么回复你,你扯了一大堆不着边际的东西,咱们是学工科的,不是学民科的。我一般很烦这种讨论,没有一点实质性的东西,完全是浪费时间。


哦,原来是这样啊。。我一直以为你是选择性失明,故意回避。原来是你理解力的问题…… 好吧,我错了

PS. 你所有的吐槽都是在打自己脸,你自己的所有回答几乎都符合你对我的吐槽,呵呵
论逻辑的重要性……

自己看看谁先在吐槽谁,如果眼睛没有问题的话。trolling is always trolling,一上来用你那奇葩的思维说别人不懂这,不懂那,说了一大堆和文章没有任何关联的废话,然后问别人为什么不敢回复你?这不是搞笑么。因为我的思维没这么奇葩,我不会坐在电脑后面揣测对方是一只狗在打字还是一个即将获得图灵奖的科学家在耐心的回复,不过一般科学家不会这么无聊,一般会就事论事的讨论问题,而不是先说对方这不懂那不懂,但始终不愿意谈问题的本身。例如:到底设计模式哪里好了哪里不好了,到底函数式编程哪里不好了哪里好了。这是什么原因呢?我想只有他自己心里清楚。打别人的脸,先摸摸自己的脸红不红。你的话我全部奉还给你:要么讨论问题,要么就此打住,别学的像个民科生,竟说些看似正确的但却毫无意义的等于什么都没有说,什么都没有回答的废话。
26 楼 white_crucifix 2014-03-21 11:14
@hooluupig

引用
我不是词穷,而是因为我不知道怎么回复你


这逻辑……

还号称
引用
咱们是学工科的,不是学民科的


啊,对不起,民科和工科是完全不同性质的东西……

不要侮辱工科,不要侮辱LISP
25 楼 white_crucifix 2014-03-21 11:09
hooluupig 写道
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
设计模式本身的出现就说明一些OOP语言天生存在缺陷(例如不支持高阶函数,又例如花力气搞出的vistor模式其实在lisp等等这些函数式语言中不过是再自然不过的东西),用复杂的设计模式来弥补语言本身的不足。而现在随着函数式编程,多范式编程的出现和不断改进融合,为何还要搞这些东西。设计模式陨落是必然的。


拆东墙补西墙的心态不可取,呵呵

这可不是拆东墙补西墙,而是这些东西早就有了,例如lisp比c语言还老。oop语言完全走到了另一个方向(推波助澜的主要推手还是GUI应用的兴盛,OOP最鼎盛的年代简直就是宗教般的存在,是一种信仰),现在发现这条路似乎走到头了走不下去了,这才开始反思oop自身的问题,于是FP当中好的东西又重新被重视起来,就这么回事。


我说啊,您是最近开始学lisp还是写了几个helloworld的例子,就这么开始大肆鼓吹lisp。Lisp这种只适用于科研或者教学的语言就不要拿来和java比了。数学角度java的确不如Lisp,但是应用领域甩了Lisp不知道几条街。
真不知道“这条路走不下去”这种谣言从哪里听来的,现在世界上最流行的几个server级产品,hadoop, cassandra, mongodb,redis等等,一半都是java写的,功能就不说了,性能上java绝对不会输给其他语言。OOP是有不适合的场景,但是你不知道。函数式也有优势的方面,其实你也不知道。是不是你明天写了几个Haskell的demo,就开始鼓吹Haskell称霸世界呢?

你扯了一大堆可是还是等于什么都没说。


哟,出现万能语…… 是理屈词穷的表现吗?看来你真的是:

LISP的高级黑啊!


扯淡的话就别再回复我了,我不是词穷,而是因为我不知道怎么回复你,你扯了一大堆不着边际的东西,咱们是学工科的,不是学民科的。我一般很烦这种讨论,没有一点实质性的东西,完全是浪费时间。


哦,原来是这样啊。。我一直以为你是选择性失明,故意回避。原来是你理解力的问题…… 好吧,我错了

PS. 你所有的吐槽都是在打自己脸,你自己的所有回答几乎都符合你对我的吐槽,呵呵
论逻辑的重要性……
24 楼 hooluupig 2014-03-21 08:50
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
设计模式本身的出现就说明一些OOP语言天生存在缺陷(例如不支持高阶函数,又例如花力气搞出的vistor模式其实在lisp等等这些函数式语言中不过是再自然不过的东西),用复杂的设计模式来弥补语言本身的不足。而现在随着函数式编程,多范式编程的出现和不断改进融合,为何还要搞这些东西。设计模式陨落是必然的。


拆东墙补西墙的心态不可取,呵呵

这可不是拆东墙补西墙,而是这些东西早就有了,例如lisp比c语言还老。oop语言完全走到了另一个方向(推波助澜的主要推手还是GUI应用的兴盛,OOP最鼎盛的年代简直就是宗教般的存在,是一种信仰),现在发现这条路似乎走到头了走不下去了,这才开始反思oop自身的问题,于是FP当中好的东西又重新被重视起来,就这么回事。


我说啊,您是最近开始学lisp还是写了几个helloworld的例子,就这么开始大肆鼓吹lisp。Lisp这种只适用于科研或者教学的语言就不要拿来和java比了。数学角度java的确不如Lisp,但是应用领域甩了Lisp不知道几条街。
真不知道“这条路走不下去”这种谣言从哪里听来的,现在世界上最流行的几个server级产品,hadoop, cassandra, mongodb,redis等等,一半都是java写的,功能就不说了,性能上java绝对不会输给其他语言。OOP是有不适合的场景,但是你不知道。函数式也有优势的方面,其实你也不知道。是不是你明天写了几个Haskell的demo,就开始鼓吹Haskell称霸世界呢?

你扯了一大堆可是还是等于什么都没说。


哟,出现万能语…… 是理屈词穷的表现吗?看来你真的是:

LISP的高级黑啊!


扯淡的话就别再回复我了,我不是词穷,而是因为我不知道怎么回复你,你扯了一大堆不着边际的东西,咱们是学工科的,不是学民科的。我一般很烦这种讨论,没有一点实质性的东西,完全是浪费时间。
23 楼 white_crucifix 2014-03-20 19:29
hooluupig 写道
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
设计模式本身的出现就说明一些OOP语言天生存在缺陷(例如不支持高阶函数,又例如花力气搞出的vistor模式其实在lisp等等这些函数式语言中不过是再自然不过的东西),用复杂的设计模式来弥补语言本身的不足。而现在随着函数式编程,多范式编程的出现和不断改进融合,为何还要搞这些东西。设计模式陨落是必然的。


拆东墙补西墙的心态不可取,呵呵

这可不是拆东墙补西墙,而是这些东西早就有了,例如lisp比c语言还老。oop语言完全走到了另一个方向(推波助澜的主要推手还是GUI应用的兴盛,OOP最鼎盛的年代简直就是宗教般的存在,是一种信仰),现在发现这条路似乎走到头了走不下去了,这才开始反思oop自身的问题,于是FP当中好的东西又重新被重视起来,就这么回事。


我说啊,您是最近开始学lisp还是写了几个helloworld的例子,就这么开始大肆鼓吹lisp。Lisp这种只适用于科研或者教学的语言就不要拿来和java比了。数学角度java的确不如Lisp,但是应用领域甩了Lisp不知道几条街。
真不知道“这条路走不下去”这种谣言从哪里听来的,现在世界上最流行的几个server级产品,hadoop, cassandra, mongodb,redis等等,一半都是java写的,功能就不说了,性能上java绝对不会输给其他语言。OOP是有不适合的场景,但是你不知道。函数式也有优势的方面,其实你也不知道。是不是你明天写了几个Haskell的demo,就开始鼓吹Haskell称霸世界呢?

你扯了一大堆可是还是等于什么都没说。


哟,出现万能语…… 是理屈词穷的表现吗?看来你真的是:

LISP的高级黑啊!

22 楼 hooluupig 2014-03-20 15:14
white_crucifix 写道
hooluupig 写道
white_crucifix 写道
hooluupig 写道
设计模式本身的出现就说明一些OOP语言天生存在缺陷(例如不支持高阶函数,又例如花力气搞出的vistor模式其实在lisp等等这些函数式语言中不过是再自然不过的东西),用复杂的设计模式来弥补语言本身的不足。而现在随着函数式编程,多范式编程的出现和不断改进融合,为何还要搞这些东西。设计模式陨落是必然的。


拆东墙补西墙的心态不可取,呵呵

这可不是拆东墙补西墙,而是这些东西早就有了,例如lisp比c语言还老。oop语言完全走到了另一个方向(推波助澜的主要推手还是GUI应用的兴盛,OOP最鼎盛的年代简直就是宗教般的存在,是一种信仰),现在发现这条路似乎走到头了走不下去了,这才开始反思oop自身的问题,于是FP当中好的东西又重新被重视起来,就这么回事。


我说啊,您是最近开始学lisp还是写了几个helloworld的例子,就这么开始大肆鼓吹lisp。Lisp这种只适用于科研或者教学的语言就不要拿来和java比了。数学角度java的确不如Lisp,但是应用领域甩了Lisp不知道几条街。
真不知道“这条路走不下去”这种谣言从哪里听来的,现在世界上最流行的几个server级产品,hadoop, cassandra, mongodb,redis等等,一半都是java写的,功能就不说了,性能上java绝对不会输给其他语言。OOP是有不适合的场景,但是你不知道。函数式也有优势的方面,其实你也不知道。是不是你明天写了几个Haskell的demo,就开始鼓吹Haskell称霸世界呢?

你扯了一大堆可是还是等于什么都没说。
21 楼 white_crucifix 2014-03-20 10:20
hooluupig 写道
white_crucifix 写道
hooluupig 写道
设计模式本身的出现就说明一些OOP语言天生存在缺陷(例如不支持高阶函数,又例如花力气搞出的vistor模式其实在lisp等等这些函数式语言中不过是再自然不过的东西),用复杂的设计模式来弥补语言本身的不足。而现在随着函数式编程,多范式编程的出现和不断改进融合,为何还要搞这些东西。设计模式陨落是必然的。


拆东墙补西墙的心态不可取,呵呵

这可不是拆东墙补西墙,而是这些东西早就有了,例如lisp比c语言还老。oop语言完全走到了另一个方向(推波助澜的主要推手还是GUI应用的兴盛,OOP最鼎盛的年代简直就是宗教般的存在,是一种信仰),现在发现这条路似乎走到头了走不下去了,这才开始反思oop自身的问题,于是FP当中好的东西又重新被重视起来,就这么回事。


我说啊,您是最近开始学lisp还是写了几个helloworld的例子,就这么开始大肆鼓吹lisp。Lisp这种只适用于科研或者教学的语言就不要拿来和java比了。数学角度java的确不如Lisp,但是应用领域甩了Lisp不知道几条街。
真不知道“这条路走不下去”这种谣言从哪里听来的,现在世界上最流行的几个server级产品,hadoop, cassandra, mongodb,redis等等,一半都是java写的,功能就不说了,性能上java绝对不会输给其他语言。OOP是有不适合的场景,但是你不知道。函数式也有优势的方面,其实你也不知道。是不是你明天写了几个Haskell的demo,就开始鼓吹Haskell称霸世界呢?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 嵌入式系统开发基础

    Linux 嵌入式 开发基础,里面有详细的讲解、和实例代码

  • RT-LINUX测试

    1、sudo apt-get install rt-tests安装 2、运行测试程序 sudo cyclictest -t 5 -p 80 -n 注释: 运行五个线程,线程优先级为80,无限循环 -d DIST 设置线程间间隔,单位为us(默认为 500us)。当调用 cylictest 时使用了 -t 选项时并且超过一个线程被创建,那么这个间隔值被增加到线程之间。间隔(线程 N)=间隔...

  • 编译RT-tests对Linux实时性测试

    1,下载源码 git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.git git checkout origin/stable/v1.0 2,交叉编译 修改Makefile中的编译器 CC = arm-linux-gnueabihf-gcc AR = arm-linux-gnueabihf-ar 执行make ...

  • 嵌入式Linux应用开发零基础到就业学习路线,小白到高薪就业,看这一篇就够了!

    编程基础嵌入式Linux应用开发就业可选择的行业非常多,智能家居、汽车电子、医疗器械、通信设备、半导体、工业自动化、音视频等等。在招聘软件上看了很多岗位,其实基本要求都是比较统一的:C/C++熟悉Linux操作系统了解在ARM芯片上的交叉编译Linux多线程、多进程、内存共享、网络通信、信号处理、IO操作等编程技能Linux系统环境下的软件开发相关知识注意:Linux应用开发中,几乎没有什么硬件知识(有的话也是极少),所以甚至可以在不具备硬件知识的情况下学习。所以很多学纯软想转行。

  • linux应用开发学习笔记(1)linux系统简介,环境搭建

    本文章是我最近在学习linux中遇到的问题,知识点所做的总结,整理,资料主要来自b站黑马程序员linux入门开发视频,希望可以帮助到大家。一.对linux操作系统的理解首先,我们要知道linux是一个操作系统,它属于软件的范畴,市面上的linux开发板等硬件平台指的是支持植入linux操作系统的硬件平台(就像我们的家里使用的电脑可以支持window操作系统一样)。

  • Linux——嵌入式学习——C++学习(1)

    对象——对象具有状态和行为。例如:一只狗的状态-颜色,名称,品种 或 行为-摇动,叫唤,吃.对象是类的实例。类——类可以定义为描述对象行为/状态的模板,蓝图。方法-从基本上说,一个方法表示一种行为。。一个类可以包含多个方法。可以在方法中写入逻辑以及执行的动作计时变量-每个对象都有其独特的即时变量对象的装特都是由这些即时变量的值创建的。定义一个类需要使用关键字 class,然后指定类的名称,并类的主体是包含在一对花括号中,主体包含类的成员变量和成员函数。

  • 肝了半个月,我整理出了这篇嵌入式开发学习学习路线+知识点梳理)

    不好意思久等了 这篇文章让小伙伴们久等了。 一年多以来,关于嵌入式开发学习路线、规划、看什么书等问题,被问得没有一百,也有大几十次了。但是无奈自己对这方面了解有限,所以每次都没法交代,搞得实在不好意思。 但是办法总归是有的,正如前篇文章《最近厚着脸皮联系了不少老同学》所聊,虽然我自己不从事这些方向,但寻思了一下,我的同学和朋友中,多少还是有一些从事相关方向并且在一线(或曾在一线)工作过的,所以我就请他们帮忙一起梳理这几个我不熟悉领域的学习路线,这次嵌入式开发就是其中之一。 这篇文章之所以拖这么久,因为沟..

  • 嵌入式实时操作系统的设计与开发(一)

    轮询系统也称为简单循环控制系统,是一种最简单的嵌入式实时软件体系结构模型。在单个微处理器情况下,系统功能由多个函数(子程序)完成,每个函数负责该系统的一部分功能。这些函数被循环调用执行,它们按照一个指向顺序构成一个单向的有序环(轮循环),依次占用CPU。每个函数访问完成之后,才将CPU交给下一个函数使用。对于某个函数而言,当它提出执行请求时,必须等到它被CPU接管后才能执行。

  • Linux是实时系统还是分时操作系统?

    关注+星标公众号,不错过精彩内容编排 |strongerHuang微信公众号 |嵌入式专栏我们平时分享的µC/OS、FreeRTOS、RT-Thread、ThreadX这些都是实时操作...

  • 新手如何入门嵌入式软件开发

     新手如何入门嵌入式软件开发Sailor_forever  sailing_9806@163.com 转载请注明http://blog.csdn.net/sailor_8318/archive/2008/04/24/2325483.aspx 【摘要】:ARM+Linux是目前比较吃香的嵌入式软件

  • Linux嵌入式系统开发,嵌入式Linux开发教程

    嵌入式有不少组合名词,例如嵌入式系统,嵌入式软件,Linux嵌入式,Android嵌入式,嵌入式Web,等等。通常对嵌入式的定义其实是对"嵌入式系统"的定义。 学习Linux,必须先获得一个Linux主机环境,通常情况下,可以通过以下三种方式获得Linux环境。 双系统安装 如果没有闲置的计算机,或者现有Windows系统的计算机有足够的硬盘空间,可以考虑划分一部分硬盘空间,用于安装Linux...

  • 【笔试题】嵌入式软件开发:笔试总结

    从CSDN各个博客上摘选的一些容易做错的嵌入式软件的笔试题,做一下记录,让自己记住。 文章转自:嵌入式软件开发:笔试总结。 编程语言的基础考察 1、以下代码运行结果为: #include <iostream> using namespace std; int func(int x) { int count=0; while(x) { ...

  • 嵌入式系统开发入门

    嵌入式系统开发 项目1-Hello world 1、创建STM32项目 2、选择型号 3、配置项目名称 4、项目初始化概览 5、根据需求,查看文档引脚说明 打开提供的:MB1296D-01.PDF,次出是控制LED灯,因此找到LED等引脚相关信息。 6、到CUB IDE配置对应的模式 分别配置PA5、PB5、PB6、PB7的模式为输出,高电平有效等。 7、保存修改 保存会提示弹出一些对话框,都选择Yes 8、创建完成 查看对应的文件结构,其中CMSIS是ARM等定义的HAL,硬件抽象层。

  • 用Linux开发嵌入式项目拢共分几步?

    微控制器制造商的开发板,以及他们与开发板一起提供的软件项目例程,在工程师着手一个新设计时可以提供很大帮助。但在设计项目完成其早期阶段后,进一步设计时,制造商提供的软件也可能会导致一些问题...

  • linux开发操作系统,Linux 操作系统应用与开发

    《Linux 操作系统应用与开发》由会员分享,可在线阅读,更多相关《Linux 操作系统应用与开发(20页珍藏版)》请在人人文库网上搜索。1、Linux操作系统的应用与开发-实验指南信息工程系计算机系统结构系实验1文件管理一、实验目的掌握文件系统的基本命令。二、实验内容和阶段1.在当前目录中创建exam.c文件,将exam.c文件复制到名为/usr的目录中,然后将其重命名为shiyan.c。#to...

  • RT-Thread创始人熊谱翔: 我和Linux、嵌入式实时操作系统RT-Thread

    本文转载至:http://www.rt-thread.org/dynamic/78.html 接触Linux 说起Linux应该从我在校园时期说起。我是在山城——重庆邮电学院念的书,1998年时宿舍伙伴一起凑的钱买的电脑,因为对各种软件感兴趣,所以也装了各种操作系统,DOS,Windows,Linux,FreeBSD等都装过,当时觉得能够在Dos/Windows之外接触到一

  • 【复习】第一章 嵌入式系统开发基础概述

    第一章 嵌入式系统开发基础概述 嵌入式系统定义 ​ 以应用为中心,以计算机技术为基础,软件硬件可裁剪,功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。 嵌入式系统三要素 嵌入、专用、计算机 嵌入式系统的特点(由三要素引出) 嵌入性:嵌入到对象体系中,有对象环境要求 专用性:软、硬件按对象要求裁剪 计算机:实现对象的智能化功能 嵌入式系统重要特征 系统内核小; 专...

  • 延时仅33us,Linux-RT实时性能测试分享—基于瑞芯微RK3562J国产平台

    LinuxSDK:LinuxSDK-[版本号](基于RK3562_LINUX_SDK_RELEASE_V1.1.0_20231220)RK3562J实时性测试数据本文使用Cyclictest延迟检测工具测试Linux系统实时性,分别在CPU空载、满负荷(运行stress压力测试工具)、满负载-隔离CPU3核心(运行stress压力测试工具)三种情况下运行指令测试12小时。图 1 RK3562J实时性测试数据。

  • Linux操作系统实时性分析

    1. 概述  选择一个合适的嵌入式操作系统,可以考虑以下几个因素:   第一是应用。如果你想开发的嵌入式设备是一个和网络应用密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux或者uCLinux,而不是uC/OS-II。   第二是实时性。没有一个绝对的数字可以告诉你什么是硬实时,什么是软实时,他们之间的界限也是十分模糊的,这与你选择什么样的CPU,它的主频、内存等参数有一定关系。如果

Global site tag (gtag.js) - Google Analytics