矩阵之路

来源:互联网 发布:网络监控设备报价 编辑:程序博客网 时间:2024/05/29 07:41
 
工作之路:
  2003年的夏天,6月23日,我在南京坐上了南下杭州的车,开始了人生的新的一页。
   6月22,是大学的最后一天。记得毕业典礼开得有的冷清,系主任的一席话,才使我真正意识到自己处在历史上就业最为惨淡的时期,才知道扩招后果的严重性,也才知道原来没找到工作的同学占了1/3。也许我没怎么注意这些,只是现在还隐约记得散伙饭吃得不是很尽兴,好像也没看谁哭,大家坐在一起吃饭,和往常差别不大。
   6月23,我离开了。我也不知道自己为什么这么早走,不想再继续呆了,四年的时间够长了,还是这个二流学校没什么可以留恋的。记得同学都来送我了,好像都是男同学,想来我大学跟女同学说话,总共也没几句,交情太浅,再说,也许她们也不知道。没见谁伤感,但是我知道有别人走,有同学哭的挺伤心的。回想起来,其实,我跟男同学交情也不深。大家来送,我也应该感到开心了。当然,那时我没想那么多。那时的我,脑子里没有那么多想法。去车站的时候,有几个朋友来送我了,其他的送到校门口,现在回想起来,我跟别人,不知道为什么,总是亲不大起来,总是有距离感,大家对我,要比我对他们好。
    不知道其实大家那时应该都有很多想法的,工作的,大学的,未来的,友情的,但是我跟他们交流的机会太少,每个人的路,都是自己走,也都只有自己知道,而我顾着自己走,忽略了这些,而事实上,我也没有用这些时间做些有益的事情。
    大学的生活,用掉了4年的时间,看了不少书,但似乎也没什么有用的东西,至少后来证明是这样,时间多了,但也没用来玩,因为那时真的不会玩,因为现在也还没学会玩。有点书误人的感觉。压抑、无聊,还有异乡生活的那种陌生感、有点是那时的主旋律。幸好总有逃离的那一天。
    毕业的时候,第一次近距离的接触企业,开始去推销自己。找啊找、找啊找,最后没找到一个好的。记得有个2000的职位,东北一个软件公司做技术的,没去,钱少,而且地方远,一个是XX省移动的,记得是5千,还是个管理职位,犹豫了一下午,也没去,还是觉得地方远,现在想来挺后悔的,自己的决定总是自己都不能理解,现在回想当时,还记得那个招人的小姑娘很漂亮,很希望我签,如果当时进去,不知道现在的我是怎么样的一个境况了。人生,总有让人变幻莫测的感觉。后来好像又面了几个,市场职位的,花了很多时间和经历,最后也都没成功,找工作真的辛苦,也体会了人生的艰辛不易。大约拖到了过年后,终于找到了一家软件公司,试用期3个月,1500,转正后2800,就这样,我就在迷茫中开始了自己的职业道路,而当时我怎么也不会知道,这条路会对我的人生产生怎样的影响。
    记得是下午的时候到杭州,一个同市的同事在客户单位门口接我,后来我才知道,他们给客户做的是电信网管系统。记得当时的项目经理是一个自我感觉特别良好的人,也特别精于算计的人,至少现在我还是这个印象。就这样,在没有过一天的培训,没有什么介绍的情况下,我就像一个被带到工地的民工那样,开始了我1500块的第一份工作,很多年后的今天,我至今为这份工作感到羞愧,也为当时选择第一份工作的盲目感到后悔不已。记得一开始,分了我到性能管理小组,小组长是一个对公司、对部门都很有意见的人,所以也不想干活,所以,在这样的人下面,我也很有活干。就这样忙了大约几个月,天天的写代码,压抑也在一天天地增长着,终于有一天,我问他,我都干活,你干什么呢?大概是被揭了底,他显得非常的生气,也许他不再想过他曾经对我说的话,吹嘘他每天都不用干活。因为这件事,我就被调离这个组了,但我跟他的矛盾始终没有解,也许那个时候每个人都很压抑,每个人都没看到希望,钱少活多,谁会对生活满意呢?后来一次我手烫伤了,到上海休息了几天,期间我开始反思自己做出的错误的选择,第一份工作即遭遇这种困境,确实是始料未及。在那时,我有了辞职的想法。后来回杭州后,我就开始投上海的简历,记得有一次,赶着早上5、6点的火车,我来上海参加面试。面试似乎也挺顺利的,就这样,过年的时候,我正式离开了工作半年的杭州,来到了上海,开始真正新的工作。记得走得很不顺利,公司扣了我的工资,项目经理带着嘲笑的口气跟我说,上海很难找工作的,那时刚好他要把我派到甘肃工作,我提出了拒绝。至今,我仍然记得当时的情景,可以说第一份工作给了我很多教训,也让我知道生活的艰难,人生要有规划,要有选择,否则一不小心,总是容易误入歧途。
    然而,火坑总是跳出一个,接着进入另一个的。来上海的第一份工作是一家日资企业,老板是留日的中国人办的,那时我也不知道什么叫外包,唯一的信息是3000一个月,那时我有点防备,就问经理加班的事,他说我们不加班的,我反对加班,这证明你能力不够。于是进去了以后,派了几个小日本过来,一起合作作项目。在那里我认识了一个很不错的同事,我见识了他怎么跟日本人斗,把日本人灌得吐地不行,怎么跟老板维护我们的利益,要求加工资。日本人来开始教我们怎么做项目,我发觉做的东西都很简单,就是帮他们做些数据加工,转变成他们需要的数据格式,只要用一些小工具就行了,但需要测试,用目测。经常的,我们慢慢地越加越晚,记得好几次,我加班回家,看到时钟转到了12点多,总是要把家里人吵醒,而且人很累,第二天又要6点多起床。没有加班工资,每天都很累,而且加班的饭钱都要自己付。后来来了一个东北人做项目经理,已经搬到日本住了,现在又给派回来。他有一个特点,对日本人特别地尊敬,每次都是一付孙子样,对我们特别地看不起,动不动就训我们,所以我很看不惯这种人,决定跟他斗斗。几次对着干以后,矛盾激化了,最后我也就辞职了,不过我觉得我走得很对,跟汉奸没什么好说的,再说这样的公司,做着也没什么意思。后来听说我的那个同事也走了。这个公司让我见识了日本外包的一些特点,钱中等、活累、没有技术含量、如果项目由日本人的话,容易活得没有尊严。
    但加班的噩梦,似乎注定一直陪伴着程序员,至少我看过这一行太多的人都在加班。
    后来我就找了一个礼拜,找到了一家作sp的公司,也是3000/月,那些年SP是一个很兴旺的几年,现在应该也不太差。有一些人莫名其妙地就短信包月了,这家公司就是做这个的,当然会设一些小陷阱,回复什么之类的,莫名其妙就包了,他们管这叫“黑包”,当然还有一些黄色、情感之类的。在了解了这些内幕之后,在吃饭时听到老板说这一行的黑幕时,我又一次萌生了不想干的念头。不义之财,宁可不要。就这样,我就又一次地离开了。
    就这样,时间在这样的辞职中,晃过了2年。而我也飘摇不定了2年。那些年我一直很迷茫,也很痛苦,我对社会先前的认识,似乎没有这么透彻过。
    后来,投了一家网络游戏公司,面试挺顺利的,税后6000,就这样,我进了这家公司做技术支持,为他们开展短信购买点卡做技术支持,还有,他们没有黑包,倒是挺规范的。而我自从进了这家公司以后,除了干活了2个礼拜,再也没怎么干活过。技术支持要比研发轻松多了,这是我在这里的体会。在这里,我享受了几乎一年没做事的,每天10点多来,2、3点走的惬意生活,就这样过了一年,合同快到期了,我开始在想,到底是应该继续留在这里无所事事,还是开始新的挑战了。刚好这时接了一个公司电话,说是在网上看到我的简历,就这样,很顺利的我就到了新的公司。
    新公司是一家中外合资的通信公司,做的是网络管理软件。开的是11万的年薪,就这样,工作三年后,我第一次签到了年薪10万的合同。里面的工作,依然加班严重,每天似乎有开不完的会,我明显感觉到大家压力都很大,几十万行的代码,由于设计的不足,造成很多大的问题,重新再来已经不可能,但在原有基础上继续开发也很艰难,版本推进,新功能的增加、性能优化都没办法推进。这样,我觉得自己很难胜任这样的工作,公司也觉得我不能胜任,就这样,四个月后,我结束了在这家公司短暂的经历。
    然后就是漫长的找工作时间。找了三个月,每天基本上靠着打星际打发时间,如果有面试再出去,就这样,一晃时间过得很快。我的心情也开始慢慢地变得忧郁了,找工作真的考验一个人的耐心,我总在想,反思以前工作过的单位,如果不好好找到一家满意的,还不如在家休息,不然还得再换工作,而换工作,真的是一件很无聊的事情。终于,等来了一个电话,一家外企的数据库分析职位,电话很顺利地通过了一面,然后是现场二面,也顺利通过了,接着就是人力资源的hr,然后就是谈待遇,谈的是20万年薪。于是回来的路上,我放松了许多,以为录取了。一个礼拜后,打电话过去,却告知说是还没最终确定,因为我英语口语不行,但我还可以继续等,也许有机会。我的口语不行,这点我倒是没办法,学了这么多年的哑巴英语,突然让我流利地交流也很难做到,当然这也是自己一直很想提高的地方,就这样,等啊等,最终还是不了了之,我想这其中,可能也有我工资开的太高的原因。只能继续再开始找了。
    最后,又一个电话,也是一家外企,这次我吸取了上次的教训,只开了15万,很快地,offer就给下来了,比这个数多一点。于是就又开始了新的工作,这份工作还是技术支持的工作,还是像先前网络游戏公司那么闲,公司福利也很好,但是很值得欣慰的是,可以接触到一款世界顶级软件所有的代码和设计文档,这也是我一直觉得最应该把握的地方。所以,我到现在就一直在这里呆着。也许哪天,我会选择离开,去做我喜欢做的市场职位或者是数据库分析职位,但至少,我现在想脚踏实地地好好做好现在的工作,毕竟找好公司好工作不容易,能接触到核心技术的职位更是少之又少。
   回想四年多的经历,心中感慨万千,有过这些辛酸的经历,反思这些年来生活的不易,我有太多的感伤,感叹自己总是没能好好把握机会,如果我曾经很好地把握机会,现在的我要过得好很多,未来也会光明很多,特别是我经常听到同学们活得都比我好多了,有的手下都管了1千多好人了,而我依然还只是一个小兵。也没能好好地创造机会,自己的社会经验太过于浅,太过于相信自己的力量,不懂得依靠组织、借助别人的力量,至今仍然无所建树。也庆幸自己借由这些,更加认清这人生的艰辛与世道的残酷,真有点“尔虞我诈,弱肉强食”的感觉,更加需要再做每一个选择的时候,需要如履薄冰的谨慎,也知道成功的前行,离不开百折不回的决心和勇气,才能做到。我一直下决心,在30岁之前,拿到年薪100万。今年最大的遗憾是没能把握住那个20万的机会,只怪以前对英语没能有足够的重视。 
    这些年我对工作做事一个最大的认识就是做一件事情,开发一个软件,一定要有坚持到底的信心。软件开发进入了一个新的时代,一个人花一个月、一个礼拜、甚至几个月写成的软件都不会有什么气候,软件已经进入了重量级的时代,任何一款软件如果没有强大的功能,超越其他软件,就很难占据市场,很难有强大的生命力。所以,在这个行业,做的人需要比其他的人需要更大的定力,如同软件需要在升级中走向强大,事业也需要在时间的积累中慢慢壮大。而我,太多时候,总是心态不好,写软件容易虎头蛇尾,几个礼拜,热情已经减了一半,几个月,热情更是不见踪影。而成功的软件,在于它后面有公司战略的支持和执行力,不断的财力、物力、人力支持,几年甚至十年下来,才有了在市场上占据绝对统治力的软件。
   如果当时我选择的是管理的方向,现在就不会是这样的挣扎,但是那时的我认识总是不足,我没想到在底层生活的工作的艰难,没有预料到一个人的力量在社会面前是这样的脆弱。其实当我转了一圈以后,我也才发觉如果我想改变现在的处境,我还是必须再往管理方向发展。想来真是好笑,学了四年的管理专业后,我选择了做技术,而在工作5年后,我选择了往管理方向发展。人生的好几次关键的比赛我都输了,中考考了一个不好的学校,高考又考了一个不好的大学,毕业后又找了一个不好的单位。但是幸好不好不代表说没机会,我还是相信总有一次能把握住,总不能每一次都输吧。
   所以,如果有机会,我应该往管理和市场方向发展,如果不行的话,我就去做数据库的职位,人生总是要自我创造一些机会。
   也许,我应该往英语口语方面多多提高,这显然是一道很难越过的门槛,口语真的很难,至少从小到大,没有学哪门这么困难过,但是没办法,应该去报报口译班,已经决定了,明年开始充电,再努力。
   有一点遗憾的就是这些年,自己没能培养一个兴趣爱好,日子显得过于平淡,如果能有一个自己很喜欢的爱好就好了,这样我就不会把那么多时间浪费在游戏方面,这些年浪费在游戏的时间太多了,基本上空闲的时间都浪费掉了。现在好了,把电脑送走了,有瘾也没办法了,也许如果没有总是把时间花在打游戏上面,我应该就会把那些时间花在开发软件上面了,也不至于现在能拿得出去的连一款属于自己的软件都没有。
   这些年太执著于技术,使得我其实离真正软件的路越来越远。软件,其实是一种服务,它在与提供给用户于他所需要的服务,而我总认为软件是一门技术,是一门用来探索解答好奇的学问,两者本质上是背离的,所以我执著于技术不能自拔。现在慢慢地回归正道了,不再被那些杂七杂八的技术所蛊惑,调整好方向,重新对功能、性能、模型、业务进行再认识,否定以前的那些错误观点。很多时候,一开始总是要走弯路,等到后来才知道原来以前的都是不够正确的,而否定过去,否定自己也是很难的事情,毕竟那已经是属于自己的一部分。
   回顾以前,才发觉自己走的路是那样的背离,背离正道,走向一个人,这样的后果,将会是自己慢慢地失去依靠,特立独行,一个不懂得组织和社会的力量,抛弃社会的人,必将被社会所抛弃。所以,我必须要惊醒,去融入这个组织,这样才能生存下去。这些年走得不容易,就是我不懂得这个道理。所以我更加希望能进google,yahoo,microsoft这样的大公司。
   未来的路,是绝对要必须要记住这一点。
