23

我的成长

作者: chenqiuge 分类:架构实践   阅读:23,901 次 添加评论

文 / 吴岩峰

求学之路

1976年,我出生在一个大家庭,爷爷奶奶与父母一起生活。姐姐大我两岁,父亲是一个工程师,母亲是个普通工人。与同龄孩子不同,我在上小学前并没上过幼儿园和学前班,而是在父母的辅导下完成了学前教育。小学四年级时被选中参加一个华罗庚数学班,在一次数学竞赛中获得长春市第四名的成绩。由于成绩突出,我被保送到市里一所重点中学学习。

重点中学在教育设施和师资力量上都有很大优势,在学习基础课程的同时也办了很多类兴趣班。在上小学时我就开始接触电子游戏,所以就参加了计算机兴趣班,当初也只知道游戏是用计算机编写出来的。当第一次进入计算机实验室时,我就被它迷住了。那时的计算机与现在差别很大,机房里只有AppleII和中华学习机。中华学习机算是高档机型,可以插游戏卡。AppleII开机后只有一个内置的Basic语言,没有软盘和硬盘,也记不清是用什么来保存数据的,每次上机都要重复地输入那些Basic程序。如果在一节课上能正确地输入并运行一个小程序,就能让我激动得在实验室里尖叫。那时我还会跑到新华书店抄Basic书上的小游戏程序,然后再回来输入到计算机,但通常都是输入进去不能正常运行。初中三年很快就结束了,我也顺利升入本校的高中部。高中学习压力很大。我也不再有时间参加兴趣班。

父母在学习方面对我没有苛刻的要求,多数时候靠自觉学习。高中三年在繁忙的学习中度过。1996年我考入吉林工业大学计算机系。

充实的大学

我的大学生活非常简单,教室、图书馆、机房和寝室,四点一线。但其中很多事情对我来说又都充满了新奇。

1996年正是DOS的末期,Windows3.1和Window95刚刚流行开来。最初上计算机实践课我们每个人都要拿着5寸或3.5寸的软盘,上课前都要自己将软盘中的DOS安装到硬盘上。机房里面多数是286计算机,好一点的是386或486。如果运气好能用上486机器,要知道,486就意味着比其他机型更快。那时DOS病毒横行,上机你要花很多时间和计算机病毒作斗争。在计算机报上经常有关于计算机病毒的介绍,出于好奇我开始关注计算机病毒,并收集计算机病毒样本。DOS时代的病毒大多都是用汇编语言写的。为了研究病毒是如何工作的,我开始自学汇编语言。DOS时代的汇编语言是一个编程利器,你可以用它去控制计算机的一切东西,包括显示图形、控制键盘、让喇叭发声,甚至控制鼠标。从那时起,我开始频繁地往返于图书馆和机房,阅读了大量汇编语言和与病毒相关的资料,我的汇编语言编程能力也突飞猛进,很快就完成第一个病毒程序。写计算机病毒也是一种编程能力和技巧的体现。从那以后有些同学开始找我帮忙调试程序和做一些课程设计。

由于经常使用DOS的Debug命令调试程序,所以我对Debug命令的实现细节很感兴趣。我开始考虑调试器的实现细节,但在图书馆里没找到关于调试器实现原理的书,最后只有一个办法可以弄清楚Debug的实现原理,那就是通过反汇编来了解它的内部实现机理。我反汇编了整个Debug程序,并将所有代码都写在笔记本上—整整记了一厚本笔记。这也为我后期开发SyserDebugger奠定了理论基础。后来我加入了计算机中心的一个项目组,在那里我开始接触UNIX、Linux以及WindowsNT,为我后期工作打下了一个良好的基础。

吴岩峰

走出校园

大学生活很快就度过了。由于基本功扎实,我顺利地在北京一家互联网公司找到一份编程的工作。

这家公司刚成立两个月,当时只有7名员工。在那里我负责做CGI(CommonGatewayInterface)程序开发。之前我并没有接触互联网的知识也不清楚CGI编程是什么概念。幸好在校期间的C和C++基础发挥了关键作用,入手轻松很多。工作是一个不断学习和进步的过程,工作的压力使学习和进步的节奏加快。由于工作需要,我开始接触和使用其他编程语言,如PHP、ASP、JSP等更高效的CGI开发语言,在提高工作效率的同时也使公司的业务量不断扩大。公司在一年内也扩大到50个人的规模。这些脚本语言开发更加方便快捷,并且不需要编译和链接。毕竟这些语言是专门为写CGI程序而开发的,它们有更高的开发效率。在最初要换这些编程语言时,同事们都有比较抵触。这种抵触情绪是每个程序员发自潜意识的,就像微软的WindowsNT核心团队抵触C++语言一样,都拿代码运行效率来说事。但当用了这些脚本语言一段时间后,我们发现它们的优点完全可以弥补C和C++带来的损失,况且需要执行效率的地方还可以使用C和C++。

