您的位置:首页 > 其它

我的软件开发经历(一)——起步篇

2005-10-21 23:27 316 查看
高中的时候,满脑子都是高考。家乡的信息非常之封闭,但还是经常听到计算机是今后的热点。虽然高三的时候终于有了计算机课程,但只允许练练打字的电脑课让我领会不到计算机编程的美妙,这也更加加深了我对计算机的好奇。填写志愿的时候,第一专业无一例外全是“计算机软件”,第二专业则都是“应用数学”(听老师说,应用数学是与计算机专业最接近的专业)。我喜欢数学,更感兴趣的则是计算机,因为计算机对于当时的我来说,是神奇而且美妙的。高考的发挥失常让我没能实现就读北京大学的愿望,最终进入了中山大学的应用数学专业。着实郁闷了好长一段时间,不过好在可以学习数学,而且是与计算机有关的数学。
然而进入大学的时候,见到、听到和感受到的远没有自己想象的那么理想。印象最深的一句就是:应用数学图有其名,实际上什么也学不到,学数学不够基础数学专业的人,学计算机更是与CS的人差之甚远。不同版本的经验和心得让自己茫然了好几天。不过学院领导一再强调搞计算机最出色的人都是学数学出身和某一个师兄的话“自己起主导作用”最终使得自己清醒过来,其实只要自己努力和主动,一切都是可以自己主导的。
尽管刚入大学时经历了落选“基地班”的打击,但我很快振作起来。整理了一些师兄师姐的教导,确定了大学阶段的目标:前两年努力学好专业知识,打好数学基础(我始终相信数学基础是非常重要的),并利用空余时间学习计算机知识,从第三年开始寻找实践机会积累计算机项目经验。相比于那些从小就有机会学习计算机的同龄人,我着实属于“晚辈”级的人物了,但我相信通过自己的努力,一定可以弥补以前落下的基础。
幸运的是,我们宿舍10个人大部分都是“计算机迷”,在他们的影响下,我对计算机编程的兴趣越来越浓,并且在大一暑假我就获得了实践的机会。通过舍友介绍,我进入了计算中心雨人工作室(后来转到ERP实验室)学习和实践。在那期间,我参与了不少企业应用系统的开发和实施(部署、培训),从那时开始,我学会了如何用Basic、Pascal来编写各种小程序,学会了如何用VB、Delphi来编写数据库应用程序,从Access到SQL Server,我逐渐体会到数据库的作用。尽管一开始编写的程序和设计的用户界面还显稚嫩,但不断得到客户的认可让我这个晚成的编程人员颇有成就感,也使得我对企业应用开发兴趣渐浓。或许是因为从一开始我接触的编程是企业应用(数据库应用)的开发,我将自己的目标锁定在企业应用领域。身边的同学有的对游戏开发非常感兴趣,有的则喜欢编写各种系统工具甚至是小病毒,而我则深深“爱”上了企业应用开发。很多人对企业应用开发很不屑,他们认为那无非就是利用各种RAD工具拖拖控件,在已经生成的代码框架上填填简单的几行代码,完全没有算法,没有任何技术含量。刚开始接触数据库应用系统开发时,我也产生了类似想法。但与客户的沟通使我产生了责任感,我当时的想法是:尽管我所做的工作是简单的,但这样可以为客户带来便利,正是这种简单的想法使我坚持下来,并能够重新认识企业应用开发。随着自己学的东西越来越多,水平也不断提高,我发现企业应用程序并不是简单的界面+代码,这里面涉及的东西太多了。如何使我做出来的应用程序能更好地满足客户的真实需求?如何使我的开发工作更有效率?如何使开发工作按时完成?……一系列的问题一直在脑海中回旋,我发觉对软件开发了解的越多,脑海中的问题也就越多。
我的处女作品是一个进销存软件,是我独立为一个软件公司开发的。当时软件公司的经理就是我的客户,他提出需求(根据他的客户需求),我根据需求设计、开发出满足要求的软件。当时接到任务的时候是大二暑假的开始,记得那个暑假我用自己的奖学金和家教所得的钱买来第一台电脑(4000多元),然后开始了我的开发历程。之前,我曾经为一个服装租赁公司开发了一个服装租赁系统,但由于各种原因最终没有被用户使用(据说是用计算机系统太麻烦,呵呵),所以这个进销存软件是我的第一个被客户使用的作品。开发服装租赁系统的经历让我学习了数据库知识和Delphi工具的使用,也了解了软件工程的一些知识,知道了什么叫需求分析,什么叫系统设计,什么叫开发,测试和实施。当然,当时的专业课程学习任务还是比较重,对软件工程学习只是依靠自学,所以不够系统,知道的比较表面,不过也会依样画葫芦了。当时需求分析还是比较详细了,虽然没有编写很正规的需求分析规范说明书,但对客户的需求还是了解得比较细致。在后来与客户面对面接触时,看到客户对系统的认可,我觉得自己很伟大,我终于体会到“科学技术是第一生产力”的真正含义了,呵呵。整个进销存软件的开发量(包括数据库结构设计、界面的设计和代码编写)还是蛮大的,由我一个没什么经验的开发人员用两个月时间开发,确实难住了我,特别是里面一些业务逻辑,比如先进先出,后进先出等结算方式让当时的我很是头痛。在那段时间里,我经历了各种各样开发人员的生活:为了找出一个问题所在不断DEBUG;为了完成手中的工作通宵达旦;为解决了一个难题而欢呼雀跃;为得到了经理的赞赏而美滋好一阵子;……开发工作是辛苦的,但收获却是非常大。书本上学到的软件工程知识是抽象的,但通过开发这个进销存软件,我加深了对软件工程各个阶段的理解,虽然还是很肤浅,而且也许还很片面,但其间所经历的事情让我积累了不少的经验,我懂得了如何去更好地与客户、项目经理交流;认识到了规范开发和各种文档的重要性(坚持写开发文档得到了经理的赞赏,这也为后来省下了不少麻烦,系统交付后,很少接到经理的骚扰电话,呵呵)。当时经理说的一句话让我印象很深刻,也一直陪伴着我:开发应用程序不是关在屋子里埋头写理想的代码,而是要保持与用户的不断沟通,时刻让自己的开发往正确的方向前进。靠自己想象出来的程序再美妙也是没有任何价值的。从感受到自己的软件为用户带来了工作效率的提升开始,我就瞄准了企业应用开发这个领域。虽然当时的认识比较模糊,脑中还没有系统架构的概念,知识体系还是很不完善,缺乏相关计算机基础知识的支持,但我感觉到信息技术在企业应用领域会起革命性的作用,而且绝不止数据库应用那么简单。
随着参与的项目越来越多,范围越来越广,学到的知识也越来越广泛,对信息技术的认识也越来越深。开发进销存软件的成功让我得到了计算中心一位教授的赏识,我因此也得到了加入正式项目组的机会。第一个系统的开发完全是“个人英雄主义”行为,尽管我也试图贯彻软件工程的思想,但绝对体验不到团队合作,除了与客户和经理的沟通外。所以听到可以加入项目组的消息,我的心情是非常激动的,当时只是大三刚开始,而我已经初步实现了自己的目标,向更高的层次前进。
在雨人工作室学习期间,我参与的项目集中在企业MIS和一些WEB应用。在Windows环境下,利用Delphi作为开发工具,MS SQL Server为后台数据库,开发各种C/S结构的信息管理系统。当时的我作为一个开发人员,主要负责一些设计(数据库结构设计、系统框架设计和前端用户界面)和coding工作。由于项目组成员不是很多,同时又是part-time job,有时更是几个项目在身,着实体会到了一个programmer的艰辛,但也确实学到了很多programming skills,积累了不少programmer的经验。忙手coding的同时,我意识到计算机基础知识的重要,辅修计算机软件专业的课程,认真学习别人认为枯燥乏味的OO、Data Structure、Software Engineering等等基础课程。虽然到现在已经不能完全记住当时学的知识,但学到的一些思想、算法和技巧都在潜移默化影响着我的工作。
大二、大三两年是非常艰苦的,学习任务繁重,我学好每一门数学,我知道本科头两年的数学课程是非常重要的;同时我也疯狂学习计算机知识,并通过做项目去理解体会学到的知识。那两年时间里,我感觉到自己的进步非常大。其间我也经常听到一些反调,那些喜欢底层编程工作的同学都在劝我学一些更高深、更底层的知识(他们认为我如此聪明的头脑去做那么“简单”的应用开发,真的太浪费了),我也曾经动摇过,但在网上论坛、BBS上我与“大虾”们讨论交流,同时也经常找公司里面一些经验丰富的程序员沟通,我坚定了我的路线,小型的企业应用开发从程序员角度来说似乎没有那些与Windows API相关的底层编程那么复杂,但真正要保证时间保证质量开发出一个满足企业需要的系统,却是非常不容易的,这是一项非常有挑战性的工作,而且意义非同一般。IT发展到现在,很多技术已经非常成熟,我们应该站在前人的肩膀上,尽可能利用先进的技术帮助企业提高生产力。随着参与的项目越来越大,越来越复杂,我发现即使是企业应用开发工作,也不是象很多人所想象的那样简单,需要考虑的东西越来越多,不再只是实现了要求的功能就OK了,需要考虑与已有资源(包括软硬件资源)的整合,同时一些在小系统上表现不明显的因素也越来越决定着一个项目的成功与否,比如性能、可维护性、适应性等等。当时开发进销存软件时,只要找到了一个第三方控件实现了所要求的功能就兴奋异常,后来开发较大型项目时就不再那么容易了,需要考虑系统采取的架构(C/S?B/S?两者相结合)、开发平台、数据库平台,同时还得费心机考虑这种设计或实现方法是否会影响系统速度或性能,是否可以重用,需求发生变化时是否容易修改,等等。后来才真正体会到一个系统总体结构的不合理,会导致各种各样的问题,从用户角度来看,会产生重复工作等问题;从系统角度来看,会导致致命的速度、性能问题。而后者很可能导致项目的失败,一个经常导致服务器或客户端死机的系统如何让用户接受?
在大三、大四两年,参加了一些MIS、MRPII和ERP项目,有的可以称得上是成功的项目,但大部分却很难称之为成功(无论是进度还是质量都与理想差之甚远)。原因是多方面的,主要有以下几点:1、项目管理混乱,没有规范的项目管理导致代码质量低下、进度不断延迟;2、分析人员不够重视需求分析,没有很好地了解客户的真正需求,缺乏对相关行业的必要知识,导致最终的系统不能很好地满足客户的要求,这也使得相当数量的中小型企业对信息系统产生了怀疑;3、系统设计人员计算机知识不全面,不了解最新的技术,导致系统沿用过时的技术和系统结构,同时忽视重用性导致不断的重复开发;4、开发人员只考虑能否实现,而没有考虑如何更好地实现,忽视代码的效率、性能等问题。
01年项目组一直采用C/S结构为各种行业的企业、工厂开发管理系统(MIS、MRPII、ERP),虽然对企业宣称开发的系统属于MRPII、ERP等等,富丽堂皇,但事实上项目组的成员只有技术背景,根本没有管理背景,而且项目组中没有经验丰富、高瞻远瞩的行业顾问、架构师,设计、开发出来的所谓MRPII、ERP实质上就是复杂一些的MIS,根本无法为企业的管理、决策带来帮助,唯一能看到的只是系统帮企业管理各种数据、出一些数据统计报表而已。每完成一个项目,有终于可以完工的快感,但很快就被客户的抱怨所淹没,我也逐渐意识到自己不能再定位在programmer的层次了,一个再优秀的programmer,也只是能写出优秀的代码而已,却不能为企业提供一个优秀的系统。Programmer只能停留在系统的局部,而系统架构师(Architect)则肩负着整个系统构架的重任,毫无疑问,架构师对于一个项目的成败起着关键的作用。我认识到信息技术在企业中的应用越来越重要,也越来越复杂。随着ERP静寂之后,CRM、DPR、e-ERP、e-business等逐渐成为热点,J2EE、.NET等新技术也逐渐成为程序员的新宠。信息技术已经日新月异,我感到学习更多先进技术的同时,应该确定新的目标。我不再满足于做一个优秀的programmer,当时我确定了自己的目标是成为一个优秀的系统架构师,但首先我会努力让自己成为一名优秀的软件工程师。当时我对架构师的认识是:架构师负责理解系统的业务需求,并创建合理、完善的系统体系架构,架构师也负责通过软件架构来决定主要的技术选择。架构师要求有完善的知识体系,扎实的技术功底,了解当今流行的各类技术和产品。
总结大三、大四两年的开发生活,我感觉到自己对IT有一定的天赋和较高的热情,而且兴趣很浓,再加上自己扎实的数学基础、严谨的逻辑思维和很强的学习能力,已经能够较好地胜任programmer的角色。但这不是自己的目标,有着两年的programming体验后,我意识到自己应该向更高层次进军,而不应满足于现状。大四后半段,凭借着自己优秀的学业成绩,我顺利拿到免试攻读本专业硕士学位的资格,我希望可以通过研究生阶段的学习,学习更多的知识以及科研方法,使自己得到提升。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