技术之路:
   最近,我开始在写一款自己的软件,目前定义了十六个模块,忙了一阵子,已经完成了两个模块。计划好半年的时间,完成十六个模块的全部功能,然后推向市场。今天统计了一下,写了5千行了,看来要把这些功能都写完,应该至少要5万行。
   但是,有必要回顾一下自己的技术的路。
   记得第一个项目是关于搜索引擎的。那时毕业设计的时候,我怀着好奇选择了这个项目,也让我在大学快毕业的时候又一次感受到了压力,除了那经常的补考。搜索引擎是什么了?怎么做了?我当时是茫然所以,就在这种情况下,我开始了对搜索引擎的研究。在这个过程中,开始学习了JAVA,使用了数据库,知道了什么叫JSP,tomcat,还有那恼人的异常原因。但最要命的是那是不知道有jbuilder这样的开发工具。不过还是对搜索的原理和技术开始有了认识。
      还是回到原点来研究这个问题吧。
      首先,最开始应该有个种子,也就是一个初始的网址,这个很重要,这个种子的优劣,很大程度的决定结果的好坏,也许就像是他开始就携带了最初的基因代码。所以推荐是一个链接网页,指向了许多有名的大网站,有了这个网址以后,我们怎么做呢?
     然后,就是去获取它,这时就需要些一个http客户端,来解析http协议,当然,网上有很多这样的代码。这样我们就能得到他的报头和内容,报头有一些比较重要的信息,比如文件名、创建时间、文件格式,访问是否成功,内容了,当然就是html文件。
