现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

新手必看:一个程序员的十年编程之路

2012-11-17 18:20 工业·编程 ⁄ 共 4580字 ⁄ 字号 评论 1 条

    时间过得还真快,投身软件行业已经有8年了,从接触计算机算起,已经超过13年。那年还是1993年,刚上高中一年级,就在第一个学期里,学校就开始教育计算机课了,使用的计算机是中华学习机、苹果机和IBM PC机。那时候开机特别麻烦,一定先开显示器,才能再开主机,否则会损坏机器,老师叮嘱了N遍,关机刚好要倒过来。在那年的课程里学会了BASIC语言,对着书里提到的数学问题一个一个地编写程序解决,记得最清楚的一道题就是百鸡问题,如下:

    张丘建《算经》中提出“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一。百钱买百鸡,问鸡翁、母、雏各几何?

》》》软件开发人员很难超过40岁吗

    这是一个不定方程组,如果人工计算,需要不断地尝试,需要花费不少时间。如果使用计算机来解决,计算的速度是非常快的,一运行就立即出来了,从那时起,我就觉得计算机是一个神奇的东西,心里就喜欢上计算机了。

(一)

    1996年考到大学,接触计算机也比较高级了一点,当时还是286的机器,但开始学习操作DOS操作系统了,还知道计算机不但可以计算数学问题,还可以玩很多游戏,可以做很多管理的工作,比如帮老师打印试卷。在这学期里,也有过一次最深刻计算机教育,那就是全班去上一次化学实验课。那次化学实验课,老师也是别开生面的,不是真正地去实验室做实验,而是带我们去他的工作室里,打开一台当时是比较高级的计算机—486吧?一到那里就打开计算机,并且启动那个化学计算软件,然后输入一些参数就开始运行了,老师就开始给我们介绍怎么样计算,而那台计算机就足足计算了两个小时,才把一个简单的分子式计算完成。这时才知道什么是计算机性能,为什么需要大型机器。同年,也开始学习计算机文化基础,主要练习快速的键盘打字。常常跟同学比赛打字,看谁打得快,还蛮有趣的。同时更加系统地学习了计算机的历史,了解到计算机更加广泛的应用。

    1997年开始学习C语言编程了。在这之前的大学课程都是教育FORTRAN或PASCAL的,毕竟那年开始,C开始越来越流行,不管是系统开发,还是应用软件开发都是C的天下。因为UNIX是使用C编写的,那么UNIX下的软件,大多数都是C写的。当然DOS下的应用软件也越来越多是C写的了。记得使用最有使名的C编译器是TC2.0,哈哈……。TC2.0是集成开发环境,也就是说把编写代码和调试代码放在一起,这样大大地提高了软件开发速度,算是一次软件开发的历史突破。

    1998年开始接触网络了,网络才刚刚兴起。那时候上网,也不知道能做什么,只是知道可以收发EMAIL,立即发出去别人就能收到,这是一种速度效率。这一次上网的机会也是来之不易,是同学天天打电话去电台里答问题,答到的机会。当然,在这一年里就开始学习微机原理,了解计算机是具体有什么组成,怎么样运行的。开始学习使用汇编语言控制8255A编程了,了解CPU的基本指令。也慢慢开始学习C++编程,使用VC 5.0开始编写程序,刚开始发觉VC5.0编写Windows的程序非常因难,基本搞不懂从那里开始。

    1999年开始多种编程语言的学习。这一年里,自己购买了一台K6-2的电脑,这样学习编程,就更加方便和容易了。当时开发Windows程序,还是VB比较容易一点,因此转向学习VB编程,搞了几个月,也能使用它编程了,后来发现使用VB编写一个扑克牌游戏,速度非常慢,就这样放弃了VB的学习了,那时应是自己的基本功不过关,而不是VB不好。接着又学习了Delphi,也玩了几个月,使用它来开发扑克游戏还比较快,但当我去图书饭馆看到LINUX时,发现全是C编写的,又重新回到C和C++的平台,接着为了看懂LINUX的源程序,还打印了一本LINUX的源码,一行一行地看。在这一年里,也是C和C++突飞猛进的一年。当时还为编译LINUX内核并安装,把朋友的硬盘数据全部搞坏了,朋友伤心了好久。

