刚才和李默同学回忆了一下,发现我自从入行以来做了很多x项目...下面一一列举一下。
1. IEC61970 Metadata: Electricity Power Trading System
当时刚上班,team里有一个Doamin知识很厉害的清华的博士,毕业的论文就是电力市场,而清华又是国家引入IEC61970的五家之一。所以他很超前的把这两个东西结合在一起,做成了一个系统。说实话,刚了解IEC61970的时候,我是相当的震撼的,有赶上那时候MDA风气刚起,IEC61970又是同时MOF(Meta Object Facility)和RDF based,华丽得不行。一下子我就变成了一个MDA guy,一个metadata guy...以至于,在BJUG最初的2年里,MDA/MOF/Metadata成为了主旋律...
2. IEC61970 & CWM(Common Warehouse Metamodel) & Office Plugin : Data Warehouse Integration System
这是迄今为止,我最不愿意回忆的一个项目...因为Office Plugin...动辄蓝屏的遭遇让我心有余悸...这是一个backend是J2EE,frontend是.Net的office插件系统,主要是报表...两边都使用CWM作为数据统一的形式...基本上做到一半我的意志就崩溃了...
3. DB Migration/Refactoring : Jyxpearl
这个项目...是李默同学的私房最爱,从大学一直做了很久,改版无数次...当时没有这么流行的好词,什么DB Migration啊,DB Refactoring啊,那时候我们统称导数据...我导了好多会...基本上线一回导一回...时至今日...李默同学总是不无得意的说:你看,你DB Migration的能力就是我培养的...
4. JMI(Java Metadata Interface) & Eclipse RCP : Multi/Rich Client ERP Product
这个team其实挺华丽的,老栾的产品经理,李默是开发经理,超级资深行业专家(人家实际做过生产科长,MRPII,ERP都是人家玩剩下的)老齐做需求,俺是Architect,还有动物园里的猪Senior Dev,我认识人中美工能力第一交互设计能力第一的米米姐做UI和交互。由于当时看了netbeans和sun的官方JMI实现得太玩具。我们决定从自己的JMI实现开始,系统结构要求多客户端,web,rcp都要...所以是超轻http协议的b/s,c/s。结构还是不错的,过程李默和我当然是敏捷了。似乎一起都超级完美的时候,就是要坏菜的时候...企业事业部解散了...
5. Java Communication & Eclipse RCP : IC Card Reader
上面那个项目解散之后,我跟李默赋闲在家,有不忍心打扰政府,自谋生路找的项目...这个项目要用IC卡读卡器,为了锻炼我们的Eclipse RCP能力,我们决定用eclipse rcp来做。于是问题就出来了...IC卡怎么办?google一把发现天无绝人之路...Java有一个Communication包,可以连接serial port...不过当时tricky的是...我的本子没有串口,我们买了一个串口到usb的转换器...发现根本不能用...于是只好跑到李默家用他华丽的台式机(这厮当年誓言旦旦的说,laptop太慢,一定要用台式机,东借西借搞了个2G RAM SATA[注意,这是伏笔]的机器)。我当时就觉得,Java的这个东西基本就是充数的,貌似完全没有人用过,文档啥的都特少...只能自己摸索。在经历了无数次失败之后,终于成功了。在showcase那天的上午,我最后实验了读卡什么的,都没问题。兴高采烈的把jar拷到优盘上,刚插到usb口上...只见一道闪电...机器黑了...据李默后来分析是主板烧了...我说没事,拿上硬盘,土一点也不影响showcase。李默说...这个...SATA耶...还不流行呢...我绿...此后很长时间,我都怀疑是我跟李默同学范冲,超级项目杀手...
6. RDF, Semantic Web, SparQL : Ontology-Relationship DB Mapping
这是在一家公司做产品,当时我元数据/MDA领域颇有积累...跟这家公司做得类似,就过来负责研发本体到关系数据库的映射...兼带在D2RQ的基础上实现一个SparQL查询语言。怎么样...听上去很华丽吧...到现在我都认为,这个项目是我最有潜力的牛皮,不定那天web x.0了,我也老了,我就可以拉着小朋友的手去吹牛b了"05年我就做semantic web,O/R mapping知道不?Ontology啊,你们啊,sometime too simple"...不过估计这一天还早得很呢
7. Agile Domain Specified Language : Goodhope
这个也是李默同学有份的项目...话里的敏捷DSL实践...不过说实话,也有点X...
我常常听到这样的观点:敏捷软件开发并不是真正的革命性的方法,它所采用的技术大多都是古已有之的。比如迭代,你看很哪本软件工程的教科书上没有提到迭代开发呢?在比如说User Story,看上去也不只不过是Use Case的翻版而已吧!甚至我看RUP也和敏捷方法没有太大的区别吧!
要我说,这些人要么是不真的了解敏捷开发,没有认识到敏捷开发的革命性,只是用外在的形式来把它和其他方法进行了比较。有又或者是实施敏捷方法的时候不彻底,所以四处碰壁以至于搞起了修正主义。最可怕的就是某些大公司,看敏捷火了,总有包装一下,到底还是要卖产品。敏捷软件开发就是一个革命性的方法,只不过它要颠覆的不仅仅是低质量的软件开发方式,更重要的是,它要颠覆软件生产企业和软件的使用企业之间的生产关系!!这一点在敏捷宣言里写得再明白不过了
Customer collaboration over Contract negotiation
敏捷软件开发,就是要以一种更合理的共赢的合作关系,代替以前畸形的采购式的合约关系。为什么合约关系就是畸形的?我们来看看合约双方的处境。
首先软件团队方面承担了过多的风险:业务变化,改代码!!商业抉择转换,改代码!!凭啥你甲方的缘故非要我承担额外的成本?你说我冤不冤?冤!但是人家甲方也冤!!人家花了大把的银子,拿到一堆不能用的软件(你要是硬件人家还能转手卖点钱),就像你要砍树别人给你把铲子,你要种树人家给了你把锯。搁你,你也不愿意。且不说博弈,就算双方都有心把事情做好,按合同来,甲方不干;不按合同来,乙方不干,最后变成“有心杀贼无力回天”,大家一起扯扯皮等二期算了。lose-lose,没有赢家。
那么合作的关系是什么呢?合作的关系就好比你去subway买三明治,面包你自己选,要什么肉你来挑,蔬菜,cheese,酱汁你也自己看着办。技术我来,口味你选。技术失败我负责,口味不合适你负责。你做你的强项我来我的强项,最终大家高高兴兴嘻嘻哈哈不吵不闹,作出一顿可口午餐。这是时候,生产关系变了,我不是你的冷冰冰的供应商,你也不是我邪恶的客户,我们是拴在一根绳子上的蚂蚱。成功是我们的,失败也是我们的。荣辱与共,携手并肩。听着有点耳熟?没错,SaaS。敏捷宣言早就说了,CoC啊。从供应商变成服务商,从服务商变成战略合作伙伴,这是在给软件企业指出路,新的生产关系已经尽在其中了。
如果看不清敏捷的这个根本革命点,以为还是开发方法的小打小闹,那么敏捷根本实施不成。这话一般我不敢说的,程序员自发实施敏捷,只在一种情况下可能成功:大企业的IT部门。再赶上个强力的IT领导,自家人嘛,有什么不好谈的。一来二去,就成功了(看看C3,说白了不就是IT部门和业务部门?)但是,如果是做项目的公司,你营销手段不改变,敏捷就不可能成功。你的客户跟你不是合作关系,你通过敏捷增加质量(符合性质量)的工作就不会被人可,那么就不能成为投资,只能是成本。当成本增加到不可承担的时候,敏捷就不了了之了。为什么好多人说老板没有响应?旧的生产关系下敏捷根本就是负担。
说道这里,说一下以敏捷闻名的ThoughtWorks。其实很多人都以为ThougtWorks只有方法论咨询,没错我们是有方法论咨询,但是也有业务模式咨询,客户业务模式不改变,他怎么能彻底敏捷?这点大家不可不查啊。