阅读更多

6顶
4踩

编程语言

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

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

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

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

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

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

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

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

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

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

    嵌入式Linux操作系统原理与应用,视频和课件和源码,以及书的文档word版。

  • 嵌入式Linux操作系统

    嵌入式Linux操作系统介绍  嵌入式Linux操作系统,是个与生俱来的网络操作系统且成熟稳定。其为开源软件且源代码开放,不存在黑箱技术,按照GPL公约任何人都可以对它进行修改添加新的功能形成自己的产品。可以对系统进行内核定制做到最小,一个带有中文系统及图形化界面的核心程序可以

  • 嵌入式Linux应用开发

    嵌入式Linux应用开发

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

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

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

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

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

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

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

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

  • 小白必备嵌入式开发学习内容

      目前,对于刚刚开始学习嵌入式的新手小白来说,学习嵌入式感觉完全是不着边际,连最基本的概念都没有。涉及到什么知识,该往哪个方向学习,都有点模糊不清,但是你在看了这篇文章以后会有不小的收获的。下面尚观教育小编就告诉你对于嵌入式开发,我们应该从何学习,应该怎么去学,下面我分了几个阶段,一起来看一...

  • 嵌入式系统开发入门

    嵌入式系统开发 项目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下system()函数的深度理解(整理)

    这几天调程序(嵌入式linux),发现程序有时就莫名其妙的死掉,每次都定位在程序中不同的system()函数,直接在shell下输入system()函数中调用的命令也都一切正常.就没理这个bug,以为是其他的代码影响到这个,或是内核驱动文件系统什么的异常导致,昨天有出现了这个问题,就随手百了一下度,问题出现了,很多人都说system()函数要慎用要少用要能不用则不用,system()函数不稳定?

  • 《Linux嵌入式实时应用开发实战(原书第3版)》—— 导读

    前  言使用minix的朋友们,大家好!我正在为386(486)AT系列编写一个(免费的)操作系统(这仅仅是业余爱好,不会太大,也不会像GNU那样专业)。我从4月份开始酝酿,现在快准备好了。我希望得到任何关于minix的反馈,包括你们在使用过程中喜欢和不喜欢的地方。因为我的操作系统和它多少有点类似(比如文件系统具有相同的物理布局(出于实用的原因)...

  • 什么是实时操作系统(RTOS)

    同时,由于实时操作系统的特性,它并不是一个应用场景广泛的系统,一些人认为学嵌入式就是学实时操作系统,这种认识其实是不正确的,现在嵌入式开发,不一定需要在实时操作系统下完成。由于关中断等原因,通常情况下,操作系统的调度器不会太精确的产生周期性的调度,比如x86早期的默认60的时钟周期(clock rate),抖动范围可能在15-17ms之间。由于应用场景的差异,会出现有些用户需要实时性的驱动,有些用户需要高性能的驱动,因此实时操作系统实际上要提供多种形式的配置以满足不同实时性需求的用户。

  • 《Linux嵌入式实时应用开发实战(原书第3版)》——1.5 开源协议

    本节书摘来自华章计算机《Linux嵌入式实时应用开发实战(原书第3版)》一书中的第1章,第1.5节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 1.5 开源协议 多数软件终端用户协议都明确限制了你只可以使用协议范围内的功能。典型的限制条件是不允许复制或重新发布。你通常会被警告不要试图对软件进行“逆向工程”。...

  • 《Linux嵌入式实时应用开发实战(原书第3版)》——3.7 shell

    本节书摘来自华章计算机《Linux嵌入式实时应用开发实战(原书第3版)》一书中的第3章,第3.7节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 3.7 shell Linux系统启动最后所做的事情之一是调用叫做shell的命令解释程序。它主要的工作是解析你在控制台输入的命令并执行相应的程序。但是shell不...

  • 第一章 嵌入式Linux操作系统简介 2021/9/6

    第一章 嵌入式Linux操作系统简介 操作系统(Operating system, OS)是管理和控制计算机硬件和软件资源的计算机程序,直接运行在裸机上的最基本的系统软件,任何其他软件都必须在操作系统的支持下才能运行。 最常见的系统:Android, IOS, HMOS, Linux, Windows. 分类: 1.批处理操作系统; 2.分时操作系统; 3.实时操作系统; 4.嵌入式操作系统(EOS, Embedded operating system); 5.个人计算机

  • 嵌入式Linux开发

    嵌入式Linux的开发和研究是Linux领域研究的一个热点,目前已开发成功的嵌入式系统有一半以上都是Linux。Linux到底有什么优势,使之取得如此辉煌的成绩呢?本文分为两大部分:Linux的优点、Linux开发。 一、Linux的优势: 广泛的硬件支持 Linux能够支持x86、ARM、MIPS、ALPHA、PowerPC等多种体系结构,目前已经成功移植到数十种硬件平台,几乎能够运行在所...

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

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

  • Linux嵌入式开发

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

Global site tag (gtag.js) - Google Analytics