这段工作经历使我意识到接受新事物以及通过不断学习更新知识结构的重要性。随着第一波互联网泡沫的破灭以及公司规模的迅速膨胀,公司在资金上遇到了大麻烦,面临解散或者调整业务方向以并入投资人的其他公司这两个选择。最后公司被并购。在寻找新的发展机会和留在这里继续工作中,我选择了寻找新的发展机会。三年工作使我在技术方面对自己更有信心。此时我已不再是刚毕业的毛头小子,虽然很喜欢互联网公司,但内心还是希望找到一份自己更喜欢的事。尽管这三年没有再接触计算机病毒技术,但它依然对我有巨大的吸引力。与互联网公司相比,反病毒公司是一个传统意义上的软件公司,在工作模式上有很大差别。于是一个很现实的问题摆在我面前:是否放弃三年的工作经验重新选择一家差异很大的公司?最终还是兴趣起了主导作用,我加入了瑞星。

动力源于兴趣,加入瑞星两个月后我就掌握了大部分的病毒技术。由于工作突出,我被提升为病毒组组长。于是工作中多了一些管理任务,也需要配合市场或宣传部门做一些采访和拍摄任务,偶尔还需要去面对客服人员的问题。这期间让我学到不同团队间合作的重要性。不过在这个职位上编程的工作非常少,都是做二进制代码分析。病毒分析是一个有趣的工作,在这个过程中你可以了解病毒作者的编程思路和编码技巧,这也是一个学习的快速途径。在分析病毒的过程中可以接触到Windows的各个方面,包括应用程序、API、驱动、内核等知识。

在病毒组的8个月,我长时间分析他人的程序,不亲自写程序,这使我意识到自己的编程能力在下降。这是我不希望发生的事,我更喜欢编程序。通过争取我加入到公司的新技术组,这是一个研究性质的部门,主要任务是研究反病毒技术的未来发展方向,以及如何把新技术加入到产品中去。这个部门里都是技术专家,陈俊豪就是这里的一员。他是一个极富编程天赋的小伙子,在技术方面我们有很多共同语言。调试器是我们必不可少的工具。我们在使用现有调试工具过程中发现了某些不足,SyserDebugger的一个开发计划就在这样的需求下诞生了。在2~3个月的时间内,SyserDebugger的原型被开发出来,但它是如此简陋以至于只有2~3个命令可以使用。软件是一个循序渐进的过程,是从不完善到健全、从简陋到充实的过程。在开发过程中,我们遇到过很多技术难题,需要不断地去解决各种问题。

有一个印象深刻的Bug,只发生在多核CPU上,并且还与CPU的速度有关,在慢速CPU上它很难重现。它会随机导致操作系统宕机。为了定位它,我每天下班回家都要调试两个多小时。就这样坚持了两个月,期间几次我都要放弃,有一次还把键盘砸个粉碎。最终通过排除法,几乎把所有的代码都注释掉,才发现了这个问题。问题是多核CPU导致中断重入,破坏系统堆栈。而这个问题的解决只需要调换两条汇编指令的顺序。但当有用户反馈你的工具能帮他们解决问题时,你就会很激动,重新燃起工作的热情。SyserDebugger的开发占用了我们所有的业余时间。我想SyserDebugger能够成为一个产品,最主要的原因是持之以恒的改进和完善。做任何事情都需要这种精神。在瑞星的三年多时间是我技术进步最快的阶段,也学到了如何管理技术团队。在这里我认识了很多优秀的技术人才,也非常感谢公司能为我们创造一个很好的工作环境。

在瑞星的后期,由于网络游戏快速发展,也带动了游戏外挂这个黑色产业的发展。我的经理也加入这一新兴产业,居然利用公司资源为自己开发游戏外挂。他的这一行为,产生很多连带的负面效应。我婉拒了经理的邀请,没有加入这个行业。后来他得到了法律的制裁。回想当初,如果我加入的话,那将是一场噩梦。由于公司环境的变化,我最终选择离开。