现在,就需要另一个组件了,html解析器,从html文件解析来得到他的关键字、去除标签、所有链接的网址。
这时,完成了第一步的工作。得到了一些重要的信息,网址、网站、网页的文本内容,文件格式、链接的网址、标题、创建时间。
然后我们需要把它写入数据库的一个表里,这个表主要用来记录访问过网页,里面还要加上两个重要字段,一个是引用的链接数,就是指向的链接数,另一个就是有名的被引用链接数,这个数目默认值是1。
现在开始第二步的工作。第二步就比较难了。
这里需要重点讲的是队列的应用,总的来说,内存中应该有几个重要的队列来缓存一些信息,避免不必要的数据库访问。一个是未访问网址队列,一个是已经成功访问网址队列,一个是出错页面队列,每个队列都要有相对应的数据库库表,还有一个哈希表,缓存网址的网站ip,来避免对dns的负担,也是与库表相对应。队列的算法应该是先进先出加上最近最新访问,对数据的查询应该分2级,先查队列,查不到的话再查数据库。对队列的操作也是先更新队列,再批量更新数据库库表,需要在库表上标明时间信息,时间在这里起着很重要的作用。队列需要考虑的是及时更新和队列大小控制。网上有这种高级队列的源代码,可以拿来参考。
从刚才拿到的链接队列,也就是未访问网址队列里面取出第一个链接的网页,还是获取内容、解析内容,放入数据库。不过这时就需要考虑到几点。一个是页面出错了,要放入出错队列,一个是每成功访问一个页面,要放入成功访问队列,同时要删除未访问队列。当然还要考虑的是页面是不是以前坏了,现在又好了,以前访问了,现在又更新了,所以时间很重要,必须设置好更新频率以及上次访问时间,文件更新时间。总之,一切在访问过程中出现的可能信息都不要放过,要存储起来,这样才能保证以后需要时可以重新得到。
就这样,就像一支蜘蛛一样,这个机器人开始不知疲倦的工作了。里面有几个还是需要考虑的,就是要看看网站根目录下的robot.txt文件,看对方是否愿意让你访问,还有就是要控制访问一个网站的频率,避免他反感封锁你的ip,还有就是可以用多线程、线程池的方式来提高性能,释放更多的蜘蛛,或者提高解析的速度。当然,也需要较大的内存,较快的网速,为了避免内存达到最大值和对数据库的大量访问,建议队列需要在本地中有文件副本,这样避免下一次蜘蛛启动时,跟数据库同步花太多的时间,同时也避免内存占用太大。当然,还需要避免一些搜索引擎同类,不然你就很有可能成为他数据库的副本了,不过大家在这个数据库的内容应该都差不多,但是链接数肯定会差很多,当然排序算法就更不一样了。当然,也还有数据库优化的问题。还有,你需要多台机器运行蜘蛛,多台数据库同时运行,这时就需要队列的分布式,数据库的库表分区,这些都是高级特性,以及一台中枢控制,控制所有的蜘蛛,这也是为什么一直强调记录时间和队列的重要性,不过真的想做好,就必须这样,因为经过测试,单机不能远远满足不了商业需求。当然分布式也没有想象中的难,借助于控制器,借助于良好的socket通信,以及好的队列设计,分布式只是实现了消息的传输而已。
 就这样,最多台机器,日夜不停的获取,你的数据库里面就开始有了大量的信息。你的硬盘里面就保存了上百万的html文件,当然你需要好好的组织一下文件的格式,
 接着,就是第二部分工作了,就是另外一个大人物出场了。他做什么了呢?他负责很多,清理垃圾都干,He can do everything and anything.因为spider men们忙完了,轮到super man and hero 了。


 最重要的是他们进行了全文搜索的建立工作,你需要把文本内容需要提取出来,然后进行解析,全文搜索算法也是公开的了,先将文本写入文件,然后就是先切词,清除掉没用的词,然后记录这个词在这个文本中的位置,这个文本所在的记录id, 一般文本都比较大,所以需要压缩。一般需要几个主要文件,文本文件,关键词索引文件,关键词指针文件,还有一些临时文件,建议放在不一样的磁头硬盘里,加快文件的处理速度。文本处理还是挺快的,事实证明,超人比蜘蛛侠略胜一筹。切词,英文比较容易,中文就比较难一点,但还是好切的,就是文件相对大小问题。
