代码改变世界

最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用17

2011-08-26 13:29  java ee spring  阅读(160)  评论(0编辑  收藏  举报
工作中的细节
吴言的新公司好像一切都进展得很顺利,经过一周左右的磨合时间,大家彼此都变得熟悉起来,每个人也基本进入了工作状态。吴言对此非常满意,第一次转型做管理的自己,在最关键的第一周并没有出现大的失误,这个小团队已经开始工作了。
但是吴言还是注意到了一些问题,虽然这些问题很小,但是吴言觉得还是需要做些处理才行。
吴言首先发现,李卫东的优点是做工作非常认真,他做出的功能模块,自己在测试时从来没出现过问题,有时即使故意输入些非法数据,程序也可以非常好的处理这些异常情况。对于这点吴言相当满意,觉得李卫东将来一定可以成为一个非常优秀的人才。但是李卫东也有一个缺点,就是基础知识不扎实,一遇到问题就会束手无策,通常这时他都会静静地走到吴言身边,轻轻说:“老吴,你有空吗?帮我看一个问题!”接着就把吴言请到自己的座位上,让吴言坐下,然后自己拉一把椅子过来,对着吴言讲自己遇到的问题,然后特别诚肯地请吴言来解决。刚开始时,吴言觉得这是一个好习惯,因为以前在做项目时,遇到过太多的项目组人员,遇到问题时就自己闷头想,不和别人沟通,最后耽误了整个项目进度,那时吴言无论怎么强调及时沟通都没有效果,李卫东可以主动向吴言请教问题而不是闷在那里整天没有进展,吴言还是很满意的。但是吴言很快发现,李卫东问的问题大部分是比较基础的问题,而且有时他会问几乎同样的问题。吴言觉得需要让李卫东可以改进一下,一是遇到问题时可以先到搜索引擎上搜一下,二是可以将一些知识点记下来,在下次遇到类似的问题时,可以通过查看以前的笔记得到解决。
吴言还发现,赵文涛编程比较快,但是提交的系统的BUG就比较多,通常在提交过来时,吴言一测试肯定会出现问题,然后把他叫过来,给他指出来,他回去改了改,然后吴言再测,可能又会出现新的问题,然后是再改再测,通常需要往复好几次。经过查看赵文涛的代码,吴言发现赵文涛编码非常随意,经常不对代码进行严格的缩进匹配,同时还有比如当if语名下只有一句时,不加{},还有本来更不容易出错的写法if (0 == var),但是他一般都写成if (var == 0),这样如果哪次疏忽丢了一个=号,那就会出现大问题了。对于赵文涛,吴言希望他可以严格遵守编码规范,同时培养将事情一次做好的能力。
面对这些问题,吴言不想生硬的给他们指出来,因为根据自己以往的经验来看,这样做的效果都不大。因为他们和自己当年一样,刚从校门出来,都有对自己干一番大事业的憧憬,但是刚开始工作时,分配到的工作往往都是一些小事,有时甚至是琐事,一遍遍重复,相当乏味枯燥。干一番大事业的憧憬与整日陷于小事的落差太大,以致于我们都会产生牢骚、抱怨,觉得自己被大材小用。在这种情绪下,我们难免就会对手头的小事不够重视,这样我们又会受到指责、批评甚至辱骂,有时还要替同事来背黑锅。
其实现在吴言已经有所领悟了,刚开始工作时从小事做起,可以磨练我们的性格,培养出认真做事的能力,让我们注重细节,提高执行力。同时我们也可以在小事中发现可以改进的地方,把这些小事做得更好,提高效率和质量,这样不仅可以为公司创造效益,同时也可以使自己增强本领。可惜吴言明白这一点已经太晚了,当吴言开始注意这些细节和小事时,吴言已经发现自己是开各种会议时年纪最大但是职位最低的一位了。
吴言不想让这些员工重新经历一遍自己以前所经历的一切,走自己以前所走的弯路,吴言想找到机会有办法来提醒他们可以注重工作中的细节和小事,并且把这个作为他们自己的一个信条,这样才真正有效果,而且这样不仅对公司好,更重要的是对他们每个人的职业生涯都有好处。想到这些,吴言不禁觉得他们好幸运呀,能够遇到自己这样一位领导,让他们在职业生涯少走很多弯路,如果自己当初能有这么好的运气就好了。
这天吴言正在思考着文本自动聚类算法中的准实时的问题,就是当新文章加入时,怎样可以做到立即进行聚类,让用户可以马上看到结果,这个过程一定要快,让用户感觉不到明显的延迟,同时在运行聚类算法时,原来的聚类结果还可以服务于其他同时在线的用户。
吴言正想得入神,这时李卫东又走了过来,轻轻地说:“老吴,有空吗?帮我看一个问题?”吴言这才从沉思中回过神来,这已经是今天李卫东第三次找自己解决问题了。这种情况确实需要改变了,李卫东平均一天要找自己四五次,自己每次都刚进入工作状态就被打断了,工作效率太低了。吴言心中想着,决定利用这次机会向李卫东提出自己的建议。
像往常一样,吴言又坐到了李卫东的座位上,李卫东扯把椅子坐在的旁边。
李卫东边指着屏幕边说:“您看这两日期都是用字符串表示的,都是年月日时分秒形式,我现在要求出这个时间的时间差,这个需要怎么处理呢?”
这个是一个比较基本的问题,但是Java中处理这个问题的类有好几个,确实很难都记住。
吴言就说:“噢!这个问题其实我也记不住细节,我只知道大体的方法,就是先将这些字符串转化为日期类,然后对这两个日期类进行运算求出时间差就可以了。你看,遇到这样的问题可以首先在搜索引擎上搜一下,我经常用的是Google,因为搜技术文档时Google比百度的结果要好一些。”
说着吴言打开浏览器,进入Google搜索界面输入了“java 字符串转日期”,Google的搜索提示最终选择到了上边的结果,吴言向李卫东说道:“你看,通常我们想要搜的内容,都可以通过Google的自动提示找到。”吴言看了一眼李卫东,李卫东点了点头。接下来他们找到了ITEye上面的一篇文章一起读了起来。
吴言说:“你看,可以将字符串通过DataFormat转化成Date类的对象,因为Date类可以表示为该类所代表的时间到1970年的毫秒数,把两个数一减,不就可以得到这个两时间的差了吗!然后把这个时间除以1000就是相差的秒数了。”
李卫东不停地点着头,应该是已经明白该怎么做了。这时吴言不失时机的说:“其实,你发现没有,你每次叫我过来解决问题的时侯,我都是通过搜索引擎来解决问题的,你其实也可以尝试一下。这样你对搜索引擎熟悉后,很多问题都可以自己解决了。”
李卫东点点头,说道:“是!我以前也经常搜,每回都返回好多文章,就是不太清楚怎么才能找到需要的文章,感觉挺费时间的。”
吴言接着他的话说道:“确实是这样,不过在看搜索出来的结果时,如果是ITEye、CSDN、博客园、StackOverflow上的文章,你可以优先看一下,通常这些地方的文章质量比较高。”
李卫东迅速拿过纸和笔,不好意思的说:“老吴,能在再说一下吗?我记一下!”吴言就又重复了一遍,李卫东把这些记在了本上,然后又让吴言确认了一遍。
吴言对李卫东这种工作态度和工作方法还是很满意的,由衷地说:“其实我觉得你很多工作习惯都挺好的,我都应该向你学习呀!”
李卫东谦虚地说:“哪里哪里!”但是脸上还是露出了一丝得意的表情。
果然,在这之后,李卫东提问的次数明显减少了,吴言也发现他确实在认真地使用搜索引擎了,而且原来他一般使用百度,现在也在使用Google了,看来李卫东还是真的转变了。
今天怎么过得这么快,还没干出什么来就要下班了,吴言伸了个懒腰,感慨着。这时李卫东走了过来,不好意思的说:“老吴,我想把一个字符串表示的时间,存到数据库里,怎么把字符串转化成日期我给忘了!”
吴言这时第一反应真想说:“前两天不是刚给你说过吗?怎么现在就忘了,自己查去!”但是吴言压制住了自己的冲动。觉得应该趋这个机会提醒他做好技术积累工作。
“我刚才查了一下,怎么也找不到那次那篇文章了,而且上次的那个类我也忘记是哪个了!我想在下班前把这个功能做出来,所以过来问问你!”李卫东不好意思地接着说着。
原来是这样,吴言庆幸自己刚才没那么生硬的说出那句话来,他的这种今日事今日毕的精神还是非常值得肯定的,平心而论,现在系统中至少有上百个类,对于他这样一个新人来说,由于没弄清基础架构,面对一百多个类迷失在里面也很正常。想到这些,吴言说:“没关系,我帮你把原来的那个类找到!今天还要加班呀,亲苦了!”
吴言又坐到了李卫东的座位上,这次李卫东没有拉椅子坐在旁边,而是站在了一边。吴言把那次那个类调了出来,指着那段代码说:“你看是这里吧!”
“是的,是的!”李卫东答着。
吴言没有立即起身,而是略有感悟地说:“其实以前我也和你一样,经常自己做的东西,过了一段时间就忘记了,后来我就坚持把重要的事情都写日志,不是为了发表,只是为了自己在以后可以作为参考,后来我用QT做了一个小工具,可以把包括项目、任务、日期、关键词、类别等信息记录下来,以后再遇到类似问题时,可以先查自己的这些知识库,然后再去搜索引擎。”
“是的,您那个东西能发给我一份吗?”李卫东真诚的问着。
“没问题!”吴言答着。
吴言接着把自己的这个小工具发给了李卫东,然后给他讲解了一下大致的用法。
在随后的几天中,吴言发现李卫东还真的在用自己的这个小工具,而且很认真,吴言不禁觉得李卫东真的是难得的好员工。
下面就是赵文涛代码不规范而且做事比较马虎的问题了,吴言感觉这个问题比较棘手。对于像赵文涛这样自视极高的开发人员,跟他说代码规范并让他去遵守很困难,包括目前很多公认的高手,他们有一些代码也是写得只有自己可以看得懂。但是吴言觉得良好的代码风格和编程习惯,对于自己或其他人日后维护代码都非常重要。但是怎样把这个想法让赵文涛这样的开发人员接受呢?直接说效果肯家有限,而且如果反复强调的话,还很可能令他们很反感。吴言一直想找到一个好的方法。
终于,吴言找到了一个可以利用的机会。事情是这样的,在赵文涛的一段代码中,原来if语句后只有一句,所以他没有加{},今天让加入的新功能中,正好需要在该if中再加一句,赵文涛直接加在了原来语句的前面,这样本来if条件满足时,需要执行两句程序,现在变成只能执行一条了,而且比较巧的是,当前的数据库中的数据不会运行到这段代码,因此这个问题如果不是吴言审核代码比较仔细,是很难被发现的,但是一旦正式上线后,又会造成很大问题,而且可能根本找不到原因。
于是,吴言在数据库中又加入了一些数据,使得正好可以执行到这段代码,然后一运行,果然不出所料,屏幕上打出了满满一屏的异常信息,吴言大声叫道:“赵文涛,你过来看一下,你的这个功能怎么产生了这个结果呢?”
赵文涛走了过来,看到了满屏的异常,奇怪地说:“不可能呀,我是测过的,在我那没有问题的!”于是拉着吴言来到自己的座位上,非常自信的又运行了一遍刚才的功能,边操作边说:“您看,在我这结果应该是这样的!”他的话还没说完,他的屏幕上就也出现了满屏的异常。
“咦?这是怎么回事?刚刚明明是好好的!”赵文涛困惑地说着。
“那你先看一下,好了过来叫我!”吴言说着就走回了自己的座位上。
整整一个下午,赵文涛都坐在座位是全身心的调试着,但是不出吴言所料,赵文涛在抛出异常的类中拼命的加断点、打印,但是怎么也找不到为什么会出这样的问题。这也不奇怪,任谁也很难想到问题会出现在与出现异常的类几乎豪不相关的代码中。
现在窗外已经华灯初上了,李卫东和曾玉洁也都早已经下班了,赵文涛还在那里忙得焦头烂额,而且毫无头绪。又过了良久,赵文涛终于走到吴言面前,被这个奇怪的BUG折磨得满脸通红,不好意思地说:“真是非常奇怪,我跟踪了所有代码,怎么也找不到为什么会出现异常!”
吴言听了点了点头,说:“也是,我上午刚用的时侯,你的那个功能也是正常的,后来就不正常,真是很奇怪!”吴言说完略略停了一下,忽然说:“对了,我上午又做了一些试验数据,会不会是这些数据造成的呢?”
“不可能吧?数据怎么会引起我的程序异常呢?”赵文涛不服气地说。
“我们可以先看一下,反正在代码里找不到原因!”吴言坚持着。赵文涛于是拉把椅子坐在了吴言的旁边,两个人一起看起来。
吴言打开数据库,调出自己特意加入的数据,说:“你看这些数据的都是保存的外部链接而不是内部链接,你做判断了吗?”
“我做判断了!”赵文涛自信地说,然后抢下吴言手中的鼠标,找开了那个类,找到了那个吴言早就看出有问题的if语句。“您看,就在这里做判断的!”赵文涛坚定地说。
吴言应了一声,然后开始看这段代码。
“咦!这里是不是少了一个{}”吴言故意说着,“这里两句应该都是在if下边吧!”
“噢!是,我忘了加了!”赵文涛不好意思的说,然后飞快的加上了{},然后重新部署启动应用服务器,然后又运行了一遍刚才的功能,功能竟然神奇的好了。
赵文涛放松的靠在了椅背上,恨恨的说:“原来是这个问题,害得我搞了整整一天!”
吴言不失时机地说:“是呀!多数特别难调的BUG都是一些小失误造成的。你刚才的那个问题就是因为你不习惯在if后面加{},这样以后在if下面再加语句时就很容易忘记了,出现你现在的情况!”
赵文涛这时心悦诚服的点了点头,吴言接着说:“其实好的编码习惯可以帮助我们减少很多错误的!”赵文涛这时也深深地点了点头。
吴言看基本差不多了,就说:“其实你可以按照代码规范的做法试一下,编码速度不会受什么影响,但是在读代码及调试时可以快很多。”
“是的,看来真得注意编码规范了!”赵文涛诚心诚意地说。
于是吴言顺着他的话说:“我这儿有一份比较好的代码规范,你可以参考一下。”
“好的,好的!”赵文涛非常愉快地说。
于是吴言把代码规范发给了赵文涛,在这之后,吴言发现赵文涛的代码质量确实大有提高,看来这个大难题现在也得到解决了,吴言终于可以专心到自己的工作上来了。
敬请期待下集:专注还是活着