- 浏览: 1150829 次
- 性别:
- 来自: 上海
最新评论
-
LD_21:
...
无锡旅游归来 -
cat:
赞,这招有点创意。一般他们提交的demo都是些什么样的?
招人不难 -
daly1987:
不错啊,找到这个帖子学习。
ANTLR学习心得——表达式(1) -
hbsycw:
文笔不错,平铺直叙,坦诚~
我的野蛮成长 -
RonQi:
potian后来没有回复吗
与potian兄闲聊
今天去参加了北京博文视点出版社在上海办的一个Open
Party(http://www.douban.com/event/11051981/)。其中有两个topic给我很大的启发,一个是温昱的《架构
设计的事实与谬误》,另一个是老赵(@jeffz_cn)的《Web应用中的缓存》。
当然,我的收获未必是他们两位想要传达的主旨,只是引发了很多联想,所以也就不写思考的过程了,直接说一些结论吧。
1、架构设计需要关注需求,而需求有两大部分 ,一部分是与业务相关的需求,另一部分是与业务无关的需求。
2、与业务无关的需求,包括可重用性、高性能、可靠性、易用性、安全性等等。
3、经典的GoF的设计模式,其实只解决了(甚至只能说部分解决了)可重用性的需求。
4、在高性能的需求领域,也可以总结出很多设计模式,其中,老赵今天特别提出的缓存,是跨越N多领域的,提高性能的重要模式。
5、在我看来,要提高性能,无非这么三大思路:缓存、切分、并行。在三大思路之上,还有一个总的思路,就是找到性能瓶颈,然后尝试优化这个瓶颈。
6、缓存的思路,今天老赵已经谈得非常好了,每一个层次,有每一个层次的缓存实现思路和方案,有优点,有缺点。如果能够再展开谈一谈缓存模式的共性,就更棒了。也许可以总结为:针对80%的情况进行特殊处理,以更加快捷的方式减少CPU与IO。
7、切分,比如将数据分开存放、将静态内容与动态内容分开处理、将缓存分散在多个memcached服务器上等等等等,总的思路,是将原本的瓶颈分散化、将原本的问题,分别细化处理。
8、并行,当然也是一大门类,就不展开了,总得思路是:让计算机在同一个时间断内,做尽可能多的工作。
9、也许,应该有这么一本书:《高性能设计模式》,与“以可重用性为目标的设计模式”应该同等重要。
10、依此类推,还应该有《安全性设计模式》、《高可靠性设计模式》、《易用性设计模式》等等,这些跨应用、跨业务、跨领域的设计模式,都是架构设计师,应该深度掌握的设计模式。
11、也许,应该有出版社,组织高人,写这么一套《架构师设计模式丛书》出来。
评论
异步(不如消息系统)也是一种思路哦
设计模式与开源库,是两个不能互相取代的东西。
比如,你在CPU设计领域,积累了很多经验,其中有一级缓存、二级缓存之类的实践经验。
这些经验,在新的领域,比如数据库服务器上,能用得上吗?
查询缓存,当然也是缓存的思路,但是,CPU硬件设计的思路,肯定不能直接照搬过来就用。
但是,假设能够跨N多的领域,将缓存这个模式讲清楚,就算将来做到一个全新的,从未接触过的领域,也可以用得上,不是吗?
如果共同点很多,稍稍修改或者做做 code transformation 就能拿过去用了。
如果共同点很少,只是都带“缓存”二字而已,讲了对其他领域的应用也没帮助 ……
从范畴的角度看:
一个范畴的代码模式,做 morphism,也就是态射(代码转换器)可以把模式 port 到另一个范畴。
人的脑子也是一个代码转换器,把 A 场景的模式态射到脑子里,再态射到另一场景领域,做的事情比机器高级不到哪去。
解决问题应该记题库,还是研究代数方程?
我觉得模式看过几个就足够了,这种量变不能达成质变,死抠住不放很难达到新的高度。
写库同时也可以减少他人的知识包袱:告诉你这个是干嘛的,不用重复思考,更无须听耶稣讲经,拿去用就行了。
能力好的可以添加语言特性甚至搞新语言,精力不济的也可以向语言、框架的设计者提个 issue 啊。
---
写一段代码,觉得不错,命名为一个模式,让子孙后代学习去 —— 遗臭万年。
不要说不能写成库,抽象不出来 —— 能力问题。
设计模式与开源库,是两个不能互相取代的东西。
比如,你在CPU设计领域,积累了很多经验,其中有一级缓存、二级缓存之类的实践经验。
这些经验,在新的领域,比如数据库服务器上,能用得上吗?
查询缓存,当然也是缓存的思路,但是,CPU硬件设计的思路,肯定不能直接照搬过来就用。
但是,假设能够跨N多的领域,将缓存这个模式讲清楚,就算将来做到一个全新的,从未接触过的领域,也可以用得上,不是吗?
毕竟很多从java转向ruby的人很多先去找的是有没有什么设计模式. 然后把java这边的设计模式套过去用.. 还有象现在很多的后端处理.用java处理 .跟用其他的fp类似Erlang跟Scala的Actor模型也是不能相提并论的.. 让人们抛弃side-effects .. 还不如让他们放弃语言. 况且各种技术选型的瓶颈也不相同 ..
综上所述.我写了本Java的高可靠性设计模式. 是不是就真的是最好的选择呢? 作为一个架构师而言. 单纯的考虑一种方案的应该不会犯这种错误吧.
任何知识,都有可能禁锢思想,所以,这个要看那个运用知识的人,能不能跳出来。
设计模式,作为一种思想,肯定是存在的,也在相当程度上,是成立的。不过,有些时候,内化在语言语法里,有些得靠自己去实现。作为一个起点和基础,是必须掌握的,当然,强行套用,总是不可取的。
不同的问题,有不同的解决方案。有些问题,是跨语言的,那么就需要一个跨语言的思路来统一考虑,当然,具体到实现,肯定扎根于某个语言来编程,那么也就必须考虑到具体语言的特性,以更好的实现解决方案。
但没有一个人的经验会涵盖各个领域,实践会遍布各个类型的应用,精通各个细节,所以个人认为掌握了多少模式不是最重要的,关键是要学会其面对问题时,怎样去思考,怎样去判断和选择。
西方人就不同,最伟大的发明就是代数。碰到问题先列成方程,映射到数学语言,再用数学语言解决,不管你什么题型、什么模式,一列方程本质就出来了。
中国数学没发展那是因为从来没重视过数学,古代一群民间爱好者。。。都没有职业的
方程和模型,本身就是很抽象的东西,架构师的设计也很抽象,程序员很难全面的理解和体会,设计模式就是个很好的桥梁,架构师通过设计模式解释意图,程序员通过设计模式了解意图,它有它存在的意义
没啥值得玩味的,动态语言达到设计模式的方式成本本身就很低廉,而且更容易理解,java这种破j8静态语言,没有抽象,接口和继承鸟毛都玩不出来,要搞灵活性,不玩接口玩什么啊。。。抓个动态脚本语言出来,什么面向接口编程,提都不用提,怎么写都算面向接口,完全可以靠约定搞定,天生就是灵活,设计模式基本都木有啥鸟用了,在ruby里面提设计模式,确实很多模式没啥可研究的,语言特性就已经把问题解决了
西方人就不同,最伟大的发明就是代数。碰到问题先列成方程,映射到数学语言,再用数学语言解决,不管你什么题型、什么模式,一列方程本质就出来了。
话说确实模式降低了程序员之间的交流成本.解决的一部分问题.但是我不保证他没有禁锢思想的东西存在. 为啥rails这种东西被DHH玩出来. 而精通模式的大牛们还在不停的耍弄接口. 是不是值得玩味呢? ..
btw: 博客的回复不能编辑. 导致我每次回复都要慎之又慎...
有关模式的书真是不少
设计模式
实现模式
企业架构模式
反模式
读一读还是总有收获的
我觉的
设计模式本身标准意义大于对一个程序员的提高
程序员之间可以直接说出模式的名字,就可以简单的明白一些模块的结构了
所以我认为设计模式应该是基本能力他关乎程序员之间的交流,而不是评价一个程序员是否懂得什么叫可复用的软件设计。
而另外的一些模式,是一些经验的东西,写成书也不是逼着人们这么写,而是从开发经历中去发现一些badcode 的前生往事,追随作者的思考,传承经验,才是模式书籍的根本意义所在吧
写库同时也可以减少他人的知识包袱:告诉你这个是干嘛的,不用重复思考,更无须听耶稣讲经,拿去用就行了。
能力好的可以添加语言特性甚至搞新语言,精力不济的也可以向语言、框架的设计者提个 issue 啊。
---
写一段代码,觉得不错,命名为一个模式,让子孙后代学习去 —— 遗臭万年。
不要说不能写成库,抽象不出来 —— 能力问题。
毕竟很多从java转向ruby的人很多先去找的是有没有什么设计模式. 然后把java这边的设计模式套过去用.. 还有象现在很多的后端处理.用java处理 .跟用其他的fp类似Erlang跟Scala的Actor模型也是不能相提并论的.. 让人们抛弃side-effects .. 还不如让他们放弃语言. 况且各种技术选型的瓶颈也不相同 ..
综上所述.我写了本Java的高可靠性设计模式. 是不是就真的是最好的选择呢? 作为一个架构师而言. 单纯的考虑一种方案的应该不会犯这种错误吧.
设计模式,是思考的起点,以减少闭门造车与重复思考的风险。
但是,设计模式不是设计的目标,更不是设计的终点。
to:狂放不羁
谢谢,去学习ing
to:night_stalker
很多模式,在多种领域与应用中存在,写一个库,不一定能解决问题。
话说真的有必要有那么多的设计模式么?刨去业务. 将这些 安全性. 易用性. 等等的设计模式全都整理出来.那是不是还要一本整合这些所有模式的设计模式呢? .况且不同的系统技术选型之间也有很多差异.. 拿最平常的语言来说. GOF的设计模式就不适用于ruby嘛. 所以.我还是觉得很不靠谱.
以上言论是我从别处copy的. 我不懂具体是什么意思. 随便粘贴了一下. 切勿跨省追捕.
发表评论
-
作为一个JavaEye的老会员,我感到羞愧
2010-12-08 12:36 3911这次的Bambook SDK大赛,我在其中做一些社区联络与维护 ... -
开发应用程序 白拿Bambook
2010-11-11 22:29 2336本月,盛大电子书Bambook程序达人赛将正式启动。大赛奖 ... -
TCDatabase介绍(3)
2010-05-15 22:57 2738四、存储数据结构 1、TCT的存储数据结构 TC的不同 ... -
TCDatabase介绍(2)
2010-05-11 21:35 2338三、TokyoTyrant的网络协 ... -
TCDatabase介绍(1)
2010-05-08 22:54 3122TCDatabase,是我在创新院的同事,riceball的一 ... -
美国软件和菜头——《软件随想录》读后感
2010-01-16 22:44 3090一口气读完了《软件随想录》(More Joel on So ... -
与potian兄闲聊
2009-10-03 23:01 3218昨天的一篇blog,potian兄 ... -
帖子虽老,却不过时
2009-10-02 20:43 5524我昨天发的那篇《咱圈真乱 》,potian在下面留了一个言: ... -
《观止》读后感
2009-09-06 10:21 1958这篇blog,我是先在twitter上写的,然后再转帖过来,这 ... -
有关语言设计的一些联想
2009-08-01 21:51 1901引发我这些思考的,是最近一篇InfoQ的文章:《语言约束 ... -
我用Twitter的烦恼与解决方案
2009-07-20 23:12 2427挺早以前,我就注册了 ... -
我最想做的是什么?
2009-07-14 23:18 2013《费曼的彩虹》,是我最近读到的一本极好的书。最 ... -
JavaEye的历史,翻开了新的一页!
2008-11-19 22:06 6459JavaEye的Robbin昨天发了一篇blog,题目叫做《推 ... -
外国大牛也不过如此——《梦断代码》读后感
2008-09-13 20:51 8302花了一周的时间, ... -
IT开发与管理——新收获
2008-09-08 22:02 31069月4日,我略尽地主之宜,招待了大概20多位朋友。那一场研讨会 ... -
Play with Quiz — 找零钱 (3)
2008-05-06 22:50 2422要改进这两种算法,都是一个目标,就是寻找不需要列出所有解的办法 ... -
Play with Quiz — 找零钱(2)
2008-05-03 23:25 2604接着上回的讨论,我们需要写两个方法,一个找出所有的零钱组合,g ... -
Play with Quiz — 找零钱 (1)
2008-05-01 23:14 3143先把题目再抄一遍: 这周的题目是找零钱,假设我们需要找给别人3 ... -
Play with Quiz (0)
2008-04-29 22:45 2446自从Quake Wang在JavaEye贴出第一个Ruby每周 ... -
发布DynamicStruct-0.2 and BytecodeStruct-0.1
2008-02-05 00:26 3790DynamicStruct,是我最近自己在鼓捣的一个ruby项 ...
相关推荐
此PDF教程以2009年的考试大纲为基础,旨在帮助考生全面理解和掌握设计模式的理论与应用。 首先,设计模式分为三大类:创建型模式、结构型模式和行为型模式。创建型模式关注对象的创建过程,如单例模式(Singleton)...
软件架构师作为一个专业领域的高级职位,其核心职能...《软件架构师应该知道的97件事》这本书通过多位专家的经验分享,提供了一个关于如何成为优秀软件架构师的丰富知识库,对于提升软件架构师的专业能力具有重要价值。
《.NET架构师设计模式特训:深度剖析单例模式》 在软件开发中,设计模式是经过时间验证的、解决常见问题的有效方案。其中,单例模式是一种被广泛使用的设计模式,它确保一个类只有一个实例,并提供一个全局访问点。...
同时,熟悉并能灵活运用设计模式也是架构师的基本功,如工厂模式、观察者模式、装饰器模式等。这些模式可以有效地解决常见的设计问题,提高代码的可维护性和复用性。 四、项目管理与团队协作 架构师不仅要有深厚的...
完成这部分的学习后,可以进一步学习计算机基础知识、软件开发过程、软件架构设计、UML技术、XML技术、设计模式以及面向构件的软件设计等内容。掌握这些知识是成长为架构师的必要条件。 进一步地,系统架构师需要...
系统架构师需要掌握一系列的技术和理论知识,这些内容在“系统架构师教程.pdf”中得到了系统的介绍和阐述。 首先,系统架构师需具备扎实的计算机网络基础。计算机网络是现代信息系统不可或缺的组成部分,架构师应...
《软件架构师教程》是一本全面且深入的指南,旨在帮助读者掌握软件架构设计的核心概念、原则和实践。作为系统架构师考试的重要参考资料,这本书涵盖了高级软件架构师所需的知识点,同时也是系统分析师提升专业能力的...
架构师的知识结构需要能够区分哪些系统方法和工具是有效的,哪些是无效的,这通常需要深入行业并总结规律。架构师不仅需要深入理解行业需求,还必须了解各种系统方法和工具,以及如何在实际项目中应用它们。 在...
架构师的职责不仅在于技术层面的领导,还涵盖了从系统设计到维护的全过程。一个优秀的架构师不仅要精通技术,还需要具备良好的沟通能力、管理能力和对业务的深刻理解。 架构师的核心职责是全面理解业务需求,基于...
蚂蚁架构师之并发编程设计模式与分布式性能优化视频教程 java架构师视频教程推荐,真正的轻量级架构体系,学习java你不可或缺,java自学网作为国内顶尖的java学习论坛社区,专注提供高质量,含金量的视频教程!...
熟练运用设计模式可以提高代码的可读性和可维护性,也是架构师解决复杂问题的有效工具。 8. 论文写作 "论文写作.pdf"提供了一套有效的写作技巧,包括论点阐述、论证过程和结论归纳。良好的写作能力可以帮助架构师...
网站架构师必须知道的知识 一、大型网站演化过程中的网站架构扩展 ...网站架构师需要具备的基础知识点包括:网站架构扩展、网站架构分层、网站架构设计原则、网站架构设计模式、网站架构设计考虑因素等。
历年高级系统架构师真题是备考这一专业资格考试的重要参考资料,涵盖了从2009年至2017年的历年试题,旨在帮助考生全面理解并掌握系统架构设计的核心知识和技能。 在这些历年真题中,我们可以看到一系列关键知识点的...
这份讲义涵盖了软考架构师所需掌握的关键知识点,旨在帮助考生全面理解并掌握IT架构设计的理论和实践。 在软考架构师的学习过程中,以下几个核心知识点尤为重要: 1. **信息系统架构**:这部分内容会介绍信息系统...
在IT行业中,软件架构师是至关重要的角色,他们负责设计和规划软件系统的整体结构,确保其可扩展性、可维护性和高效性。本教程旨在提供软件架构师所需的基础知识和进阶技能,涵盖广泛的技术文档和培训教材。下面将...
- **设计与优化**:架构师应掌握多种设计模式和最佳实践,能够根据项目需求选择最合适的技术栈,优化系统架构,提高系统的性能、安全性和可扩展性。 - **持续学习与适应性**:技术领域日新月异,架构师必须保持...
《软件系统架构师》这...通过阅读《软件系统架构师》,读者不仅可以掌握软件架构设计的理论知识,还能获得实际操作的技巧和经验,从而更好地胜任软件系统架构师的角色,引领团队构建高效、稳定且易于维护的软件系统。
总的来说,备考软考高级系统架构师论文部分,考生需要深入了解系统架构设计的理论与实践,掌握各种架构模式和技术,同时提升自己的书面表达能力。通过研读范文、学习应试技巧、熟悉历年题目,可以有效提高备考效率,...