这样一边是蜘蛛侠们在工作,一边是超人们在工作,一个在写数据库,一个在读数据库。一个在漫游网络世界,一个在做清洁工。不过不管怎么样,大家都在做贡献,而且都贡献巨大。
最后,就是提供给窗口给用户搜了。Google比较懒,就提供一个搜索条。关键词敲进去,全文搜索到该记录id,搜索关系数据库,找到网址,记得根据链入链接数,标题,全文文本,来得出排序,算法一般都比较保密,需要根据一定的经验来定,我认为,其实不难,就是链入链接数,被引用的页面的就是链入链接数,以及被引用的页面的被引用的页面链入链接数的递归,当然这里也需要把算出的分值写入数据库,不然每次都算,那肯定要抓狂,也需要一定的缓存,避免太多的数据库读取。
 好了,这就是我对搜索引擎的研究,记得是03年毕业设计写过的,源代码也不见了,不过我两年前重新写过,不过也尘封多年了。
这个写得比较详细,因为都不是我工作中涉及到的,工作中涉及到的不好提,比如电信网络管理NMS,EMS,都有公司的商业机密在里面,出于诚信,也确实不能写出来。不过这东西技术价值含量不高,告警、配置、性能、采集、报表,能实现的国内的公司也都实现了,不能实现的也都不能实现,至少我不相信谁能把信息模型建立起来,能基于规则处理业务,更没见过能实现灵活的可动态的配置业务,实现真正面向服务的。但是我知道有一家国外公司做网络管理软件挺厉害的,面向服务的观念是他们网络管理软件的特色,信息模型很清楚,业务也基于定制,感觉用户总能定制到他们需要的业务。国外软件和国内软件的差距不一定在于技术,我见过好几个技术挺牛的同事,关键是观念问题,对软件的观念决定了设计出来软件的高度。说白了,开发者的视野决定了软件的视野。
。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。。。。。。。。
这些天写着手头的软件,已经有1万多行了,看来突破十万行,也不是不可能的事,按照计划,应该半年内能够写完,这也是我第一次写这么多的代码,考验耐心,也考验能力,是对过去几年的回顾,也是对未来的期望,总之,这可以说是心血之作。但我还是有这样的决心和信心。幸好上班没事可做,闲着看时间溜走,还不如做点自己觉得有意义的事情,至少比我空想来的实际。不知道这次的想法,是来自对过去的感伤,还是对现在的失望,或者是对未来的迷茫,也许是物极必反,让我反而振作起了精神,捡起了希望,又或者是命运的指引,不甘于继续在看似没有希望的路上徘徊。不过这次的很多想法,有点浑然天成,水到渠成,感觉点滴之间串成了线,灵感而动,有点冰冻三尺,非一日之寒的感觉。今年感觉收获甚小,一如从前,想来这种也是自然而然的事,没有深耕耘,哪来收获呢?千里之行,始于足下。看来是寸步难行,方有足下之感啊。
 

 

原创粉丝点击