一通乱弹

这是一篇在公汽上发布的日志,车上颠簸的厉害,所以现在思维也很颠簸…

明天不去踢球了,因为手指受伤,不过门还是有人守的,公司来了一个UI比较野蛮的硕士,他踢足球。羽毛球,我来了!

同学的公司位于马勒戈壁,今天早上他们经理突然将同学毙了,理由居然是草泥马的需求变更了,卧草不够吃,于是公司准备将管理层升级为狂草泥马!!!

久闻嘀咕网(http://digu.com/boluotou),今日一试,发现可以方便的用MSN签名发布微博客…只让大家知道我在办公室干什么(访问上面括号的网址)!同事慎用,担心security的同事忽略这段话,如果使用,后果自负!
Update on 04/12/2009: 现在我已经将MSN签名和*******, 校内,开心都绑定了。^^

工作上做了几个项目后,自己成熟起来,下手思考更有型了,希望在写Email更加得体些。

感情上加入了校内某红娘馆,既然工作上成天面对着电脑和一群人,那么生活上多认识些人也是好的,希望各位女性朋友有空多来骚扰!

Update on 04/12/2009:
参见了可能吧的文章,我发现《谁动了我的代码》系列文章太凌乱,以后文章结构要更清晰才行,要改进改进。

电视剧一部一部看,却总看不完…刚和六个人一起享受美国纽约无拘束的生活,一下又和龙伪团长一起抗击倭寇,马上听说奋斗的姊妹出世了…太多的电视剧无法看完,我的青春谁做主~

罢了,明天我的职业生涯导师马文童鞋结婚,祝福他吧!让青春继续…我也准备从这小说中看到世界的阴暗面。

车到街道口了,算了,到这吧!按发布键,人生和这车一样还得继续下去……

边际效用递减

在软件的早期版本包中,相当于部分功能开发完成的提交,这个期间软件产品的已有功能不可能达到完美的程度。尽管我们工程师经常有完美的意识,但是在deadline的有限时间内,我们要做的就是把基本的功能做好,然后才去fix这些bug。如果时间有很多空闲,就不在此讨论范围之类,而大多数的情况是,按照流程下午2:00打包,但是如果早上发现了此类bug,fix这些bug需要大量的工作量,但是又只能达到一点效果。这时候如果开始编码fix这个包,那么很有可能下午规定时间内不能打包,于是内部开始delay。流程被打破之后,如果为了修复这个小bug引起了其他的回归bug(regression bug),那么其他的DEV又要去修复。修复完了之后QA再做full test......如此下去,包最后一定打好了,但是所有team内人都搞得身心俱疲。

最后包发到客户那里,客户可能只会关心这次提交的主要功能,至于这个enhancement的功能,客户也许完全不在意,因为他知道这不是终极版本。而且即使这个enhancement没有,也不会影响主要的数据和用户体验。

于是我们在做完主要功能后,承担着压力和风险,在软件提交日花了大量额外时间做的一个小的enhancement,客户可能完全忽略,甚至连测都有可能没测到。换句话说,之前花费的大量精力没有对客户满意度有大的提升,甚至没有提升

200多年前,Bernoulli提出的期望效用理论(expected utility theory)可以解释这种现象。期望效用理论认为,人们应该选择的是期望效用最大的那个选项,而不是期望值最大的那个。说白话一点,效用有时候是一种感觉(feeling),如果我们能够让别人有这种感觉就很好了,而不在于给别人的东西有多大价值。就像上面的烧饼,第一个和第15个一样,但是第一个给人“感觉”就很好,所以让人满意度也很好。同样的1000块钱,用于给总监加工资和给普通员工加工资完全效果不一样。

同样,给客户发包的时候,客户的满意度不在于你在这段代码里面你花了多少努力,而在于你完成的功能给他的感觉。当他看到你写的主要功能都完成之后,就像吃了14个烧饼,然后他可能就不在乎你那一点enhancement了,你那一点enhancement不会给他太大的满足感,如果你为这个enhancement花了甚至多于主要功能的努力的话,那么就显得有点stupid了。特别是在打包日把自己和团队其他成员感到身心惧疲,就更不划算了。

管理成本与收益

周五又开周会了,气氛很凝重,主要是对近期发生的事情检讨,然后分析到底什么原因出现了这样的事情。

主要是因为两个项目,一个项目的事故在于用一个项目文件覆盖另外一个项目文件的时候,被覆盖的项目文件属性不会变。这一点很不make sense,而那个属性直接影响到手机同步数据的问题,所以自然到客户那边会感觉出了一个很大的事故。第二个项目的事故在于客户要求在每级数据库下加一个key字段,但是这边DEV在加的过程中,只注意到名称,没有注意到类型,导致某个key字段居然用image类型保存。

于是在会上每个人发表了自己的观点,总结起来主要就一点:心理麻痹。简单的说,在一个人在面对一个熟练工作的时候往往放松警惕,发展到最后事情有时候就不会考虑很全面,做事情的时候就不会足够的严谨。开发人员对自己放松了,很容易在产品中表现出来。第二个项目事故就是一个很好的例子,还是一个低级的失误,实在有些让人汗颜。

而团队成员有的也提出,搞一个“大家来找碴”的游戏,每次发给客户的邮件先发给我们大家,让大家帮助找错误。其实我是非常赞同这样的想法,第一保证质量,第二比较有趣味。但同时我也很担心这个游戏的成本和执行力。

SQA也提出定期做一个全面的测试,但是开发主管也明显考虑到这个措施的成本以及收益之间的关系。

成本与收益,应该是软件项目始终要考虑的东西。

生活依然继续

生活依然继续。平淡是主旋律,偶尔来的变化则是点缀。

新项目一个接一个来,刚刚分析完需求,准备开工的时候,客户一个邮件过来说等等。接着在莫名其妙中修复老项目的bug,接着又莫名其妙的接到一个邮件说新项目来了。此新项目不同于彼新项目。很好,“这个世界果然在飞速变化”,不知道会不会激起我对变化的嗜血性,游戏很精彩。

关于English,我承认我在不断的学习中。以前说过我想把TOEFL 10000这本书的所有单词例句往博客上面抄 [详情],其实我没有食言,我是不断的在公司把那本书往电脑里面写,我不知道写完之后效果怎么样,但是有一种坚持也不错,哪怕只是小小的抄书。在All hands meeting上,我提出公司英文环境的逐渐缺失需要引起重视和采取必要的措施,结果是我偶然的一段中文对话被突然出现的SQA抓到现行,于是无奈地往存钱罐里面放入一元血汗钱。当然这只是一个花絮,平常这段时间办公期间我们团队对话语言和MSN语言基本被英文覆盖,则是铁的事实。

星期六又去踢足球了,这次是真的踢足球,手指受伤的困扰让我从守门员暂时转战到后卫,后卫感觉也还不错,一开始累得上气不接下气,过了一段时间就逐渐适应了这种奔跑强度,于是精彩解围和头球助攻纷纷在我身上上演。

上个星期聚会了两次,都是光谷帮的高中同学。说实话,跟他们在一起是最放松的时候,哪怕不说话也可以。不过毕竟是在不同的环境里面生活,想法也都不尽相同。在国有研究院里面读研究生的某位兄弟一直说我很迷茫,我不敢说我不迷茫,但绝没有他说的那种程度。也许受到环境熏陶,他无法理解什么叫"Genius of the AND",我也不想强制价值观输出,这样挺好,如果什么价值观都相同的在一起就太没意思了,前提是彼此互相尊重对方价值观。有这样的朋友,我感到很满足。(如果你看到这段文字,下个星期的聚会不要找我纠结此类问题,我拒绝^_^)

寝室有电脑了,于是每天下班回家,就和美国的六个人一起享受《Friends》的快乐时光,真想和他们那样,不过貌似在中国,不太允许。大环境不太允许,我个人应该没问题。

今天国际劳动妇女节,祝天下女生生活甜蜜幸福。

生活依然继续,发现我很喜欢点缀,喜欢新鲜的东西,不喜欢按部就班。如果没有点缀,那就由我来创造点缀。

Cool~~

软件包中的调试代码

上周一的一次Deliverable出事故了,一个DEV因为同时负责几个项目导致慌乱将某个软件包中的debug信息忘记去掉,发到客户那里被客户发现,在一个主要功能点上打开界面居然弹出4个Message box(DEV常用的调试方法),导致那个美国客户花容失色(想象的)。

背景是这样的,那天这个DEV本人接到了很多任务,而且都是跨项目的,他一共负责两个项目。其中有一个项目便要当天打包发给客户,于是他急急忙忙fix了一个bug后,便打包发出去了,然后马不停蹄的做下一个项目的debug工作。因为我们的项目的特殊性,调试是要用message box的,这位仁兄调试完了之后忘了把messagebox()的代码删掉,也没有自己测试一遍就打包发过去了。Tech-lead基于对这个DEV(确实技术很牛)的信任,看完邮件后直接发给客户,于是第一段的情况出现了。

我们的项目从技术上看是这样的。
1. 面向过程。
2. 工程文件只有一个xml文件。
3. 一个比记事本稍微好点的IDE。
4. 调试无法IDE跟踪,只能弹Message box显示变量信息。

多次事实证明,一个人在慌乱的时候或者心理状态不佳的时候,代码质量也不佳 [详见此] 。智商不高的客户怎么也不能理解在一个主要功能点出现类似于“0”,"f1"诸如此类的信息是怎么回事,于是自然愤怒。还好最后在我们的SDM和Tech-Lead的公关下解决了客户的不满。

说到这里我们的经验是什么:
1. 做任何事情不能慌乱。
2. 如果头脑迷糊,可以暂停工作,用冷水洗脸,清醒后继续。
3. 如果同时有多个项目在身,要一个一个的做,项目项目之间不能随意切换,否则大脑容易迷糊。
4. 不要在主版本上面调试,任何调试要在自己的版本上面调,调好后再merge到主版本上。这样从源头上阻止了调试代码的嵌入。
5. 任何debug完成之后,DEV不要过于自信而不测试,因为大脑不像电脑永远可以保持活力和“全面的思考”。
6. 在最后的软件版本完成之后打包之前,QA要做个全面的测试,至少smoke testing(冒烟测试)要覆盖所有的主功能点
7. 在重要的包发出去之前,如果有必要的话在Tech-lead这里做一个“随机点击测试”。

经过这几层过滤下来,在软件包中含有调试代码的几率将大大减少。

程序员的状态==代码的状态

一个人的状态怎么样是很容易看出来的。尽管可能口头上不说,或当你问起的时候回答“我状态挺好的啊”,但是身体语言不会说谎。这点小孩子都可以很容易看出他的玩伴某天的状态与往常不一样。当你问起的时候,如果他承认他状态不好,这说明他至少也希望积极寻求帮助让他恢复往常,但是当他不承认状态不好的时候,这说明他在回避,也就是说平常你看到的状态也是他回避之后的状态,那么他的状态可能比看到的还要差。特别是如果一个人平常很活跃的时候,那么在他低沉的时候反差就显得更大了。

我们经常说通过一个人的代码风格可以看到这个人的性格怎么样,虽然感觉有点过(可能没有达到这个level),但是相信还是有道理的。一个稍显粗犷的人,可能他的OO思想用得很到位,大处着笔,大的框架默然于胸中;一个性格很细心的人,可能他的整体观点不太强,但是Coding style却能把握的非常好;一个处于思路清晰状态的人,他的代码也条理清晰,判断,循环井井有条;一个处于思路混乱状态的人,代码逻辑关联不强,东一处西一处,bug横飞。

总体而言,调整为最佳状态工作是对软件工程师们非常重要的话题,根据我那一点点的经验,总结如下:
1. 要尽量早完成一天的工作。时间拖得太晚,状态就会下滑,效率也下滑,错误率会上升。
2. 如果突然接到任务而此时思路混乱,注意力不集中,就不要强行一直下去了。可以去用冷水洗洗脸,然后冲杯咖啡,有条件的可以去公司外面吹吹冷风。给自己一个时间,比如10分钟,那么10分钟不想项目的事情去好好调整,然后回来再想代码的事情,就发现原来被卡住的地方自然会通畅起来。
3. 如果是因为生病状态不好,可以去和主管说明情况,在保证质量和进度的前提下,可以先做些难度不大的代码编写,最后等恢复了些再做主要工作。实在不行就只好让别的工程师代理你来做了(根据主管安排)。

程序员应该有自己的一门语言

星期五的周会,让我们讨论到这个话题。之所以提起这个话题,是因为参会的总监提出影响一个项目有哪些方面,头脑风暴的结果分为4个方面:技术,沟通,管理,业务知识。

我们这个team的项目比较特殊,是用客户的一套API进行开发,这种API语言就是放在CSDN上也没人知道,因为这API只是针对这家北美客户的产品。技术含量比较低,但是好处是可以用来快速开发项目,有的项目甚至可以用4天开发完成。而且因为这套语言基于面向过程,所以对团队合作的要求更多。最后我们的一致结论是在沟通和管理方面学到很多,但是技术的成长却没有很多。

如果一个开发者对技术掌握的不多实际会非常心虚,而且对自己技术职业生涯的发展不利。

《谁动了我的代码》

本博决定推出《谁动了我的代码》系列文章,文章不定期更新,主要是记录自己在公司的收获和软件方面的些许思考。《谁动了我的代码》标题创意取自于《谁动了我的奶酪》,在这个变化飞快的世界里,我们要做的就是Change with speed,然后记录下变化的种种历史,以便用来"数据挖掘"得出新的思考和收获。

第一篇是《程序员应该有自己的一门语言》,来源于上周的一次有总监参与的项目周会。

希望在自己的职业生涯的技术阶段能够持续更新。

2009年新年目标

这些目标其实是公历2008年底就确定了,不过想想还是要写下来,虽然要设置成私人文章,待到2009年底再打开。不知道这是不是一种压力,不过事实证明我确实是一个压力驱动型,当我的意志不能完全将懒惰征服的时候,只有压力能够帮我解决。

过去的就让它过去吧

大年三十的清理行动很彻底,把自己弄得很累。导致看完春晚接着睡觉,接着今天走亲戚一天,到现在才回家。

千辛万苦地把妈妈拦在门外,坚持自己的房间自己清理。不知道是自己真的已经长大而不是学生,还是受到职业的影响,做事起来就要干净利索。而且做事前把要做的事情在自己脑里过一到,做个计划,先做什么后做什么,排个优先级。经过1分钟的计划时间,行动便开始了。

首先拿起抹布,从上到下,从里到外,从左到右的顺序抹桌子和家具。这一抹不要紧,最后清洁任务弄成了整理物品的任务了。一趟下来,发现整理出来了好多“没用”的东西。之所以打上引号是因为“没用”分两种情况:1. 真正已经发挥不了使用价值的东西。2. 可以发挥使用价值却没有发挥的东西。(有点乱,有点乱。。)

结满灰尘的瑞星2001杀毒软件套装(现在都09了,连美国总统都换了还要着干嘛),1.44M全新软盘两张(现在连软驱都没有了),轻轻松松背单词6(都有iciba.com和dict.cn还要那干嘛),Modem内猫拨号充值卡(都快3G了,连ADSL都嫌慢了还留着56K拨号猫卡干嘛), windows98se(微软windows7都快出来了),2003年杂志附送光盘(里面的软件我真不知道当时为什么要收藏),布满灰尘的山寨地球仪(Google Earth出来后可以看到我家楼顶,您还是先下岗吧),从来没打开过里面是全新的笔插(应该早把你放到可以让你“闪光”的地方啊),肯德基的收音机(当年吃套餐送的,现在手机里面都有这个东西了)。。。。。

清理了之后,房间变得干净许多。或许是职业的影响,每天接触大量的信息,所以想方设法的让周围的事情简单,简洁,明了。每清理一件东西出来,深思熟虑3秒钟:这个东西还有什么用?如果用什么时候用?可不可以用其他的东西代替?三个问题问完,立刻决定留还是不留。按顺序执行三个问题,如果第一个问题回答“没用”,直接扔垃圾桶;如果第二个问题时间超过一个月或者超时回答,扔垃圾桶;如果第三个问题哪怕有一个简单的东西代替,扔垃圾桶。按照这3个原则,扔东西起来也变得爽快很多。用了大概1个小时左右,房间焕然一新。(没办法,东西太多)

后来倒垃圾的时候想到,原来拿在手上的东西绝大部分都是当时没什么用,但是想着可能未来一段时间(比如一个月后)会用到,于是选择留下来,自然到了一个月后也没用过,自然将来一直没有用到。于是那东西就静静的躺在那里接受灰尘的沐浴。

让过去的就过去吧。
分页:[«]6[7][8][9][10][11][12][13][14][15][16][17][18][19][20][»]