老张:小王,昨天讨论的那个EJB接口,已经实现了吗?小王:我已经实现了,现在客户端可以通过EJB与服务器进行通信了。上述对话,取自于某项目组的会议纪录,老张是这个小组的开发经理。小王毕业一年,在项目组中主要从事代码编写工作。每天上班,老张会给小王分配当天的工作,告诉小王有哪些Java接口,需要写多少个Java类,具体有什么要求等等。小王按照要求,写完这些类后,交给老张,一天的工作就完成了。衡量小王的能力的标准是,看他是不是能做好具体的事,即“我能做(I can do it)”。小王是典型的第一阶段中人。该阶段中人,通常是入门三年内的,初窥门径,斗志昂扬。在网上常看到的“VB好还是DELPHI好”“.Net好还是J2EE好”等贴子,多数都是由这个阶段的人提出,人气值剧旺(这是合理的,符合人才的金字塔结构),往往争吵得头破血流也不罢休。笔者也曾因此与同班一MM大吵出口,如今回想,深感当年之可爱。独孤剑圣弱冠前,手持无名利剑,凌厉刚猛,与河朔群雄争锋。程序员也一样,手持“编程语言”利剑,以“面向对象”为招式,东征西战,编出代码无数。
适用人群:工作三年内输入:设计好的类、接口和算法职责:按要求编写类和接口的具体实现代码输出:具体的代码阶段目标:我能——I can do it技术特点:注重技巧,对具体的编程语言非常熟悉胜任职位:软件工程师、开发工程师升级秘笈:多学习软件工程、设计模式等与具体编程语言无关的知识参考薪水:¥6000以下(仅供参考)
3 设计,方法为指导
3.1 阶段释义
老李:老张,你负责的这个模块,要有分布式事务处理能力,还要能与客户的OA系统通信,从OA中获取客户资料的数据。老张:好的。我将用EJB来实现分布式事务处理,然后开发一个专门的接口,用来与OA通信。老张毕业五年,是项目组的开发经理,负责完成子系统的设计,并指导其他成员完成编码。老张从老李处获得关于所开发的产品的需求情况,然后进行设计和分析,用UML建出模型,并生成框架代码,由小王等去实现。老张属于第二阶段中人,通常工作了三年以上。此阶段中人,已经完成了一定程度的技术积累。对《设计模式》、《J2EE核心模式》、《UML》等烂熟于胸,张口就是IOC(控制反转),有事没事也要说说AOP,最差也得是Factory、Delegate吧,你要是说不知道什么是Facade,都不好意思跟人打招呼……与第一阶段“我能——I can do it”不同,本阶段的人,特点是“我知道它能——I know It can do”,对,就是“知道它能”,至于如何去“能”,就不需要关心了。例如老张,他只需要把EJB接口定义清楚,知道有了这个接口就能完成相应的功能,至于小王如何去实现这个接口,是写了三个类还是五个类,就不关心了。从技术角度,追求的不再是纯粹的技巧,而是方法这个层次,努力寻求正确的做事方法。即关心“怎样才能盖出好房子”,而不是“如何把石头从货车里搬运到工地上”。用流行的话说,就是“只要方法正确,结果就会正确”。当然,达到这个阶段的人,技巧本身,通常也是很厉害的。举个例子吧,小王要用一个开源的XML文件比较工具,并编了个测试程序,比较a.xml和b.xml的区别,却怎么着都得不到正确的结果。后来老张来了,牛人根本不看JavaDoc,而是拿着XOP提供的命令行比较了a.xml和b.xml,发现结果是正确的,然后直接打开与命令行对应的main(),检查与options对应的API,发现小王少调用了一个API,加上这个API后测试程序就通过了。在这件事中,老张根本不熟悉XOP的API,但他掌握了查找API的方法,那就是:组件或工具,都有其外在特性,通过组件或工具提供的命令行能做到的事,也一定能通过它提供的API来完成。如果不知道如何去调用API,对于开源软件,看它的source code或samples中的main()即可;对于非开源软件,看StackTrace;如果都看不出来,就放弃该软件,选择别家的吧。此阶段中人,也需要编写程序,但编写的是与业务和框架相关的核心类。所用的语句通常朴实无华,用最简单的语句完成最复杂的功能是他们的习惯。例如,求b和c中的较大值,通常不会写成result=(b>c)?b:c而是写成if (b>c)result=b;elseresult=c;因为后者更容易懂,而前者,相对生僻一些。开发经理的工作,是把产品的需求,转变为编码人员能理解的接口或类,并保证团队的所有成员在理解上的一致性、无二义性,在这个前题下,简单而又精确的语句是必然的首选。所以,如果你的经理编写的程序,在你看来很“幼稚可笑”时,千万不要洋洋得意。舍小巧而用大巧,舍弃繁花似锦的编程细节,换取简单稳定的框架结构,换取无二义性的交流效果……独孤剑圣四十岁前,以玄铁重剑纵横天下,剑法古拙,大巧不工,就是此境界(孤独大侠也走过弯路,30岁时用紫薇软剑,可能是追求剑招的繁复和剑法的华丽,失去控制,最终误伤义士)
适用人群:工作三年以上,上限不封顶输入:软件需求(请注意用词的区别:软件需求,而不是客户需求,你所得到到软件需求,是由别人收集来的,并不一定能代表客户,如果“别人”的水平一般,错误理解了客户的意图,那么你就等着跟他一块倒霉吧)输出:设计好的类、接口和算法阶段目标:我知道它能——I know it can work技术特点:注重方法,不关注编程语言细节胜任职位:高级软件工程师、开发经理、系统架构师等升级秘笈:换位思维,跳出技术看问题参考薪水:¥6000以上,¥15000以下(仅供参考)
4 思想,无招胜有招
4.1 阶段释义
客户:我们公司有二十个下属单位,每个单位分别有一套自己的销售管理系统。我们想了解各个单位的销售情况,现在是每个星期由下属单位上报周报,周期太长了,不利于领导及时掌握情况。老李:如果把销售数据自动地集中到总公司这边来呢?客户:集中?有什么好处?老李:数据集中后,总公司可以实时掌握销售情况,不用等上一个星期。根据集中后的数据,您只需要打开电脑,就能看到每小时的销售变化情况。客户:那挺好啊。只是,怎样来集中数据呢?要花多少钱?老李:可以在每个下属单位分别安装一套程序,实时地把进销存系统中的数据提取出来,然后上报给总公司。在总公司这边,也安装一套程序,用来接收下属单位送上来的数据。这样,数据就全部集中到总公司了。从现在的规模来看,您只需要在总公司增加一台服务器,用于接收数据。当然,总公司与下属单位的计算机要能通过网络互联。请问现在已经联网了吗?客户:我们现在已经联网了。公司申请了专线,可以进行视频会议。老李:噢,那就花不了多少钱了。您只需购买一台服务器,再加上软件的费用就行了。客户:噢,听上去挺好的,那你们公司能不能做这件事……(注:上述对话,纯属虚构。目的是为了说明不同阶段所做的事。实际项目中,您可别建议客户“实时提取并上报销售数据”,所花的钱,也不只是一台服务器那么简单,^_^)老李是公司的研发副总。他经常拜访客户,了解客户有什么困难和需求。本例中,客户觉得每周上报一次,时效性太差——这就是需求,同时也是老李的机会。老李运用手中所掌握的技术,帮助客户策划出一个分布式采集数据的方案。老李只需要知道:(1)现在有许多种成熟的分布式技术,能实现分布式采集;(2)老张对这些具体的技术很熟悉。至于如何去实现分布式,就不是老李要考虑的了。老李属于第三阶段中人:既了解技术,又了解业务。从技术出身的背景,使得老李在与客户交流时更务实。许多人对业务非常熟悉,但由于不懂技术,不知道什么事能做,什么事不能做,与客户的交流经常流于形式,只能开花,不能结果。既懂技术又懂业务的复合型人才,往往具备独特的优势,使得他们能在事业上达到别人无法企及的高度。第三阶段的人,看问题的角度已不再局限于技术,而是更一般化、通用化。其实做信息系统也好,做通用软件也好,思维都有一些模式可循。例如,在决定开发一个产品前,通常需要问自己几个问题:n 目标客户是谁?n 客户有什么烦恼?他在抱怨什么?n 客户现在已经有了什么?还缺什么?n 你能给他提供什么?(注:后来我才知道,这些问题早已出现在RUP的Inception阶段中,Inception要解决的是商业风险,上面列的几个问题,就是Inception阶段的成果——Vision Document)这些问题弄清楚后,基本上,“给客户提供什么东西”就已经定下来了。然后就可以与架构师一起,讨论这个产品,并最终由开发小组去实现。与第二阶段中“我知道它能-I know it can work”不同,本阶段主要特点是“我知道它是什么——I know what it is”。也许你会说:“上面的几个问题,谁都能问,干嘛非要第三阶段中人呢?”没错,这几个问题,谁都能提出来,甚至可以用Word写个模板。但是,提问题容易,回答问题难。同样的环境,同样的客户,不同的人收集到的信息是不一样的。不信?找两个人一起去为某个会议做纪录,然后看他们写的《会议纪录》文档,就知道差距了。许多人不愿意做会议纪录,认为这是低级活,其实不然。会议纪录做得好的人,与客户交流时,就能有重点而又比较全面地记录下有用的信息,甚至能领会“弦外之音”。能达到第三阶段的人,通常都是信息挖掘的高手。到达这个境界后,不再需要知道什么设计模式,也不需要知道什么是EJB、CORBA(虽然他们都懂技术,造诣也都不低),就象独孤剑圣,已达“不滞于物,草木竹石,皆可为兵”。说起来神乎其神,其实归纳起来,也就两点:一是识势:俗话说,识时务者为俊杰。用现在的话说,叫“形势比人强”。以一已之力对抗大形势,那是必败无疑。“俊杰”的出现,能推动形势的发展,但也只是“推动”而已,形势是不可能“阻挡”和“违逆”的。大禹治水,疏并导之,鲧不懂这个道理,纵有息壤相助,亦无法堙填。张勋不知道封建君主制已不适合中国国情,而搞什么复辟,唉,可怜啦。具体到软件项目,如果客户想搞分布式,你却建议他搞大集中;客户想要三层结构,你却建议他用二层C/S,岂不谬哉?所以说,识势是应具备的首要能力,是重中之重。二是知人:光说不练假把式。如果仅仅是识势,而没有得力的人相助,那也是一场空。刘备身具“帝王之后,汉室宗亲”的血统,打着光复汉室的旗号,甚得人心,可谓是识势(至于刘备是不是真的想光复汉室,鬼才知道),但在遇上关、张前,他只能卖草鞋,在认识诸葛亮之前,也一直被赶着屁股跑。再说老李,如果没有老张,任他舌绽莲花,天上也不会掉下一套分布式系统来。
适用人群:工作六年以上(经常跳槽的不算),上限不封顶输入:客户需求输出:可行的创意或产品定义阶段目标:我知道它是什么——I know what it is技术特点:注重思想,不关注技术实现胜任职位:部门经理、研发副总、CTO、解决方案专家、业务专家、产品经理、高级产品经理等升级秘笈:换位思维,跳出职场看问题参考薪水:¥15000以上(仅供参考)