在绝望中成长----一位初中生的程序人生
作者:王庆华
序
我是一名软件人员,是一位初中毕业的软件开发人员。
国家承认的学历只有初中。高中读了半年就出了校门。
从91年开始,做过4,5年木工,95年到深圳打工,在一家五金厂做清洗工作做了一年。
有过刻骨铭心的经历。
主要工作是在网络通讯,流媒体,音视频编解码,单片机方面。对操作系统,C/C++,网络通讯的理解还不赖。
在华为的时候是第一次做C++,学到很多东西。除了专业水平有所提高外,懂得怎么做人,怎么做软件,怎么和人交流,合作。
在华为感触很深,和他们的员工在一起工作,生活过一年的时间。能感受到他们的热情,有内涵,有修养,有能力。在华为培训中心门口有一字碑,在马路边就能看到,刻有“小胜靠智,大胜于德”。对华为很是敬仰。以后看到“自强不息,德厚载物”,感觉他们温慈厚善的思想,足可以让我们追捧。为社会,为国家甚至人类带来光明。
经历篇
我是乡下人,乡下农村人不读书都要学一门手艺谋生,将来好养家糊口。比如木工,泥工,篾匠,船匠(以前是做木船,现在是做铁船),我学的是木匠,帮人做家具,头三年是学徒,没工资,只管饭,不给钱,“三年徒弟三年奴隶”。
我妈帮我找了一位师父,是我们附近村里人。师父很严厉。我们那时是做包工,就是东家把家具包给师父多少钱,不管饭。吃饭自己解决。有的东家有地方弄饭,有的没有地方弄饭,只有吃饭堂。那时一顿能吃八两米饭。
“严师出高徒”,每次外出,妈妈总是叮嘱,年轻时要吃苦,好好做,要勤快,要听师父的话,把手艺学好来。三年出师了,也可以带徒弟了,让徒弟为你给你端水端饭的。
第一次跟师父到南昌做家具,是我第一次出远门,从小到大县城都没有去过的。每天要做到晚上十点之后,到午夜2点是很平常,师父白天睡觉,晚上陪着你做事。到了收工的时候,那里顾上洗澡,扔下工具,铺张三合板倒头就睡。早上7点起床,把饭做好,叫师父起床吃饭。师父白天很少做事,不是出去,就是睡觉,晚上就陪你做到1,2点。
有一次,师父来了客人,叫我弄菜,满满一桌,他们吃完了,我们徒弟再吃。
那时候不想做,太苦了。
第一个师父没跟多久,可能只有一,两个月,偷偷的跑了。走之前我跟师父说:“师父!我受不了,让我回家吧!”
“你不能回家,你妈妈把你交给我了,我要把你交给你妈妈。”
“还不赶快去做事!年轻人不吃苦怎么行呢!我以前学徒,也是这样过来的!”
以后我妈又给我找了一个师父,也在南昌做,从八月中秋一直做到过年,还好没跑。做木工的都是这样,每天都要做到很晚,都是一样,很苦。到了过年,师父给我好像是40块钱,回家的路费是20元。那是我的第一笔收入。
记得在南昌医学院做家具。东家是一位眼科大夫,那时三十岁左右。她问我有没有读高中,“吃午饭“英语怎么讲。每次上她家拿胶水,钉子之类的东西,她都给我一些糖果吃。过几年我眼痛,找过她,听说她到厦门去了。
过了年之后,师父也没做木工了,我哥就再帮我找了一个木工师父,跟师父有点亲戚关系,在景德镇做家具,自己做自己卖,就做菜柜,书柜之类的东西。做木工每晚都要加班,都是一样的。
货做好了以后,清早4点起来,弄到菜市场上去卖。从景德镇的河西走到吕蒙,到焦化煤气厂,再到火力发电厂,赶早市,菜市场买菜的人多,好卖一点。有一次站在那里靠着菜柜就睡着了,让师父看到了。还好师父没怎么骂,因为是亲戚缘故。
再以后,就到南昌了,跟人家做下手,一个月30元,1块钱一天。在江铃(江西五十铃)做。江铃的职工都很友善。有一位东家看到我冷,没衣服穿,给了我一件毛衣。
在南昌杨子洲,帮人家做过户工,户工就是东家给师父多少钱一天,包吃,还有一天一包香烟。那才活得像人样,每顿都是大鱼大肉,还有酒喝。包工是整个家具做完多少钱,不包吃,东家什么都不管的。做包工师父舍不得买好一点的菜,吃得真的很苦。还要加班,做户工不用加班,天黑就收工。
到过武宁一个小镇,跟我叔叔帮人做木船,那里是山区,汽车在山顶上跑。景色真棒,湖光山色。那里的山里人很淳朴,对我们手艺人很客气。
在南昌市东家家里做事,和东家相比感觉是二个世界的人。有的东家是乡下出身,知道乡下人的艰辛。晚上会弄点面条给我们吃。
三年徒工以后,自己单独做了。第一家在江铃,有人请我帮他铺地板,做一个阁楼。
地板铺好了,东家说:“这个地板咯咯叫“。
我说“你是旧板子,有很多是松木”。
“杉木就好一点不会叫了!”。
还好工资给了。
95年的时候到了深圳,经亲戚的介绍进了关外一家五金厂做清洗工作。做清洗工就是把五金零部件放在天那水中把油冲洗干净,再放进烤箱烤干。每天加班到十点,有时到12点,有时通宵。一周的周日晚上不用加班,比我做木工砍斧头轻松多了。当时每月工资400多一点,没超过500元。做了一年也赚了2000-3000元。
那时候感觉电脑很神秘,敲二下,屏幕上就有字了,还能打印。当时很想去学一门技术,希望工资高一点,生活条件能好一点。在厂里做了一年,蒙蒙懂懂的就辞工回去了。
我也是在无意之中才学了这个计算机(开始只是想学修收音机,电视机之类的东西。学计算机我知道我的文化不够,但还是阴差阳错学了计算机)。学了二年,96年9月进去,98年4月出来。想不到出来这么多年,经历这么多的事情,还能背着个书包走进校门。
在校期间死啃书本,计算机原理,操作系统,汇编语言,电子线路,英语,计算机网络,数据结构。计算机本科的课程我都看了,每晚都要到二点睡觉,因为我做木工也要做到二点,现在是坐到二点,以前是要做事到二点。刚开始的前1,2个月,很吃力。上高等数学,我记得老师在黑板上写3的阶乘(3!),我以为是31,1下面的一点是老师的写字习惯。翻一翻高中的课本,才知道。
高中的课程自学。高等数学第一次考试也能考80分以上,在班上4,5名之内。我以前读书,从小学到初中,成绩都不错的,在全校一,二名之内。我读了几年书,每个学期都是理科学习委员。也许是怀念以前在学校很风光,成绩好,老师们都很照顾我,同学都对我很好,才走进学校。在社会混了这么多年什么都不是。
二年时间晃晃惶惶的过去了。98年4月份,到深圳找工作,总以为比以前找工作好找一点。难啊!普工都找不到。上人才市场,住十元店。以后没钱了没地方住了,就回家了,刚开始找不到工作,还可以回家,以后次数多了就不敢回家,人家会笑的,笑的无地自容。
跟人家做木工,人家也不愿意了。只有一次一次的下深圳。那时候看到警察比抢劫的更可怕。我们同村人到深圳找工作,和我在一块,一不留神让保安给逮去了,抓到收容所了,过几天没人领,就运到汕头去了。听他讲里面的情况。进去就要不能穿鞋,不能系皮带,很多人关在一块,跟看守所差不多。我幸运的是没有让警察给逮到,没有上收容所。从1998年4月出校门一直到2000年11月,近三年的时间到处流浪。
有一次到深圳,出发前有点发烧,头晕。但是一上火车,出一身汗,头也不晕了,要思考到哪里去睡,怎么找工作,没找到工作怎么办,要不要留回来的路费。找工作有时心情很坏,就买瓶酒来喝,喝的次数多了,就不再喝了,不如把买酒的钱买下顿饭吧。
以前在艰苦的时候,真的很想有人能帮一把。
2 000年11月,机会来了,找到了第一份工作,我的第一份工作是一根稻草(大海里的一根稻草)。我在人才市场投了一份简历,一家公司叫我去面试了,研发部门经理说招做VB,c语言的,还要做汇编。我说这方面我没接触过,你能出几个题目让我回去想想行吗?面试主管就给我2个题目。是关于中文字库方面的东西。
我就到深圳图书馆去找这方面的书。看看不太了解。去问一个亲戚,他是做软件的,他说这个你做不了的,比较难。当时我就放弃了。过了半个月,再打个电话到那家公司,问公司招到人没有,他说没有。我说我对这方面很感兴趣,就再到公司,我说你能不能给我你现在做的工作相近的东西,我带回去想想看看能不能做。经理就给了我2个编程的题目。真的感谢二位经理,从此我就上了程序员这条路。题目我还记得:
1.一个文本文件,把文本文件里的逗号,句号中文转为西文,缩小存贮空间。把回车符号换成其他的符号。
2.中文点阵字库由pc机的排列方法转为单片机的排列方法。
这二个问题,我就叫人帮我做了一下,慢慢看,能看的懂了。我就跑到公司,给经理看了。经理看了行,就那样上班了,他问我要多少工资,我说我要2200元/月。就那样上了,还是包吃住的。就是早上吃自己的。
刚上班的时候,早上醒来,真的是以为在做梦找到了工作。
上班了以后,我接受东西很快,公司的C语言,VB只有我一个人做,没什么问题。学公司的汇编语言很快。单片机的代码(汇编语言),我一,二个礼拜就能看得差不多,包括熟悉汇编语言的一些语句。我还没转正,就做项目负责人,负责通讯软件的界面,中文字库的烧制,PDA系统的程序存储规划和资料的存储。老板直接把我拉到经理一层,参与每周由2 位老总主持的经理例会(那时不知道是经理级会议,以为只是一般的会议。只是后来从公司出来后,想想参加会议的都是部门经理,有工程部,研发部,英文资料部一些技术部门)。每次开会老板第一个问我碰到什么问题,都说我的观点是正确的。问我对公司有什么看法和意见。我们老板都是清华的,每次老板都主动跟我打招呼,“吃饭了吗?”。记得上班的路上,我走在前面很远,老板就在我后面喊住我,跟我说:
“你对公司有什么看法,有什么意见,工资方面,福利方面,尽管提!”
之后公司给我加了400元,是2600元/月,还是包吃住的。
现在想起非常感动。只是那时不懂事,也是第一次上班,走进办公室,那时以为自己很牛了。如果你是乡下出来的,跟乡下的民工说话,交流一下,你就知道我当时是什么样。有一点飘飘的感觉。
在公司出来之后,就找了一份工,是用VB做工厂管理软件,问我要多少工资,我说要3500,本来我说的是转正的工资,他问我是试用的工资吗,公司的规定试用的工资是转正的工资的70%。一个月转正。结果一个月后转正给了我5000的工资。运气怎么这么好。
做了4个月, 感觉vb比较简单,不太想做了。我就跟经理说当时我进公司时说的是做vc的,希望去做vc,经理说以后公司服务器模块要用vc做,暂时是用vb做。近段时间是不会做VC的。
我每次从一家公司出来我都自己问自己会不会后悔,因为我不是正规学历,找工作和正规学历的有所不同。但都是很干脆??不后悔,我在那么艰苦的日子我都能找到工作,更何况现在有经验做过一段时间,有点自信。那是2001年快过年了,就辞工回家过年了。
过年之后到深圳找工作,工作是找到了,做单片机,以及用vc做一些二次开发,这正是我所希望得。当时面试时,老板,研发部,人事部都在,问我一些专业性的问题。我看到他们讨论了很久,第二天就叫我去报到。很可惜体检不过关,肺部有问题,肺结核,当时没有疾病的意识,不知道什么问题。加上深圳的医疗费太贵,只有回家治疗。
治疗最少要吃6个月的药。那时身体体质不好,加上失眠,失眠可能是以前在外面流浪,居无定所所至。以前上班经常失眠。有时只睡2个小时,有时彻夜不眠,非常痛苦, 4,5年没睡过好觉,吃安眠药没作用了。
在治病期间,失眠比以前更重了。下午3点来钟出去在乡下的田野走走,到天黑回来。每天都在琢磨吃了什么食物,心情好不好,笑过没有,什么东西暂时不能吃,是不是吃太多了,吃太少了,为什么睡不着。只有重症失眠过的人才能体会得到个中的痛苦 (愿生命之花常开)。
因为失眠对治疗的时间要长一点,在家呆了一年的时间,打工赚的钱花光了,还欠了人家的钱。
2003年,过了春节就到深圳找工作了,坚持每天晚上跑步,慢跑三四十分钟。每周跑大于6天,打着雨伞跑过步的,刚开始跑的时候,自己量脉搏,担心运动过量。当时我的身体是很脆弱的,只是希望能活下来,把欠人家的钱给还了。跑步跑了3年多的时间,从没间断过。现在基本上好了,晚上能睡7,8个小时。跑步是我生活的一部分。也许要跑60年。
那时出来找工作就没有以前那么好运,从3月份出来,找了5个多月工作。刚出来就碰到SARS,真是倒霉,不敢随便在外面走动,还要戴个口罩,
到8月份才找到了华为的外包公司。我可是通过层层考试进? サ模獍镜谋适裕媸浴T偻ü谋适裕媸浴5笔庇惺喔鋈瞬渭踊媸裕幸话胪ü话胛垂液苄以送ü恕?p>
我的第一份工作真的是走头无路才找到工作。冥冥中上帝在怜悯。今天你在绝望中,明天你就有了希望。
对社会认识不够,希望多多指点。
技术篇
作为一个软件人员,应是高素质,有修养。先做人,再做事。
做软件,是以项目为单位,由多个人聚在一起,形成一个团队,共同完成任务。既然是多个人共同完成任务,你必须要融入到他们当中,要与他们多交流,才能做好事情。既然是一个团队,就要学会怎样去交流,怎样相处。
这是我从事软件工作的一些心得,做项目所要注意的一些东西。希望对大家有所帮助。
宽容,我们都是年轻人,难免犯错,我们这个年龄不犯错的人不多,几乎没有。要包容。犯错的人不要不好意思,下次注意一点不要再犯了就可以。对方也不要计较,包容他们。
要多问多想,做软件是这样的,一个人解决问题,如果不问,可能2-3天也处理不了,问一问人家5分钟解决问题。这就是做软件交流的好处。不要碍于面子,要多问。不要认为问的问题太简单,而不愿意回答。也不要因为问题过于复杂,而随便应付,随便打发了事。当然问问题尽量注意一点方法,不要问这个问题怎么做,而是问是不是这样做。自己先考虑一下,把自己的观点先描述出来,再问是不是。这样听者受益,能在你的描述问题的过程中学到一些东西,也减少对方解答问题的时间。
热情,同事同你说话时,应正面回应,以示尊重。上班尽量问工作相关的问题。
努力提高自身素质。要有敬业精神。
要如实的讲述自己所负责模块的问题,不要隐瞒缺陷,缺陷到了客户那里问题就大了。
互相帮助,我们是一个团队,一个人的能力再强也没用,团队强才是好的。每一位成员都要为团队带来积极性的,建设性的。
大家多提意见,广纳建议,聚思广益。鼓励员工提意见。
要从公司的利益出发,不能太讲情面,不管怎么样,首先要把事做好,事做好了就对得起公司,对得起自己。以诚信,从容的心去和他们交往。和同事建立很深的感情。
作为一个项目领导者,必须是技术全面,最强的一个。要辅导项目成员做事,要教他们做事。不是只问什么时候做完任务。要把自己知道的东西耐心的描述,直到对方弄懂为止。如果碰到自己不太懂的方面,拿不准的话,要去问人家。不耻下问,厚着脸皮去问。听听人家的看法,观点,多问多学。不断的提高自己?
“尊重人,赏识人“这是北大就业中心主任讲的话,我是在电视上看到的。当时社会流传“清华,北大免谈”。自己有能力一定要尊重人,要看到别人的优点,学习人家的优点。
我们要以一种感恩的心态去看待这个社会,公司要感谢我们的辛苦劳动。我们要感谢公司给予薪水,给予生活。要发自内心的感激。公司要感谢客户的扶植。我记的我们以前公司的经理说过一句话“我们是帮客户做事,客户在扶植我们成长”。
尊重人,赏识人。衷心的赞扬人家的长处,诚恳的讲出自己的缺点,向人学习。虚心做人,降低自己,低下头来与人坦诚交流。每个人都有自己的长处,都有我们学习的地方。如果只知道说话,不去好好做事,做一些表面形式的东西,努力表现个人,做个人英雄。看不到人家的长处,不能很好的和人交流。因为害怕交流的过程,自己有不懂的地方,觉得很没面子。当然学不到东西,不能前进(不能好好交流就不能前进),他的水平停留在很浅浮的一层,问他一些深的东西,可能是蒙的。只有尊重人,赏识人,这个团队才有活力和竞争力,才可以在残酷的竞争中立足。只有尊重人,赏识人,才有了思想和灵魂。就能在现有的基础上更进一层。认识事物就有一种新的境界。人就有一种大气。
我见识过北大的软件研究生,看到他写的程序,很健壮。北大就是不一样。
一个人的能力是有限的,一个人能力再厉害,也抵不过一个团队的力量,不过一个团队要看领导怎么去运作这个团队。
每一位员工都要为公司的利益着想,站在公司的角度做事说话,用自己的耿直,赢得尊重。
公司提拔一个人必须是诚实的,诚信是根本,只要根基是好的,再加以培养。只有诚信,才能放心让他做事情。
公司就像一个人的身体,各个部门就像身体的手,脚,以及内脏。一个职位不称职,那这个节点以下都麻木了,就会病变,会危害好的部门。
公司经营的是一种文化,品牌。公司培养员工起码是一个好人。对社会,对公司,对自己要有一种责任感。
公司在生产产品的同时,更重要的是生产人。
作为项目负责人对成员要公平公正。相信每个公司都希望自己的员工诚实,可信。
要多与同事接触,特别是优秀的员工,努力学习他们好的一面。
只有胸怀广阔的人才可以有所作为。否则就是平庸,是一位投机者。
一个人最难得的是内心深处的东西,也是最难培养的。我们要发出内心的感激。
只有这样才可以成为一位合格的软件人员。
对于专业水平方面,我主要是在C/C++方面。
市面上关于C/C++的书很多,比较好的书也有很多。可以参考一下,有一定的价值。当然我们不能停留他们的位置,随着时间的推进,大家的水平也在不断的提高,我们都要有自己的看法。有一些书描述的东西仔细思考如果有点问题,我们不能说他们不好,起码他们引导了我们思考。刚接触C/C++时,你看一些书,觉得很不错,但是过了几年,你就觉得有欠缺。
对于初学VC的人,应先学C/C++,再理解MFC的内部结构,MFC不就是把一些东西封装了。所有的类从CObject类继承,弄清楚CView,CDoctumnment,CFrame三者之间的关系。以及消息的传递机制。
有的人VC用得很熟,不会C++,那是不行的。是看人家怎么做,他才怎么做。依壶画瓢。VC其实就是C++,只是把一些图形界面,消息机制都用类封装好了,我们只要调用一些类提供的一些接口。
软件的根在硬件,如果没有CPU,没有硬件的支持windows操作系统再牛也没用。没听说cpu坏了,或内存条坏了,windows还能运行。
一些应用程序大部分是在windows平台运行,要依赖于OS。但是OS也要在硬件上运行,也要依赖于硬件。自然界的事物都是相互依存的。
接受新的东西,首先要理解它的思想,在什么情况下提出来的。
相信每个windows程序员,都学过dll,com/dcom的东西,比较难懂。他的思想是好的,dll做成分离式,便于维护,com/dcom把模块做成对象的形式。就像零部件,再组装。但com难以理解。
COM他是怎么实现的呢?我认为不是很难。像我们编游戏一样。比如编挖雷游戏,就是让地雷随机分布,再在旁边添上数字。玩游戏的人就要根据这个数字来计算是否地雷。我想,编com内核的就跟编游戏差不多。我们用com编程是跟玩游戏一样,有一些东西是不可知得。游戏在无聊的时候可以玩一玩,找点乐趣。
Com是一种编程思想,不是一种技术,要形成自己的一种编程思想。我想com底层没什么东西。编写COM内核和在COM的基础上做应用我认为要容易,是两种不同的概念。再比如说五笔输入法,我们在用五笔时,要背字根,怎么去拆字。相信初学五笔打字的,是很辛苦的。但是编一个五笔输入法应是很简单的,就是检索字库。五笔输入法这个思维方式真的是很妙。他的编程思想好像跟软件编程关联性不大。我们做软件不妨借鉴五笔输入法的这个思想。
DirectShow也是一种思想,把解码器封装了,提模块组件化,把一个个Filter封装成对象, 各个Filter通过CPin类把Filter连接起来,就好像硬件一样,把软件做成一个一个的硬件,再把他们通过引脚连起来。行成一个链。Source Filter从一个媒体文件分析是什么类型,是音频还是视频,Transform Filter把数据接收过来,再通过引脚发给Rendering Filter,Rendering Filter根据类型。音频,视频,调用相应的解码器,显示。微软的解码器居然加了这么多的东西。直接把解码器的接口让人们调用不就可以了。这个软件将来不知道要到什么样了,真的很可怕。
我认为运行效率不是很高,感觉比较庞大,调用的东西很多,所以运行效率不高。只是他是微软的东西,可以和操作系统很好的结合运行。微软是帝国时代的帝国公司。
在windows下做开发,是一些似懂非懂的理论知识。严格的讲不是软件开发人员,而是组件应用人员,是外包装式的开发人员。比办公文员用五笔字型打字差不多。
初学C/C++ 时,指针,内存,堆栈难以理解。如果结合概念再想想是他们是怎么实现的,就好理解。再如果能让你看一看源代码,或者自己想想源代码是怎么实现的,理解就好多了。概念是人们为了描述某一存在的事物,用他们的语言和方式来表达。我们在理解他们时,先看他们做的是一个什么样的东西,再看是如何描述的。
软件的底层是用数学,算法来做实现的。只是让微软搞得越来越复杂,我们不是去思考怎么去开发这个软件,而是思考怎么去使用这个软件,比如MFC,COM之类的东西。如果能把CPU,硬盘,内存卡,网卡,键盘,鼠标和一些外围设备驱动了,操作系统基本完成(操作系统好像没什么神秘)。一个简单的计算器也可以说有一个操作系统。以后就是和其他软件的兼容性问题,就有了进程管理,内存管理。有了Internet,就有网络管理。
比如说计算机的通讯TCP/IP,有卷1,卷2,卷3,翻译版的书,厚厚的比较经典。从头至尾读一篇不说理解,都要很长一段时间。我觉得既然是通讯,就是二个pc的通讯,就是字节流通过网卡,向另一个pc发送,就有一些握手信号,交互方式。假如现在要向另一pc发数据,首先我发一个字符过去,如果在规定的时间内没有收到预定的符号,就说明网络有问题,或目标不存在。如果收到了,就可以发数据,这就是tcp的连接方式。向那里发送,对方受到数据后,要不要对方返回确认符号,就是tcp,udp的区别。发送方在等待连接时,能不能做其他的事情,就是阻塞和非阻塞方式。在发送数据时,可不可以接受数据就是异步。当然如果有n个pc相互通讯,是一个网络的话,就有路由器路由了。
我想TCP/IP刚开始时,就是这样? 目悸恰V皇蔷?0,30年的不断完善,肯定是非常庞大的,就一个数据结构都很大的,要每一个细节都理解很困难。如果从底部开始考虑,效果会好一点。
软件人员常说35岁之后,就不能再做程序,我认为是基础软件更新太快了,而周围又没有基础软件的概念,没有基础软件的技术。如果了解基础软件的话,有核心技术,年龄越大技术越精深,完全可以像老医生一样,年龄越大越受人尊敬。一般的软件界有成就的大都是老者。如果不是只有一家公司提供基础软件,软件界才可以蓬勃发展,软件人员不会35岁之后而折翼(因为我们是在使用人家的软件)。
进程是怎么编的,他是一个进程调度算法,按照调度算法,把占用CPU的时间片分配给进程。
作为一名软件开发人员,只有去思考底层,内核的东西,中国的软件才有希望。 (责任编辑:王玲玲) |