2011年08月30日 13:28 "@davin"的内容
本人认为数据结构在某种层面也是架构的一种体现,架构是一种方案,一种途径,采用哪种方案的决策者 ...

如果把数据看成是厨师要加工的原料的话,那么厨师如何加工的厨艺是架构的核心,如何处理数据等同于如何加工原料,其中实际就是方法论问题。

我在蒯因与引用透明也提到,当你掌握形式逻辑方法论以后,无论在数学这个形式语言还是在软件编程架构这个形式语言中,都有处理数据的依据和核心。

我们也不能提到数据或数据结构,就联想到数学算术(数据运算);面向对象也是处理数据结构方式,也是一种数据的边界封装;技术架构中提倡数据和程序分离,存储和计算分离,数据的不变性;计算的引用透明性。统统这些都是数据的加工方法。

再回到厨师这个案例,如果说数据就如同切菜板上待加工的静止的一块肉,是一个被动物体,那么我们如何去切这块肉的方法则非常重要。

什么时候程序员意识到“Hold住事件”比“Hold住数据”更重要,就意味他摆脱了数据库阴影,走上了架构之路:NOSQL基于事件的事务实现

数据管理的未来: “Disk-less” 风格数据库?
[该贴被banq于2011-08-31 13:15修改过]

John McCarthy说:不需要数据结构
看了前几页的帖子,蛮有意思。 发表下我的看法

楼主显然没搞明白一个问题: 服务谁?

楼主所说的架构师服务对象是服务程序的程序员。

看了这么长帖子,发表点意见

我觉得这可以和砌房子类比下:

我觉得数据结构和算法是基础,这个是砖头,如果是砌小房子,比如嵌入式开发这种,我觉得还是需要考虑砖头怎么造的,怎么样效率,稳定,省料。

架构这个东西我觉得是一个建筑风格和艺术,是一个比较高的层面,根据客户要求来设计不同风格,外形,功能的房子。 比如球形,方形,太阳能。 在这个层面我觉得去研究砖头没什么意义了。 你要考虑的是怎么利用现有的,一些经过验证的真正好用的技术(nosql。。。),来搭建一个健壮的房子。 砖头的选料我觉得那是一个调优手段,但不是重点

2011年09月15日 21:46 "@yanspirit"的内容
John McCarthy说:不需要数据结构 ...

我不知道他的具体意思是什么,我读了文章如何打败CAP定理?突然明白:能够打败CAP定理是因为我们对业务数据有了深刻的认识,这篇文章虽然没有谈OO,但是他的对数据两个重要性质的概念其实是两个OO概念;状态和值对象。

所以,与其说架构离不开数据结构,不如说架构离不开业务分析,这两者等同的。海量数据抛弃OO说法是片面的,也符合Disruptor并发框架的LMAX团队认为的:Modelling Is Everything,高性能高可扩展性的架构方案只有对业务数据充分理解以后才会形成。

我当时发表这篇帖子的初衷是想告诉大家,特别是做技术的朋友,千万不能好高鹜远,想要研究方法论的前提是对计算机基础知识和技能的熟练掌握,这样结合架构设计才能设计出性能优越并且扩展性高的系统来,你说你是写计算机程序的,但是你都不知道计算机是什么东西,这像话吗?
我面试过一些人,开口就给我说我从来不关心算法,你可以和我谈谈架构方面的东西,那我就问,什么是架构?多数人只会告诉我某某开源程序用在某某层上,这就是大家眼中的架构,中国的程序员不感觉悲哀吗?
[该贴被zzxsky1986于2011-10-17 15:45修改过]
搞软件包括架构,不是大谈基础,而是要大谈方向,方向确定,才能找到基础,否则满地都是基础。基础是相对你的方向而言,否则会将有限的生命浪费在无限的基础知识学习当中。

我这个观点不是否定基础,而是强调根据方向选择基础,打个比喻:比如你的方向是修桌子,那么基础是你会使用锯子就可以,会用锯子是基础,但是如果你是专业想鲁班那样的木工,那么自己造锯子就可能是基础,但大部分普通木工的基础都是用锯子,而不是为了修桌子或做个普通木工而去专门学习造锯子,造锯子还有基础呢,打铁啊,你学得完吗?最后你沉浸在基础学习中忘记你为什么而学,何以学以致用呢?

另外一个问题还要注意:防止无穷的基础知识会掩盖你天然无穷的创造力,你成天都在学习那些间接知识,何以有时间在前人基础上创新应用呢?