由于外资IT企业有先进的软件开发管理流程,以及完善的软件质量保证体系,所以我打算进一家外资软件开发企业去学习和感受它们的先进管理方法。进入外企首先要解决英语这个拦路虎,而我的英语可以用糟糕来形容,学了那么多年,仅仅认识一些单词、能阅读技术文章而已。通过两个月的外语强化学习,最终我被一家美国的网络安全软件公司Websense录用。由于公司产品针对企业级用户,所以质量方面有严格的要求,基本上一个开发人员会对应一个测试人员,这在国内很难做到。很多外资企业都是多区域办公,软件产品也是跨区域开发,这就对管理有更高的要求。软件开发过程也被分割成很多细小的单元,基本上是按每人每周为单位作为检测点,甚至是更小的单位。工作的细化能够确保一个大的工程能按计划完成,让员工有强烈紧迫感。这也需要管理者有能力去细化工作,从而促进工作岗位的细分。

跨区域开发中,文档是大家交流的基础,对文档的要求相当苛刻。一个开发人员往往需要花费一半甚至更多的时间去写文档,其余的时间才是真正的开发工作。测试人员是为文档服务的,没有文档测试人员是不会开始工作的。文档也是知识积累的最佳途径之一。我之前工作的公司都不重视文档,很多知识都是保存在个人大脑中,人员的流失也会导致公司技术知识的流失。这也恰恰是很多软件公司很难发展壮大的原因之一。公司也很重视公司影响力的宣传,有专门的岗位负责公司Twitter、Blog发布,在员工培训方面也有专门部门负责。

当然外企也有自身的缺点。在国内分部很难接触到公司的核心项目开发,往往是做一些边边角角的工作或总部不喜欢做的繁重体力活。这对个人技术发展不利,尤其是对刚刚参加工作的员工。分工的细化也导致员工的技能方面得不到全面的发展。外国人有种天生的优越感,有极少数人甚至到了傲慢的地步。我还记得有一个法国人来北京开会,直接对在会议室的中国员工说,你们有人懂UNIX吗?你们就没有人懂UNIX。这简直就是侮辱。由于管理的繁杂,也导致了效率的低下。日常工作都是以邮件为基础展开,由于跨越不同时区,也导致交流的时间成本过高。通常一个简单的软件Bug,花在交流上的成本就要1~2天。外企和国内公司相比更制度化些,尤其在经济危机时期,裁员行动相当迅速敏捷。总的来说,外企在文档和测试的投入方面比国内公司大,这也确保产品有一个长远的发展。这点是国内公司应该学习的地方,很多公司做事情都是急功近利、急于求成。

作者简介

吴岩峰,盛大创新院资深研究员,对软件调试有深入了解。现致力于便携设备操作系统软件开发。

(本文来自《程序员》杂志11年03期,更多精彩内容敬请关注03期杂志)

《程序员》11年03期精彩内容:2011开放平台之征

《程序员》杂志订阅

转播到腾讯微博

----->立刻申请加入《程序员》杂志读者俱乐部,与杂志编辑直接交流,参与选题,优先投稿

15 Responses to “我的成长”

  1. hoho 说道:

    见证了it发展史,怎么没提及java。。。中间的那个时代是java超火的时代把。

  2. 说道:

    很好的文章

  3. 说道:

    佩服, 数学很好 算法肯定很厉害 成长的经历让人羡慕

  4. e513479333 说道:

    哈哈,老吴,上头条了
    前两周把微软内部的x64的架构资料发给过去,Syser什么时候登顶x64架构啊
    Syser目前在全球内核调试领域排名第一,强大的内核切换
    直接无视目前所有的软件防御
    国内游戏保护和反调试把Syser列为调试通缉榜第一位
    世界最强的NP防御对Syser采取了最严厉的防御措施,只要检测到Syser的安装
    NP将永久冻结本机的程序运行

  5. redbird314 说道:

    剑宗的高手

  6. xiaoyao3857 说道:

    牛人,也是我的理想

  7. xiaohuangdou 说道:

    wigs sale 人人都会在艰难的环境中成长

  8. cheap north face 说道:

    员工的积极性可以调动起来呀

  9. sam 说道:

    说的很棒!!!

  10. replica 说道:

    写的真的很好啊

  11. 这篇文章真的很不错啊

  12. 分享了.支持…..

  13. 123 说道:

    很好啊……..

请评论

preload preload preload
京ICP备06065162