2010年5月

我这么看一个优秀架构的形成

题记:其实一直都对软件架构这个东西有点想法,但是迟迟没有想的太明白所以未敢写些东西,怕露怯了,惹了大家的笑话。近日,读了些书,从中有所得;也跟了几个项目,也有所得,有与人聊了些这方面的东西,并加以考虑,所以试着写下此文,汇报一些个人的想法。既是想写些想法,那么少聊术,而多谈道,姑且认为是我发的一些少年狂吧。

首先,有一点原则须之出来:

没有适合你的软件模型

软件工程领域有许许多多的模型,无论是架构,还是开发流程,但作为一个工程师,我们须有这样的原则。因为模型都是前人们在若干次实践中抽象出来,并加以优化的一种实验室状态,其来源就注定这个模型不可能适应一个实际项目。因此在实践过程中,当我们遇到了与模型冲突的情况,正确的做法是修改模型,调整一个适合当下项目的流程或架构出来,然后继续走下去。倘若,试图改变自己,让自己以一种非健康的姿态去遵循模型的规定,那么这次开发想必是已经开始走上歧途了。

在软件设计初期,选择一个相对靠谱的模型是必要的,在这个模型上加以变化,调整出一个适合具体项目的设计。进入下一步的开发工作,并试图遵循这个设计,当遇到一些特殊情况与设计不符,需要考虑是当初的设计不周全,没有考虑到当下的问题;还是开发过程中出现了不和谐的情况,有人试图通过某种方式绕过一些约定,从而以一种easy但dirty的方式去满足需求。而后再决定是设计重构还是修正工作方式。

上面提到了“设计重构”,那么我说第二个原则:

及时进行设计重构

在一个软件的开发周期中,总会遇到这样那样的问题是与当初的设计是冲突的,这也就是上面提到的不和谐。我认为,这些冲突至少有半数,甚至更多是设计不周全造成的。这并不是说,我们的架构师水平不高,或是我们对需求的掌握不准,云云。事实上这种冲突是必然发生的,试想如果一个架构设计可以从头到尾的正确,那么我们这个软件是什么呢?Hello, World! 吧。一个优秀的软件,必然有着强大的功能,而强大的功能是需要相对复杂的设计(相对复杂,这并不是说复杂度与功能正相关)支持的,复杂的设计就一定有许多隐形的陷阱存在,而工业上是决不会允许我们花上足够多的时间去找到所有陷阱的,因此设计不足必然存在。换句话说,找到陷阱的最好办法,就是踩下去。因此,永远不要害怕设计重构,敢于重构,让设计重构贯穿整个开发周期。

而且设计重构,需要这个软件的架构师,这个角色来推动。架构师是这个设计的作者,因此只有他最懂得这个设计该如何发展才不至于偏离方向。一个优秀的架构师要敢于推翻自己的设计,并拿出一个更优秀的。

好的架构师只是一个优秀架构产生的条件之一,在软件开发过程中,扮演更加重要角色的是:开发工程师。因此开发工程师的习惯也至关重要。原则三:

做一个有洁癖的工程师

作为一名开发工程师,我们需知道,代码不是为了需求而生的。代码产生,满足需求是他存在的意义,但注意,代码生存在这个架构中,他是为了充实这个架构而生。我们相信,在架构中,优雅的编码一定可以满足需求,否则参考之前的原则,我们需调整架构了。那么,作为工程师试图通过之前提到过的easy and dirty的方法去满足需求,只有一种可能:偷懒。这是一种不负责任的表现,作为一个工程师,就需要对从自己手中流出的没一行代码负责,做一个有洁癖的工程师,不要让自己的代码污染了整个设计。

每一个工程师,都小心的去维护这个架构,不试图污染他,那么这个架构必然会发展的更健康。

总结上面提到的三个原则,一个优秀的架构不是设计出来的,而是成长出来的,是在勇敢的架构师和负责人的工程师的呵护下成长出来的。

以上即使在下的一些拙见,或许经验丰富的大牛们会看出不少扯淡的地方,非常非常期待牛人们的指点。

我看“红牌专业”─计算机科学与技术

今天偶然看到新闻,说高校对一些专业亮了红牌,这些专业就业形式极其差,我第一反应是:这帮人终于干点正事,出来把那些扯淡专业搞掉了。可是点进去一看,唉,他们的表现再一次让我怀疑自己的创意。我去翻了翻这份挑战道德底线的报告是谁出的:麦可思研究院编写、社科文献出版社,我已经没心思去细查这些机构是干什么的了,估计也是有着统计局一样的专业水准,地震局一样的只能,全国牙防组一样的身份的组织。

还是先贴一下这10个红牌专业:

动画、法学、生物技术、生物科技与工程、数学与应用数学、体育教育、生物工程、计算机科学与技术、英语、国际经济与贸易