搞技术应用的人和搞科学研究的人应该有两种不同思路,后者是根据基础决定方向,比如你的数学基础好,你将来可能从事数理研究,做数理方面的博士,你可以花10年不断地在原来基础上再加基础,可是搞应用不同,没有那么多时间。

我通过这篇文章:不变性设计,希望起到对当前软件开发和架构设计主要方向重视起到提醒作用,

我经常在国内各种知名媒体和交流活动或微博等等场所看到的都是基于数据库的编程研究,和大捧JVM底层机制或Tomcat底层等实现原理的思想,我不反对你有精力可以研究学习这些更好,但是要知道应用编程主要的方向在哪里?走错了方向浪费自己的青春年华无疑于慢性自杀,与其那么多年走一条可能错误的不归路,不如不要做这个行业,无为,对自己对年轻人都是一种促进和帮助。

[该贴被banq于2011-10-21 10:16修改过]

我认为这个软件的定义不没有过时,也永远不会过时,因为它说的太泛了。
就像说万物都是由原子组成的一样。没有办法反驳但不代表这句话有用。
感觉程序=数据结构+算法是没错的.但是随着程序越来越来,数据结构与算法越来越多,非常不方便管理.这时,人们用模块来划分,把一部分数据结构与算法放在一个模块里,避免相关东西太多,难于管理.划分的原则就高内聚,低耦合.面向对象就是人们总结出来的一个划分模块的一种方式.把相关的数据数据结构与算法封装到一个类里.而设计模式是一种划分类的方式,使类的划分更加合理.
感觉程序员可以分两种,一种是方向型的,以后可能成为一个架构师的那种,给他们一个大程序,可以把程序结构划分的很好,但是每一部分的实现可能不是太好.
别一种是算法型的,他们以后可能成为实现的专家.给他一个小功能小模块可能会实现的很好,但是一个大程序需要划分功能模块时,可能分的不是太好!
当然,如果你真的两种都是的话,那么你就真的是太厉害了!但是一般的人精力有限,关注大的方向,小的细节自然就会差一些.如果关注细节,那么大的方向会差一些.
现在国内的发展路线一般是先当个程序员,然后是转为管理或改行去做业务.对于第二种人的需求不是很多.所以大家一般倾向于第一种.
2011年07月27日 17:49 "@zzxsky1986"的内容
云: 这个技术是一个概念,其本质就是分布式计算,,分布式计算的基础是图论和并行算法。
集群: 这个是一种多虚一的特例,依然离不开图论与并行算法。
单点风险:主要依靠无状态和负载均衡,如何实现负责均衡呢?你自己去想,不用我说你自己就想数据 ...

云: 这个技术是一个概念,其本质就是分布式计算,分布式计算的基础是图论和并行算法。图论和并行算法的基础是什么?
集群: 这个是一种多虚一的特例,依然离不开图论与并行算法。图论和并行算法的基础依然是什么?
单点风险:主要依靠无状态和负载均衡,如何实现负责均衡呢?你自己去想,不用我说你自己就想数据。负载均衡是不是也是图论和并行算法?

我想说的是,难道汽车设计师也需要知道汽油是怎么炼出来的?钢铁是怎么练出来?
软件工程是讲究层次的,每个层次的人关注的点不一样,软件架构师关注的更多的是软件的主体结构和领域模型的抽象。而软件架构师因为在某个领域经验丰富因此可以提炼出更可靠的模型。

首先,楼主引用的“软件=数据结构+算法”错了,应该是“算法+数据结构=程序”。软件不等于程序。程序只是软件中的一小部分,可以看成是软件的一个局部。但相当多的IT从业人员把程序和软件等同起来,并没有很好地思考过两者的差别。
其次,“架构离不开数据结构”从某种意义上来讲是对的,但与这种话类似的还可以有“程序离不开晶体管”,“网络离不开脉冲信号”,“摩天大楼离不开砖头”。架构是抽象程度最高的软件产品,而数据结构是构成软件的非常基础的单元。它们之间的关系就像“TCP/IP参考模型”与“IP数据报结构”。架构设计的本质是把复杂问题分而治之,例如,网络参考模型就把复杂的网络通信任务分解成若干个不同的层次来完成。而像IP数据报这样的数据结构只是在架构大方向确定的情况下为解决某个具体问题而做的设计。简而言之,架构体现的是思想,数据结构体现的是技巧。两者是不同层面的东西。