2011年11月27日星期日

闲谈2011年11月情况

a.不上班的日子
因为德国糟糕的天气,生病了,11月17日,18日在家呆了两天。连续看了两个医生,最近一年来,每个季度好像都要生病一次,每个季度都要交一次10欧元所谓的挂号费,并使用一下医疗保险。看来还是要多锻炼身体才是。因为生病了,昏昏沉沉的,没法编程。很少超过两天没有编程,我居然会想念编程,常常在思考一些编程问题。仔细一想,其实并不完全是因为我对编程有爱,也有可能因为写程序时自我重要感也就得到了满足,并且总是认为自己在参与的项目中是个不可替代的人物,得到同事的需要,感受到这一点的时候,那种幸福感是无与伦比的。不编程的日子,日子也过的很快,读读别人的博客,看看网上有趣的视频,玩玩实况2012,然后选顶级对手,被电脑虐几次,做做饭,一天就过去了。

b.第一次参加workshop
第一次参加我们组的workshop,我们组的workshop还挺有趣的,所有同事和教授都一起到一个度假酒店(这个酒店离我们大学也就2小时车程)住3天,也就是这个月23号到25号,然后进行汇报总结,还有分组讨论,每天3餐都是自助餐,在讨论的时候还提供各种点心,感觉就是一直在吃东西,还好一般来说我们的workshop只有3天不然会把人搞的胖死。

c.第一次参加展小型的科技览会的比赛
24日,我和一个同事还专门从我们workshop的酒店,开车回到我们大学参加一个小型的科技览会,参展的都是我们大学的博士生,当天比赛参展完成后,又开回我们的度假酒店。值得开心的是,我们参加比赛的项目获得了"跨学科的创新奖",并共同获得了1000欧元的奖金,这是对我们的努力极大的肯定,而且在展会上很多人都对我们的产品和想法有很正面的评价。现在我对我们的产品在明年的面市更有信心了。下个星期开始进行我们项目专利注册的事情。


附加:
刚刚,随便翻了下以前看过的书,发现有些有趣有用的观点,这里做一个摘抄:
帕金森法则(Parkinson's Law)[1]:任务的重要性和复杂度与所分配的完成任务的时间密切相关。(Work expands so as to fill the time available for its completion.)   
帕金森法则告诉我们一个道理,我们其实可以减少工作时间来做最重要的事情。这就是不断迫近的最终时限的魔力。如果给你24小时去完成一项任务,时间的压力促使你集中精力去执行,别无选择只能做最重要的部分。同样的任务,如果给你1周去完成,它就换来了小题大作的6天。如果给你2个月的时间,但愿不要这样,它就变成了一场精神磨难。因为精力更高度集中,短时限内做出的最终产品通常不比长时限内做出来的差,甚至质量更高。[2]

30岁是一个关键点。一个人是作为通才走上企业的经营管理者或者创业家的道路,还是走上企业内部专家的道路,必须在这个时候做出决断。而且在35岁的时候,还没有展现出通才能力的人,就应该不要有任何的犹豫,选择一个专业领域,并且拿出不输给任何人的决心走上成为专家的道路。[3]


引用:
[1] http://en.wikipedia.org/wiki/Parkinson's_law
[2] 《告别朝九晚五:每周工作4小时》
[3] 大前研一《知性力II》

2011年11月14日星期一

我们的XX项目使用的系统架构

上上个星期五,我们的大头和我们三个核心开发人员开了一个下午的会。决定11月24日,参加一个展览会,推荐我们的产品,也是算是一次了解我们的产品的市场反应的机会。但是这个产品的具体介绍(其实是一个专业软件,加上辅助的硬件系统),我将在正式上市的时候进行详细的说明,可能会在明年的2月份,这个项目的软件部分这里我就暂且称之为XX项目。

这个XX项目已经进行了一年,我从开始就参与开发,作为软件核心开发人员,看到即将上市,感到特别的兴奋,而且有些成就感,特别是这个软件的用户界面还是我一点一滴设计的,和很多程序员不同,我认为设计一个漂亮的GUI是非常有趣的事。

进入正题,今天谈谈这个XX项目系统架构。

开发这个软件我们采取的很多对我们来说比较新的开发方式和架构,我们采用模块化开发,模块设计,所有的模块都通过我们特别设计的类似Service Interface方式导出其数据与功能,所有的模块的接口通过特定的方式进行开放。这些模块都有自己想对应的测试模块,对其进行自动化测试,使用的统一的架构。这些模块我们不仅使用在我这里所提到的XX项目,而且还使用到我参与开发的几个项目,有的是运行在服务器上,有的则是在单机上运行的。

我们使用的架构类似下面所示,XX_GUI模块是用户界面模块。XX_APP(应用程序)获取各种模块的“服务”,这里类似中间层。XX_GUI(用户界面)通过我们特殊定义的event和XX_APP(应用程序)进行通信,目前我们的XX_GUI(用户界面)是使用Qt进行编写的基于单机,但是XX_GUI(用户界面)可以简单的通过替换改变成为Web-based user interfaces(WUI),例如使用Java,AJAX进行开发,如果使用Web-based user interfaces(WUI),并通过各种Web服务协议进行数据和事件通信,XX_APP(应用程序)进行简单的改造就可以放置在服务器上。


XX_GUI
  ^
  | 通过event进行通信 
  |   
XX_APP (应用程序)
  ^
  | 通过统一模块注册机制进行调用
  |
各种模块

 

XX_WEB_GUI
  ^
  | 通过网络进行通信 
  |   
XX_APP (应用程序)
  ^
  | 通过统一模块注册机制进行调用
  |
各种模块

 

进一步延伸,因为各种模块组合产生的XX_APP(应用程序)可以在服务器上运行,我们的XX_APP(应用程序)适用于类似很多大型平台采用的Service-Oriented Architecture(例如亚马逊),可将XX_APP(应用程序)功能作为服务发送给用户。通过统一Service注册机制进行调用多个不同的XX_APP(应用程序),组成一个复杂的网络服务。例如下面所示。这就因为使用同一Service注册机制这就大大提高服务的复用性。这就是在应用程序层级上提高复用性。

                         特定的服务
  ^                                                                        ^
  | 通过统一Service注册机制进行调用 |
  |                                                                          |  
XX_APP_1 (应用程序)    ... ...       XX_APP_n (应用程序)
  ^                                                                        ^
  |  通过统一模块注册机制进行调用         |
  |                                                                          |
各种模块                                           各种模块

 

最后总结一下,复用性一直是我对设计上思考的要点,简单来说:
我们的模块依赖于我们开发的类库,这就是在类层级上的复用
我们的应用程序依赖于我们开发各种模块,这就是在模块的层级上的复用
我们的服务依赖于我们开发各种应用程序,这就是在应用程序的层级上的复用


接下来的时间,为了准备这个展览会,除了设计一个产品演示,准备展位的广告,就是要好好再练一练德语了,突然发现自己的那点德语水平做一个好的产品演示推介非常吃力。