》》》新手必读:关于软件开发的一些答疑

    2000年毕业后,就直接进入了嵌入式软件开发。这一年里,学习makefile文件的编写,并开始看一万行以上的工程代码。毕竟以前看过LINUX代码,所以看那个嵌入式系统代码,就显得比较小了,接受的速度非常快,两个星期就完全搞懂,可以进入功能阶段开发。开发这个嵌入式软件,不是从头做起的,而是从原来别人的基础上进行修改开发,那么看懂别人没有注释的代码,就变成一种比较高的要求了。不过,这个系统是印度人开发的,毕竟文档写得比较全,大体的程序架构是写得非常清晰的。从这个项目里,学习到文档的重要性。

(二)

    2001年,这一年我开始转向PC的软件开发,也从一个大公司转到一个小公司进行软件开发。记得那个小公司,我刚到时还没有成立,我是第一个员工,算起经理才三个人,公司的办公地方就是一套三房一厅的地方。在这样的小公司里,经理是主管销售和策划,我是负责设计和开发产品,既当软件开发工程师,又当软件测试人员,还当软件培训人员。为了适应多种角色,我开始每天晚上都看书,以便学习到多种技能。也是在那时,我开始每个月买一到两本书,并且都是晚上把书看完,白天起来就是写代码。这段时间里,编程技术提高了不少,比如COM,C++模板,STL的使用,也开始慢慢使用了。还接触到当时最时髦的XML技术,进行DOM分析和事件型分析技术。由于当时主要开发网络通讯工具,所以网络的研究比较深入。从TCP到UDP都得非常熟悉,使用到的P2P技术也需要最先进的,比如突破局部网的防火墙技术,就有好几种。文字通讯、语音通讯、视频通讯一样不少,为了快速地实现语音通讯,还得研究ADPCM编码,RTP协议。在这一年里,要学习的技术也太多了,全部精力都在学习和工作之上。

    2002年到2004年,在这三年里又从一个小公司转到大公司去开发软件。在那个公司里,主要开发银行的信用卡软件。对于银行的软件,需要的稳定性和质量都是非常高的。在这个公司里,软件开发人员应算不少了,C++开发人员有7个人,测试人员有3个人,系统分析员有3个人,数据库设计有2个人,Web开发人员有5个人,项目经理有5个人。面对这25个人的软件开发团队,使用一个种全新的软件开发方法。整个软件开发的过程都是以项目制进行的,也就是说项目经理对业务非常了解,经过三个月左右时间来写出一份详细的功能说明书,然后再把整个功能分成若干模块。模块的功能定义非常清晰,把这些模块功能说明书下发到相关软件开发人员手上,让软件开发人员有三天左右的时间来设计整个模块。比如写一个C++的模块时,软件开发人员需要把整个C++模块画出框架流程图,并且把界面布局描述清楚,还要所有软件开发人员在项目经理面前把自己设计计划和时间在会议室的白板上写出来,让所有参加会议的人全部看得懂为止。这样下来,就会把编写代码计划全部定出来,决定所有预估的时间。根据所有工作人员的计划生成甘特图,把进度图发送给所有相关的开发人员。虽然测试人员只有3个人,但他们全部跟踪整个开发过程,比如让他们写测试程序,写构造测试数据的程序,还有巨大量数据测试的准备,异常数据测试的准备工作等等。测试人员可以把界面上每个功能都测试得很仔细,还需要把业务流程也进行测试,测试出来的BUG实在也是太多了,每一次改进都会稳定很多。在这几年里,学习项目管理与测试的重要性。

