时间过的很快,转眼间已经实习将近5个月,其中有2个月是属于完全被流放的。
最先在内部系统组参与内部管理系统开发(struts+mysql+spring+hibernate),之后是去做网络交换机软件的脚本测试。现在又回归内部系统,虽然在脚本组期间,编码能力被别人甩在后头,但至少具有了一些测试经验。
至少自己做的东西,是真正交付到了客户手上,到也稍微有些成就感。
1 浅谈测试
一直以来,我都认为测试是脱离了软件工程范围的工作,不以为屑。但在实际情况中,测试是既重要且难以精湛的.其真正的压力,在于找不到bug,责任在你,而不在于编码人员。一般的测试人员不懂编码,他们靠的是日以累计的经验总结和想象力。而要做到高级测试工程师,则一定要懂编码,因为这是你完全掌握整个系统的方方面面具体运作的前提。但占主导地位的,还是大型系统的集成测试经验。实际项目中,编码时间一般只占30%左右,真正耗费时间的是IT阶段的找bug与对应bug,此阶段基本评定了coder的编码质量。
2 程序员的困惑
有些人,以为教学视频和代码看多,自己就懂的多,实际做起来,却不知从何下手,问题在那?如何定位?如何解决?通通跟一样能力有关,debug追踪能力,也称调试。在项目组工作不愁源码资源,但问题是蛋糕摆在面前,你如何去消化?
有位同事告诉我:代码看几遍都没用,要去抄,例如一个查询模块,在此基础上去做具体记录的历史记录查询模块,你可能会觉得很简单,但实际情况却往往报一堆异常,配置问题涉及到方方面面,以及数据库字段,传值问题等等,一大堆对于新人来说很郁闷的问题。但不用怕,只要学会调试,一个个问题去追踪,一个个去解决,自然而然,那段源码才真正属于你。
3 如何调试追踪?
如果你能在短短的时间内就看到问题点在那,放下断点去追踪,出去找工作,绝对没问题。出现问题的时候,不要光看代码,要用实际行动去追踪运行期间的具体值,那是最好途径。eclipse是个很爽的ide,这点做的很好。例如页面内容显示不是自己想要的数据,我们要先从数据库查询语句去下手,设置断点,一步一步step over,让sql字段(存取最终sql语句的字符串)运行到有值,inspect进去看,如果还看不出来,就点击它,copy后在sql客户端去实际运行,看看实际查询出来的表是什么,如果是对的,有可能就是页面调用的错误或者action逻辑的传值问题。
页面错误的调试,基本方法是用右键点击实际网页查看源代码,copy到editplus,就能看到具体错误发生在那几行。通常有几种常见的错误,例如:缺少对象这种很多时候是有些被你调用的字段有可能为空的情况出现的,可以加if(xxx=null)语句加保护。追踪的方法基本就是用alert语句,放在有可能出错的地方。
4 一些习惯
遇到问题先自己思考,无从下手再找高手帮忙看看,注意他帮你看的思路,别在一旁闲着,看多了自己也会了,不然你一辈子都停留在那种水平,从人身上学到的东西远远比书多的多。
解决了一个问题后,要去究根问底去找到问题产生的起因,以防你下次遇到类似的问题再浪费同样的时间。
把代码写的漂亮,注释、空行、规范一样不能少,可读性是放在第一位。曾经看过一个高手写的代码,真的一看就是不同水平的人写的,几乎很完美,读起来很流畅,方便自己也方便别人。
任务完后不要呆着,去要求经理给你更有挑战性的任务,只要你肯去尝试,他们就会对你另言相看,把三天的任务一天加班搞定,效率和忠诚都有了,路也比较好走了。
5 题尾话
如果你有一份思想,我有一份思想,拿出来交换,我们大家拥有就是2分份思想,可惜这种观念,并不能深入每一个团队的每一个人,少一点自私,未必不是好事。职场到处都存在被排挤的隐患,要为自己找片草地实在不容易。但有一点要相信,只要自己不放弃自己,这世上就没有绝望的路,你可以被打趴下,可以被身边的人暗算,可以被深爱的人流放,只要你用自己决心站起来,受过的伤痊愈后就能增强你的抵抗力,一路前进!
一.实习题目
c/s模式下的网络游戏平台(类似于联众)
二.题目要求
a. 平台上至少能够提供两种游戏(仅供两人参加)供用户选择。
b. 服务器端实现用户账号、密码的管理,监控用户上下线状态管理。
c. 服务器端实现用户游戏数据及文本通信数据的中转交换。
d. 客户端能够连接到服务器并选择游戏种类和游戏桌面,并参与游戏。
e. 客户端能够通过服务器进行文本通信。
三.小组成员及分工
组长:黄? 飞
成员:黄? 飞? 王润琛? 陈? 磊 韩振军 王向富
四.人员安排及进度
a. 人员安排:
黄? 飞:系统设计,文档管理:2周,系统的集成与总结:1周
陈? 磊:编写项目计划文档:0。5周,需求,概要文档的编写:2周
王润琛:系统设计:1周,程序主要模块的实现:2周
韩振军:需求的收集与文档:1周,软件测试与分析:1周
王向富:编写软件测试计划:1周,软件测试:1周。
b. 进度:
第一阶段 项目启动(05-8-22----------05-8-23):? 实习分析;项目简单分工。
第二阶段 需求分析(05-8-24----------05-8-26):? 确定软件性能;功能;编写文档。
第三阶段 概要设计(05-8-29----------05-9-01):? 确定总体架构,程序模块。
第四阶段 详细设计(05-9-02----------05-9-07):? 设计客户端,服务器端细节。
第五阶段 软件实现(05-9-08----------05-9-16):? 编写源代码。
第六阶段 软件测试(05-9-19----------05-9-21):? 完成测试及文档。
第七阶段 项目总结(05-9-22----------05-10-07):? 总结提高,答辩。
五.系统架构
整体架构图:
六.实现的功能与未实现的功能
a. 实现的功能:
客户端:
1)用户登陆:用户运行客户端软件后,弹出登陆框,用户通过输入帐号和密码登陆平台,高级实现程度有记住密码选项。
2)用户注册:登陆框有注册选项,供用户注册新平台帐号。用户需要输入新的帐号名,密码,以及一些基本资料:姓名,性别,出生日期,邮箱。
3)用户修改资料:用户可以在登陆后修改个人基本资料,除帐号外其他资料均可选择修改。
4)用户选择游戏:用户登陆后,平台界面即会显示所支持游戏,用户可选择要进行的游戏。平台与游戏捆绑安装,在高级实现程度下服务器新增加游戏通过新的安装文件提供给用户。
服务器端:
1)批准新用户注册:基本实现程度为由服务器自动批准,既用户名不与现有用户冲突并且用户名和密码长度符合规范(用户名长度不超过十个单词或字母,密码不低于6位)及予以批准。高级实现程度为服务器与管理员双重批准,既服务器批准后只具有参观游戏和聊天等功能但不能参加游戏,需等管理员批准后赋予正式的用户权利。
2)删除用户:服务器管理员可以从数据库删除任意已注册用户(所有用户资料项同时删除)。为防止误操作等情况发生,高级实现程度中删除用户操作只是暂时禁止该用户登陆,数据库保留该用户资料一周(或数周,示服务器硬件资源)后再自动删除。
b. 待实现的功能:
1.用户登录的限制
用户在不同地点以相同的用户名登录。
2.用户的异常掉线
在游戏过程中,玩家的中途异常掉线,服务器对玩家的在线信息的监听,并及时修改。
3.游戏的添加
此平台须在对游戏进行修改的情况下使游戏嵌入平台,尚缺少良好的对游戏的管理。
七.系统演示
a. 客户端;
b. 服务器端。
八.实习总结
这个项目所涉及的技术比较多,主要包括:网络通信,数据库通信与操作,用户的界面设计。我们采用vc++ 语言进行编程,主要调用mfc中的类函数,其中自己编写了一些类函数,具体的细节见详细设计文档。
作为一个游戏对战,它所能允许的最大的游戏玩家是衡量好坏的一个重要标准,对于每个用户以产生独立的线程对其进行调度,控制就成为该对战平台的一个重要问题。
解决方案:
建立两个线程池(csendthreadpool,crecvthreadpool),主要负责管理线程的生成,结束和任务分配等工作,线程池类相当于一个容器,在容器中运行很多个线程,应用程序只需要将工作交给线程池,线程池负责协调和分配内部工作。
九.经验总结与参考书目
经验总结:
1.本软件在初期的设计中不是十分的完善,致使在进行编码的阶段不断地修改,使得软件件项目的进度和程序的质量受到很大的影响。
2.协同开发组员间的配合很重要,尤其是各个部分如果不按照一定的标准,就使组员间的合作出现很大的问题。我们这次本来打算使用vc。net,但是由于有些组员不是很熟悉,后来改用mfc。
今天视频看完了,可是没有总结。还是感觉不会总结。一想到50讲的课,怎么总结呢?开始听的时候,是真不知道从哪里下手,因为开始看的时候有种迷迷糊糊的感觉。软件工程,我期待的一门课就这么听完了一遍。很有些囫囵吞枣的感觉,不过收获还是很多的,至少知道了软件工程的阶段不是只有需求分析、编程和测试维护。当然这个很早之前就知道,只是以前根本没有什么概念。
第一个阶段,计划阶段,要首先对用户的要求进行了解,对软件的性能等进行了解。然后进行可行性分析研究,在各种可行性研究中,对于软件开发人员来说,技术可行性研究最重要。之后就是需求分析阶段了,需求分析阶段也是计划阶段的最后一部分。需求分析定义了要做什么。把现实的需要用程序语言表达出来。但是这一阶段并不解决怎么做。
解决怎么做的是下一个阶段——设计阶段。设计阶段分为概要设计和详细设计。概要设计把每个组成部分的功能都给出意义明确的模块,每个模块都和一部分需求相对应。但是不考虑细节。详细设计,把每个模块的功能实现详细的表示出来,为源程序的编写打下基础。然后就是编程阶段,我们一般最初接触的就是编程,所以编程阶段比较了解,由于前期文档已经做的很详细,功能的实现数据和算法都已经清楚了,所以编程是比较简单的。
编程完了就是测试阶段了,测试阶段的费用是最多的。测试阶段是发现错误的阶段,改错是调试阶段。然后就是交付用户使用,及维护。
以上几点是软件工程的生命周期的六个阶段。软件工程过程和软件工程生命周期也不能等同。
软件工程过程如下:
软件规格说明:规定软件的功能及其运行的限制
软件开发:产生满足规格说明的软件:
软件的确认:确认软件能够完成客户提出的要求:
软件演进:为满足客户的变更要求。软件必须在使用的过程中演进。
pdca
软件工程过程与软件生存期相对应。软件规格说明对应计划阶段,软件开发对应设计、编程阶段,软件的确认对应测试调试阶段,软件演进对应运行维护阶段。
软件开发的每个过程都有相关文档,用老师们的话说叫做以文档为驱动。文档的好坏直接影响到软件开发的进度和软件的质量。而文档中最多的是使用图表,dfd图,sc图。数据流程图、过程流程图、系统流程图等各种图表。还是那句话,一张好的图表胜过一千句话。
在软件生存周期的各个部分都有各自要注意的地方,过着说是各自的重点(或者是知识点)。
今天已经是22号了,文档还没写。先写文档了。唉,又落后了。
1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!
2、一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。
3、软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在mm比较多的团队中。在软件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。
4、详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们:另外的那8小时如何使用将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。
5、书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。对于花钱买书,我个人经验是:千万别买国内那帮人出的书!我买的那些家伙出的书,!00%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是真正拥有了它。
6、不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发windows应用程序,看看windows程序的设计、加载、执行原理,分析一下 pe文件格式,试试用sdk开发从头开发一个windows应用程序;用vc++、 delphi、java、开发应用程序,花时间去研究一下mfc、vcl、j2ee、.它们框架设计或者源码;除了会用j2ee、 jboss、spring、hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!
7、在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的存在都有其自身的理由,所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴c、c51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有vc++、delphi)进行系统体统结构设计时,为什么不可以参考来自 java社区的ioc、aop设计思想,甚至借鉴像spring、hibernate、jboss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。
1、分享第一条经验:学历代表过去、能力代表现在、学习力代表未来。其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:重要的道理明白太晚将抱憾终生!所以放在每一条,让刚刚毕业的朋友们早点看到哈!
2、一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,我刚毕业,还不知道将来可能做什么?,跟着感觉走,先做做看。因为,这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内做什么事情才是在做正确的事情!。
3、软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在mm比较多的团队中。在软件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个高学历的牛人(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句再也受不了啦!四分五裂、各奔东西。那个项目的成功度大家可想而知了。
4、详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:如果一个软件开发人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。不要告诉自己没有时间。来自时间管理领域的著名的三八原则告诫我们:另外的那8小时如何使用将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。
5、书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到世外高人,并不厌其烦地教你。对于花钱买书,我个人经验是:千万别买国内那帮人出的书!我买的那些家伙出的书,!00%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。拥有书籍并不表示拥有知识;拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。只有将书本变成的自己智慧,才算是真正拥有了它。
6、不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。对任何事物不究就里是任何行业的工程师所不应该具备的素质。开发它们框架设计或者源码;除了会用j2ee、 jboss、spring、hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你知其然且知其所以然!
7、在一种语言上编程,但别为其束缚了思想。代码大全中说:深入一门语言编程,不要浮于表面。深入一门语言开发还远远不足,任何编程语言的存在都有其自身的理由,所以也没有哪门语言是包治百病的灵丹妙药。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴c、c51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有vc++、delphi)进行系统体统结构设计时,为什么不可以参考来自 java社区的ioc、aop设计思想,甚至借鉴像spring、hibernate、jboss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???他山之石、可以攻玉。
养成总结与反思的习惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。以下是软件工程师工作总结范本,欢迎阅读。
软件工程师工作总结范本1随着互联网技术的快速发展,以及电信行业的第三次重组,给我们通信服务行业带来了巨大的商机,我很荣幸在这个大好时机来到中国*通常州分公司,成为网通公司的一名宽带医生,我非常珍惜这份工作机会。
时间一晃而过,转眼间xx年已接近尾声。回首繁忙而又充实的xx年心中不禁感慨万千,过去的一年中通过自身的不断努力,使得技术水平、沟通技巧等方面都取得了一定的进步,当然亦有需要改进的地方,这是我人生中弥足珍贵的经历,也给我留下了精彩而美好的回忆。
非常幸运能够来到**公司参加工作,回顾业务培训期的一个月工作,感触很深,收获颇丰,我们首先对宽带医生这项业务的前期推出做了很细致的准备,仔细讨论了在业务推出以后可能遇到的种种困难;然后参加了代维部门的实践学习,深入了解了网络的接入技术,以及在修障过程中遇到的问题,接着参加了为期两天的新员工入职培训班,认真听取了相关领导对公司的发展概况,组织结构,以及各部门职责的介绍,并认真学习了公司的基本业务和增值业务,对公司的产品和服务有了很清楚的认识。
后期在主管的带领下,我们陆续对周边保有用户进行了宽带医生免费体验活动,也让用户知道我们这项延伸服务的推出,树立我们**宽带的品牌形象。
在过去的工作当中,在领导和同事们的悉心关怀和指导下,通过自身的不懈努力,各方面均取得了一定的进步,但那些远远不够,我也在实际工作中认识到自己的不足,业务还不够熟练,很多知识还有欠缺,处理事情不成熟。因此在今后的工作中,我将努力提高自身素质,克服不足,朝着以下几个方向努力:
1、学无止镜,时代的发展瞬息万变,各种学科知识日新月异。我将坚持不懈地加强学习,向理论学习,向专业知识学习,向身边的同事学习,逐步提高自己的理论水平和业务能力,并用于指导实践。
2、 “业精于勤而荒于嬉”,在以后的工作中不断学习业务知识,通过多看、多学、多练来不断的提高自己的各项服务技能,克服年轻气躁,做到脚踏实地,提高工作主动性,不怕多做事,不怕做小事,在点滴实践中完善提高自己。
3、不断锻炼自己的胆识和毅力,提高自己解决实际问题的能力,并在工作过程中慢慢克服急躁情绪,积极、热情、细致地的对待每一项工作,继续提高自身文化的修养,努力使自己成为一名优秀的工作人员。
4、在工作上积极配合省公司“关于配合全省宽带续费率提升活动开展“宽带医生”服务的建议”的活动;加强对武进、新区、金坛宽带医生的业务宣传,增加这些区域的服务量;加大对他网用户的宣传,扩大宽带医生的服务群,争取将用户发展为本网用户;明确宽带医生远程服务软件的一整套受理、安装、服务的流程,加强远程服务软件的推广,将远程服务和上门服务结合起来。
软件工程师工作总结范本2总想着每天、每个月、乃至每年都有点进步。xx年,对我来说,是起伏不定的一年,也是收获颇丰的一年。
在这一年,我跳了两次槽,一次是自愿的,还有一次是被迫的。我目睹了一些公司从盛到衰的过程,也看到了一些脚踏实地的公司。
离开x1公司,是因为我觉得x1公司不是在做软件,所谓的印度模式,我想,绝对不是这么做的。理想不合,不想浪费时间,也只能背负跳槽的恶名,挂冠而去。去x2公司,是因为看到他是美国独资公司,做外包软件,能够接触美国的客户和技术,希望能够有所收获,何况,职位也不错。的确很想好好做,也跳累了,只想稳定发展,毕竟,是做父亲的人了。没有想到的是,竟然让我目睹了一场资产争夺的好戏。公司易主,流言满天,谣言四起,官司大战,这种平常只有在电视和电影里看到的情节,我实实在在的亲身经历了,也算是人生的重要一课吧,至少,让我看到了人性最阴暗和恶毒的一面。自然,是做不下去了,只能又走。
也看到了一些踏踏实实做事情的公司。园区的瑞博软件就是一个。很少看到如此踏实做事的公司。若干年后,只要他能够存活,必定是一个成功的公司。虽然老板对我也很有诚意,只是,对于教育软件,我实在没有太大的兴趣,何况,如果想做教育,我何不选择安博呢?毕竟,安博给于我很多。回头想想,在其他公司,我都是在奉献,只有在安博,是学习了很多。
说起跳槽,其实,看看那些公司,有多少是在踏踏实实做事情的?老板本不懂软件,都是看着软件行业能赚钱,想来捞一票,结果把中国的软件行业做坏了,也害苦了中国的程序员。自己不好好做事,怎么怪别人跳槽?同工作经历的坎坷相比,在个人能力方面,今年的进步是非常大的。今年上半年,我的进步集中在技术领域。我更加深入研究了设计模式、ejb体系和.net平台,还有uml建模,终于有所突破,设计了一套自己的基于.net平台的系统架构和开发工具,并且得到了应用的证实。在网上也陆续发表了一些文章,受到比较好的欢迎,还上了赛迪网的开发之星。
下半年,在软件工程方面收获是很多的。
看到网上对于印度模式从吹捧到批驳的吵闹,也看到x1公司学习印度的失败,加上自己从开始就对那些记者的怀疑,决定好好学习软件工程。我一向认为,任何东西,不能道听途说,只有自己好好深入研究,才能得其精髓。同时,软件工程绝对不能只看印度的,毕竟,美国才是软件业最发达的国度。
列举一些学习的参考资料:《rup软件工程过程》、《msf微软解决方案》、《xp极限编程》、《cmm实践应用——infosys公司的软件项目执行过程》、《人月神话》、《软件需求》、《软件工程java语言实现》。每本书,我都仔细研读了,颇有体会。
我开始就想,印度软件工程绝对不会象那些记者所说的那么简单,所谓的高中生编程说。所以,我必须实际看看印度的软件工程。《cmm实践应用——infosys公司的软件项目执行过程》,是印度最大的软件公司infosys公司的分管质量的副总裁写的,介绍他们的cmm4的软件工程,果然不同凡响。这是我了解印度软件工程的主要窗口。
首先,同原来的想法不同的,也可能同大多数人(尤其是受那些软件记者影响很深的“专业”和非专业人士)想法不同的是,软件工程实际上不仅仅只是管理,而是一门涉及很广的交叉学科。在软件工程中,大约一半的内容是专业性很强的,涉及到软件分析、设计甚至编码的技术。所谓的结构化、面向对象,都在软件工程的范畴内,同样是软件开发和组织的重要内容,也是软件质量保证的重要内容。至于软件开发的管理部分,只能算是软件工程中软件工程过程的部分,或者说项目管理部分。脱离管理来开发软件是绝对不可行的,同样,抛弃技术基础,空谈管理出效益,便如无源之水、无本之木。诚如《软件工程java语言实现》中所说:“软件工程范围极为广泛。软件工程的某些方面属于数学或计算机科学,其他方面可归入经济学、管理学或心理学中。”在这里,我强调了软件工程中的技术部分,并非轻视管理,只想在软件工程的概念上做一些拨乱反正,也希望多一些人来关心软件的核心技术,而不要空喊和概念。毕竟,中国的软件太缺乏核心技术了。
其次,对管理要求的严格不说(这个谁都知道),实际上,不管是美国的软件工程,还是印度的软件工程,都是比较灵活的。即便是印度这样的所谓“软件工厂”模式,对于软件工程过程管理极为严格,也有一个部分是专门讲述过程剪裁的。整个软件工程过程是非常庞大和繁复的,然而,由于项目具体情况不同,如项目的规模,参与人员的数量、素质等的不同,对于软件过程的每个部分,不是都必须的,可以根据具体情况来进行剪裁。这个部分对于我的启发是很大的。以前做什么iso9000等,开始做了一个以为很好的规范,但是,到具体项目,总是对不起来,到处有问题,现在想想,便是少了这个变通的部分。不过,话说回来,这cmm也是老美想出来的,而不是印度。
第三,对于开发人员的选用,我发现,美国人是非常注重选用优秀的开发人员的。martin fowler曾经开玩笑的说,如果给他一批水平不高的开发项目,他会考虑全部解雇,重新招聘。《人月神话》中也说,如果200人开发一个项目,其中25个人最能干,那么会考虑解雇其余的175个人,让项目经理来编程(当然,后面还有一些抉择分析,这里断章取义了)。其结论的基础是基于以下研究结果:优秀的开发人员和差的开发人员,其效率之差可以达到数量级。另外,从管理的角度来说,只有人多了,才会有管理问题,当团队规模控制在一定的范围内时,便不会有太大的管理问题。
对于软件来说,很难实现同传统产业一样的工厂化生产,这是由软件开发的本质决定的。软件的复杂性是软件的本质属性,在这个属性没有改变之前,软件便不会实现同传统产业一样的工厂化生产。至于印度的所谓“软件工厂”,实际上,只是完成了软件代码的编写工作,并不是实现了整个软件研发工作,而代码编写工作,恰恰是软件开发中最简单的一环。至于印度是否真的有很多高中生程序员,印度人的书上没有说,记者到说了不少,我也无从考证。所以,软件的开发,还是需要选用优秀的人的。除非,公司只想帮别人编写代码,而不希望有自己的产品和技术。
第四,软件开发中,最重要的还是团队合作和交流。这个是我目前最深切的感受。具体的,大家都知道,也用不着多说。
最后,对于软件开发来说,公司老板的想法是最重要的。如果老板说“no”,那便是水平再高,管理再好,也终归无用。年龄渐长,也做父亲了,却总是在漂泊,没有一个可以稳定发展的地方。希望目前的公司能够有这个机会。不想总是跳槽。
[软件工程师工作总结范本]
感谢您阅读工作总结频道的《软件工程专业毕业实习总结》一文,希望帮助您解决写工作总结的需求和参考,如果本文还未解决您的需求,可以继续访问软件工程试用转正工作总结栏目。
展开全文
相关推荐范文