我眼中的商业软件开发
2009-11-21 00:38接到肖哥的邀请,有点突然,呵呵。跟同学们竞争似乎不公平,咱就算蹭个热闹,不图名次。
如果说学习编程就算接触软件开发的话,那么从接触软件开发到现在也有十来年了。从编程图个乐,到享受编译快感,再到混口饭吃,现在是产品就是我儿子,中间经历了野生派、学院派和商用派几大派系转换,想来也挺有意思的,可以把自己的感受汇总起来跟同学们分享一下。
那么,商业软件开发和非商业软件开发有什么差异呢?我们先说说商业软件的特质:
一、商业软件意味着一种责任
现在圈里炒的火热的几大派系之争,就包括商业软件和自由软件之争。自由软件多好啊,源码给你,你可以自己按需修改然后自己构建。最大的好处是,你可以不用花钱就能得到无数行代码!而商业软件呢?改个屁大点功能,增加芝麻绿豆似的按钮,甚至换个自己的Logo,都得出血,关键是,你不知道它内部是怎么运作的!……于是人们都觉得自由软件好,真好,什么都免费给你。其实这同时,责任也给你了,而这是一般用户扛不起的责任(这个一般用户几乎是百分之百)。不要告诉我谁谁谁定制了某个自由软件给自己用,因为那是没有普适价值的。Windows源码泄露这么多年了,我实际了解的效果是有一个开发人员从代码堆里刨出了软键盘的代码,嵌进了一个触摸屏程序中。
商业软件收费了,卖出了软件,承担了责任,一个个软件机构为了社会中商业系统的的运作奔波在各个公司之间,解决他们遇到的一堆一堆的问题,这就是责任。自由软件现在也在转变盈利模式,软件免费,收服务费,这也是责任,这就是软件商业化了。
二、商业软件意味着效率和效果
效率和效果是商业的生命。同样,商业软件也必须讲求效率和效果。效果,意味着解决问题的品质。效率,意味着还有时间限制。
有上面两条做铺垫,对比自己经历的几个阶段就容易表达了:
责任:
野生派阶段:看到某个算法,诶,有味道,搞搞,开饭了,撤,回来兴致过了,就搞忘了。
学院派阶段:看到某个技术领域似乎比较潮,Test一把,搞个Demo,能把所关注的核心技术用到,就爽屁了。
商业派阶段:拿人钱财替人消灾。不仅要解决当前问题,作为产品化软件的设计和开发者,还需要顾及到数以万计甚至十万记的存量客户的相同问题的解决。不同的运行环境、网络条件、使用习惯、误操作……不怕有问题,就怕补丁发出去是拆了东墙补西墙,被客户认为态度有问题,那就严重了。
于是,在商业派阶段,每一个版本都想方设法的把程序搞的健壮一些、可伸缩一些、完善一些、再完善一些。要知道一个丁点儿大的疏忽可能会导致几十上百万用户辛苦的为程序打补丁,那个成本高啊!那个责任重啊!
效率和效果:
野生派阶段:效什么果?效什么率?不就是玩玩嘛。
学院派阶段:效率不重要,咱有的是时间,就是要折腾。效果?能学到东西就成了。
商业派阶段:效率很重要,效果更重要。不能冒风险,不熟悉的技术?慎重;不确定的需求?慎重;测试的不彻底?慎重;代码没读透?慎重再慎重……
所以,商业派阶段,听过一个老总说到:稳定压倒一切。
平衡之道
新技术与稳定的平衡之道:其实我也是个追新族,什么新奇技术都会去摸摸、搞搞,但是新技术所带来的风险和稳定有必然的矛盾:太新,所以了解不透彻,一行代码下去,会有什么影响心里是没底的。而技术是为产品服务,产品是为用户服务,没有透彻的技术了解,不能做出稳定的产品,就不能为用户服务。出于这个原因,我对在生产环境使用新技术是有自己的平衡之道的:每一个版,引入新技术的部分不能超过本版变更的百分之十——技术创新与新技术应用是产品生命周期中重要的组成部分,但所有的变更必须可控。
成本与效果的平衡之道:没有好的过程,就不会有好的产品。但是好的过程也不是一蹴而就的。对每一个项目组而言,它的过程都是唯一的。没有一个可以放诸四海而皆准的过程标准可以万试万灵,但是我们会不断的去发现开发过程中问题——这是一种乐趣——去解决问题——这是一种成就感——这样的问题往往需要通过平衡的艺术来解决。解决问题的成本和解决问题的效果之间的平衡,没有绝对的正确与否,让客户满意、让伙伴满意并让成本可接受,足也,但也难也。
产品的平衡之道:客户总是希望产品具备所有他希望的功能,销售人员总是希望所有的客户都能满意,产品经理希望所有的销售人员都满意,老板希望以最小的花销让所有的人都满意,开发人员希望不要加班,还要涨工资……而我需要让他们都满意——这是不可能的。一个产品永远不能让所有人都满意,但是可以通过平衡让最多人满意——够了。
题外话:其实商业化的商品开发,是非常讲求目的性的,而客户满意就是终极目标,所有的技术、方案、架构、流程、方法学,一切的一切,都是围绕这个中心在转的。而这个中心的基础是稳定压倒一切——没有客户愿意用一个折磨人的软件。看到有些同学不满,那你是不是就是不创新了?但是我要告诉你,童鞋,商业软件中的创新也是讲求目的性的,而这个目的是客户满意的同时降低成本。脱离了这个目的,那就是为了创新而创新,没有价值。国产凌凌漆中的要你命三千,也是创新,但是它的价值何在呢?无意义。很多学习Java的童鞋痴迷于某个框架,常常自称精通Spring、Struts等等等等,我在面试的时候经常问一个问题,Spring框架是为解决什么问题而生的?分层!为什么要分层?……什么时候,我们是不是应该反省一下,我们是该关注这个东西本身,还是该关注解决问题本身呢?有童鞋说,外国的软件开发都是大型的、系统级的、框架级的、平台级的,都是牛逼的,牛魔王的,我们国家却没有,于是我以后要做大型的、系统级的、框架级的、平台级的、牛逼的软件。但是根本的问题却没有想过:外国产生这样的软件都是为了解决他们看到的特定的问题,我们没有,不是因为我们做不出来,而是因为我们看不到这样的问题——我们太关注这个东西本身而忘记了它的本源——而这正是商业软件开发所关注的问题的核心。
我们关注解决问题的效率和效果,所以我们采用实用而成熟的技术。
我们为客户负责,所以我们不会领着客户冒风险。