2009年7月7日星期二
惠普前总裁孙振耀指点职业规划
从上面这个例子,其实可以看到我们的工作轨迹,二三十岁的时候,生活的压力还比较小,身体还比较好,上面的父母身体还好,下面又没有孩子,不用还房贷,也 没有孩子要上大学,当个外企小白领还是很光鲜的,挣得不多也够花了。但是人终归要结婚生子,终归会老,到了40岁,父母老了,要看病要吃药,要有人看护, 自己要还房贷,要过基本体面的生活,要养小孩……那个时候需要挣多少钱才够花才重要。所以,看待工作,眼光要放远一点,一时的谁高谁低并不能说明什么。
从这个角度上来说,我不太赞成过于关注第一份工作的薪水,更没有必要攀比第一份工作的薪水,这在刚刚出校园的学生中间是很常见的。正常人大概要工作35 年,这好比是一场马拉松比赛,和真正的马拉松比赛不同的是,这次比赛没有职业选手,每个人都只有一次机会。要知到,有很多人甚至坚持不到终点,大多数人最 后是走到终点的,只有少数人是跑过终点的,因此在刚开始的时候,去抢领先的位置并没有太大的意义。刚进社会的时候如果进500强公司,大概能拿到3k- 6k/月的工资,有些特别技术的人才可能可以到8k/月,可问题是,5年以后拿多少?估计5k-10k了不起了。起点虽然高,但增幅有限,而且,后面的年 轻人追赶的压力越来越大。
我前两天问我的一个销售,你会的这些东西一个新人2年就都学会了,但新人所要求的薪水却只是你的一半,到时候,你怎么办?
职业生涯就像一场体育比赛,有初赛、复赛、决赛。初赛的时候大家都刚刚进社会,大多数都是实力一般的人,这时候努力一点认真一点很快就能让人脱颖而出,于 是有的人二十多岁做了经理,有的人迟些也终于赢得了初赛,三十多岁成了经理。然后是复赛,能参加复赛的都是赢得初赛的,每个人都有些能耐,在聪明才智上都 不成问题,这个时候再想要胜出就不那么容易了,单靠一点点努力和认真还不够,要有很强的坚忍精神,要懂得靠团队的力量,要懂得收服人心,要有长远的眼 光……
看上去赢得复赛并不容易,但,还不是那么难。因为这个世界的规律就是给人一点成功的同时让人骄傲自满,刚刚赢得初赛的人往往不知道自己赢得的仅仅是初赛, 有了一点小小的成绩大多数人都会骄傲自满起来,认为自己已经懂得了全部,不需要再努力再学习了,他们会认为之所以不能再进一步已经不是自己的原因了。虽然 他们仍然不好对付,但是他们没有耐性,没有容人的度量,更没有清晰长远的目光。就像一只愤怒的斗牛,虽然猛烈,最终是会败的,而赢得复赛的人则象斗牛士一 样,不急不躁,跟随着自己的节拍,慢慢耗尽对手的耐心和体力。赢得了复赛以后,大约已经是一位很了不起的职业经理人了,当上了中小公司的总经理,大公司的 副总经理,主管着每年几千万乃至几亿的生意。
最终的决赛来了,说实话我自己都还没有赢得决赛,因此对于决赛的决胜因素也只能凭自己的猜测而已,这个时候的输赢或许就像武侠小说里写得那样,大家都是高 手,只能等待对方犯错了,要想轻易击败对手是不可能的,除了使上浑身解数,还需要一点运气和时间。世界的规律依然发挥着作用,赢得复赛的人已经不只是骄傲 自满了,他们往往刚愎自用,听不进去别人的话,有些人的脾气变得暴躁,心情变得浮躁,身体变得糟糕,他们最大的敌人就是他们自己,在决赛中要做的只是不被 自己击败,等着别人被自己击败。这和体育比赛是一样的,最后高手之间的比赛,就看谁失误少谁就赢得了决赛。
你工作快乐么?你的工作好么?
有没有觉得干了一段时间以后工作很不开心?有没有觉得自己入错了行?有没有觉得自己没有得到应有的待遇?有没有觉得工作像一团乱麻每天上班都是一种痛苦? 有没有很想换个工作?有没有觉得其实现在的公司并没有当初想象得那么好?有没有觉得这份工作是当初因为生存压力而找的,实在不适合自己?你从工作中得到你 想要得到的了么?你每天开心么?
天涯上愤怒的人很多,你有没有想过,你为什么不快乐?你为什么愤怒?
其实,你不快乐的根源,是因为你不知道要什么!你不知道要什么,所以你不知道去追求什么,你不知道追求什么,所以你什么也得不到。
我总觉得,职业生涯首先要关注的是自己,自己想要什么?大多数人大概没想过这个问题,唯一的想法只是——我想要一份工作,我想要一份不错的薪水,我知道所 有人对于薪水的渴望,可是,你想每隔几年重来一次找工作的过程么?你想每年都在这种对于工作和薪水的焦急不安中度过么?不想的话,就好好想清楚。饮鸩止 渴,不能因为口渴就拼命喝毒药。越是焦急,越是觉得自己需要一份工作,越饥不择食,越想不清楚,越容易失败,你的经历越来越差,下一份工作的人看着你的简 历就皱眉头。于是你越喝越渴,越渴越喝,陷入恶性循环。最终只能哀叹世事不公或者生不逢时,只能到天涯上来发泄一把,在失败者的共鸣当中寻求一点心理平衡 罢了。大多数人都有生存压力,我也是,有生存压力就会有很多焦虑,积极的人会从焦虑中得到动力,而消极的人则会因为焦虑而迷失方向。所有人都必须在压力下 做出选择,这就是世道,你喜欢也罢不喜欢也罢。
一般我们处理的事情分为重要的事情和紧急的事情,如果不做重要的事情就会常常去做紧急的事情。比如锻炼身体保持健康是重要的事情,而看病则是紧急的事情。 如果不锻炼身体保持健康,就会常常为了病痛烦恼。又比如防火是重要的事情,而救火是紧急的事情,如果不注意防火,就要常常救火。找工作也是如此,想好自己 究竟要什么是重要的事情,找工作是紧急的事情,如果不想好,就会常常要找工作。往往紧急的事情给人的压力比较大,迫使人们去赶紧做,相对来说重要的事情反 而没有那么大的压力,大多数人做事情都是以压力为导向的,压力之下,总觉得非要先做紧急的事情,结果就是永远到处救火,永远没有停歇的时候。(很多人的工 作也像是救火队一样忙碌痛苦,也是因为工作中没有做好重要的事情。)那些说自己活在水深火热为了生存顾不上那么多的朋友,今天找工作困难是当初你们没有做 重要的事情,是结果不是原因。如果今天你们还是因为急于要找一份工作而不去思考,那么或许将来要继续承受痛苦找工作的结果。
我始终觉得我要说的话题,沉重了点,需要很多思考,远比唐笑打武警的话题来的枯燥乏味,但是,天下没有轻松的成功,成功,要付代价。请先忘记一切的生存压力,想想这辈子你最想要的是什么?所以,最要紧的事情,先想好自己想要什么。
什么是好工作
当初微软有个唐骏,很多大学里的年轻人觉得这才是他们向往的职业生涯,我在清华bbs里发的帖子被这些学子们所不屑,那个时候学生们只想出国或者去外企, 不过如今看来,我还是对的,唐骏去了盛大,陈天桥创立的盛大,一家民营公司。一个高学历的海归在500强的公司里拿高薪水,这大约是很多年轻人的梦想,问 题是,每年毕业的大学生都在做这个梦,好的职位却只有500个。
人都是要面子的,也是喜欢攀比的,即使在工作上也喜欢攀比,不管那是不是自己想要的。大家认为外企公司很好,可是好在哪里呢?好吧,他们在比较好的写字 楼,这是你想要的么?他们出差住比较好的酒店,这是你想要的么?别人会羡慕一份外企公司的工作,这是你想要的么?那一切都是给别人看的,你干吗要活得那么 辛苦给别人看?另一方面,他们薪水福利一般,并没有特别了不起,他们的晋升机会比较少,很难做到很高阶的主管,他们虽然厌恶常常加班,却不敢不加班,因为 "你不干有得是人干",大部分情况下会找个台湾人香港人新加坡人来管你,而这些人又往往有些莫名其妙的优越感。你想清楚了么?500强一定好么?找工作究 竟是考虑你想要什么,还是考虑别人想看什么?
我的大学同学们大多数都到美国了,甚至毕业这么多年了,还有人最近到国外去了。出国真的有那么好么?我的大学同学们,大多数还是在博士、博士后、访问学者 地挣扎着,至今只有一个正经在一个美国大学里拿到个正式的教职。国内的教授很难当么?我有几个表亲也去了国外了,他们的父母独自在国内,没有人照顾,有好 几次人在家里昏倒都没人知道,出国,真的这么光彩么?就像有人说的"很多事情就像看A片,看的人觉得很爽,做的人未必。"
人总想找到那个最好的,可是,什么是最好的?你觉得是最好的那个,是因为你的确了解,还是因为别人说他是最好的?即使他对于别人是最好的,对于你也一定是最好的么?
对于自己想要什么,自己要最清楚,别人的意见并不是那么重要。很多人总是常常被别人的意见所影响,亲戚的意见,朋友的意见,同事的意见……问题是,你究竟 是要过谁的一生?人的一生不是父母一生的续集,也不是儿女一生的前传,更不是朋友一生的外篇,只有你自己对自己的一生负责,别人无法也负不起这个责任。自 己做的决定,至少到最后,自己没什么可后悔。对于大多数正常智力的人来说,所做的决定没有大的对错,无论怎么样的选择,都是可以尝试的。比如你没有考自己 上的那个学校,没有入现在这个行业,这辈子就过不下去了?就会很失败?不见得。
我想,好工作,应该是适合你的工作,具体点说,应该是能给你带来你想要的东西的工作,你或许应该以此来衡量你的工作究竟好不好,而不是拿公司的大小,规 模,外企还是国企,是不是有名,是不是上市公司来衡量。小公司,未必不是好公司,赚钱多的工作,也未必是好工作。你还是要先弄清楚你想要什么,如果你不清 楚你想要什么,你就永远也不会找到好工作,因为你永远只看到你得不到的东西,你得到的,都是你不想要的。
可能,最好的,已经在你的身边,只是,你还没有学会珍惜。人们总是盯着得不到的东西,而忽视了那些已经得到的东西。
我发现中国人的励志和国外的励志存在非常大的不同,中国的励志比较鼓励人立下大志愿,卧薪尝胆,有朝一日成富成贵。而国外的励志比较鼓励人勇敢面对现实生 活,面对普通人的困境,虽然结果也是成富成贵,但起点不一样,相对来说,我觉得后者在操作上更现实,而前者则需要用999个失败者来堆砌一个成功者的故 事。
我们都是普通人,普通人的意思就是,概率这件事是很准的。因此,我们不会买彩票中500万,我们不会成为比尔盖茨或者李嘉诚,我们不会坐飞机掉下来,我们当中很少的人会创业成功,我们之中有30%的人会离婚,我们之中大部分人会活过65岁……
所以请你在想自己要什么的时候,要得"现实"一点,你说我想要做李嘉诚,抱歉,我帮不上你。成为比尔盖茨或者李嘉诚这种人,是靠命的,看我写的这篇文章绝 对不会让你成为他们,即使你成为了他们,也绝对不是我这篇文章的功劳。"王侯将相宁有种乎"但真正当皇帝的只有一个人,王侯将相,人也不多。目标定得高些 对于喜欢挑战的人来说有好处,但对于大多数普通人来说,反而比较容易灰心沮丧,很容易就放弃了。
回过头来说,李嘉诚比你有钱大致50万倍,他比你更快乐么?或许。有没有比你快乐50万倍,一定没有。他比你最多也就快乐一两倍,甚至有可能还不如你快 乐。寻找自己想要的东西不是和别人比赛,比谁要得更多更高,比谁的目标更远大。虽然成为李嘉诚这个目标很宏大,但你并不见得会从这个目标以及追求目标的过 程当中获得快乐,而且基本上你也做不到。你必须听听你内心的声音,寻找真正能够使你获得快乐的东西,那才是你想要的东西。
你想要的东西,或者我们把它称之为目标,目标其实并没有高低之分,你不需要因为自己的目标没有别人远大而不好意思,达到自己的目标其实就是成功,成功有大 有小,快乐却是一样的。我们追逐成功,其实追逐的是成功带来的快乐,而非成功本身。职业生涯的道路上,我们常常会被攀比的心态蒙住眼睛,忘记了追求的究竟 是什么,忘记了是什么能使我们更快乐。
社会上一夜暴富的新闻很多,这些消息,总会在我们的心里面掀起很多涟漪,涟漪多了就变成惊涛骇浪,心里的惊涛骇浪除了打翻承载你目标的小船,并不会使得你 也一夜暴富。"只见贼吃肉,不见贼挨揍。"我们这些普通人既没有当贼的勇气,又缺乏当贼的狠辣绝决,虽然羡慕吃肉,却更害怕挨揍,偶尔看到几个没挨揍的贼 就按奈不住,或者心思活动,或者大感不公,真要叫去做贼,却也不敢。
我还是过普通人的日子,要普通人的快乐,至少,晚上睡得着觉。
跳槽与积累
首先要说明,工作是一件需要理智的事情,所以不要在工作上耍个性,天涯上或许会有人觉得你很有个性而叫好,煤气公司电话公司不会因为觉得你很有个性而免了 你的帐单。当你很帅地炒掉了你的老板,当你很酷地挖苦了一番招聘的HR,账单还是要照付,只是你赚钱的时间更少了,除了你自己,没人受损失。
我并不反对跳槽,但跳槽决不是解决问题的办法,而且频繁跳槽的后果是让人觉得没有忠诚度可言,而且不能安心工作。现在很多人从网上找工作,很多找工作的网 站常常给人出些馊主意,要知道他们是盈利性企业,当然要从自身盈利的角度来考虑,大家越是频繁跳槽频繁找工作他们越是生意兴隆,所以鼓动人们跳槽是他们的 工作。所以他们会常常告诉你,你拿的薪水少了,你享受的福利待遇差了,又是"薪情快报"又是"赞叹自由奔放的灵魂"。至于是否会因此让你不能安心,你跳了 槽是否解决问题,是否更加开心,那个,他们管不着。
要跳槽肯定是有问题,一般来说问题发生了,躲是躲不开的,很多人跳槽是因为这样或者那样的不开心,如果这种不开心,在现在这个公司不能解决,那么在下一个 公司多半也解决不掉。你必须相信,90%的情况下,你所在的公司并没有那么烂,你认为不错的公司也没有那么好。就像围城里说的,"城里的人拼命想冲出来, 而城外的人拼命想冲进去。"每个公司都有每个公司的问题,没有问题的公司是不存在的。换个环境你都不知道会碰到什么问题,与其如此,不如就在当下把问题解 决掉。很多问题当你真的想要去解决的时候,或许并没有那么难。有的时候你觉得问题无法解决,事实上,那只是"你觉得"。
人生的曲线应该是曲折向上的,偶尔会遇到低谷但大趋势总归是曲折向上的,而不是象脉冲波一样每每回到起点,我见过不少面试者,30多岁了,四五份工作经 历,每次多则3年,少则1年,30多岁的时候回到起点从一个初级职位开始干起,拿基本初级的薪水,和20多岁的年轻人一起竞争,不觉得有点辛苦么?这种日 子好过么?
资本靠的就是积累,这种积累包括人际关系,经验,人脉,口碑……如果常常更换行业,代表几年的积累付之东流,一切从头开始,如果换了两次行业,35岁的时 候大概只有5年以下的积累,而一个没有换过行业的人至少有了10年的积累,谁会占优势?工作到2-3年的时候,很多人觉得工作不顺利,好像到了一个瓶颈, 心情烦闷,就想辞职,乃至换一个行业,觉得这样所有一切烦恼都可以抛开,会好很多。其实这样做只是让你从头开始,到了时候还是会发生和原来行业一样的困 难,熬过去就向上跨了一大步,要知道每个人都会经历这个过程,每个人的职业生涯中都会碰到几个瓶颈,你熬过去了而别人没有熬过去你就领先了。跑长跑的人会 知道,开始的时候很轻松,但是很快会有第一次的难受,但过了这一段又能跑很长一段,接下来会碰到第二次的难受,坚持过了以后又能跑一段,如此往复,难受一 次比一次厉害,直到坚持不下去了。大多数人第一次就坚持不了了,一些人能坚持到第二次,第三次虽然大家都坚持不住了,可是跑到这里的人也没几个了,这点资 本足够你安稳活这一辈子了。
一份工作到两三年的时候,大部分人都会变成熟手,这个时候往往会陷入不断的重复,有很多人会觉得厌倦,有些人会觉得自己已经搞懂了一切,从而懒得去寻求进 步了。很多时候的跳槽是因为觉得失去兴趣了,觉得自己已经完成比赛了。其实这个时候比赛才刚刚开始,工作两三年的人,无论是客户关系,人脉,手下,和领导 的关系,在业内的名气……还都是远远不够的,但稍有成绩的人总是会自我感觉良好的,每个人都觉得自己跟客户关系铁得要命,觉得自己在业界的口碑好得很。其 实可以肯定地说,一定不是,这个时候,还是要拿出前两年的干劲来,稳扎稳打,积累才刚刚开始。
你足够了解你的客户吗?你知道他最大的烦恼是什么吗?你足够了解你的老板么?你知道他最大的烦恼是什么吗?你足够了解你的手下么?你知道他最大的烦恼是什 么吗?如果你不知道,你凭什么觉得自己已经积累够了?如果你都不了解,你怎么能让他们帮你的忙,做你想让他们做的事情?如果他们不做你想让他们做的事情, 你又何来的成功?
这是个浮躁的人们最不喜欢的话题,本来不想说这个话题,因为会引起太多的争论,而我又无意和人争论这些,但是考虑到对于职业生涯的长久规划,这是一个躲避不了的话题,还是决定写一写,不爱看的请离开吧。
并不是每次穿红灯都会被汽车撞,并不是每个罪犯都会被抓到,并不是每个错误都会被惩罚,并不是每个贪官都会被枪毙,并不是你的每一份努力都会得到回报,并 不是你的每一次坚持都会有人看到,并不是你每一点付出都能得到公正的回报,并不是你的每一个善意都能被理解……这个,就是世道。好吧,世道不够好,可是, 你有推翻世道的勇气么?如果没有,你有更好的解决办法么?有很多时候,人需要一点耐心,一点信心。每个人总会轮到几次不公平的事情,而通常,安心等待是最 好的办法。
有很多时候我们需要等待,需要耐得住寂寞,等待属于你的那一刻。周润发等待过,刘德华等待过,周星驰等待过,王菲等待过,张艺谋也等待过……看到了他们如 今的功成名就的人,你可曾看到当初他们的等待和耐心?你可曾看到金马奖影帝在街边摆地摊?你可曾看到德云社一群人在剧场里给一位观众说相声?你可曾看到周 星驰的角色甚至连一句台词都没有?每一个成功者都有一段低沉苦闷的日子,我几乎能想象得出来他们借酒浇愁的样子,我也能想象得出他们为了生存而挣扎的窘 迫。在他们一生最中灿烂美好的日子里,他们渴望成功,但却两手空空,一如现在的你。没有人保证他们将来一定会成功,而他们的选择是耐住寂寞。如果当时的他 们总念叨着"成功只是属于特权阶级的",你觉得他们今天会怎样?
曾经我也不明白有些人为什么并不比我有能力却要坐在我的头上,年纪比我大就一定要当我的领导么?为什么有些烂人不需要努力就能赚钱?为什么刚刚改革开放的 时候的人能那么容易赚钱,而轮到我们的时候,什么事情都要正规化了?有一天我突然想,我还在上学的时候他们就在社会里挣扎奋斗了,他们在社会上奋斗积累了 十几二十年,我们新人来了,他们有的我都想要,我这不是在要公平,我这是在要抢劫。因为我要得太急,因为我忍不住寂寞。二十多岁的男人,没有钱,没有事 业,却有蓬勃的欲望。
人总是会遇到挫折的,人总是会有低潮的,人总是会有不被人理解的时候的,人总是有要低声下气的时候,这些时候恰恰是人生最关键的时候,因为大家都会碰到挫 折,而大多数人过不了这个门槛,你能过,你就成功了。在这样的时刻,我们需要耐心等待,满怀信心地去等待,相信,生活不会放弃你,机会总会来的。至少,你 还年轻,你没有坐牢,没有生治不了的病,没有欠还不起的债。比你不幸的人远远多过比你幸运的人,你还怕什么?路要一步步走,虽然到达终点的那一步很激动人 心,但大部分的脚步是平凡甚至枯燥的,但没有这些脚步,或者耐不住这些平凡枯燥,你终归是无法迎来最后的那些激动人心。
逆境,是上帝帮你淘汰竞争者的地方。要知道,你不好受,别人也不好受,你坚持不下去了,别人也一样,千万不要告诉别人你坚持不住了,那只能让别人获得坚持的信心,让竞争者看着你微笑的面孔,失去信心,退出比赛。胜利属于那些有耐心的人。
在最绝望的时候,我会去看电影《The Pursuit of Happyness》《Jerry Maguire》,让自己重新鼓起勇气,因为,无论什么时候,我们总还是有希望。当所有的人离开的时候,我不失去希望,我不放弃。每天下班坐在车里,我喜 欢哼着《隐形的翅膀》看着窗外,我知道,我在静静等待,等待属于我的那一刻。
原贴里伊吉网友的话我很喜欢,抄录在这里:
每个人都希望,自己是独一无二的特殊者
含着金匙出生、投胎到好家庭、工作安排到电力局拿1w月薪这样的小概率事件,当然最好轮到自己
红军长征两万五、打成右派反革命、胼手胝足牺牲尊严去奋斗,最好留给祖辈父辈和别人
自然,不是每个吃过苦的人都会得到回报
但是,任何时代,每一个既得利益者身后,都有他的祖辈父辈奋斗挣扎乃至流血付出生命的身影
羡慕别人有个好爸爸,没什么不可以
问题是,你的下一代,会有一个好爸爸吗?
至于问到为什么不能有同样的赢面概率?我只能问:为什么物种竞争中,人和猴子不能有同样的赢面概率?
物竞天择。猴子的灵魂不一定比你卑微,但你身后有几十万年的类人猿进化积淀。
入对行跟对人
在中国,大概很少有人是一份职业做到底的,虽然如此,第一份工作还是有些需要注意的地方,有两件事情格外重要,第一件是入行,第二件事情是跟人。第一份工 作对人最大的影响就是入行,现代的职业分工已经很细,我们基本上只能在一个行业里成为专家,不可能在多个行业里成为专家。很多案例也证明即使一个人在一个 行业非常成功,到另外一个行业,往往完全不是那么回事情,"你想改变世界,还是想卖一辈子汽水?"是乔布斯邀请百事可乐总裁约翰·斯考利加盟苹果时所说的 话,结果这位在百事非常成功的约翰,到了苹果表现平平。其实没有哪个行业特别好,也没有哪个行业特别差,或许有报道说哪个行业的平均薪资比较高,但是他们 没说的是,那个行业的平均压力也比较大。看上去很美的行业一旦进入才发现很多地方其实并不那么完美,只是外人看不见。
说实话,我自己都没有发大财,所以我的建议只是让人快乐工作的建议,不是如何发大财的建议,我们只讨论一般普通打工者的情况。我认为选择什么行业并没有太 大关系,看问题不能只看眼前。比如,从前年开始,国家开始整顿医疗行业,很多医药公司开不下去,很多医药行业的销售开始转行。其实医药行业的不景气是针对 所有公司的,并非针对一家公司,大家的日子都不好过,这个时候跑掉是非常不划算的,大多数正规的医药公司即使不做新生意撑个两三年总是能撑的,大多数医药 销售靠工资撑个两三年也是可以撑的,国家不可能永远捏着医药行业不放的,两三年以后光景总归还会好起来的,那个时候别人都跑了而你没跑,那时的日子应该会 好过很多。有的时候觉得自己这个行业不行了,问题是,再不行的行业,做得人少了也变成了好行业,当大家都觉得不好的时候,往往却是最好的时候。大家都觉得 金融行业好,金融行业门槛高不说,有多少人削尖脑袋要钻进去,竞争激励,进去以后还要时时提防,一个疏忽,就被后来的人给挤掉了,压力巨大,又如何谈得上 快乐?也就未必是"好"工作了。
太阳能这个东西至今还不能进入实际应用的阶段,但是中国已经有7家和太阳能有关的公司在纽交所上市了,国美苏宁永乐其实是贸易型企业,也能上市,鲁泰纺织 连续10年利润增长超过50%,卖茶的一茶一座,卖衣服的海澜之家都能上市……其实选什么行业真的不重要,关键是怎么做。事情都是人做出来的,关键是人。
有一点是需要记住的,这个世界上,有史以来直到我们能够预见得到的未来,成功的人总是少数,有钱的人总是少数,大多数人是一般的,普通的,不太成功的。因 此,大多数人的做法和看法,往往都不是距离成功最近的做法和看法。因此大多数人说好的东西不见得好,大多数人说不好的东西不见得不好。大多数人都去炒股的 时候说明跌只是时间问题,大家越是热情高涨的时候,跌的日子越近。大多数人买房子的时候,房价不会涨,而房价涨的差不多的时候,大多数人才开始买房子。不 会有这样一件事情让大家都变成功,发了财,历史上不曾有过,将来也不会发生。有些东西即使一时运气好得到了,还是会在别的时候别的地方失去的。
年轻人在职业生涯的刚开始,尤其要注意的是,要做对的事情,不要让自己今后几十年的人生总是提心吊胆,更不值得为了一份工作赔上自己的青春年华。我的公司 是个不行贿的公司,以前很多人不理解,甚至自己的员工也不理解,不过如今,我们是同行中最大的企业,客户乐意和我们打交道,尤其是在国家打击腐败的时候, 每个人都知道我们做生意不给钱的名声,都敢于和我们做生意。而勇于给钱的公司,不是倒了,就是跑了,要不就是每天睡不好觉,人还是要看长远一点。很多时 候,看起来最近的路,其实是最远的路,看起来最远的路,其实是最近的路。
跟对人是说,入行后要跟个好领导好老师,刚进社会的人做事情往往没有经验,需要有人言传身教。对于一个人的发展来说,一个好领导是非常重要的。所谓"好"的标准,不是他让你少干活多拿钱,而是以下三个。
首先,好领导要有宽广的心胸,如果一个领导每天都会发脾气,那几乎可以肯定他不是个心胸宽广的人,能发脾气的时候却不发脾气的领导,多半是非常厉害的领 导。中国人当领导最大的毛病是容忍不了能力比自己强的人,所以常常可以看到的一个现象是,领导很有能力,手下一群庸才或者手下一群闲人。如果看到这样的环 境,还是不要去的好。
其次,领导要愿意从下属的角度来思考问题,这一点其实是从面试的时候就能发现的,如果这位领导总是从自己的角度来考虑问题,几乎不听你说什么,这就危险 了。从下属的角度来考虑问题并不代表同意下属的说法,但他必须了解下属的立场,下属为什么要这么想,然后他才有办法说服你,只关心自己怎么想的领导往往难 以获得下属的信服。
第三,领导敢于承担责任,如果出了问题就把责任往下推,有了功劳就往自己身上揽,这样的领导不跟也罢。选择领导,要选择关键时刻能抗得住的领导,能够为下属的错误买单的领导,因为这是他作为领导的责任。
有可能,你碰不到好领导,因为,中国的领导往往是屁股决定脑袋的领导,因为他坐领导的位置,所以他的话就比较有道理,这是传统观念官本位的误区,可能有大 量的这种无知无能的领导,只是,这对于你其实是好事,如果将来有一天你要超过他,你希望他比较聪明还是比较笨?相对来说这样的领导其实不难搞定,只是你要 把自己的身段放下来而已。多认识一些人,多和比自己强的人打交道,同样能找到好的老师,不要和一群同样郁闷的人一起控诉社会,控诉老板,这帮不上你,只会 让你更消极。和那些比你强的人打交道,看他们是怎么想的,怎么做的,学习他们,然后跟更强的人打交道。
选择
我们每天做的最多的事情,其实是选择,因此在谈职业生涯的时候不得不提到这个话题。
我始终认为,在很大的范围内,我们究竟会成为一个什么样的人,决定权在我们自己,每天我们都在做各种各样的选择,我可以不去写这篇文章,去别人的帖子拍拍 砖头,也可以写下这些文字,帮助别人的同时也整理自己的思路,我可以多注意下格式让别人易于阅读,也可以写成一堆,我可以就这样发上来,也可以在发以前再 看几遍,你可以选择不刮胡子就去面试,也可以选择出门前照照镜子……每天,每一刻我们都在做这样那样的决定,我们可以漫不经心,也可以多花些心思,成千上 万的小选择累计起来,就决定了最终我们是个什么样的人。
从某种意义上来说我们的未来不是别人给的,是我们自己选择的,很多人会说我命苦啊,没得选择阿,如果你认为"去微软还是去IBM""上清华还是上北大" "当销售副总还是当厂长"这种才叫选择的话,的确你没有什么选择,大多数人都没有什么选择。但每天你都可以选择是否为客户服务更周到一些,是否对同事更耐 心一些,是否把工作做得更细致一些,是否把情况了解得更清楚一些,是否把不清楚的问题再弄清楚一些……你也可以选择在是否在痛苦中继续坚持,是否抛弃掉自 己的那些负面的想法,是否原谅一个人的错误,是否相信我在这里写下的这些话,是否不要再犯同样的错误……生活每天都在给你选择的机会,每天都在给你改变自 己人生的机会,你可以选择赖在地上撒泼打滚,也可以选择咬牙站起来。你永远都有选择。有些选择不是立杆见影的,需要累积,比如农民可以选择自己常常去浇 地,也可以选择让老天去浇地,诚然你今天浇水下去苗不见得今天马上就长出来,但常常浇水,大部分苗终究会长出来的,如果你不浇,收成一定很糟糕。
每天生活都在给你机会,他不会给你一叠现金也不会拱手送你个好工作,但实际上,他还是在给你机会。我的家庭是一个普通的家庭,没有任何了不起的社会关系, 我的父亲在大学毕业以后就被分配到了边疆,那个小县城只有一条马路,他们那一代人其实比我们更有理由抱怨,他们什么也没得到,年轻的时候文化大革命,书都 没得读,支援边疆插队落户,等到老了,却要给年轻人机会了。他有足够的理由象成千上万那样的青年一样坐在那里抱怨生不逢时,怨气冲天。然而在分配到边疆的 十年之后,国家恢复招研究生,他考回了原来的学校。研究生毕业,他被分配到了安徽一家小单位里,又是3年以后,国家第一届招收博士生,他又考回了原来的学 校,成为中国第一代博士,那时的他比现在的我年纪还大。生活并没有放弃他,他也没有放弃生活。10年的等待,他做了他自己的选择,他没有放弃,他没有破罐 子破摔,所以时机到来的时候,他改变了自己的人生。你最终会成为什么样的人,就决定在你的每个小小的选择之间。
你选择相信什么?你选择和谁交朋友?你选择做什么?你选择怎么做?……我们面临太多的选择,而这些选择当中,意识形态层面的选择又远比客观条件的选择来得 重要得多,比如选择做什么产品其实并不那么重要,而选择怎么做才重要。选择用什么人并不重要,而选择怎么带这些人才重要。大多数时候选择客观条件并不要 紧,大多数关于客观条件的选择并没有对错之分,要紧的是选择怎么做。一个大学生毕业了,他要去微软也好,他要卖猪肉也好,他要创业也好,他要做游戏代练也 好,只要不犯法,不害人,都没有什么关系,要紧的是,选择了以后,怎么把事情做好。
除了这些,你还可以选择时间和环境,比如,你可以选择把这辈子最大的困难放在最有体力最有精力的时候,也可以走一步看一步,等到了40岁再说,只是到了 40多岁,那正是一辈子最脆弱的时候,上有老下有小,如果在那个时候碰上了职业危机,实在是一件很苦恼的事情。与其如此不如在20多岁30多岁的时候吃点 苦,好让自己脆弱的时候活得从容一些。你可以选择在温室里成长,也可以选择到野外磨砺,你可以选择在办公室吹冷气的工作,也可以选择40度的酷热下,去见 你的客户,只是,这一切最终会累积起来,引导你到你应得的未来。
我不敢说所有的事情你都有得选择,但是绝大部分事情你有选择,只是往往你不把这当作一种选择。认真对待每一次选择,才会有比较好的未来。
选择职业
职业的选择,总的来说,无非就是销售、市场、客服、物流、行政、人事、财务、技术、管理几个大类,有个有趣的现象就是,500强的CEO当中最多的是销售 出身,第二多的人是财务出身,这两者加起来大概超过95%。现代IT行业也有技术出身成为老板的,但实际上,后来他们还是从事了很多销售和市场的工作,并 且表现出色,公司才获得了成功,完全靠技术能力成为公司老板的,几乎没有。这是有原因的,因为销售就是一门跟人打交道的学问,而管理其实也是跟人打交道的 学问,这两者之中有很多相通的东西,他们的共同目标就是"让别人去做某件特定的事情。"而财务则是从数字的层面了解生意的本质,从宏观上看待生意的本质, 对于一个生意是否挣钱,是否可以正常运作有着最深刻的认识。
公司小的时候是销售主导公司,而公司大的时候是财务主导公司,销售的局限性在于只看人情不看数字,财务的局限性在于只看数字不看人情。公司初期,运营成本 低,有订单就活得下去,跟客户也没有什么谈判的条件,别人肯给生意做已经谢天谢地了,这个时候订单压倒一切,客户的要求压倒一切,所以当然要顾人情。公司 大了以后,一切都要规范化,免得因为不规范引起一些不必要的风险,同时运营成本也变高,必须提高利润率,把有限的资金放到最有产出的地方。对于上市公司来 说,股东才不管你客户是不是最近出国,最近是不是那个省又在搞严打,到了时候就要把业绩拿出来,拿不出来就抛股票,这个时候就是数字压倒一切。
前两天听到有人说一句话觉得很有道理,开始的时候我们想"能做什么?",等到公司做大了有规模了,我们想"不能做什么。"很多人在工作中觉得为什么领导这 么保守,这也不行那也不行,错过很多机会。很多时候是因为,你还年轻,你想的是"能做什么",而作为公司领导要考虑的方面很多,他比较关心"不能做什 么"。
我并非鼓吹大家都去做销售或者财务,究竟选择什么样的职业,和你究竟要选择什么样的人生有关系,有些人就喜欢下班按时回家,看看书听听音乐,那也挺好,但 就不适合找个销售的工作了,否则会是折磨自己。有些人就喜欢出风头,喜欢成为一群人的中心,如果选择做财务工作,大概也干不久,因为一般老板不喜欢财务太 积极,也不喜欢财务话太多。先想好自己要过怎样的人生,再决定要找什么样的职业。有很多的不快乐,其实是源自不满足,而不满足,很多时候是源自于心不定, 而心不定则是因为不清楚究竟自己要什么,不清楚要什么的结果就是什么都想要,结果什么都没得到。
我想,我们还是因为生活而工作,不是因为工作而生活,生活是最要紧的,工作只是生活中的一部分。我总是觉得生活的各方方面都是相互影响的,如果生活本身一 团乱麻,工作也不会顺利。所以要有娱乐、要有社交、要锻炼身体,要有和睦的家庭……最要紧的,要开心,我的两个销售找我聊天,一肚子苦水,我问他们,2年 以前,你什么都没有,工资不高,没有客户关系,没有业绩,处于被开的边缘,现在的你比那时条件好了很多,为什么现在却更加不开心了?如果你做得越好越不开 心,那你为什么还要工作?首先的首先,人还是要让自己高兴起来,让自己心态好起来,这种发自内心的改变会让你更有耐心,更有信心,更有气质,更能包容…… 否则,看看镜子里的你,你满意么?
有人会说,你说得容易,我每天加班,不加班老板就会把我炒掉,每天累得要死,哪有时间娱乐、社交、锻炼?那是人们把目标设定太高的缘故,如果你还在动不动 就会被老板炒掉的边缘,那么你当然不能设立太高的目标,难道你还想每天去打高尔夫?你没时间去健身房锻炼身体,但是上下班的时候多走几步可以吧,有楼梯的 时候走走楼梯不走电梯可以吧?办公的间隙扭扭脖子拉拉肩膀做做俯卧撑可以吧?谁规定锻炼就一定要拿出每天2个小时去健身房?你没时间社交,每月参加郊游一 次可以吧,周末去参加个什么音乐班,绘画班之类的可以吧,去尝试认识一些同行,和他们找机会交流交流可以吧?开始的时候总是有些难的,但迈出这一步就会向 良性循环的方向发展。而每天工作得很苦闷,剩下的时间用来咀嚼苦闷,只会陷入恶性循环,让生活更加糟糕。
200万种商品,最低价格,疯狂诱惑你
2009年7月5日星期日
喜欢加班不是好员工[转]
文章如下:
让员工经常性的加班不是什么好企业,那员工经常主动加班好不好呢?提起这个问题,大部分的老板肯定会举双手赞同,他们认为这才是企业敬业、忠诚的好员工, 属于"国宝"级别的,这么说的话不加班的就不是好员工了。而根据我多年从事管理的研究与企业工作实践发现,经常加班的员工也并不是什么好员工,同时,我认 为不加班的员工是好员工。因为表面看起来加班是勤奋、任劳任怨的表现,但如果缺乏工作效率,或者不懂得从效率上改进方法也不是企业真正需要的员工。
我们先来看员工加班的动机:
1.工作没有如期地完成,否则会得到批评或处罚——迫不得已加班;
2.并非完全出于把工作做到尽善尽美,而是出于一种"奴性"的体现——讨好与糊弄上级。
3.为了拿到跟好的业绩奖金,尤其是到了业绩指标的评价期——满足个人利益。
4.拿到加班工资,因为加班有加班工资,而且加班工资高于日常工资——赚取不义之财。
5.因金融危机影响员工担心被公司裁员,拼命地加班——临时抱佛脚。
当然,可能还有其它的目的,但不管是哪一种目的,都是出于自身利益的考虑,并非对企业的忠诚。
再说说加班的坏处,更是让你胆战心惊。
1.加班让企业增加大量的成本,如人员工资、水电、机器损耗等,原本这些成本都是企业的利润,结果让对手在低成本下将你打败,还将造成利润的流失。
2.加班导致个人精力的下降,影响工作效率,同时,经常加班也造成家庭生活的失衡,因为家庭的生活质量直接影响到工作的质量,君不见多少人因"后院起火",丢了"夫人"又折"企业"呢?
3.假如加班就可以获得上级的赏识,成为忠诚的员工,那么每个人都会耍这种小聪明,结果必然造成整体团队的工作效率下降,还形成"虚假"团队文化。
4.长期的加班就会慢慢形成拖延、没有计划、懒散的工作习惯,更难以实现高效的工作组织。这中加班的"标兵"就变成"效率"的天敌。
显然,加班的结果对企业影响非常的大,既影响个人的身心健康,同时也损害企业的自身利益——劳命有又伤财。
从加班的"扭曲"心态到加班的不良结果无不证实加班不是好事,企业不但不能提倡加班,而且要反对加班行为。那么,管理者面对加班的问题如何处理呢?首先要 从观念上让团队成员认知加班并非好事,要反对随便加班的行为,它是劳民伤财的行为;另外,凡出现加班的情况必须事先申请,根据情况确认是否加班,否则一律 不能加班,对不正常加班的行为得算上加班成本,并与个人的绩效挂钩。管理者要让企业与个人都过上正常的生活,彻底告别加班的日子。
整天加班的企业不是好企业,喜欢经常加班的员工也不是好员工,不加班的员工反而是好员工,即使出现必须加班的事,也要反对,因为只有反对加班,才能迫使管 理者提高计划、协调、控制的能力,企业才能进步。所以,无论是企业还是个人都得从高效、低成本的角度提升业绩。若人人争做加班的牛,个人非但牛不起来,连 企业也牛不起来的。只有做到不加班且跑得快的牛,我们中国的企业才能真正牛!
200万种商品,最低价格,疯狂诱惑你
2009年2月1日星期日
项目管理实战之团队管理
而团队的领头人就是项目经理,他的能力/素质直接影响着项目的成败!我们不需要一个团队的所有成员个个都是优秀的,但是为了确保你的项目成功,请雇佣一个优秀的项目经理!
以前,自己通常都是单干,最多时也是两三个人合作,项目进展良好。现在负责一个较大项目开发,需要协调整个团队成员,保证项目的进展。原以为,这是一件很简单的事情,和以前一样嘛。结果随着项目的进展,问题越来越多,而其中的绝大多数问题都不是技术上的,而是对组员管理协调的问题。想使一个团队高效并保持高效,我们需要花不少的气力。以下几点是从我前段时间的实践中总结出来的,只是自己的经验小结,也并没有打算写成一篇完整的关于团队管理的论文,毕竟在这方面自己的功力还浅薄的很。希望和大家多多交流这方面的心得。对团队的管理需要重视以下几个方面:
(1)让合适的人做合适的事。了解每一个组员的知识结构和背景,知道他们各自擅长什么,把任务安排给能最有效最迅速解决它的人。
(2)把项目的主要功能/任务以列表的形式形成文档、把每个组员的阶段任务以列表的形式形成文档。这是重要的,否则,你自己和你的组员将会常常忘记目标是什么、自己要做什么。
(3)不要给组员我们的项目不着急的感觉。让每个组员都有紧迫感。一个安逸/懒散的团体不可能按时按质提交项目,即使这个项目本质上并不紧迫。
(4)在组员的上一阶段任务提交之前,就应当安排好该组员的下一阶段任务。不要让任何一个组员闲散着。因为无论在什么时候,系统的任何一个模块都有改进/重构/整理的需要,我们的设计/实现永远都不够优秀。
(5)对某一特定的环节,清晰明确地告诉你的组员你想要的是什么,否则,你就准备把同样的事情告诉他第二遍第三遍。让另外一个人完整地了解你的意图不是一件简单的事情。
(6)充分地交流。就这个项目而言,你和你的组员之间的交流可能还远远不够!
(7)锻炼/指导你的组员、相信你的组员。如果作为项目经理的你是个优秀的程序员,那么千万不要相信自己能完成所有的主要/核心功能。你也许可以完成某一模块,但是更多的模块是由你的组员完成的。
(8)千万不要惟我独尊。也许你很坚信自己的方案是优秀的,但是如果你的组员提出了新的方案,那么请你重视这个新方案,并一视同仁的从这两个方案中抉择更适用于当前项目的那个。我就从组员那里吸收了很多精彩的想法,并将它们运用到项目中。
(9)坚决的执行力!前提是你必须有足够的判断力和决断力。当有些议题没有结论的时候,你需要来拍板。
(10)公平公正的对待每个组员。千万不要偏袒任何一个!
(11)请记住,项目经理不是"官"。
网易邮箱,中国第一大电子邮件服务商
2008年11月10日星期一
请不要忽视项目文档管理?
在此前的关于信息系统的项目实施管理整个过程的文章中也提到过一些文档管理的内容,撰写此文的目的在于更加详实的表达我对项目管理过程中的文档管理的一些理解。
文档管理的重要性
一直以来,有很多的人都在说文档管理的重要性,最耳熟能详的莫过于软件项目中的人员变动以后后面的人无法识别之前的代码,或者识别的成本较高。事实情况 是,就算人员不变动,时间长了,当时的编写者也不会记得当时的思路是什么,因为时间会消磨一些东西,另外每个人的想法和思维方式也在发生变化。
一个项目组织在进行一些想法的沟通时,由于个人知识结构的不同、所处的地位立场不同等原因也会导致对一个想法的最终实现方案的认知上存在差异,最终落实到 方案上也会有所不同,通过一个书面的文档可以将每个人的认知形成一个统一的认知,减少不必要的沟通障碍。同时明确的文档也可以给参与者更多思考的空间。
为了达到一个好的沟通交流方式,我们需要各式各样的文档,在现实的项目管理过程中也确实存在了大量的文档,每个人都认为文档是重要的,但是当真正文档到来 的时候又开始困扰了,会不自觉的有些厌烦和无从下手。做文档的过程是辛苦的,更是麻烦的,原来几句话的事情在有了文档以后变得异常麻烦,需要对应好格式, 需要不同人员的审核和认可,难免就会觉得麻烦;而在自己做完文档以后发现可用性并不如想象中的那么高,真正想要的文档不知道到哪里去找,不同的文档说法不 统一,等等诸如此类的问题让使用者有点无从下手。
或许是印证了一句话,叫做事情做的没有头绪的时候就想到了管理,对于那些各式各样的文档同样不会例外。
文档管理的方式
在文档管理的过程中,需要把握住一些重要的原则和方法,这样可以让我们的文档真正达到我们预期的目的。
文档模板的管理
面对各类纷繁复杂的文档,如果各式各样,每个人一个风格,不论从美观性和可读性上都会有影响,所以在文档管理中的过程中需要建议一套文档的模板。
在建立文档模板时,需要对一些格式进行要求,需要将一些基本的要素固化到文档模板中,确保文档需要的内容能够在文档中体现,例如文档的页眉页脚、文档变更历史、文档的目录方式、文档的字体等。
在建立文档时,要注意做好文档的分类,各种分类有一个清晰的定义,使用者可以清楚地知道实际使用时要采用哪种模板。如果是使用共享目录方式管理文档,需要 在一个相对容易找到的文件夹目录中存放模板,如果是使用信息系统方式进行模板管理,最好能够在首页进行一个连接,或者是让使用者可以快速的搜索到。在建立 分类时,需要含有一个共同类,或者叫做公用类,因为在实际的使用过程中总是会有一些新的类别出现,也会有一些无法进行分类的文档,这个时候就可以通过共同 类进行管理。
对于文档模板的变更需要能够做到及时告知使用者,并做好版本管理。
文档目录的管理
为了能够在纷繁复杂的文档中找到需要的文档,需要在进行文档管理时建立一套完整的文档目录体系,主要包括文档的索引管理和文档的分类管理。
在进行文档管理前,需要对不同的文档建立一个分类,建议不同的分类可以便于文档的查找,也可以针对不同的分类制定不同的管理要求。如果是文件夹方式管理, 还需要分别不同的文件夹内容的安排以及权限的控制,因为文件夹管理的特殊性,需要注意其权限管理的简洁化;如果是采用信息系统管理,需要注意类型的编码体 系的建立。一个好的文档分类体系可以让使用者方便地进行文档的归类和查找,文档的分类在一些管理过程中还需要注意归档管理的需求。
对于文档,需要建立一套索引机制,这里之所以特别提出索引机制,是因为在日常的文档使用中,会发现一些很多类似的文档,或者类似的内容说明,由于不同的撰 写者会对一些基本的概念或者原则的说明会存在一些差异,这个时候就需要能够有一个索引来明确什么是最准确的,这一点在项目管理过程中特别重要,因为一个项 目组往往会不时的发生一些变动,后来人面对多个说法时很难知道什么是对的,同时一些实际情况也会发生变动,一些说法也需要进行修正,而之前的一些文档也无 法进行更正,所以这个时候也需要有一个索引来明确正确的说法,这一点问题也可以通过文档版本的管理加以改善。另外对于那些纷繁复杂的文档,有些只是事务性 的,通过一个索引的方式,可以将一些重点的内容放在一个突出的位置,便于进行检索和阅览。
不论是文件夹方式还是信息系统方式,都需要注意对文档的权限管理,特别是对一些归档的文档,避免归档的文档被不正确的修改或者删除。
文档的命名规范
各种文档,如果名称多样,或者名称含义模糊将会造成使用和交流上的不便,需要建立一套有效的命名规范体系。
对于文档的名称,首先需要名称能够容易识别,有些使用者不是很注意文档的名称,经常直接用文件的默认名称,或者就是一个自己的姓名、项目的名称等,其他的使用者很难识别是什么类型的文档。
在文档的使用过程中,可以规定在文档的某些部位必须放置文档的类型或者某些其他关键字,例如将要求将文档的类别放在文件名的头部,对于月度性的文档,规定头部必须放某年某月,等等。
对于一些分不同版本的文档,可以要求分不同的版本进行管理,文件名称中注明版本号,对于终稿等一些标志性的内容可以加一些特殊的标识,这样可以明确其重要性和权威性。
这些方式将有助于文档的文件名的整洁和清晰,使用者在查找时也较为方便。在进行文档的交互调整过程中,也可以增加一些日期或者修改者的标识来进行传递,主要的目的在于能够唯一识别一个文档,减少互相沟通的障碍。
文档的变更管理
文档在使用过程中发生变更是很常见的现象,对于发生变更的文档,需要通过手段加以约束,最常用的方法就是版本的管理,对于形成的文档及时进行归档保存。
文档发生变更时,需要能够做到两点:第一,文档有清晰的变更记录,主要是针对变化的部分,不能让每个使用者在文档发生变化后都需要把文件通篇读一遍;第二,文档的最终版本要能方便的阅览,如果出现只能看变更历史才知道最终版本的话将大大提高使用成本。
在文档发生变更时,需要能够通过必要的途径通知相关人,例如通过邮件通知或者公告通知的方式,避免新的文档产生后还有大量的使用者使用旧的文档,在实际操 作环境中,ISO9000管理使用的签字回收重要文档的方式很值得借鉴,当然对一些电子文档需要采用一些其他变通的方式来处理。
文档的审核制度
很多文档作为一种指导性文件,需要有一定的严肃性和权威性,因而对文档进行必要的审核是必须的。
文档的审核时机一般为文档建立时和文档发生变更时,对于文档的适用范围的变更也应该进行必要的审核。通过文档的审核,可以检查是否存在错误的事项或者一些 不合理的事项,撰写者和审核者所处的岗位不同、知识结构不同,对于一个文档如何撰写的角度和看法也会不同,在后续的审核过程中能够很好的进行文档的校正。 同时,文档的审核机制也可以明确各自岗位的责任。
后记
信息系统的实施是一个负责的管理过程,需要方方面面的管理工作配合到位,文档作为一种日常交流的重要依据和工作成果的总结显得尤为重要,在文档管理的过程 中既要注意严肃性,又要能兼顾灵活性,要本着在达到正常的规范性的基础上尽可能地方便使用者的使用和交流,提高使用效率。
文档管理工作在其他的一些管理工作中同样是一个重要的内容,很多大型企业都会有一个专门的档案管理部门进行文档的归档管理,这些都能充分体现文档管理的重要性之所在。
[广告] 金秋最关注楼盘-房不胜房
2008年11月6日星期四
人生致命的八个经典问题---你想过了吗?
问题一,
如果你家附近有一家餐厅,东西又贵又难吃,桌上还爬着蟑螂,你会因为它很近很方便,就一而再、再而三地光临吗?
回答:你一定会说,这是什么烂问题,谁那么笨,花钱买罪受? 可同样的情况换个场合,自己或许就做类似的蠢事。不少男女都曾经抱怨过他们的情人或配偶品性不端,三心二意,不负责任。明知在一起没什么好的结果,怨恨已经比爱还多,但却"不知道为什么"还是要和他搅和下去,分不了手。说穿了,只是为了不甘,为了习惯,这不也和光临餐厅一样?
——做人,为什么要过于执著?!
问题二,
如果你不小心丢掉100块钱,只知道它好像丢在某个你走过的地方,你会花200块钱的车费去把那100块找回来吗?
回答:一个超级愚蠢的问题。
可是,相似的事情却在人生中不断发生。做错了一件事,明知自己有问题,却*也不肯认 错,反而花加倍的时间来找藉口,让别人对自己的印象大打折扣。被人骂了一句话,却花了无数时间难过,道理相同。为一件事情发火,不惜损人不利已,不惜血本,不惜时间,只为报复,不也一样无聊? 失去一个人的感情,明知一切已无法挽回,却还是那么伤心,而且一伤心就是好几年,还要借酒浇愁,形销骨立。其实这样一点用也没有,只是损失更多。
——做人,干吗为难自己?!
问题三,
你会因为打开报纸发现每天都有车祸,就不敢出门吗?
回答:这是个什么烂问题?当然不会,那叫因噎废食。
然而,有不少人却曾说:现在的离婚率那么高,让我都不敢谈恋爱了。说得还挺理所当然 。也有不少女人看到有关的诸多报道,就对自己的另一半忧心忡忡,这不也是类似的反应?所谓乐观,就是得相信:虽然道路多艰险,我还是那个会平安过马路的人,只要我小心一点,不必害怕过马路。
——做人,先要相信自己。
问题四,
你相信每个人随便都可以成功立业吗?
回答:当然不会相信。
但据观察,有人总是在听完成功人士绞尽脑汁的建议,比如说,多读书,多练习之后,问了另一个问题?那不是很难?
我们都想在3分钟内学好英文,在5分钟内解决所有难题,难道成功是那么容易的吗?改变当然是难的。成功只因不怕困难,所以才能出类拔萃。有一次坐在出租车上,听见司机看到自己前后都是高档车,兀自感叹:"唉,为什么别人那么有钱,我的钱这么难赚?" 我心血来潮,问他:"你认为世上有什么钱是好赚的?"他答不出来,过了半晌才说:好像都是别人的钱比较好赚。
其实任何一个成功者都是艰辛取得。我们实在不该抱怨命运。
——做人,依靠自己!
问题五,
你认为完全没有打过篮球的人,可以当很好的篮球教练吗?
回答:当然不可能,外行不可能领导内行。
可是,有许多人,对某个行业完全不了解,只听到那个行业好**,就马上开起业来了。
我看过对穿着没有任何口味、或根本不在乎穿着的人,梦想却是开间服装店;不知道电脑怎么开机的人,却想在网上**,结果道听途说,却不反省自己是否专业能力不足,只抱怨时不我与。
——做人,量力而行。
问题六,
相似但不相同的问题:你是否认为,篮球教练不上篮球场,闭着眼睛也可以主导一场完美的胜利?
回答:有病啊,当然是不可能的。
可是却有不少朋友,自己没有时间打理,却拼命投资去开咖啡馆,开餐厅,开自己根本不懂的公司,火烧屁股一样急着把辛苦积攒的积蓄花掉,去当一个稀里糊涂的投资人。亏的总是比赚的多,却觉得自己是因为运气不好,而不是想法出了问题。
——做人,记得反省自己。
问题七,
你宁可永远后悔,也不愿意试一试自己能否转败为胜?
解答:恐怕没有人会说:"对,我就是这样的孬种"吧。
然而,我们却常常在不该打退堂鼓时拼命打退堂鼓,为了恐惧失败而不敢尝试成功。以关颖珊赢得2000年世界花样滑冰冠军时的精彩表现为例:她一心想赢得第一名,然而在最后一场比赛前,她的总积分只排名第三位,在最后的自选曲项目上,她选择了突破,而不是少出错。在4分钟的长曲中,结合了最高难度的三周跳,并且还大胆地连跳了两次。她也可能会败得很难看,但是她毕竟成功了。她说:"因为我不想等到失败,才后悔自己还有潜力没发挥。" 一个中国伟人曾说;胜利的希望和有利情况的恢复,往往产生于再坚持一下的努力之中。
——做人,何妨放手一搏。
问题八,
你的时间无限,长生不老,所以最想做的事,应该无限延期?
回答:不,傻瓜才会这样认为。
然而我们却常说,等我老了,要去环游世界;等我退休,就要去做想做的事情;等孩子长大了,我就可以……我们都以为自己有无限的时间与精力。其实我们可以一步一步实现理想,不必在等待中徒耗生命。如果现在就能一步一步努力接近,我们就不会活了半生,却出现自己最不想看到的结局。
——做人,要活在当下。
网易邮箱10周年,技术见证辉煌
2008年11月4日星期二
简析Java RMI 与 .NET Remoting
Java与.NET都提供了远程处理功能,但不完全相同.Java远程处理是通过一个"共享接口"实现的,而.NET可以通过一个"共享命令集"实现。下面就这两种方式来具体说明。
Java 远程处理
Java远程方法调用(RMI)提供了Java程序语言的远程通讯功能,这种特性使客户机上运行的程序可以调用远程服务器上的对象,使Java编程人员能够在网络环境中分布操作。
创建一个简单的Java分布式远程方法调用程序可以按以下几个步骤操作,
一、定义远程接口:
在 Java 中,远程对象是实现远程接口的类的实例, 远程接口声明每个要远程调用的方法。在需要创建一个远程对象的时候,我们通过传递一个接口来隐藏基层的实施细节,客户通过接口句柄发送消息即可。
远程接口具有如下特点:
1) 远程接口必须为public属性。如果不这样,除非客户端与远程接口在同一个包内,否则 当试图装入实现该远程接口的远程对象时,调用会得到错误结果。
2) 远程接口必须扩展接口java.rmi.Remote。
3) 除与应用程序本身特定的例外之外,远程接口中的每个方法都必须在自己的throws从句中 声明java.rmi.RemoteException。(或 RemoteException 的父类)。
4) 作为参数或返回值传递的一个远程对象(不管是直接,还是本地对象中嵌入)必须声明为远 程接口,而不应声明为实施类。
下面是远程接口的接口RmiSample的定义
import java.rmi.*;
public interface RmiSample extends Remote {
public int sum(int a,int b) throws RemoteException;
}
二、实现远程接口:
远 程对象实现类必须扩展远程对象java.rmi.UnicastRemoteObject类,并实现所定义的远程接口。远程对象的实现类中包含实现每个远 程接口所指定的远程方法的代码。这个类也可以含有附加的方法,但客户只能使用远程接口中的方法。因为客户是指向接口的一个句柄,而不是它的哪个类。必须为 远程对象定义构造函数,即使只准备定义一个默认构造函数,用它调用基础类构造函数。因为基础类构造函数可能会抛出 java.rmi.RemoteException,所以即使别无它用必须抛出java.rmi.RemoteException例外。
以下是远程对象实现类的声明:
import java.rmi.*;
import java.rmi.server.*;
public class RmiSampleImpl extends UnicastRemoteObject
implements RmiSample {
RmiSampleImpl() throws RemoteException {
super();
}
public int sum(int a,int b) throws RemoteException {
return a + b;
}
}
三、编写服务器类:
包 含 main 方法的类可以是实现类自身,也可以完全是另一个类。下面通过RmiSampleServer 来创建一个远程对象的实例,并通过java.rmi.registry.LocateRegistry类的createRegistry 方法从指定端口号启动注册服务程序,也可以通过执行 rmiregistry 命令启动注册服务程序,注册服务程序的缺省运行端口为 1099。必须将远程对象名字绑定到对远程对象的引用上: Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
以下是服务器类的声明:
import java.rmi.*;
import java.rmi.registry.*;
public class RmiSampleServer{
public static void main(String args[]) {
try {
LocateRegistry.createRegistry(8808) ;
SampleServerImpl Server = new SampleServerImpl();
// 将该对象实例与名称"SAMPLE-SERVER"捆绑
Naming.rebind("//localhost:8808/SAMPLE-SERVER" , Server);
} catch (java.net.MalformedURLException me) {
System.out.println("Malformed URL: " + me.toString());
} catch (RemoteException re) {
System.out.println("Remote exception: " + re.toString());
}
}
}
四、编写使用远程服务的客户机类:
客户机类的主要功能有两个,一是通过Naming.lookup方法来构造注册服务程序 stub 程序实例,二是调用服务器远程对象上的远程方法。
以下是服务器类的声明:
import java.rmi.*;
import java.rmi.server.*;
public class RmiSampleClient {
public static void main(String[] args)
{
try {
String url = "//localhost:8808/SAMPLE-SERVER";
RmiSample RmiObject = (RmiSample)Naming.lookup(url);
System.out.println(" 1 + 2 = " + RmiObject.sum(1,2) );
} catch (RemoteException exc) {
System.out.println("Error in lookup: " + exc.toString());
} catch (java.net.MalformedURLException exc) {
System.out.println("Malformed URL: " + exc.toString());
} catch (java.rmi.NotBoundException exc) {
System.out.println("NotBound: " + exc.toString());
}
}
}
五、编译代码:
要编译 Java 源文件,请运行 javac 命令:
javac RmiSample.java RmiSampleImpl.java RmiSampleServer.java RmiSampleClient.java
六、为远程对象实现创建根和干:
要创建存根程序和骨架文件,应以包含远程对象实现的已编译类包全名运行 rmic 编译器。
存根(Stub)是远程对象在客户端的代理,它将RMI调用传递给服务器端的骨架(Skeleton),后者负责将该调用传递给实际的远程方法输入如下:
D:RMI>rmic -d D:RMI RmiSampleImpl 执行这个命令, 若rmic成功运行,RMI目录下就会多出两个新类: RmiSampleImpl_Stub.class RmiSampleImpl_Skel.class 它们分别对应的是存根(stub)和骨架(skeleton).
七、运行代码:
运行服务端程序:在Windows下,输入下列命令,在后台启动RmiSampleServer程序:
D:RMI>java RmiSampleServer
运行客户端程序:
D:RMI>java RmiSampleClient
客户端输出: 1 + 2 = 3
.NET 远程处理。
微软的.NET Remoting提供了一种允许对象通过应用程序域与另一对象进行交互的框架,从结构上而言,.NET Remoting对象非常适合通过网络访问资源,而又无需处理由基于SOAP的WebServices所带来的难题。下面介绍创建一个简单的.NET Remoting分布式远程方法调用程序一般所需要的几个步骤。
第一步:创建共享远程对象
创建一个C# Library,并将其命名为RemoteObject。这将创建一个我们的.NET Remote客户端和服务器端用来通讯的"共享命令集"。
public class RemoteObject : System.MarshalByRefObject
{
public RemoteObject()
{
System.Console.WriteLine("New Referance Added!");
}
public int sum(int a, int b)
{
return a + b;
}
}
名字空间是对象所需要的。请记住,如果得到System.Runtime.Remoting.Channels.Tcp名字空间不存在的信息,请检查是否象上面的代码那样添加了对System.Runtime.Remoting.dll的引用。
using System;
using System.Runtime;
我们为对象使用的名字空间是RemoteSample,下面的对象是MarshalByRefObject,在其中我们创建了一个引用和包括服务器端操作全部完成所需要的所有工作。
namespace RemoteSample
{
public class RemoteObject : System.MarshalByRefObject
{
public RemoteObject()
{
System.Console.WriteLine("New Referance Added!");
}
public int sum(int a, int b)
{
return a + b;
}
}
}//RemoteSample名字空间结束
保存文件,命名为RemoteObject.cs
用命令行csc /t:library RemoteObject.cs 编译文件,就会得到一个RemoteObject.DLL文件,并可以在编译其他的C#文件中使用它。
第二步:创建服务器对象
创建服务器对象,并将它命名为RemoteServer。在创建服务器对象时必须实现以下操作:
1)构造服务器信道。
TcpServerChannel是.NET remoting支持的二种信道类型中的一种,可以将它设置为对象对来自哪一个端口的请求进行回应,ChannelServices.RegisterChannel将把该端口号与操作系统中的TCP/IP栈绑定。
TcpServerChannel channel = new TcpServerChannel(8808);
ChannelServices.RegisterChannel(channel);
也可以设置为另一种的信道类型HTTP, 只要简单地用System.Runtime.Remoting.Channels.Http名字空间中的HttpServerChannel对象替换即 可。使用HTTP和TCP信道之间的区别在于:如果应用程序是在局域网上运行,则最好使用TCP信道,因为它的性能要好于HTTP信道;如果应用程序是在 互联网上运行,则有时候根据防火墙的配置,HTTP是唯一的选择。需要记住的是,如果使用了防火墙软件,则防火墙应该配置成允许TCP数据流量通过你为对 象选择的端口。
2)将服务端上的对象 Type 注册为已知类型。
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),
"RemoteObject", WellKnownObjectMode.SingleCall);
这 行代码设置了服务中的一些参数和把欲使用的对象名字与远程对象进行绑定,第一个参数是绑定的对象,第二个参数是TCP或HTTP信道中远程对象名字的字符 串,第三个参数让容器知道,当有对对象的请求传来时,应该如何处理对象。尽管WellKnownObjectMode.SingleCall对所有的调用 者使用一个对象的实例,但它为每个客户生成这个对象的一个实例。如果用WellKnownObjectMode.SingleCall则每个传入的消息由 同一个对象实例提供服务。
完整的对象代码如下所示:
using System; using System.Runtime;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteSample;
namespace RemoteSampleServer
{
public class RemoteServer
{
public static void Main(String[] args)
{
TcpServerChannel channel = new TcpServerChannel(8808);
ChannelServices.RegisterChannel(channel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject),
"RemoteObject", WellKnownObjectMode.SingleCall);
System.Console.WriteLine("Press Any Key");
System.Console.ReadLine();
}
}
}
保存文件,命名为RemoteServer.cs
用命令行csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteServer.cs 编译这一程序生成的RemoteServer.EXE文件。
第三步:创建Remote客户端程序
创 建服务器对象,并将它命名为RemoteClient。在创建服务器对象时首先创建了一个TCP客户端信道,该信道并不是绑定在一个端口上的;其次获取一 个对远程的RemoteObject对象的引用。 Activator.GetObject方法返回一个对象类型的值,我们随后会将它返回的值赋予RemoteObject。我们传给它的参数与在服务器对 象中传递给RemotingConfiguration的参数非常地相似,第一个参数是对象类型的,第二个参数是远程对象的URI。
ChannelServices.RegisterChannel(new TcpClientChannel());
RemoteObject remoteobj = (RemoteObject)Activator.GetObject( typeof(RemoteObject),
"tcp://localhost:8808/RemoteObject");
RemoteClient的全部代码如下所示:
using System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteSample;
namespace RemoteSampleClient
{
public class RemoteClient
{
public static void Main(string[] args)
{
ChannelServices.RegisterChannel(new TcpClientChannel());
RemoteObject remoteobj = (RemoteObject)Activator.GetObject( typeof(RemoteObject),
"tcp://localhost:8808/RemoteObject");
Console.WriteLine("1 + 2 = " + remoteobj.sum(1,2).ToString());
Console.ReadLine();//在能够看到结果前不让窗口关闭
}
}
}
保存文件,命名为RemoteClient.cs
用命令行csc /r:System.Runtime.Remoting.dll /r:RemoteObject.dll RemoteClient.cs 编译这一程序生成的RemoteClient.EXE文件。
第四步:测试
在windows中运行Server.exe,然后打开另一个窗体运行Client.exe。
如果一切正常的话,客户端输出: 1 + 2 = 3。
[广告] 金秋最关注楼盘-房不胜房
2008年11月3日星期一
为什么员工要加班
效率 vs 稳定 vs 后期维护 vs 成长
(为什么员工要加班)
----------------------------------------------------------------------------------------------------------------------
如有转载,必需保证本篇文章的完整性,包括本段内容。如果引用,必需注明文章标题、作者和时间。
黄延冬 于 深圳
2008.11.1
----------------------------------------------------------------------------------------------------------------------
目录:
1. 为什么写这篇文章
2. 背景
3. 问题
4. 标准化的漫长之路
5. 这就是我想说的
======================================================================
1.为什么写这篇文章
为了我自己减少工作,减少加班,特写此文。
2. 背景
经过几年的工作,终于发现,一个公司的成长,终究是经历着千辛万苦的。
从毕业之后的第一个公司,到之前的一个公司,三家,要么已经死掉了,要么缩小了,要么折腾来折腾去地没钱赚,看上去,各有各的原因,但结果却只有一个:公司的成长总是处于挣扎之中,好像没有成熟的时候,永远是"创业"阶段。
刚 毕业的时候,在公司里能够写一个软件上能用到的代码就满足了,不管是一个窗口还是一个过程,不需要做任何考虑,写出来只要能正常运行就算是测试通过。后来 换了公司,我志向于VC++的开发,不再使用delphi、vb这样的开发工具了,而VC++的上手,却经历了自我学习的3到4年时间,这个过程太过漫 长,幸运的是,结果还算是用上了VC++,那时很高兴,觉得学习了一些东西,终于迈入了VC++的大门。
事 实上,真正拿VC开始写较为广泛的程序,是从本公司开始的,以前,只是用VC做数据库开发,因为是公司内部使用的工具,模式都很固定,界面也不需要复杂和 花哨,唯一要做的就是数据库的查询、写入、更新和删除这样的操作,所以,除了数据库的查询之外,对我并没有太大的帮助,每天也只是做着模式一致的几乎重复 的工作。而现在却不一样了,有很多工作要做,有很多程序要写,有很多设备要支持,有很多应用要实现,有很多版本要兼容,有很多的程序架构要考虑。自从腾工 离开之后,我开始思考这些问题,这些不是主动开始思考的,而是被动地开始思考。因为没有人指导,全是凭着经验,碰到了多次相同的问题之后,才开始变"聪明 "的,才开始思考这些问题,我想,这已经够被动了,我们还要继续被动下去吗?
3. 问题
有两个问题:一个是当前的工作,一个是未来的工作。
实 际上,这两个问题,已经被广泛地讨论过了,只是每个公司并不一定认真地考虑和讨论过这个问题罢了,它们也就是程序的功能和性能问题,而这两个问题又是其它 问题的基础问题,所以它们非常重要,我们需要认真思考和对待。显然,从经验,或者是说从其它任何事情上看,为了我们的目标,我们都不应该只喊口号而不付出 真实的行动,或者只是缓慢地行动,那不是我们想要的,至少它不是我所想要的(真对当前状况而言,我可能只会更关心我所做的工作内容),因为它严重地影响着 一个公司的发展,影响着我的工作,这是一种思想,我想,从公司的发展看,一个企业的负责团队有责任去思考这个问题。
最早发现的问题是录像的文件名问题。采用扩展名来判别录像文件是由哪种设备产生的,现在看来显然是可笑的,然而,这段代码,在解码库中还是依然存在的,虽然它在当初是发挥了巨大的作用,应该记住它的功劳,但当我们看到它时,也应该记起曾经的狭隘眼光。
和 录像文件括展名相关的就是解码信息的存储。所有的文件都没有一个统一的正式的文件头,由此造成的后果是,不允许用户修改录像文件名。这对用户而言,显然是 一个过份的要求。所以,我们改了,增加了录像文件头,虽然这个文件头的结构不太好,眼睛睁得不够大,但还是开始行动了,它是一个好的开端,是第一个比较正 式的通用的也考虑了版本兼容问题的具有强制性遵守要求的格式文档。它很重要,堪称是一个里程碑。它预示着我们过去陈旧的思想开始发生转变,并且开始付诸行 动了。我们可以为之高兴一把,但也应该看到,未来的路还很漫长很艰辛很残酷。实践证明了这个漫长、艰辛、残酷它确实存在,而且决不是夸张!
接 着,就是网络协议的版本问题。此问题体现在设备的升级过程中,在深圳公交中,也很明显地体现出来没有定义好协议所带来的一系列问题。当有新功能提出并在实 际中发现过去的协议有弊端时,旧的协议已完全不能满足新的要求,所以我必需修改握手协议,还有其中的部分通信协议。这虽然在SDK中做到了前后版本的兼 容,但付出的代价却不小,同时,给用户造成的不便,却无法得到修正。在其它的新项目中,也对原来的旧协议进行了稍许修改,因为全部重新定义,将会有大量的 工作出现,这主要包括代码的重写、调试、兼容处理三个方面,它会严重影响项目的进度,所以,即使是原来的协议并不"完美",我们还是得继续使用,不是吗? 现在,我们有两种协议:文本协议和二进制协议。虽然当初我认为应该有两套协议和现在的协议数量是一样的,但我所考虑的协议功能和现有的却是不同的,现在的 文本协议只是对原来深圳公交协议的简单升级,它只是对原协议的弊端进行了补充,并对协议内容做了适当的修改,但我认为,这和我们公司的现实情况并不相符, 我们不仅仅是需要一个更完善的协议,而更需要的是我们的"标准"协议,它应该承载我们未来协议的重担,而不仅仅是一个简单的升级,因为不定义好,我们以后 还要改动,还要痛苦地"升级",而不能简单高效地升级,现在的这种局面,问题已初露端倪,往后的情形,就让我们试目已待吧。
后 来,我们又定义了帧头打包格式的标准,此标准可以说是一波三折,直到目前,还疑点重重。当初的定义,由于本人太过武断,未进行广泛地调查,就把结构给定义 了下来。结果,结构里面的数据格式却远远不能满足实际的需要,因为各种设备的数据格式不尽相同,为了之间的互相兼容,不得不进行频繁地升级,结果却发现, 升级任何一个小的结构体,都会导致组合种类的数量级飙升,小的结构体越多,其飙升的速度就会成倍地增加,这会为以后的兼容处理带来不应有的困难。在这种情 况下,不得不把这个标准完全推翻,并重新定义,虽然新的定义和老的在大的结构上一致,但其思想的改变,导致以后的升级会轻松很多,而且升级的频率会大大地 降低,然而,这里面还有问题,这问题的成因和过去大家的工作风格是密不可分的,后面会详述。
以上问题,是我所了解稍许的。其问题的形成,除了有历史遗留原因之外,根本上是我们的思想问题,思想没有得到纠正,依然停留在过去那种走一步是一步的原始状态。
在 "创业"阶段,这些都不是问题,反而可以提高工作效率,尽快拿出产品,没错,这是起步时的做法。因为我们可以少做考虑,把更多的时间放到产品的推出上,需 要有饭吃,才谈得起发展。在往后的时间里,当有了基本保障之后,这种不进行长远考虑的思想,将会把企业禁锢在一个小小的范围之内,其水平只能停留在一定的 高度,不可能壮大,甚至会把企业扼杀掉!这时候,在开发新产品的时候,会发现,想做到新产品和旧产品完全不扯上关系那是不可能的事情,比如我们的SDK, 不可能为新的产品单独重头写一个SDK,这是显而易见地。问题也随之而来,原有的产品会有缺陷,我们需要修补,如果做旧的产品的时候从来不考虑以后的情 况,那么现在的问题很严重,如果原来做了部分考虑,则现在的问题可能会比不考虑的情况少一点点。如果只是升级一次两次,即使麻烦,也不至于做不下去,但如 果是要一直升级下去,则终有一天会做不下去的。你会发现,过去的高效率,导致了现在的低效率,也导致了稳定性的日趋下降,日子越久,效率和稳定性都会成倍 地降低,由此也导致了后期维护成本的成倍飙升,如果不早做计划,这种情况的发生是不可能避免的。我们现在的情况如何?我认为不容乐观,最起码这上面做得还 远远不够。
我 们在讨论用户的需求问题,在清楚需求之后,再讨论如何来实现这些功能,再讨论清楚之后,开始付诸行动,一切很顺利。是吗?不!只是现在的情况比早期好了很 多,至少上面的步骤基本上都有进行,那么,我就只说现在的问题。现在的问题,有点像黎明前的黑暗,一切都已准备就序,只等太阳升起把大地照亮。这个太阳, 就是我们的行动,这里面的东西,就是我们的思想,就是我们要做的产品,这里面的问题,就是太阳还未升起,一切都还未有序。我们思想和产品中的问题,需要我 们用行动来解决和消除,这其中首当其冲的就是我们思想的问题解决。我们有两种协议,不说解析不一样,重要的是,里面的常用数据格式不一样,录像文件的常用 数据格式和协议里的不一样,协议里的常用数据格式和设备里的不一样,设备里的常用数据格式和设备的外围设备里的又有版本兼容问题,有了文档约定,大家并没 有去遵守,设备软件本身的前后版本兼容问题。很久以来,研发部做过联调的同事们应该会有一些感触才对,除了功能的调试之外,有很大一部分的时间花在了这些 常用数据的格式上,因为各个地方的格式并不统一,彼此之间为了弄清楚对方的要求,都做了大量的工作,加班到半夜,这个加班,值得吗?这不是造成不稳定的一 个因素?这不是效率降低的一种表现?这不是维护成本提高的一种表现?所以,我们需要标准,我们自己的标准,为的是统一,大家都按照这个标准来,谁不符合这 个标准,就是谁的责任,就谁来加班,不是更好吗?深圳公交为了升级,文档进行了修改,增加了协议,一切都已就序,设备和PC端的代码都已经完成,本是在下 班之前就能完成的,结果联调到半夜12点多才完成,原因是设备的代码和文档不符,结果还要求修改文档,这是一种怎样的思想?我想,做工作说清楚了,大家都 会做,只是时间长短不同罢了,认真去做,都做得出来,但思想就不一样了,如果没有雄霸世界的野心,怎会在外国建立军事基地?如果要让美国撤掉外国的所有军 事基地,美国的总统肯定不干,因为它的思想就是要雄霸世界,你想让他转变这个思想,太难了。同样,我们过去那随便定义数据格式,或者是有了文档约定却不去 遵守的思想要想彻底改掉,去建立大家都"易于"接受的标准,也不是那么容易,但如果没有标准,永远都是处于产品的完善之中,公司不会成熟,不会长大,没有 希望,怎么可能留住人才?
4. 标准化的漫长之路
PC端 为什么要做SDK?是为了方便其他用户使用我们的产品。其他用户不需要关心我们内部的数据是怎么传递的,也不需要知道内部的数据是怎样存放的,他们只需要 关心他们想要的数据,关心这些数据的格式存放。SDK有一个问题,就是版本的升级问题。如果只是功能的增加,也许不成问题,增加接口即可,但如果是复杂的 升级,结果就不一样了。比如原来有的数据是一个整数,没有小数位,但由于设备的升级,有了小数位,这时候,接口的数据格式就要改变,用户在拿到新的SDK 后,需要修改程序以处理带小数点的数据。更复杂的升级会造成SDK的兼容问题和对用户的使用带来更大的麻烦。比如原有的SDK所处理的某一个参数数据都是 3个标识项的,现在有一个新的设备,这个参数却有4个标识项,其中的3个和其它的设备是一样的,那么,SDK如何做到设备之间的兼容?增加一个接口?显示 不好,因为都是设置的同一个参数,如果增加了接口,则用户必需真对设备来调用不同的接口,会造成一定的麻烦。这种情况下,SDK会对原来的接口增加一个参 数,但这个参数有一个缺省值,由SDK内部确定这个参数有没有用,这样用户在拿到新的SDK后,如果还是在原来的设备上使用,则不必理会这个新增加的参 数,只需要重新编译一次工程即可。所以,SDK的功能除了和设备交互之外,很重要的一个功能是对设备的参数进行了加工后传给了上层程序,上层程序不管是对 哪一种设备,它们的处理方式都是一样的,即SDK把N种设备都处理成为第N+1种标准的虚拟设备,对用户而言,都是一样的设备。那么,我们定义标准,除了 升级之外,也是要让所有的设备都做到统一,尽量做到统一,以便减少SDK的处理繁琐程度,以及增加设备之间的互通性,版本升级的兼容性。实际上,设备也同 样应该有一套SDK,这套SDK应该是处理所有外部设备传回的数据,把它们处理成统一的格式,应该具有扩展性,版本兼容性。否则,外围设备发生改变时,设 备所收到的数据格式不一样,将会增加工作量。最明显的例子就是GPS原来的2个小数位变为4个小数位所产生的影响,不仅影响到了设备,也影响到了PC的 SDK,还影响到了上层程序,影响巨大,你会认为这个改动,花费4个人每人半小时的时间就能搞定吗?如果你这么认为,那太天真了。但如果原来是定义好了, 考虑到小数点后10位小数,一开始PC就和设备定义好这样的协议,则这样的变化,PC端就不需要做任何改动,不用花一秒钟的时间,要知道,有那讨论的时 间,还不如早点下班休息一会儿也好。但我们确实没有早点下班,反而是为此花费了大量的时间去更正,去讨论,去修改对外的文档,去重新理解这个GPS,还要 做到和以前版本的兼容而新定义了一个结构,还要记住新旧GPS之间的差别,当有新人问的时候,还要花费时间去讲述这段历史,以便他能够理解为什么会有两个 差不多的结构存在而没有把它们合并成为一个。所以,我们加班,加班来做这些无聊的事情,做这些本来就不应该占用时间的事情。做这些本来就不应该有的工作。 今天,你是否将会做很多无聊的工作?是否做了很多无聊的工作?你是否还要加班?
虽 然都是程序,但不同的程序是有着很大区别的。这不仅仅是哪种语言的问题,而是一种感性认识的存在,在实际中,这些问题确实存在。如果把我们的SDK限制 住,用户只能使用VC来开发,虽然对大部分客户来说都不是问题,但绝对不是所有的客户都没有问题,成都的客户,就是一个活生生的例子。这只是其中的一个表 面问题,另外还有一个问题,对于没有使用过c、c++、或者是VC的研发人员来说,如果没有进行过底层的开发,我相信,十之八九都不会关心long型变量 占了多少字节,char和TCHAR有什么区别,结构还有字节对齐这样的问题,所以,我们的SDK要做到"通用",让这一类的开发人员也易于理解,而不是 故弄玄虚地再故意弄出几个以位来表示的结构成员,那样只会增加客户的负担,只会增加我们自己的工作量。同样,我们要定义的标准,是为了产品的长远发展,是 为了减少工作量,是为了尽快地推出新产品,是为了研发部各小组之间交流的方便。除了也有维护方便性之外,我们还应该看到,我们定义的数据结构,人工来看是 次要的,而计算机可以方便地读取和处理是首要的,所以,除了某些特殊的情况之外,我们应该按照计算机的意思来定义数据结构,这样,才会使程序的运行效率提 高。基于这些思想,设备就不应该让外围设备的数据格式在设备中到处乱窜,SDK不应该让设备的数据格式在SDK中乱窜,上层的应用程序不应该让SDK的数 据格式在SDK的接口上乱窜,能使用数字表示的,就不要使用字符串来表示。只有每一层都严格地把关,最后到了上层的应用程序,才会做到最大限度地统一,上 层应用程序才不会因为SDK的改动而大修。设备应该做到数据格式的统一,无法统一的,放到SDK上来统一,如果SDK也无法统一的,只能麻烦上层的应用程 序来适应了。同样,设备不应该把难懂的数据发给SDK来解析,SDK应该使用通常语义就能理解的定义来定义数据,这种难以理解的语法和数据,应该在设备内 部处理,为什么要把这种难以理解的语义,从头带到尾,让每个环节的研发人员,都难以理解呢?所以我建议,设备端也需要有一套自己的SDK,专门来处理外围 设备发来的数据,把它们处理成设备使用的标准数据格式,而且这个SDK对所有的设备都通用,完成一个之后,其它设备都直接使用,岂不美哉?
研 发部写软件的同事们,特别是做PC软件的同事们,如果稍有注意,很容易发现,VC的include目录中的文件里,还有msdn的sample文件里和文 档的示例中,也包括msdn文档,有很多2000年之前的代码或者文章,1998年的有很多,最早的可能到了1995年,请恕我孤陋寡闻和不好的记性,不 知道那里是否有1990年之前的代码和文章,即使现在vc的开发环境已经修改了很多,IDE也大为改观,但1998年的代码还是占到了相当的比例。而听到 我们的同事说,不只一个人说过,我们的代码能用上个8年就非常了不起了。8年,是我听到的最长的时间,最短的有说不超过3年的。这大部分是在我定义标准格 式的文档时听到的。是啊,我们一开始就没有打算过让我们的代码和产品能稳定地用上50年、100年,计划就是短短几年内就要重写,就要大改,就要把旧的产 品踢掉卖全新的产品,有多少人可以做到三年一大改,5年一重写?100个人吗?还是1000个人?而我们现在才几十个人,PC也才不超过10个人,能做到 经常大改和重写吗?买我们产品的客户,注定就是要用上3、4年后再买我们的产品?笑话啊,所以,我常为此担心,也因此而无法使定义的标准畅通无阻地执行下 去,更可笑的是,先写文档做为标准,再写代码,然后再根据写好的代码来修改标准的文档,难道这还不够荒唐吗?如果是刚毕业的学生,或者是经验不多的研发人 员提出这样的问题,我觉得不大奇怪,我也喜欢只用int i, a, b;这样的写法,把a用做超过100行代码的函数中进行时长统计的变量,我也喜欢直 接使用int counter这样的全局变量。但是,这应该只是在"新手"的时候才用,在有了"经验"之后,就不应该再有这样的代码出现,最起码不应该让 这样的代码留在成形的代码中过夜。我们的研发人员如何?我没有检查过别人的代码,我不敢妄下结论,但有"经验"的都仔细地捉摸一下自己在当前水平的基础 上,技术水平是否还有提高的余地。
5. 这就是我想说的
我们现在是有饭吃了,那么,就应该思考一下以后如何才能吃我们想吃的,而不是想着明天可以多赚10块钱而今天要拼命地不加思考地工作,那效率太低了,而且还会越来越低,每天多赚10块钱的计划会越来越受到挑战。
公 司的高层,应该多考虑一下如何去制定标准,如何让这些标准能够准确无误地推行下去。这已经严重地影响了现在的效率、稳定和维护,这些问题已经迫在眉睫了, 岂能再这样拖延下去?也许一个公司的成长必然要受到这些问题的困扰,但当我们发现的时候,应该及时地去解决,使公司尽快成长起来,而不是面对问题犹豫不 决,无所适从,让员工为这些问题而彻夜地加班。在一个体面的公司里上班,特别是在一个高科技的公司里做着体面的工作,走在大街上应该是骄傲和自豪才对,可 是我走在大街上如此地匆忙,生活的压力是如此之巨,我未感受到科技带来的轻松,反而被这飞速发展的科技压得气吁吁。
还有,我不想加班。因为加班并不能解决所有的问题,就像有钱并不能解决所有的问题一样简单。
[广告] 金秋最关注楼盘-房不胜房