》》》对软件开发的理解和认识

    2005年春天到了一个相当大的软件公司工作,在这个公司里,总共有300人左右,刚刚C和C++开发人员就有50人。这么多开发人员,也是分成几个小组的,每组10个人,比如像网络服务器组,客户端组,IM客户端组,数据库服务器组,基础组件组。大公司一般都把工作分得相当细,比如像VSS版本管理就有一个人专门管理,并且只有这个人才可以发布软件的版本和安装程序的制作。当然这个人还需要管理所有开发的文档,并且维护文档的完整性以及源程序的安全性工作,像每个星期就备份一次源程序和文档。开发人员比较多,因此交流的成本也比较高,还好在这个公司里可以使用一切先进的IM工具,比如像QQ,MSN等进行人员交流和通讯。像一个10人的工作组里,开会经常是在QQ或者MSN上就解决,这样节省了大量时间,比如去订会议室还需要等安排,在QQ上所有会议记录都会备案到历史会议记录里。使用QQ可以让所有公司员工之间进行平等交流,无论是项目经理,还是老板都随时交流,提出所有建议,一经采纳都是有奖的。对于一个有100多人的大办公室,居然一天里听不到几个人在说话的,全是听到键盘的声音。如果不使用QQ这样的即时工具,每个人都起来说一句话,就像一条街道了,这样对于深入思考工作的人员来说都是一种极坏的工作环境,打断深入工作的意境。这也就是说为什么编程人员在夜深人静时可以快速地写出代码来。对于软件开发公司来说,保持安静环境是非常重要的。从这个公司里学习到大公司小组化的软件开发,使用即时通讯工具提高工作效率,减少交流成本,增加软件开发人员的技术交流,对于整个团队的技术提高非常快速的。

(三)

    2006年以后,开发软件又进一个更新的天地。一直在思考,怎么样才可以开发更稳定,更经济的软件?怎么样才可以开发满足用户的软件?面对着客户各种各样的需求,不得不去满足他们,客户提出来的修改就是订单的到来。近来开发软件,都是以市场为导向,以客户为中心,尽可能地满足客户的需求,实现销售的突破。当然,也理解到软件是以质量为中心的,如果一个软件没有可靠的质量,根本就没有使用的价值。

》》》程序员有哪些发展方向

    由于软件的需求,越来越多,单人的方式越来越难适应软件的需求。想到最简单的方法就是组建团队了,但团队的组建也不是那么容易说组建就组建好的。要组建好一个团队,关键是人才的搜寻。目前,中国高校的软件开发的教育方式,显然不能满足现实的人才需要,特别像中小企业的人才需要。中小企业有一个特点,就是财力比较单薄,不足以培养刚毕业的学生,因此中小企业的软件人才的需要要求就是一个月能上手的人才,而不是一年能上手的人才。我感觉大部份毕业生的编码动手能力比较差,好像没有写过太多代码的感觉,就算让他们学习一个月也写不出实用的程序来。建议所有想学习软件开发的朋友,多写代码吧,至少每天写5个例子,坚持写一年下来,这样就有大量自己拥有的资源了。当你到公司开发,而不是从头来,而是从你拥有的例子开始,不断地添加代码,这样会大大地加快开发软件速度。其实,开发软件是一件实践性很强的工作,如果没有大量地编写代码,是不可能学会开发软件的,就像没有下过水里学很久游泳的人是永远学不会的。团队也不是越大越好,当达到一定数量后,交流成本就急剧上升,这时就需要使用更多辅助软件来管理项目了,比如需求分析,源码版本控制,测试管理等等。

》》》一个普通IT人的十年回顾(四)

    在企业里开发软件也是一项持续的工程,任何项目都是从以前的东西改造过来的,而不是从头做起。为什么要这样做呢?因为那些项目都投入不少资金,如果放弃它,就相当于把一个公司的资产放弃了,更何况立即开发一个产品出来,也不一定就满足客户的需要。在企业里,做软件工程师,重要的不是天天去发明东西,而是天天改进产品,完善产品,提高产品竟争力。

作者:caimouse

目前有 1 条留言    访客:0 条, 博主:0 条 ,引用: 1 条

    外部的引用: 1 条

    • 软件之路:一个程序员的6年工作历程与感悟 « 求索阁

    给我留言

    留言无头像?