第一篇:软件开发:软件工程师总结的20+条经验教训
www.xiexiebang.com 达内教育—中国IT培训领导品牌
软件开发:软件工程师总结的20+条经验教训
一些有关于软件开发的经验规则:
开发
1.从小事做起,然后再扩展
无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止。我从来没有妄想过能够一步登天。相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中。
我很喜欢John Gall的这句话:“复杂系统总是源于简单系统的演化。”
2.一次只改变一件事
当我们在软件开发时,碰到测试失败和功能无效的情况,如果你一次只研究一个问题,那将会更容易找到问题的关键。换言之,就是使用短迭代。必须确保这个问题解决之后,再转移到另一个问题上。这适用于向下提交。如果在你添加新功能之前需要先重构代码,那么先提交重构,然后再添加新的功能。
3.尽早地添加日志记录和错误处理
在开发新系统时,我做的第一件事就是添加日志和错误处理,因为这两者从一开始就非常有用。如果系统不能照常工作,那么你就需要知道程序中发生了什么——这是日志的作用。错误处理也是如此——错误和异常越早处理越好。
4.每一行新代码必须至少执行一次
在你真正完成一个功能之前,你必须对它进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。不过,不管怎么说,每一行新代码必须至少执行一次。
5.在整体测试之前先进行模块测试
先进行部分模块测试可以节省时间。通常说来,我们在整合不同的模块时也会出现问题,例如模块之间的接口不匹配。但是如果我们能够信任各个组件的话,那么跟踪集成问题就会变得简单得多。
6.所有事情所花费的时间总是比你预期的要长
特别是在编程中,即使一切进展顺利,我们也很难对功能所需的时间做出正确的预算。并且,开发软件时碰到各种意想不到的问题是非常常见的。
侯世达定律其实道出了真谛:做事所花费的时间总是比你预期的要长,即使你在预期中已经考虑了侯世达定律。
7.先了解现有的代码 www.xiexiebang.com 达内教育—中国IT培训领导品牌
大多数的编码都需要以某种方式改变现有的代码。即使是新功能,也需要适应现有的程序。所以,在你加进去新的内容前,首先需要了解当前的解决方案。否则,你一不小心就很有可能会打破现有的功能。这意味着,阅读代码和编写代码都是必要的技能。这也是为什么看似微小的变化仍可能需要很长时间才能解决的原因之一——你首先必须了解上下文。
8.阅读和运行
幸运的是,对于理解代码,我们有两种互补的方法。你可以阅读代码,也可以运行代码。运行代码的确是个非常棒的好方法。所以,请确保充分利用这两种方法。
故障排除
9.bug总是难免的
我不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么费尽心机,bug总是难免的。最好能够做成可以快速故障排除、修复bug和部署修复的系统。
10.解决故障报告
每个开发人员都应该花时间去处理来自客户的故障报告,并修复bug。这能让你更好地理解客户的意图,明白如何使用系统,知道排除故障的难易程度,了解系统的设计情况。这也是为自己的开发成果负责的好方法。
11.重现问题 www.xiexiebang.com 达内教育—中国IT培训领导品牌
修复bug的第一步就是重现问题。然后你得确保修复之后,问题能够彻彻底底地消失。这样一个简单的规则可以确保你不会误将非问题当作是问题,并确保解决方案真的能够奏效。
12.修复已知错误,然后再看看有没有遗漏的地方
有时候,可能同时存在着几个不同的问题。它们之间的互相作用,可能会让你毫无头绪,束手无策。不要纠结于搞清楚发生了什么,先去解决所有已知的问题,然后再看看还有什么不对的地方。
13.没有巧合
在测试和故障排除时,不要相信会出现什么巧合。就像你改变了定时器的值,那么就会改变系统重启的频率。所以一切都并非是巧合。添加新功能,另一个不相干的功能变慢了?这绝对不是巧合。相反,是你应该仔细调查的内容。
14.关联时间戳
在故障排除时,事件的时间戳可以作为你的好帮手。寻找偶数增量。例如,如果系统重启了,并且刚刚发出过一个3000毫秒左右的请求,那么可能是触发了某个定时器,才导致出现重启的动作。
团队合作
15.面对面的交流最有效
当我们需要讨论如何解决问题时,那么面对面的交流比视频、打电话和电子邮件都要好。
16.橡皮鸭法
遇到你绞尽脑汁也解决不了的问题时,不妨找一个同事,然后将问题解释给他们听。很多时候,当你在叙述时,即使你的同事一言不发,你可能也会突然灵光乍现找到问题的关键。
17.问问题
阅读和运行代码往往非常有助于指出代码的目的和它的工作原理。但是如果你有机会咨询那些更为了解的人(例如原来的程序员),那么千万不要错过。
18.共享荣誉
不要贪图荣誉,该是谁的就是谁的。例如:“Marcus想出了这个主意„„”(如果真是他想的话),而不要说“我们想出的„„”。
其他
19.尝试
如果你不知道某种编程语言功能的工作原理,那么不妨写一个小程序来理解它是如何工作的。这同样适用于测试你正在开发的系统。如果我将参数设置为-1,会发生什么?当我在重启系统时,如果服务当掉,会发生什么?以此来研究它的工作原理。www.xiexiebang.com 达内教育—中国IT培训领导品牌
20.带着问题睡觉
如果你正在解决一个很难的问题,那么不妨带着问题睡觉。有科学研究表明,这样做虽然你表明上并没有在主动思考,但你的潜意思却这么做了。其结果就是,第二天再去研究问题,解决方案已经呼之欲出了。
21.跳槽
不要害怕跳槽。和不同的人共事,开发不同的产品,感受不同的公司文化是非常有意思的。
22.不断学习
我们需要不断地学习和了解软件开发。你可以尝试不同的编程语言和工具,阅读软件开发的书籍,接受MOOC课程。相信我,量变才能达到质的飞跃,这些小小的学习积累,终有一天会大大地提高你的知识和能力。
希望这些经验能对大家有用。如有不当之处,敬请指正。
第二篇:10+年程序员总结的20+条经验教训
10+年程序员总结的20+条经验教训
以下是我作为一名程序员经过10几年时间总结出的一些有关于软件开发的经验规则:
开发
1.从小事做起,然后再扩展
无论是创建一个新的系统,还是添加功能到现有的系统中,我总是从一个简单到几乎没有任何所需功能的版本启动,然后再一步一步地解决问题,直到满意为止。我从来没有妄想过能够一步登天。相反,我一边开发一边学习,同时新掌握的信息还可以用于解决方案中。
我很喜欢John Gall的这句话:“复杂系统总是源于简单系统的演化。”
2.一次只改变一件事
当我们在开发时,碰到测试失败和功能无效的情况,如果你一次只研究一个问题,那将会更容易找到问题的关键。换言之,就是使用短迭代。必须确保这个问 题解决之后,再转移到另一个问题上。这适用于向下提交。如果在你添加新功能之前需要先重构代码,那么先提交重构,然后再添加新的功能。
3.尽早地添加日志记录和错误处理
在开发新系统时,我做的第一件事就是添加日志和错误处理,因为这两者从一开始就非常有用。如果系统不能照常工作,那么你就需要知道程序中发生了什么——这是日志的作用。错误处理也是如此——错误和异常越早处理越好。
4.每一行新代码必须至少执行一次
在你真正完成一个功能之前,你必须对它进行测试。不然,你怎么知道它是不是按照你的想法在执行呢?通常情况下,最好的方法是通过自动测试,但并非总是如此。不过,不管怎么说,每一行新代码必须至少执行一次。
5.在整体测试之前先进行模块测试
先进行部分模块测试可以节省时间。通常说来,我们在整合不同的模块时也会出现问题,例如模块之间的接口不匹配。但是如果我们能够信任各个组件的话,那么跟踪集成问题就会变得简单得多。
6.所有事情所花费的时间总是比你预期的要长
特别是在编程中,即使一切进展顺利,我们也很难对功能所需的时间做出正确的预算。并且,开发软件时碰到各种意想不到的问题是非常常见的。
侯世达定律其实道出了真谛:做事所花费的时间总是比你预期的要长,即使你在预期中已经考虑了侯世达定律。
7.先了解现有的代码
大多数的编码都需要以某种方式改变现有的代码。即使是新功能,也需要适应现有的程序。所以,在你加进去新的内容前,首先需要了解当前的解决方案。否 则,你一不小心就很有可能会打破现有的功能。这意味着,阅读代码和编写代码都是必要的技能。这也是为什么看似微小的变化仍可能需要很长时间才能解决的原因 之一——你首先必须了解上下文。
8.阅读和运行
幸运的是,对于理解代码,我们有两种互补的方法。你可以阅读代码,也可以运行代码。运行代码的确是个非常棒的好方法。所以,请确保充分利用这两种方法。
故障排除
9.bug总是难免的
我不喜欢那些宣称软件开发可以“一蹴而就”的高谈阔论。不论你再怎么费尽心机,bug总是难免的。最好能够做成可以快速故障排除、修复bug和部署修复的系统。
10.解决故障报告
每个开发人员都应该花时间去处理来自客户的故障报告,并修复bug。这能让你更好地理解客户的意图,明白如何使用系统,知道排除故障的难易程度,了解系统的设计情况。这也是为自己的开发成果负责的好方法。
11.重现问题
修复bug的第一步就是重现问题。然后你得确保修复之后,问题能够彻彻底底地消失。这样一个简单的规则可以确保你不会误将非问题当作是问题,并确保解决方案真的能够奏效。
12.修复已知错误,然后再看看有没有遗漏的地方
有时候,可能同时存在着几个不同的问题。它们之间的互相作用,可能会让你毫无头绪,束手无策。不要纠结于搞清楚发生了什么,先去解决所有已知的问题,然后再看看还有什么不对的地方。
13.没有巧合
在测试和故障排除时,不要相信会出现什么巧合。就像你改变了定时器的值,那么就会改变系统重启的频率。所以一切都并非是巧合。添加新功能,另一个不相干的功能变慢了?这绝对不是巧合。相反,是你应该仔细调查的内容。
14.关联时间戳
在故障排除时,事件的时间戳可以作为你的好帮手。寻找偶数增量。例如,如果系统重启了,并且刚刚发出过一个3000毫秒左右的请求,那么可能是触发了某个定时器,才导致出现重启的动作。
团队合作
15.面对面的交流最有效
当我们需要讨论如何解决问题时,那么面对面的交流比视频、打电话和电子邮件都要好。
16.橡皮鸭法
遇到你绞尽脑汁也解决不了的问题时,不妨找一个同事,然后将问题解释给他们听。很多时候,当你在叙述时,即使你的同事一言不发,你可能也会突然灵光乍现找到问题的关键。
17.问问题
阅读和运行代码往往非常有助于指出代码的目的和它的工作原理。但是如果你有机会咨询那些更为了解的人(例如原来的程序员),那么千万不要错过。
18.共享荣誉
不要贪图荣誉,该是谁的就是谁的。例如:“Marcus想出了这个主意„„”(如果真是他想的话),而不要说“我们想出的„„”。
其他
19.尝试
如果你不知道某种编程语言功能的工作原理,那么不妨写一个小程序来理解它是如何工作的。这同样适用于测试你正在开发的系统。如果我将参数设置为-1,会发生什么?当我在重启系统时,如果服务当掉,会发生什么?以此来研究它的工作原理。
20.带着问题睡觉
如果你正在解决一个很难的问题,那么不妨带着问题睡觉。有科学研究表明,这样做虽然你表明上并没有在主动思考,但你的潜意思却这么做了。其结果就是,第二天再去研究问题,解决方案已经呼之欲出了。
21.跳槽
不要害怕跳槽。和不同的人共事,开发不同的产品,感受不同的公司文化是非常有意思的。
22.不断学习
我们需要不断地学习和了解软件开发。你可以尝试不同的编程语言和工具,阅读软件开发的书籍,接受MOOC课程。相信我,量变才能达到质的飞跃,这些小小的学习积累,终有一天会大大地提高你的知识和能力。
希望这些经验能对大家有用。如有不当之处,敬请指正。
第三篇:关于软件开发工程师与软件测试工程师职位对比
关于软件开发工程师及软件测试工程师的职位对比
一、职位定义: 软件开发工程师:软件开发工程师是从事软件开发相关工作的人员的统称。它是一个广义的概念,包括软件设计人员、软件架构人员、软件工程管理人员、程序员等一系列岗位。这些岗位的分工不同,职位和/或级别不同,但工作内容都是与软件开发生产相关的。软件开发工程师是IT行业需求量最大的职位。软件开发工程师的技术要求是比较全面的,除了最基础的编程语言(C语言/C++/JAVA等)、数据库技术(SQL/ORACLE/DB2等)、.NET平台技术、C#、C/S B/S程序开发,还有诸多如JAVA SCRIPT、AJAX、HIBERNATE、SPRING、J2EE、WEB SERVICE、STRUTS等前沿技术。
软件测试工程师:指理解产品的功能要求,并对其进行测试,检查软件有没有错误,决定软件是否具有稳定性,写出相应的测试规范和测试用例的专门工作人员。简而言之,软件测试工程师在一家软件企业中担当的是“质量管理”角色,及时纠错及时更正,确保产品的正常运作。按其级别和职位的不同,分为三类(高级软件测试工程师、中级软件测试工程师、初级软件测试工程师)。
二、职位介绍(JD)
软件开发工程师:
招聘.net软件开发工程师
公司名称:北京智友信诚科技有限公司
职位要求:职位要求:任职条件:
1、计算机相关专业,大专以上学历。
2、精通.NET或者VB6.0其一即可。
3、必须具有SQL Server数据库开发经验者。
4、善于学习,沟通,理解力强,有团队精神。
5、为人诚信,思维严谨,工作主动,能承受一定的工作压力。
中软国际招聘JAVA软件开发工程师
职位要求
1.211院校2012年毕业的优秀本科生;
2.电子或者通信或者计算机或者软件工程专业,有相关项目经验者优先;
3.具有JAVA开发经验,精通WEB应用开发,如Struts、Hibernate、Spring等;
4.熟悉IBM J2EE体系(WAS、DB2、MQ);
5.英语六级,具有良好的英语读写能力,英语听说能力佳者优先考虑;
6.思维逻辑清晰,有钻研精神,对现有程序逻辑、代码具有快速学习的能力和独立研究问题的能力。
高级java软件开发工程师
公司名称:北京华信大成科技有限公司
职位描述:
1.负责主体模块代码的编写及相应模块的质量
2.参与产品的需求分析,以及原型实现等
3.负责相关研发信息的记录及整理
4.参与产品的实施与维护
5.配合项目经理或技术经理完成分派的任务
任职要求:
1.本科及以上学历,计算机或相关专业,不少于2年的J2EE开发经验
2.丰富的系统设计分析能力;有很好的面向对象分析和设计能力,熟悉常用设计模式
3.具有中大型软件系统的研发经验优先,熟练或精通PHP者优先
4.同时具备WEB开发的client与server端技术。精通Java, javascript, JSP等,能深入了解开源软件
5.良好的抽象思维和逻辑思维能力,独立分析问题和解决问题的能力
6.良好的职业道德,工作认真、踏实,责任心强,能承担一定的工作压力,有团队协作及质量意识工资面议。
.Net软件开发工程师
公司名称:迪麦信(北京)数字科技有限公司
职位要求:岗位职责:
1.参与项目的编程、调试工作;
2.负责网站业务项目的软件开发,及时响应业务内容的技术需求;
3.定期进行项目维护和升级;
4.负责业务系统技术支持和管理工作;
5.负责开发文档编写工作。
岗位要求:
1.计算机相关专业大专以上学历;
2.熟悉软件开发流程,思路清晰,代码规范,具备良好的分析和解决问题的能力;
3.熟悉.net 分层开发和分布式计算体系结构,2 年以上.NET平台开发经验;
4.2年以上 b/s 模式编程经验;
5.熟练运用ASP.NET、C#、JavaScript、VB.NET等进行编程;
6.掌握 XML、WEBSERVICE、web2.0等技术,7.熟悉 SQLServer 数据库,有一定的存储过程编写经验;
8.良好的沟通能力、强烈的团队协作精神和责任心,富有激情,学习能力强
软件测试工程师:
苏州博云软件有限公司
岗位职责
1.功能测试,根据产品规范设计测试计划,设计测试数据和测试用例;
2.测试环境,实施软件测试,并对软件问题进行跟踪和反馈,推动bug的发现和合理解决;
3.对产品的集成测试,对产品的功能,性能的测试负责。
岗位要求
1.机及相关专业专科以上学历,有扎实的计算机基础知识;
2.一年以上软件测试工作经验;
3.熟练掌握数据库知识 SQL Server 2005,会写普通的SQL查询,了解视图存储过程;
4.具备良好的团队协作精神,工作认真负责,踏实肯干;
5.熟练使用BUG测试工具或用过企业管理软件者优先;
6.女生优先。海淀软件测试工程师招聘 职位描述
岗位职责
1、编写、制定软件测试计划;
2、测试环境的设计;创建和维护测试用例;提交测试报告;
3、能独立承担并完成项目测试工作;
4、参与测试计划、测试用例、测试报告评审;
5、改进软件测试流程、工具、和质量。
招聘要求
1、计算机、信息化及自动化专业,本科及以上学历;
2、2年以上的软件系统测试工作经验;
3、掌握测试理论及技术;熟练运用各种黑盒测试用例设计方法;
4、熟悉主流测试工具,比如LoadRunner,Rational等,有实际操作经验者优先考虑;
5、熟悉SQLServer,MYSQL数据库,熟悉数据库操作,可以使用基本的sql语句辅助测试;
6、具有较强的分析能力且能有效解决问题;良好的文档写作能力;
7、了解软件开发过程,熟悉软件生命周期各阶段的测试方法;
8、熟悉Linux/Windows操作系统的使用,可以搭建测试环境;
9、从事数字电视测试工作者优先考虑。
北京恒华伟业科技股份有限公司
职位描述:
岗位职责:
1、针对平台底层及各业务系统制定测试方案,编写测试用例;
2、部署测试环境,执行测试,准备跟踪、定位问题;
3、沟通并协调推进问题的解决;
4、根据测试结果编写测试报告;
5、提出对平台的改进建议。
任职资格:
1、计算机或相关专业本科以上学历;
2、具有3年以上应用程序测试经验;
3、精通功能性(白盒、黑盒、灰盒)、以及压力测试方法;
4、熟悉三种以上测试工具;
5、熟悉常用桌面软件及bug管理软件的使用;
6、熟悉Linux/Windows多种操作系统;
7、具有敏锐的项目风险意识、较好的逻辑能力;
8、拥有电力软件产品测试经验者优先考虑.三、总结对比
同过以上职位介绍,可以大概看出两种职位的一般要求和岗位职责——
软件开发工程师:
职位要求:1、2、3、计算机或相关专业大专以上学历(很多企业要求为本科以上学历); 相关工作经验者优先(各公司根据不同职位要求也可能要求1——3年相关开发经验; 技术方面根据招聘职位不同会要求JAVA,.Net,C#,VB等编程语言,有的职位强调熟悉各种设计模式,还有的要求BS
架构知识或经验,也有的职位需要J2EE相关经验。4、5、6、许多职位要求数据库知识(如要求熟练运用SQLserver或DB2)个人职业素养(如良好的职业道德,工作认真、踏实,责任心强,能承担一定的工作压力,有团队协作及质量意识等。有些公司也会要求语言(如英语四六级).而岗位职责方面:
1.参与项目的编程、调试工作;
2.参与产品的需求分析,以及原型实现等;
3.负责相关研发信息的记录及整理;
4.参与产品的实施与维护(定期进行项目维护和升级);
5.负责开发文档编写工作;
6.配合项目经理或技术经理完成分派的任务。
相对的:
软件测试工程师:1、2、3、4、5、6、7、8、9、计算机相关专业专科(本科)以上学历; 根据职位不同的相关工作经验; 掌握测试理论及技术;熟练运用各种黑盒(白盒、黑盒、灰盒)测试用例设计方法; 熟悉主流测试工具,比如LoadRunner,Rational等; 数据库相关知识;(许多职位要求中都指出需要数据库操作知识)了解软件开发过程,熟悉软件生命周期各阶段的测试方法; 熟悉Linux/Windows操作系统的使用,可以搭建测试环境;分析问题的能力及文档写作能力 具有敏锐的项目风险意识、较好的逻辑能力。
岗位职责:
1.编写、制定软件测试计划
2.针对平台底层及各业务系统制定测试方案,编写测试用例;
3.部署测试环境,执行测试,准备跟踪、定位问题;
4.沟通并协调推进问题的解决;
5.根据测试结果编写测试报告;
6.提出对平台的改进意见。
通过对两个职位的职位要求及岗位职责可以看出,软件测试工程师并不需要精通软件编程和构架方面的知识,而相对的要求了测试计划的制定,测试环境的部署,测试理论、技术及测试工具。而相对于软件开发工程师,软件测试工程师由于要搭建测试平台,必须熟悉各个操作系统(Windows/Linux),同时相比软件开发工程师,软件测试工程师更多的要求了数据库的知识;软件测试工程师同样需要文档撰写能力,但撰写的是测试报告。而软件开发工程师与软件测试工程师最大的区别就是软件开发是带着创造的目的,而软件测试是在测试软件的各项功能及性能,因此实际上是带着一种“破坏”的感觉在进行软件的测试,比起软件开发需要更丰富的思维方式,这样才能保证把一款软件的BUG测试出来。
第四篇:软件开发部软件开发工程师毕业实习报告
软件开发部软件开发工程师毕业实习报告
一.公司简介
国内物联网领军企业——xx科技集团(深市A股上市公司:x)下属子公司,作为信息产业实用型人才培养解决方案提供商,致力于面向高校、职业院校进行产、学、研校企深度合作,是xx科技集团产业报国、回馈教育的直接执行者。二.实习岗位说明
1.负责Android手机软件的开发及设计; 2.根据产品的需求进行Android产品的分析;
3.对Android平台开发技术进行研究,发现其缺陷并改正更新; 4.根据用户需求研发新的Android产品,并测试其性能,进行改进; 5.根据项目需求进行学习并快速掌握技巧;
6.平常要与相关工作人员进行沟通,使团队快速成长起来。三.实习项目要求 1.天气预报app 1)获取网络上的天气数据,进行解析之后,存储于本地,以供断网时使用;
2)用数据库保存搜索记录,以九宫格的形式展现; 3)用fragment代替activity,方便移植到实验平台上; 4)熟悉点阵LED屏的协议,将结果显示于LED屏上; 5)对代码的封装,规范化。2.NewLab二期优化 1)帮助界面的实现,使得学生掌握实验平台的使用方法; 2)实验类别的在线远程更新,用户下载量的统计; 3)UI(用户界面)的调整; 四.任务完成情况
经过两个多月的不断学习和努力,实习项目大部分都顺利的完成了; 首先是天气预报的项目,从百度api获取所查询的城市的天气数据,对其进行解析,在展示到界面上的同时保存最近搜索的天气数据到sharepreference中,以供断网时使用;搜索记录的保存以及点击跳转,都方便了用户了使用。此外,在相应设备上外接LED屏可显示当前天气信息;
其次,是NewLab项目的优化,利用同事提供的接口,解析数据,保存到数据库中,、数据进行异步加载,下载对应的图片资源,更新用户界面,实现实验类的更新;制作本地html文件,用于webview的加载;
此外,在实习期间,我也完成了国创项目的安卓客户端最初版本的设计与实现,并着手制作一款轻量型的手机安全卫士。五.自我鉴定,成果描述
在工作中遇到不懂的地方,能够虚心向富有经验的前辈请教,善于思考,能够举一反三。对于别人提出的工作建议,可以虚心听取。在时间紧迫的情况下,加时加班完成任务。能够将在学校所学的知识灵活应用到具体的工作中去,保质保量完成工作任务。同时,我严格遵守我公司的各项规章制度,实习期间,未曾出现过无故缺勤,迟到早退现象。我脚踏实地的工作,努力做到最好,工作始终以“热心、细心”为准则。遇到不懂的问题,积极问同事,在同事的热心帮助下,问题很快就解决了,这简短的实习生活,虽然紧张,收获也很多。但给我的仅仅是初步的经验累积,对于往后迈出社会还是不够的。
我相信通过自身的不断努力,拿出百尺竿头的干劲,胸怀会当凌绝顶的壮志,不断提高自身的综合素质,在与社会的接触过程中,减少磨合期的碰撞,加快融入社会的步伐,才能在人才高地上站稳脚跟,才能扬起理想的风帆,驶向成功的彼岸。实习过程 第一周:2015.7.132015.7.24 任务要求:1.完成天气预报数据获取,解析
2.完成界面设计,展示 任务进度:100% 出勤情况:全勤
第二周:2015.7.202015.8.14 任务要求:1.对LED点阵显示屏的熟悉,进行编程
2.将activity换成fragment来实现
3.解决出现的各种bug 任务进度:点阵屏和fragment的转化顺利完成,唯一存在的一个bug是横竖屏切换时导致程序崩溃,展示没有解决; 出勤情况:全勤
第六周:2015.8.172015.9.4 任务要求:1.Html文档的编写,帮助界面的实现
2.和同事进行接口的对接 任务进度:接口对接 出勤情况:星期五上课请假 第九至十周:2015.9.7-2015.9.18 任务要求:1.实现实验类的更新和下载量的统计
2.实现实验包可以选择性下载
任务进度:实验类的更新实现了,下载量的统计只是在url中附加了个UserID,因为要离职,交接了工作,选择性下载的功能没有实现 出勤情况:星期五上课请假
实习中存在的问题
1、基础知识方面,java是自学的,基础不够扎实,在应用时不能得心应手,对于一些深入的编程如接口回掉方面了解很少,应加强知识的巩固与继续学习;
2、实际操作方面的,通过虚心向老员工请教,自己努力实践,得到解决;
3、专业性的问题,积极与指导教师联系,促进问题的有效解决;
4、态度方面的,努力端正,虚心请教,得到提高;
5、注重意见反馈,耐心寻找差距,保障达到实习的预期目标。实习总结 经过两个月多的努力,我终于圆满的完成了我的实习工作。在实习期间,我更加坚定了在android这条路上走下去的意志,并在项目实战中,学习到了很多新的知识,我把所学知识应用于实践,不仅巩固了已学知识,还提高了动手能力。工作往往不是一个人的事情,是一个团队在完成一个项目,在工作的过程中,如何去保持和团队中其他同事的交流和沟通也是相当重要的。一位资深人力资源专家曾对团队精神的能力要求有这样的观点:要有与别人沟通、交流的能力以及与人合作的能力。合理的分工可以使大家在工作中各尽所长,团结合作,配合默契,共赴成功。个人要想成功及获得好的业绩,我牢记一个规则:我永远不能将个人利益凌驾于团队利益之上,在团队工作中,会出现在自己的协助下同时也从中受益的情况,反过来看,自己本身受益其中,这是保证自己成功的最重要的因素之一。
我在实习期间,工作刻苦认真,服从领导,严格遵守实习单位和学校的规章制度,获得了实习单位的肯定和实习老师的一致好评。
第五篇:软件工程师总结
哲学就是用简单的说话来体现出隐含深层意义的道理,让人们去思考和体会。哲学本身就是用来完善自己的精神修养和帮助他人完善思想的。
哲学的特征在于追问本质,不断反思。内容上,哲学的反思对象无所不包;深度上,哲学的反思是无穷无尽的。现实中,我们可以借用哲学的思维方式,但是不能照搬哲学的思维方式。也即是说我们能够直接关注的现实是具体而有限的,思维的不可封闭性使得我们在解决具体问题时不能进行无穷追问。
把哲学低估于现代科学是不负责任的,哲学隐藏在现实生活中的每一部分,它为我们提供了一种生活的方式,如果将哲学简单的与现代科学相提并论,则成为了一种狭隘的唯科学主义。
==================================
“又是一年毕业时”,看到一批批学子离开人生的象牙塔,走上各自的工作岗位;想想自己也曾经意气风发、踌躇满志,不觉感叹万千……本文是自己工作6年的经历沉淀或者经验提炼,希望对所有的软件工程师们有所帮助,早日实现自己的人生目标。本文主要是关于软件开发人员如何提高自己的软件专业技术方面的具体建议,前面几点旨在确定大的方向,算是废话吧。
谨以此文献给那个自己为你奉献3年青春与激情的开发团队。还有团队成员:PPL、YT、YK、TYF、LGL、CHL、CDY、CB、DPD。
1、分享第一条经验:“学历代表过去、能力代表现在、学习力代表未来。”其实这是一个来自国外教育领域的一个研究结果。相信工作过几年、十几年的朋友对这个道理有些体会吧。但我相信这一点也很重要:“重要的道理明白太晚将抱憾终生!”所以放在每一条,让刚刚毕业的朋友们早点看到哈!
2、一定要确定自己的发展方向,并为此目的制定可行的计划。不要说什么,“我刚毕业,还不知道将来可能做什么?”,“跟着感觉走,先做做看”。因为,这样的观点会通过你的潜意识去暗示你的行为无所事事、碌碌无为。一直做技术,将来成为专家级人物?向管理方向走,成为职业经理人?先熟悉行业和领域,将来自立门户?还是先在行业里面混混,过几年转行做点别的?这很重要,它将决定你近几年、十年内“做什么事情才是在做正确的事情!”。
3、软件开发团队中,技术不是万能的,但没有技术是万万不能的!在技术型团队中,技术与人品同等重要,当然长相也比较重要哈,尤其在MM比较多的团队中。在软件项目团队中,技术水平是受人重视和尊重的重要砝码。无论你是做管理、系统分析、设计、编码,还是产品管理、测试、文档、实施、维护,多少你都要有技术基础。算我孤陋寡闻,我还真没有亲眼看到过一个外行带领一个软件开发团队成功地完成过软件开发项目,哪怕就一个,也没有看到。倒是曾经看到过一个“高学历的牛人”(非技术型)带一堆人做完过一个项目,项目交付的第二天,项目组成员扔下一句“再也受不了啦!”四分五裂、各奔东西。那个项目的“成功度”大家可想而知了。
4、详细制定自己软件开发专业知识学习计划,并注意及时修正和调整(软件开发技术变化实在太快)。请牢记:“如果一个软件开发人员在1、2年内都没有更新过自己的知识,那么,其实他已经不再属于这个行业了。”不要告诉自己没有时间。来自时间管理领域的著名的“三八原则”告诫我们:另外的那8小时如何使用将决定你的人生成败!本人自毕业以来,平均每天实际学习时间超过2小时。
5、书籍是人类进步的阶梯,对软件开发人员尤其如此。书籍是学习知识的最有效途径,不要过多地指望在工作中能遇到“世外高人”,并不厌其烦地教你。对于花钱买书,我个人经验是:千万别买国内那帮人出的书!我买的那些家伙出的书,!00%全部后悔了,无一本例外。更气愤的是,这些书在二手市场的地摊上都很难卖掉。“拥有书籍并不表示拥有知识;
拥有知识并不表示拥有技能;拥有技能并不表示拥有文化;拥有文化并不表示拥有智慧。”只有将书本变成的自己智慧,才算是真正拥有了它。
6、不要仅局限于对某项技术的表面使用上,哪怕你只是偶尔用一、二次。“对任何事物不究就里”是任何行业的工程师所不应该具备的素质。开发Windows应用程序,看看Windows程序的设计、加载、执行原理,分析一下PE文件格式,试试用SDK开发从头开发一个Windows应用程序;用VC++、Delphi、Java、.Net开发应用程序,花时间去研究一下MFC、VCL、J2EE、.Net它们框架设计或者源码;除了会用J2EE、JBoss、Spring、Hibernate等等优秀的开源产品或者框架,抽空看看大师们是如何抽象、分析、设计和实现那些类似问题的通用解决方案的。试着这样做做,你以后的工作将会少遇到一些让你不明就里、一头雾水的问题,因为,很多东西你“知其然且知其所以然”!
7、在一种语言上编程,但别为其束缚了思想。“代码大全”中说:“深入一门语言编程,不要浮于表面”。深入一门语言开发还远远不足,任何编程语言的存在都有其自身的理由,所以也没有哪门语言是“包治百病”的“灵丹妙药”。编程语言对开发人员解决具体问题的思路和方式的影响与束缚的例子俯拾皆是。我的经验是:用面对对象工具开发某些关键模块时,为什么不可以借鉴C、C51、汇编的模块化封装方式?用传统的桌面开发工具(目前主要有VC++、Delphi)进行系统体统结构设计时,为什么不可以参考来自Java社区的IoC、AOP设计思想,甚至借鉴像Spring、Hibernate、JBoss等等优秀的开源框架?在进行类似于实时通信、数据采集等功能的设计、实现时,为什么不可以引用来自实时系统、嵌入式系统的优秀的体系框架与模式?为什么一切都必须以个人、团队在当然开发语言上的传统或者经验来解决问题???“他山之石、可以攻玉”。
8、养成总结与反思的习惯,并有意识地提炼日常工作成果,形成自己的个人源码库、解决某类问题的通用系统体系结构、甚至进化为框架。众所周知,对软件开发人员而言,有、无经验的一个显著区别是:无经验者完成任何任务时都从头开始,而有经验者往往通过重组自己的可复用模块、类库来解决问题(其实这个结论不应该被局限在软件开发领域、可以延伸到很多方面)。这并不是说,所有可复用的东西都必须自己实现,别人成熟的通过测试的成果也可以收集、整理、集成到自己的知识库中。但是,最好还是自己实现,这样没有知识产权、版权等问题,关键是自己实现后能真正掌握这个知识点,拥有这个技能。
9、理论与实践并重,内外双修。工程师的内涵是:以工程师的眼光观察、分析事物和世界。一个合格的软件工程师,是真正理解了软件产品的本质及软件产品研发的思想精髓的人(个人观点、欢迎探讨)。掌握软件开发语言、应用语言工具解决工作中的具体问题、完成目标任务是软件工程师的主要工作,但从软件工程师这个角度来看,这只是外在的东西,并非重要的、本质的工作。学习、掌握软件产品开发理论知识、软件开发方法论,并在实践中理解、应用软件产品的分析、设计、实现思想来解决具体的软件产品研发问题,才是真正的软件工程师的工作。站在成熟理论与可靠方法论的高度思考、分析、解决问题,并在具体实践中验证和修正这些思想与方式,最终形成自己的理论体系和实用方法论。
10、心态有多开放,视野就有多开阔。不要抱着自己的技术和成果,等到它们都已经过时变成垃圾了,才拿出来丢人现眼。请及时发布自己的研究成果:开发的产品、有创意的设计或代码,公布出来让大家交流或者使用,你的成果才有进化和升华的机会。想想自己2000年间开发的那些Windows系统工具,5、6年之后的今天,还是那个样子,今天流行的好多Windows系统工具都比自己的晚,但进化得很好,且有那么多用户在使用。并且,不要保守自己的技术和思想,尽可能地与人交流与分享,或者传授给开发团队的成员。“与人交换苹果之后,每个人还是只有一个苹果;但交换思想之后,每个人都拥有两种思想”,道理大家都懂,但有多少人真正能做到呢?
11、尽量参加开源项目的开发、或者与朋友共同研制一些自己的产品,千万不要因为没
有钱赚而不做。网络早已不再只是“虚拟世界”,网上有很多的开源项目、合作开发项目、外包项目,这都是涉猎工作以外的知识的绝好机会,并且能够结识更广的人缘。不要因为工作是做ERP,就不去学习和了解嵌入式、实时、通信、网络等方面的技术,反过来也是一样。如果当他别人拿着合同找你合作,你却这也不会,那也不熟时,你将后悔莫及。
12、书到用时方恨少,不要将自己的知识面仅仅局限于技术方面。诺贝尔经济学奖得主西蒙教授的研究结果表明: “对于一个有一定基础的人来说,他只要真正肯下功夫,在6个月内就可以掌握任何一门学问。”教育心理学界为感谢西蒙教授的研究成果,故命名为西蒙学习法。可见,掌握一门陌生的学问远远没有想想的那么高难、深奥。多方吸取、广泛涉猎。极力夯实自己的影响圈、尽量扩大自己的关注圈。财务、经济、税务、管理等等知识,有空花时间看看,韬光养晦、未雨绸缪。
13、本文的总结与反思:
A:不要去做技术上的高手,除非你的目标如此。虽然本文是关于提高软件开发知识的建议,做技术的高手是我一向都不赞同的。你可以提高自己的专业知识,但能胜任工作即止。B:提高软件知识和技术只是问题的表面,本质是要提高自己认识问题、分析问题、解决问题的思想高度。软件专业知识的很多方法和原理,可以很容易地延伸、应用到生活的其它方面。
C:在能胜任工作的基础上,立即去涉猎其它领域的专业知识,丰富自己的知识体系、提高自己的综合素质,尤其是那些目标不在技术方面的朋友。