对与这10个专业,我不是每一个都了解,但一眼看上去,直觉上这些专业貌似都需要很高的专业素质,也就是说这些专业在高等教育中应该是热门,而且看上去貌似就业也该不难。

动画,生物,体育,国贸,法律这些专业我不熟,不做评价。

对于英语,不是一直叫嚣与国际接轨么?莫非接轨到我们已经不需要英语专业人才了?我们国家的知识分子们真的已经牛到这份上了?

对于法律,我不想说什么了,我们都是中国人,大家应该都知道,在中国这片神奇的土地上,法律的意为着太多太多,本来学法律的时候告诉你要凭借正义,而真的玩起来一看全扯淡,这专业不景气,可以理解。

其他的,数学和计算机,我想多说两句。我认为应用数学最好的出路也是计算机方向,至于道不同的数学系同学,请绕路。

作为一个计算机科学与技术专业的学生,我在大学里待了三年,看到了各种各样的学生,会学习的,不会学习的,成绩好的,成绩不好的等等,但我不用这些去区分不同的学生,我的标准是:会生存和不会生存的。在美帝国主义,大学不是考上的,上大学就像找工作,自己写简历自己申请,这样方法选拔出来的大学生不管成绩好坏,会不会学习首先具备一个技能:生存。培养这样的人才,让这样的人接受高等教育,这些人到了社会上才可贡献社会。当然,我们也看到美帝国注意也有很多大学书呆子,nerd类型的学生,但你要知道,这些人可不仅仅是书呆子这么简单,都是天才型的,他们不需要会生存,他们在研究室里的贡献大到让你难以想像,而他们的生存问题,社会和国家来解决。

设计选拔制度的是这群人,教书的也是这群人,最后把孩子们丢到社会上,一看交出来的多数是残次品,说风凉话的又是这群人,其脸皮之后不得不让我重新考虑“道德底线”这个词的意义。

扯远了,骂人不具有任何意义,说回我们的大学,一群高分的家伙已经进来了,那么说什么都是扯淡,巴望着教育部改革高等教育选拔制度也是扯淡,没戏!所以我想聊聊在大学里,计科应该怎么学。我不敢自诩大学学的很好,但我简单介绍一下我在大学的经历。

- 阅读剩余部分 -

画心

目标,计算出“心”的方程式,今天先说平面坐标系是怎么推导的,其实很简单。

先看一下目标:

如果只看x>0部分,可以发现,这是一个椭圆,旋转了一个的角度。所以我们用一个椭圆旋转来得到这个图形。

先设一个椭圆,用最普通的椭圆,长轴3,短轴2,标准方程

(x^2)/4+(y^2)/9<0

图形如下:

然后把这个椭圆旋转-45度,并只取1,4象限,就得到了和目标一致的1,4象限

然后另x=|x|,就得到了关于y轴对称的一个心形。

下边说说代数算法。

对于平面坐标系xoy,以o点为对称点,旋转w度,得到新坐标系uov,那么xoy与uov如下对应关系:

x=cos(w)v-sin(w)u , y=cos(w)u+sin(w)v

这个关系从图上一眼就能看出来:

非常明显,不用多说。

这样,我们设xoy上有标准椭圆(x^2)/4+(y^2)/9<0,那么在uov中,这个椭圆就是我们所求的,所以根据上述转换公式,可以得到我们要求的椭圆方程:

((cos(w)x-sin(w)y)^2)/4+((sin(w)x+cos(w)y)^2)/9<0

然后另x=|x|:

((cos(w)|x|-sin(w)y)^2)/4+((sin(w)|x|+cos(w)y)^2)/9<0

把这个公式丢到mathematica里跑一下,跑出来的图形如下:

发现不太好看,那么调整一下系数,把短轴缩短一点,另a^2=3,得到新方程:

((cos(w)|x|-sin(w)y)^2)/3+((sin(w)|x|+cos(w)y)^2)/9<0

这次出来的图就很顺眼了:

 

 

凌晨三点

推荐一手李小龙的歌,凌晨三点,非常适合一个漂在外边的人,半夜听听。

http://jiajun.org/g/lingchensandian.mp3

一般认为玩说唱的都是那些放荡不羁的街头文化,而李小龙的说唱里除了这些还有很多亲情,爱情,友情,也有不少主旋律,用安静的说唱的方式表达这些东西,感觉很不一样。

推荐大家可以听听

爱的方程式

注意:此文不是发骚要写什么爱情什么乱七八糟的,纯数学文。今日网上偶得一方程式,传说图像很有爱,于是下了个Mathe,画之。

方程如下:

(x^2 + (9/4) y^2 + z^2 - 1)^3 - (x^2*z^3) - (9/80) y^2 z^3

以后再跟女生表白,说什么“我爱你”,"i love u"太俗了,太土了,上来就直接说:

I  (x^2 + (9/4) y^2 + z^2 - 1)^3 - (x^2*z^3) - (9/80) y^2 z^3  U

图像如下: