阅读更多

6顶
4踩

编程语言

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

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

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

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

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

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

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

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

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

但设计模式还没有完全衰退,许多聪明的程序员仍然知道它们,使用它们。这些人是个例外。正是他们努力推广的结果,才能让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称霸世界呢?

发表评论

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

相关推荐

  • 嵌入式操作系统事件调度机制设计与实现

    使用VS2010编译环境,基于C语言编写的一个事件调度机制 1) 假设有6个事件E1、E2、E3、……、E6, 2) 每个事件触发后需执行对应的任务 :Task_1,Task_2,Task_3,……,Task_6。其中,Task_i的功能是:每0.6秒打印字符串“Task_i is running\n”,连续打印的次数为i次。 3) 事件执行的优先级为E1>E2>E3>……>E6。 4) 事件触发的时间点为:事件 Ei在main函数执行后的第(7-i)秒触发。每当一个事件触发时,打印字符串“Ei is active\n”。

  • 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嵌入式开发

    面向对象的体系结构使代码结构化、 可重用并且运行快速, 与其他 GUI 相比, Qt GUI 非常快, 没有分层, 成为基于 Qt 的程序的最紧凑环境,并延续了 Qt 在 X 上的强大功能, 在底层摒弃了 X lib, 仅采用 FrameBuffer 作为底层图形接口。Microwindows 提供了相对完善的图形功能和一些高级的特性。除支持 256 色的线性显存模式, 目 前, OpenGUI 也支持其他显示模式, 并且支持多种操作系统平台, 如, MS-DOS、 QNX 和 Linux, 等等。

  • 嵌入式Linux应用程序开发详解

    嵌入式系统通常是指一种特定用途的计算机系统,它被嵌入到各种设备中,如家用电器、汽车、医疗设备等。嵌入式 Linux 应用程序开发涉及到多个方面,包括硬件选型、系统定制、应用程序开发、调试测试等,需要开发人员具备丰富的嵌入式系统开发经验和技能。配置根文件系统,包括选择合适的文件系统类型(如 ext4、YAFFS、JFFS2 等)、挂载点等。考虑嵌入式系统的安全性,采取必要的安全措施,防止恶意攻击和数据泄露。管理系统资源,包括内存、CPU、网络等,以确保系统运行稳定。搭建开发环境,包括开发板、调试工具等。

  • 嵌入式Linux:如何进行嵌入式Linux开发?

    嵌入式Linux开发主要有四种方式:裸机开发、SDK开发、驱动开发和应用开发。

  • 嵌入式开发 Linux基础

    带你走进Linux世界: Linux环境搭建,Linux系统操作快捷键,Linux基本命令,添加共享文件夹 根目录和家目录,快捷键T N T L,路径,pwd,bcd-lsp,ls[-a],ls[-l], 文件权限划分,cd ~ / .. ,mkdir -p,rmdir -p,rm -r,cp -r,mv,利用*.name多个文件操作 共享文件夹/mnt/hgfs

  • 新手答疑 | 零基础该怎么学习嵌入式?嵌入式Linux学习路线是什么?嵌入式开发板推荐?

    嵌入式Linux开发,是软硬件结合的,这里说的硬件,不是需要初学者去画PCB板子,而是要了解硬件的一些基本结构,因为应用需要在硬件上运行,系统需要移植到硬件上,驱动得针对硬件外设去编写,所以需要对处理器ARM(微控制器MCU或者微处理器MPU或者性能更高的NPU)有一定的了解。总之,零基础学习嵌入式Linux开发并非煎水作冰,只要按照上述路线,循序渐进地学习与实践,将理论基础打扎实,大胆实践并不断拓展深入,初学者也会成长为一名合格的嵌入式Linux开发者,预祝您在嵌入式Linux学习道路上取得丰硕成果!

  • 嵌入式Linux应用开发

    嵌入式Linux应用开发

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

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

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

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

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

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

  • 使用嵌入式 Linux 进行实时系统开发

    对于实时、决策或者低延时应用,Linux能够提供多种方案。第一种方法是和 Linux 内核一起运行一个 hypervisor或者co-kernel。这种方案中hypervisor或者co-kernel的优先级高于 Linux,实时任务则运行于其中。另外一种方式是使用非对称异构多核系统,Linux和另外一个实时内核分别运行在不同处理器内核上。最后,还可使 Linux 更具抢占性从而提高其实时性能。这

  • 嵌入式实时linux,Linux 实时嵌入式实时应用解决方案

    简介上个世纪,研发人员投入了大量精力提高 Linux 实时性能和行为,最著名的是 PREEMPT_RT Linux 实时扩展。最近,研发人员致力于研究适用于多核设备的 Linux 用户空间解决方案,该解决方案允许从用户空间中直接访问基础硬件,从而可避免因将 Linux 内核引入用户空间应用而带来的额外系统开销。这些用户空间扩展(有多个)已首先由电信/网络高性能 IP 数据包处理系统进行驱动,以实现...

  • 嵌入式系统开发基础

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

  • 嵌入式实时操作系统设计

    嵌入式实时操作系统(RTOS)设计 摘要 本文从实时操作系统实时性的重要性出发,引出了基于优先级和时间片的实时性的实现方案:链表+位图,并在此基础上提出了一种嵌入式实时操作系统的实现方案——ATOP操作系统。关键词:嵌入式 实时操作系统 优先级调度 时间片轮询 1 前言实时操作系统(RTOS)是指能满足实时控制系统的实时性要求,可有效管理系统任务及资源的操作系统软件。实时性是指对物理过程发生的...

  • 嵌入式操作系统简介

    一、嵌入式操作系统 标准:可移植:X86,ARM,DSP,powerPC(可运行在不同CPU体系结构上的机器) 错误:嵌入式操作系统:开源; 嵌入式操作系统 Vxworks:美国航天局:航天、军事、工业(实时性:在规定时间完成规定的工 作) 缺点:不开源、付费; winCE:微软出品、不开源(出租车、麦德龙、POS机):金融; ucosii:小型实时操作系统( 5000+行); Linux:开源、...

  • 关于Linux嵌入式实时操作系统的研究

    近年来,实时操作系统在多媒体通信、在线事务处理、生产过程控制、交通控制等各个领域得到广泛的应用,因而越来越引起人们的重视。 1.引言 从上世纪八十年代开始,开始出现各种各样的商用嵌入式操作系统,这些操作系统大部分都是为专用或通用系统而开发,如VxWorks、Windows CE、pSOS、Palm OS、OS-9、LynxOS、QNX、LYNX 等,它们的优点是为用户提供良好的开发环境,提高了应用系统的开发效率,运行效率高、实时性好,缺点是价格昂贵且源代码封闭。这就不仅影响了开发者的积极性,而且使得整个产品

  • linux实时嵌入系统,基于Linux的嵌入式实时系统ERLinux

    摘  要:近几年,嵌入式系统的应用越来越广泛了,Linux在嵌入式系统中被广泛的使用。但嵌入式应用中一般要求嵌入式操作系统小型化并具有实时性能,而Linux作为一种通用操作系统,对这些方面没有做特定的加强。本文以Linux 2.6.10为基础,通过增强Linux内核的实时性,构建了一个实时Linux系统ERLinux/(Embedded and RealtimeLinux/)。本文首先概述了目前实...

Global site tag (gtag.js) - Google Analytics