一个人的奋斗历程 【转自www.daxia.com】
这些日子我一直在写一个实时操作系统内核,已有小成了,等写完我会全部公开,希望
能够为国内it的发展尽自己一份微薄的力量。最近看到很多学生朋友和我当年一样没有
方向 ,所以把我的经历写出来与大家共勉,希望能给刚如行的朋友们一点点帮助。 一
转眼我在it行业学习工作已经七年多了,这期间我做过网页,写过mis、数据库,应用程
序,做过通信软件、硬件驱动、协议栈,到现在做操作系统内核和ic相关开发,这中间
走了很多弯路,也吃了不少苦。
我上的是一个三流的高校,就连同一个城市的人多数都不知道。因为学校不好也就
没有指望能靠学校名气找一个好工作。所有的希望都寄托在自己的努力上了,大一开学
前的假期我就开始了学习,记得我买的第一本书是《计算机基础dos3.0》,大家别吓着
了,其实当时已经普及了dos6.22了,只是我在书店里看到了dos4.0,5.0,6.0的书,以
为像英语那样是第四、五、六册,记得当时到处找dos1.0,现在想想也幸好我没有找到
:)开学前我学完了pascal,那时既没有计算机也没有人可以请教,我连程序是什么的
概念都没有, 只好死记硬背代码,然后拿纸写,我一直到大三才有了一台486,在这之
前用纸写了多少程序我也记不清楚了,只知道最长的一个我拿a4大小的草稿纸写了30多
页,我的c语言、c++ 、vc都是在这样的条件下入门的。所以说条件是可以克服的,希望
我的经历多少给条件艰苦的同学们一点信心。第一次上机是在我姐夫的机房,我的心情
激动的无与伦比,但是一上机我立刻傻了眼,他们用的是英文版的win3.1,我的那点do
s知识都见了鬼,上机提心吊胆的一阵瞎摸,一不小心把word弄成了全屏,怎么都还不了
原,当时真是心急如焚,我以为机器被我弄坏了。第一个c语言程序,就是那个经典的h
elloworld,我调了几个星期,上机机会非常少,也没有书告诉我开发环境(tc2.0)需
要设置,而且开始我都不知道有编译器,我甚至自作聪明把写好的程序扩展名从.c改成
.exe,结果可想而知。大一学完了c、x86的汇编、数据结构、c++。由于精力都花在自学
上了,大一下四门课挂了彩,三类学校就是这点好,挂上一二十门也照样毕业。不过扯
远点说,我那么刻苦都及不了格,可见我们国家的计算机教育有多死板。
大二准备学vc和bc,当时难以取舍,后来选了vc,不为别的,只为书店里两本书,
vc 那本便宜6块钱。我的努力在班上无人能及,学的日夜不分,大三有了计算机后更是
如此, 很多次父亲半夜教训我说我不要命了,我一直觉得自己基础差,**又不行,条
件也不好 ,所以觉得只有多花点时间才能赶上别人。居然后来有许多朋友说我有学计算
机的天赋, 让我哭笑不得。我用的是486,16m内存,1g硬盘,当时同学们的配置都是p
166mmx,我安装 一个windows nt4.0需要一个通宵,编译一个bc5.0向导生成的程序需要
近两个小时,我的显示器是个二手的,辐射非常大,开机屏幕冒火花,看起来很酷的:
),有一次程序写的太久,觉得怎么白色的编辑器背景变成了紫色,以为显示器坏了,
后来才发现眼睛不行了,不过说来也奇怪,到今天我的视力还能保持1.5,真是个奇迹。
但是就是那台破机器陪伴了我两年,让我学会了vc、delphi、sqlserver等。后来那台机
器给我阿姨打字用,据她说一天她正打的开心,一股青烟夹着火苗从显示器钻出来,之
后它才寿终正寝。
大三假期找了个机会在一个计算机研究所实习,与其说实习不如说是做义工,工作
了两个月一分钱没有拿。但是这两个月对我的发展帮助很大,让我早一步了解了社会,
刚去的时候我当然是一窍不通,在那里我熟悉了网络,学会了delphi和oracle。由于工
作很认真, 得到了比较好的评价,在一位长者的引荐下,我开始和他们一起做项目,这
使我在大三大四就有了自己的收入,大四又找了两家mis公司兼职,虽然钱不多,但是在
学生期间有1000多的收入我已经非常满足了,我终于用自己赚的钱把计算机换了。大四
下开始找工作,这时我的工作经验已经比较多(当然现在想想非常幼稚),开始听父母
的想去那个研究所, 实习过那个部门也希望我能去,但是不知道为什么最后不了了之,
这种单位就是比较官僚 ,我一气之下就到了我兼职的一个公司做mis的teamleader。在
大三到毕业一年的时间,做过了各种mis,从煤气、烟厂、、铁路、饮食到高校,什么有
钱做什么,工作也很辛苦 ,经常加班和熬通宵,从跟客户谈需求到设计、编码、测试、
交付都要上。那时觉得很有成就感,觉得自己还不错,现在想想真是很肤浅。
刚走上工作岗位的学生很容易被误导,各种开发工具让人眼花缭乱,同时也觉得很
受 公司器重,但这样工作永远是一个低层次的开发者。不要跟我说什么系统分析有多么
多么重要,多么多么难。你以为自己跟用户谈需求做设计就是系统分析和设计了吗,国
内又有几个公司能够做的很到位很规范?我是iso9000内审员,也在rational公司受过多
次培训,拿了4个证书,还有一个公司让我去做cmm。这些我听过很多,但是很多事情到
国内就变了性质,一个公司不是通过了iso9000或者cmm就能规范了,我现在在一家有几
十年历史的外企工作,里面的管理不是一般国内企业能及的。作为一个毕业不久以前没
有步入过社会的学生,几乎不可能在很短的时间掌握系统分析和设计,面向对象、uml只
是一个工具,关键是人本身的思想,不是说你熟悉了c++、rose就能够做出好的设计,相
反如果你具备了很高的素质,你可以用c写出比别人用c++更加模块化的程序。
话说远一些,国内软件开发行业有一个怪圈,很多人觉得vc > delphi > vb,真是
很搞笑。这几个软件我都做过开发,说白了他们都是工具,应该根据应用的需要选择采
用哪个,而不是觉得哪个上层次。如果你因为用某个开发工具很有面子而选择的话,只
能说明你很浅薄。如果说层次,那么这些工具都不上层次,因为它们用来用去都是一些
系统的api,微软的朋友不会因为你记住他们多少个api或者多少个类就会觉得你很了不
起,你永远只是他们的客户,他们看重的是你口袋里的银子。我也做过系统内核,我也
封装过很多api,同样我也不会看重那些使用这些api做二次开发的客户,除非他能够作
出自己独到的设计。
至于有人认为c++ > c那更是让人笑掉大牙,不妨你去打听一下,现在有几个操作系
统内核是用c++写的,又有几个实时系统用的是c++,当然我也不是说c++不好,但是目前
的内核和实时系统中c++还无法与c匹敌,至于说c++适合做应用系统的开发那是另外一回
事。所以我的观点是不在于你用什么工具和语言,而在于你干什么工作。你的设计体现
了你的技术层次。
这样干了一年我觉得非常苦闷,做的大多数都是熟练工种的活,个人技术上没有太
多 的提高也看不到方向。所以决定离开这个城市去上海,寻求更好的发展,并且打算放
弃我以前的mis转到通信行业。
写到这里不能不提到我女朋友,我们是在来上海前半年认识的,她大四在我公司实
习,公司派她给我写文档,我们的感情发展的很快。她告诉我很多事情,她家原本是改
革开放的第一批暴发户,她母亲爱打牌,输掉了几百万,还欠了很多债,她有男朋友,
但是她对他没有感情,只因为他给了她母亲两万多块钱,后来还强迫她写了四万块的借
条,她男朋友背叛过她并且不止一次打她,现在逼她结婚不然就要她还钱。这人居然还
是一个高校的老师!她母亲把父亲给她的学费花了,因为拖欠学费她没有办法拿到毕业
证。她母亲现在有病需要钱,我拿出了自己的一点积蓄并且跟朋友们接了一些,替她交
了学费并给她母亲看 病(后来才知道看病的钱又不知所终,就连她母亲是不是有病我都
不知道,但她也是没有办法)。这个时候我家知道了一些事情,坚决反对我和她在一起
,她原来的男朋友也极力破坏。无奈之下我们决定早一定离开这个伤心的城市,并且瞒
着我们家。由于时间仓促,我只准备了4000块钱,她仅有的几百块钱也被她母亲要去了
,我买了三张票,一张是中午的,两张是晚上的,中午我的家人把我送上船,他们一离
开我就下了船,我和她乘坐晚上的船离开了这个我和她生活了很多年的城市,带走的只
是一身债务。没有来过上海的我们两个性倔强,都不愿意去麻烦同学和朋友。来到上海
是傍晚6点半,我们都不知道该去哪里,我们找了一个20块钱的旅馆,这个房间连窗户都
没有,7月份的天气酷热难耐,房间里非常闷热。第二天我们开始租房子,因为身上的钱
不多,我们基本都是步行,花了一个星期时间,不知道在浦东转了多少圈后找到了一个
400块的房子,但是我们都不了解上海是付三压一,还要付半个月的中介费,买了一些锅
碗瓢盆后,我们身上只有800块钱了,工作都还没有着落,这800块钱要支持到我们拿到
第一个月工资,为了省钱我们自己做饭,每天买菜只花两块钱,她非常喜欢吃(也可能
她在大学经常挨饿的愿意),看到她现在这样省吃俭用我真的很不忍心。她以前的男朋
友也没有放过她,经常打电话来骚扰,并且来上海看她,还说了不少恐吓她的话,她过
于善良,说他以前毕竟帮助过她,叫我不要与他一般见识。以后的每天在家就是苦等面
试通知,原本我想迅速找一家mis公司解决眼前的困难,但是她**让我不要放弃自己的
理想,终于功夫不负有心人,我找到了一家通信公司,4000块的工资虽然赶不上mis公司
给我开出的价位,但也够在上海生存。她也找到了工作,第一天上班她哭了,这是她来
上海第一次流泪,我心里很难受也很感动。
由于是全新的行业,我把自己降到了零点,我学的vc、delphi、数据库派不上用场
, 摆在我面前的是嵌入式、协议、信令一些我从未接触过的知识。我知道我没有退路,
于是拼命的学习,我把自己当做一个应届毕业生一样,一分努力一分收获,半年过去我
终于熟悉了工作,并且得到了公司的表彰,薪水也加了一级。后面的日子里我们省吃俭
用,把欠朋友的1万多块钱还了,日子终于上了正轨。这时女朋友告诉我她想考研究生,
我也很支持,于是她辞职在家备考。
另外,在这里我要感谢我的projectmanager,他原来是一个大通信公司的产品经理
, 对人非常和善,我从他那里学到了很多知识,而且他也给了我许许多多无私的帮助。
在工作上他给我充分的空间和信任。记得公司安排我维护一个接入服务器软件,由于代
码量不算太小(5万行),资料和文档都不齐全,我维护起来非常吃力,所以想重新把它
做一遍, 公司领导不太支持,可能觉得工作量太大,但是他极力支持我,私下里他让我
放手去做, 我的维护工作他挤时间做。在他的支持下,我花了半年时间完成了接入服务
器的软件,并且实现了一个相对完整的tcp/ip协议栈。在这里我学会了嵌入式系统设计
、驱动开发、tcp/ip和很多通信的知识,我花了一年时间终于使自己从mis开发转到了通
信行业,并且站稳了脚跟。我的开发大量是对硬件的直接操作,不再受微软的操作系统
,vc、delhpi这些开发工具的约束,我终于看到了另外一片天空。
我做事情喜欢追根问底,随着开发的深入,软件开发与硬件联系越来越紧密,硬件
知 识的匮乏又对我的发展产生了障碍,而且芯片技术基本上掌握在国外公司的手里,这
对做系统级设计是一个非常大的制约,一个新产品出来,第一道利润(也往往是最丰厚
的利润)常常都被ic公司如intel、motorola赚去了,国内的厂商只能喝点汤。所以我决
心解决自己的硬件技术障碍,并打算离开通信行业,进入ic设计相关领域。
当然我明白如果我对硬件了解的非常少,没有哪家ic公司会仁慈到招我这样一个一
窍不通的人来培训。所以我必须努力打好基础,学一些相关知识为以后做准备。就像我
开始从mis转到通信一样,我看过大量通信方面的书,并且给一个isp做过radius计费分
拣台,在这样的背景下这家通信公司才给了我这个机会。我在的通信公司是做系统设计
的,有不少pcb layout硬件人员,平常我就注意向他们学习,由于我做的是软件,在公
司看硬件资料不好意思,所以开始只好在家看,刚来上海工作我连续一年都在加班,后
来不加了,因为我要挤出时间学习,通常我12点左右睡,第二天5点半起,我上班比较早
,地铁上如果人不多我也用来看书。学习当然不会是一帆风顺的,有些实在不懂的问题
就积累起来问硬件人员,他们的帮助使我学习进度快了很多,因为在没有人点拨的情况
下自学,我的一半时间是花在解决疑难问题上,但这种问题经常是别人的一句话就可以
让我豁然开朗,我非常庆幸我有这样的学习环境。在后面的一年里,我学会了看硬件原
理图,学会了简单的硬件设计(模拟电路方面还有不小的差距),事情就是这样的,当
你安安份份做软件,别人永远认为你是软件开发人员,在你开始学习硬件时别人未必会
认同,有位中兴通讯的朋友还对我说过,一个人不可能把所有东西都学完。我也明白这
一点,但我希望自己做的更好。但当你熟悉硬件后大家又会觉得你好像原本就是软硬件
都懂的,同事们也都习以为常了。这个时候我可以把硬件资料堂堂正正的拿到公司看,
没有人再大惊小怪了。 让我比较自豪的是我通过自己的努力做了一个iad(软交换的终
端设备)系统方案,包含软硬件的选型、设计等内容,这个方案得到了公司和同事们的
认同,让我感到非常欣慰。
技术是相辅相成的,当我的硬件有了一定的进步后,我的软件设计也有了很大的提
高 ,我可以从更深层次理解问题,我做的接入服务器cpu是motorola powerpc860,熟悉
的朋友都知道860 qmc与软件的批量数据传输通常采用bd表的方式,硬件人员做驱动的时
候习惯采用固定bd表,每接收或发送数据都将数据从bd表拷贝到用户buffer,或从用户
buffer拷贝到bd表,由于理解的比较深入,我自己重新实现了这个过程,采用动态bd表
的方式,驱动从一个网口接收数据,提交给我的软件进行三层交换,直至从另外的接口
发送出去,没有进行一次拷贝。这样的设计大大提高了性能,使系统的指标接近理论值
。软硬件的结合使我的设计水平上了一个台阶。我现在写的这个操作系统,编译后我把
程序反编译成汇编,找出其中不优化的代码,然后在c程序中进行调整。举个例子,很多
cpu没有专门的乘法指令,这个大家应该都知道,在这种cpu上进行一个乘法操作常常会
花费大量的指令周期, 有的朋友会说这个我知道,我会尽量避免采用×号,但是事情往
往不是那么简单,你知道
c语言中数组的下标操作是怎么实现的吗?仔细看看反汇编的代码你就会明白,同样是通
过下标的定位操作,c编译器会有时候会产生位移指令,但有时候会用乘法实现,两者效
率往往是天壤之别,所以明白这些问题你才能将系统性能提升到极致。?
些问题就不多说了,有兴趣的话以后可以共同探讨。
|