当我在Infoq上看到了“技术债务”这个新名词的时候,加上正好前一段时间也和做市场和销售的朋友谈了一些东西,我受到非常大的启发。 市场人员、销售人员(以下简称营销人员)和技术人员的想法完全不同——我朋友说他还有他的朋友们有很多想法,就是没人去实现(没技术),其实只要手上有个产品,哪怕不够好,只有60分,也能够卖出去。这朋友正在创业,网站还没上线,广告投放就已经谈妥了——这对于我这种搞技术的人是完全不敢想象的,手头没有实实在在的产品,我都不敢出去和人说。 似乎他们很有道理,在当今这种“不管黑猫白猫,抓到老鼠就是好猫”的思想熏陶下,他们这种无论产品好坏,能卖出去赚到钱就好,也是“正当”的,更是“高手”。然而这种想法是一种浮躁的心态,其实就是渴望暴富,最终还是会害了自己。 朋友因为在创业,没有合适的技术伙伴,为了能降低成本,技术团队方面他们仅仅雇佣了一个普通的PHP程序员(没有任何架构的概念、不会配置服务器、不了解数据库建模),一个前端工程师和一个实习生。而几个创业合伙人都是兼职,不能全心全意。又为了能迅速完成既定目标,直接购买了所谓的国内某知名CMS——大家也能猜到,这个CMS的代码写得非常混乱,虽然功能经过定制,看上去能部分满足朋友的需求,但是我一看就知道,将来维护会很成问题,极有可能将来会将这个代码全部重写,而迁移的过程可能是非常痛苦的——这就是所谓的技术债务,是迟早要还的。 不少公司老总都希望事情能够“多快好省”,但世界上哪可能有这么好的事情呢?回报总是和付出成正比的,否则就是欠了债。公司的发展就像生物的成长,首先内部各个器官必须齐全,其次外部的条件合适。我人对于公司成长的不同阶段,根据公司的情况,应该制定合适的目标。如果公司没有技术能力,则应该出钱构建符合目标要求的技术团队,如果连钱都没有,创始人就不应该一下提很多需求——就低价招3个技术小白就妄图做一个门户网站? 当然我可以理解他们希望通过快速弄出一个原型,然后可以吸引到投资,然后再去建立团队,再重新完善不规范的地方,即,企图通过一个不完善的小产品作为杠杆来撬动一个大事业。然而杠杆原理不是这么用的,杠杆原理中,同样的一根杆子,要撬动同样重的东西,无论支点放在那里,省力的必然费距离,费力的才可以省距离,总体消耗的能量总是不变的。如果想翘起特定目标的事业,如果付出少(人力、物力、财力),那么需要的时间就多,如果要快,就要付出更多。当公司的事业没有达到一定的条件的时候,就去忽悠投资,鼓吹公司将来能如何地盈利,那么当投资进入之后,情况就不能完全由创始人决定,他们会受到更多的压力,无法再静下心来回头慢慢搞规范,只能更加浮躁地去考虑如何赚钱。这时候,如果技术方面的债务得不到很好的清偿,会出现很多问题,诸如依托技术提供的服务达不到要求等(我只关注技术方面,其实还要关注运营、财务、市场等其他方面),导致被吹出来的目标无法达到。诸如此类的案例当然不必多说,比如CSDN的BLOG的稳定性。当目标无法达到,要么投入更多的人力、物力、财力来弥补这个错误,要么忽悠落空,投资撤出,公司也就不能继续了。 出来混,迟早要还的。
最近关于Google浏览器Chrome的报道铺天盖地,我也第一时间尝试了Chrome,我觉得其简洁的风格我非常喜欢。不过这只是第一个版本,稳定性和功能各方面还有待增强。但我发现了一个Google在这里的一点技术创新,那便是不同的标签页使用了不同的进程。 不搞编程的人可能不知道这里面的好处: 多进程提高了整个应用的稳定性:倘若有一个标签页崩溃、假死了,并不会影响到其他的标签页。我在Firefox下经历过某个页面的假死导致必须强制关闭整个浏览器。 多进程可以提高应用整体性能:现在计算机已经进入多核时代,只有能利用多个核心的优势才能进一步提高程序性能。一般而言,单进程的程序要通过线程来利用多核,但是线程之间由于共享同一片内存地址,编写代码容易出现问题(如锁的争用等等),不如传统的进程方式方便稳定。 多进程可以节省内存资源:进程结束之后内存可以立刻释放,就更不容易出现内存泄露和内存碎片过多的问题 多进程提高安全性:安全性部分我不了解,但是考虑到进程之间的隔离,我觉得安全性是可以更好地提高的。 过去IE也有多进程模式,但必须是重新执行IE的进程才行,对于从任何一个IE窗口中弹出的新窗口,实际上和原窗口还是同一个进程,而进入到了IE7之后,标签方式浏览必须使用同一个进程。而FF和Opera则一直都是单进程模式。Chrome完美结合了多进程方式和标签浏览,这一招确实非常高明。 虽然目前Chrome应用这一方式可能还存在一些问题,不过我认为方向是正确的。
以前朋友带我去上海的一些店里吃东西,经常说“店大了,东西没有以前好吃了”。然而,我也和朋友去过另外一些小店,味道和店面都一如既往十几年(除了物价上涨)。 这时候我发现身边很多东西一旦开始流行,就立刻变味——也许这就叫量变到质变。身边的例子很多,记得05年的时候,我还和同学们一起吃一种叫做“掉渣大饼“的东西,那时候这玩意儿突然很流行,但没过多久,突然又消失匿迹了。有人分析原因是这样:“流行风,不适合在一个固定地点开店,适合流动售卖。 口味比较重,油也挺大,不是健康食品。所以刚出来时,大家出于好奇,买的人较多,但不适合常吃。”[1]然而也有人分析是因为“无序加盟”造成的[2]。 掉渣大饼的例子算是一类典型,但它的“潮流”,也许还不是那么地引人注目。只能说,它的“流行”只是相对于其他接近的东西,在短时间内聚集了大量关注。也许标题改成“公司在快速扩张过程中容易出现问题”更能符合我所想说的。因为公司产品突然地流行起来,意味着公司更加有利可图,那么公司会想办法扩张,而在扩张过程中,由于某些方面做得不到位,或另些方面做得太过分等,而导致产品不能如公司或者受众的期望继续发展,甚至最终导致公司扩张失败、甚至市场萎缩。 我很想探究其中的道理。不过我认为应该首先定义“流行”是什么。百度百科上这样解释[3]: 比如一些事物,刚开始没有太多人去注意,慢慢的引起了很多的注视,后来越来越多的人开始关注它,这就是所谓的“流行" 不过这似乎与我要阐述的流行有所不同,在这里我所谓的流行是指受众比原有变的多,且增长速度也在提升。当然还有受众的问题,当受众之间个体之间相同点少,那么可以说是大众流行,反之,就是小众流行;如果小众是属于有钱人,似乎就是高档的奢侈品;如果在受众中的接受程度高,那么就是该群体中的“主流”;如果在大众中接受程度高,那就可以算“主流”了。 我把在潮流中的三个类角色划分出来:A. 通过这个事物引领、制造(有意或无意的)潮流的公司或个体,B. 在潮流中模仿A,想分一杯羹的跟风者,C. 潮流的受众们。 C是原动力,A是导火索,B是推波助澜的。没有广泛的C,就不能成就A所需要的市场,没有市场带来的利益,也就不会有B的跟风。当A不能注重品质,东西就变味了。 往往当潮流来临的时候,没有人会意识到它有多大,它能持续多长,普通的公司往往都只想在潮流中能捞多少捞多少,而不管自己是不是真的有实力。我归结这些个公司在潮流中失败的原因往往有: 只注重扩张,而不注重品质:只知道要多捞点,不知道要全面均衡发展。 有各方面条件更好的后来者居上:没想到被巨头盯上了。 市场需求被透支:过分炒作流行的概念,等受众回头醒悟发现被骗了。 所以我想问问,那些准备制造、或刚刚制造了潮流的商家们,你们真的准备好了吗? 关于Apple 其实突然想写本文其实也是因为Apple。随着Apple的一系列优秀产品iPod、iPhone等一下子流行起来。最近Apple的日子不好过: 3G版iPhone遭遇质量门 苹果称暂无召回计划 3G版iPhone后盖开裂遭遇质量门 多部3G iPhone手机曝出塑料外壳无故开裂 掉漆又断裂 iPhone 3G质量缺陷曝光 高价不高质 iPhone 3G外壳龟裂曝光不断 种种负面消息传出,我就会说,Apple,你的iPhone还没准备好吧?不可否认,Apple的iPhone的外观设计是出色的、操作系统是优秀的,软件服务也是很棒的,可惜,Apple你本来不是做手机的。iPhone的流行导致这个苹果变味儿了。 过去的定位与未来目标的冲突 Apple的产品定位一直是高端用户群体。以前,我对Apple的Mac是有一些好感的,当然我也不讨厌Windows。我一直认为Apple的东西很酷,很有形,用Apple的是设计师,非常有个性的人,他们很有创造力。然而在国外,iPod已然变成了是一个日用品。而在国内,则是一个时尚的代名词,用iPod,就可以显得很前卫,很潮流。其实当用的人多了,也就没有什么前卫不前卫的。因为直到有一天,我发现送外卖的小弟也揣着一个iPod。同时,模仿iPod的MP3、MP4公司越来越多,功能也会超越iPod,iPod虽然能因为Apple的种种魅力保持他的地位,但它在这个领域的份额也会逐渐减少——就好比现在手机与山寨机;如果iPod的份额不减少,甚至越来越高,那么说明市场正在衰退,因为用的人实在太多了,没有人会觉得这很前卫、很时尚。 其实Apple过去做的东西是有点“奢侈品”的意思在里面,然而,将来它要面对的是自己的产品变得大众化。 盲目扩张,忽视了品质 也许并非Apple不注重品质,而是对于手机的设计制造还缺乏经验,所以才出现了种种“瑕疵”。正因为对iPhone前景过于充满信心而到处签约,却忽视了iPhone的产能问题。这些问题非常容易导致iPhone的品牌被做烂掉。 Apple没有做过手机,难免会出现一些问题,但是因为Apple之前太成功了,所以iPhone理应成功,人们的期望总是很高。这种突然的潮流,搞不好就会淹没Apple自己。 其实iPod,在2001年出现第一代iPod,也是出现了很多问题,我的印象中,到05年,国内才开始流行iPod。这种稳步的渐进式的,也许更加符合发展规律。 这点Google就非常聪明,Google也希望进军手机领域,但它清楚,一方面自己没有做过手机,另一方面蛋糕要一起吃,只有拉拢手机巨头们,才 能抢占这个市场,所以它推出了Open Handset Alliance,自己主导做系统,然后推自己服务。当时Gmail的推出,引发了无限/超大容量邮箱的革命时,Google也是用了类似策略,因为 Google清楚自己无法应付过多的用户,所以他在Gmail推出初期,只有被邀请才能加入,并且刺激别的邮件供应商跟进。这样在占据了合理的市场份额的 同时,保证了Gmail的品质和发展。 摊子铺太广、独来独往 有人经常拿Apple和Microsoft比,其实我觉得两者除了在操作系统上可以进行比较外,其他方面没有很多交集。 历史上任何一个大浪潮,都不是单单某一个公司能够凭借一己之力完成的,PC机和Windows的流行,并不是一朝一夕的事情,而是顺应历史的必然。在Windows95流行之前,微软就已经做了十几年操作系统,而微软的联盟者,已经做了十几年的PC机。微软从来没有想着自己做硬件去统治整个市场。这就是为何微软抄了苹果的界面,却比苹果更流行的原因。 因为苹果什么都做,同时又几乎完全封闭自己的架构,一个公司的能力是有限的,所以它一直只能走小众路线。苹果从硬件方面的芯片、机箱、显示器,到软件上的操作系统、各种“i”系列的应用软件,从台式机到服务器,到现在的电子产品、手机,Apple可谓无所不包(虽然不是每个零件都自己做)。这也就是为何苹果机没有最终广泛流行的原因,因为微软不是一个人在战斗,微软的背后有Intel,有IBM,有各大中小PC制造商,有无数共享软件开发者,有无数的游戏厂商。苹果的封闭而又追求完美的面面俱到的开发,使他开发出来的只能是曲高和寡的艺术品。 当然,苹果也走了几招妙棋。MacOSX是基于BSD系统开发的操作系统,BSD是开源Unix系统家族中的一员,而且苹果也开放了一些东西让广大开发者一起维护。这就使得MacOSX可以兼容相当多的*nix软件,一下子吸引了很多*nix的开发人员。然后苹果又与Intel结盟,采用Intel芯片。 总结上述一些问题,我认为苹果目前其实处境还是很危险的。希望苹果不要再变味了。
兼谈培训的重要性 在写上一篇《毕业生如何挑选好的公司》时,让我回想起当时实习和刚刚开始工作的很多事情,让我又有很多感慨。其中在UUZone的经历,如果说出来给大家听听,结合上一篇文章,大家就能更加理解我的意图了。 05年夏天,也就是我大三快结束的时候,我打算去UUZone实习,为什么选择UUZone呢。首先UUZone在南京,我当时因为还需要重修几门课,所以无法离开南京(丢人啊)。其次,那时负责UUZone的是冒志鸿,冒大哥也是东南大学毕业的,一下拉近了我们之间的距离,而且在南京,大家都说东大的人是搞技术的料,从冒大哥的blog中我也能看出他对技术的执着追求。最后,我刚开始上网的时候(2000年前),用的便是网际精灵,这也是UUZone的母公司北极星的作品,UUZone的前身网际精灵社区,在那个时候,网际精灵做得要比腾讯的OICQ好多了,而且网际精灵社区的技术也十分超前(比如用Iframe模拟了现如今很流行的Ajax),因此我对北极星有很大好感。由于这三点,我便毛遂自荐,去了UUZone。 然而我在UUZone并没有待多久,只有两个月(也可能是三个月),便被fire了。我至今记得冒大哥在我临走之前和我说的话,在公司工作,最重要的是要Get things done,把东西做出来。因为从进UUZone开始,冒大哥给了我一个简单的任务,做一个HTML编辑器出来,用来替换UUZone现有的。而就这样一个简单的任务,最后我也没有很好完成。 为什么这样一个简单的任务都没有完成?我自身固然有责任,套用经典的批评:“眼高手低”等等,这可以说是多数人批评我们现在这些毕业生的惯用语句。然而,仔细分析一下,更能发现这其中也许更多地是公司方的问题。 因为我还记得冒大哥的另外一句话:“在你之前也有几个很有才的同学,可是没有能Get things done,所以没留下来”。 一个不能留下有能力、有潜力的员工的公司,显然是存在问题的。 我觉得一个很大的问题就在于他们没有新员工培训这个“初始化”的过程。 我根据我的经验总结一般实习生和毕业生(甚至包括有工作经验的人)到新的公司开始工作,都存在以下几个困惑和难处: 一、不了解公司同事、同事不了解我 二、不了解公司的规范、制度、惯例 三、不了解公司的项目、技术、文档 四、急切地想展示自己的能力 (以下假设我就是这个新人) 任何一个新人来到团队,都需要经过一个磨合期,因为彼此之间互相不了解。我不了解团队中其他同事是怎样的人,怎样合作比较好,他们都有怎样的能力,他们也不知道我的能力如何,因此,在工作分配上就会产生问题,一般很难分配一个合适的工作给我,或者是做一个工作需要多久。我也不知道工作的难度如何,手里有没有资源去完成它,公司需要怎样一个过程去完成它等等。 为了解决这个问题,一般公司都应该指派一个导师。我认为这个导师在初期应该全权负责我的一切问题,应该经常和我保持沟通,“问寒问暖”等。拿我在UUZone的经历来说,当时我没有明确的导师/负责人。我那个小组大概有6个人左右的样子,而只有两个男人,依稀记得冒兄应该是让这个小组的经理来负责我的事情——是个女的。她很忙,所以刚开始我有问题的时候她爱理不理,因此我也只好退缩了。真正和我混得比较熟的同组的另外一位男生,也是毕业之后刚来这里没多久的。 举个有趣的例子,刚去的时候我分配到一台机器,键盘是非常老式的机械键盘,打起来手指头都疼(我个人偏好软的),而那个鼠标居然左键不灵光,我不记得一开始找谁负责了,总之没有下文,我一火就把这个事情发到UUZone的自己的blog上了。冒兄的爱人——一位值得尊敬的大姐——看到了我的Blog之后,立刻和冒兄沟通,然后很快将我的鼠标和键盘换了。 这个就是沟通的问题,因为我不了解他们,不知道有问题都应该找谁,而他们也不了解我,有时候就会把我凉在一边,我也不好意思总烦人家。 为了能检验新人的能力,但因为公司又不能十分信任新人,一开始一般不会让他们参加重要的项目,可能会放到不紧要的项目中,做个简单的小东西。比如我在UUZone得到的任务便是弄一个HTML编辑器。但是因为这个东西不紧要,加上我没有确切的负责的导师,或者说这个导师太忙不鸟我,使我有很多对于需求方面的问题弄不清楚。 其实我得到这个任务没到半小时,便拿来了FCKEditor部署起来了。然而由于没有与导师之间的沟通,这个任务迟迟不能很好解决。 后来我为了能测试HTML编辑器在UUZone上的效果,需要拿代码来搭建测试环境——UUZone用的是Tomcat+Struts+iBatis。我不记得是等了多久之后,我机器上的测试环境才帮我建好。但我记得我在审查UUZone的Java代码的时候中看到了很多,后来问了其他人才明白他们这么做的道理——如果能有足够的文档并且我能去接触到,我就不会提出这么“低级”问题,如果有导师,我就不用那么麻烦去找很多人问。 由于这些阻力,最后我放弃了在这里工作的念头,混一日算一日了,其实,即使那天不是我被fire,我也会提出辞职的。 如果泛化分析一下刚刚的四点,在一个没有培训、没有导师负责的公司,情况会变成这样的: 新人和员工互相之间的不了解,导致合作困难,需要时间磨合,所以一开始新人不可能有太多机会接触重要的东西,公司会安排不重要的东西。由于不信任,所以新人难以掌握尽可能来开展工作。由于新人负责的东西不是很重要,所以其他人不会非常重视,而新人急于表现自己的心态又容易受到这些阻力的影响而使将来的工作热情降低。甚至可能形成恶性循环,新人觉得自己无法融入集体,老员工又觉得新人问题多多。 而如果公司有培训,那么公司很容易给毕业生和实习生一些课程让他们学习公司的工作流程、工作中所需的技能,并且可以与将来的同事慢慢地磨合、相互了解,就不会出现以上的四种问题。 即使公司没有培训,那么也应尬配备导师,负责与毕业生、实习生的一切事务,包括各种像我上面提到的鼠标的那种小问题,再带领新人结识其他人,参加公司的活动,这样新人也能很快融入整个集体。 然而没有培训,又没有导师,新人很容易觉得自己是个孤儿,没有人来关心他(们),最后久而久之,工作也不能很好开展。 所以,我后来带新人的时候,采取了一些策略: 第一个星期不让他做任何项目或东西,先熟悉环境 经常带他和同事一起吃饭,增进交流,互相了解 对他给予理解和信任,他有需要的话,将我手头有的资料尽可能给他 经常和他沟通问他有没有问题 今年,还在上一家公司的时候,有一次,一位刚来一个月的新同事做的东西上线之后有问题需要调试。因为我们这里人手少,没那没多流程上的规矩,我直接将服务器帐号密码给了他,他非常吃惊,说这么重要的东西就这样给他了,其实如果我不信任他,不知道他还要绕多少个弯,花多久才能找到问题呢?充分地信任,让新人发挥更大的才能。因为我之前就是,在这个公司花了一年,才得到老板的完全信任,才拿到这些帐号,才能做公司核心的东西,其实充分信任我,我早就可以发挥更多的能力,我就不用一直做一些边角料的小东西了。有人说诚信可以大大降低交易的成本,正是这样。 后记: 其实那时候我觉得冒兄应该是不错的导师,因为很多事情和问题最后都是他来和我交流的,可惜他更忙,经常出差。 我在UUZone的经历让我发现了UUZone的管理上的问题,——当然不止培训这一条——让我知道其实UUZone很难做大,创业不仅仅是关于技术的。我走了一年之后,UUZone也发生巨变,连冒兄都离开了UUZone,实在是非常遗憾。