程序员培训总结范文

时间:2023-02-25 18:40:12

程序员培训总结

程序员培训总结范文第1篇

关键词:职业素质;综合能力;理论基础;工作习惯

中图分类号:TP311.5 文献标识码:B

文章编号:1672-5913(2007)10-0056-03

我院实行院企联姻,把IT企业中培训过程引入到学校教育过程中,目的是扩大就业门路,缩短学生的社会适应期,降低学生的学习成本,提高学生的就业质量。按照当前行业所使用的最新技术进行项目训练,使其达到或接近就业的专业素质要求,达到积累工作实践经验的目的。在培训过程中,除了对学生进行专业的培养外,本人认为还应该在职业素质、综合能力、理论基础、工作习惯等方面进一步培养。

1职业素质

未走出象牙塔的学生心比天高,一向“饭来张口,衣来伸手”的生活方式培养出来的嫩芽撑不住劳动强度的摧残,对于有些工作不是不能,而是不为,出现了退缩念头;有些学生就业期望值太高,受经济利益的驱使,想一口吞个胖子,淡化了过程培训的含义,情绪上出现烦躁,导致对前途迷茫,失去信心。

程序员的工作是枯燥的,整天面对计算机,用26个英文字母和其他符号编程。程序员的工作非常辛苦,是一项智力劳动,需要投入很多的精力,因而需要程序员能够热爱这个职业,有工作热情,有投入的精神。虽然有的人很聪明,但是对软件开发没有兴趣,或者工作很不专心,工作效率很低,别人半天能干完的,他需要两天甚至三天才能干完;情绪浮躁,抵挡不住计算机游戏、各种新闻等诱惑,不能处理好工作与娱乐的关系,自制力和自控力差;写出的代码漏洞百出,质量不高,这样的学生不适合做程序员。有时程序员的成就在很大程度上不是取决于智商,而是取决于情商。程序员应该雄心壮志,面对困难时比较坚毅,吃苦耐劳、讲纪律、讲服从、讲诚信。

2综合能力

综合能力方面主要是:良好的逻辑思维能力、沟通能力与再学习能力。

2.1逻辑思维能力

软件开发过程是解决复杂业务逻辑的过程,是简化复杂逻辑的过程,是用精确来实现模糊的过程,开发人员需要具有良好的逻辑思维能力才能胜任。现实空间是模糊的,数字空间是精确的,在现实世界中很简单的问题,在数字空间中模拟时,就变成了一个复杂的问题。它要求程序员能够全面、准确、简洁地把握、分析和解决问题。

下面要求学生画出问题的程序流程图来测验学生的逻辑思维能力:输入三个整数,作为三角形的三个边,判断是否构成:等边、等腰、直角、锐角、钝角三角形。

这个题目的逻辑很简单,需要处理的逻辑包括:

1) 输入的合法性判断:输入的是否是正整数。

2) 是否构成三角形:任意两边之和大于第三边。

3) 是否构成等腰或等边三角形。

4) 是否构成钝角、直角、锐角三角形。

上边的题目是一个很简单的程序,但是学生回答完全的却很少,常见的错误见下表。

类似的逻辑问题在实际的软件开发中是经常用到的,需要程序员能够对各种情况进行仔细的分析、归纳、总结。如果在这样的问题上出错,是很难成为出色的程序员的。

2.2沟通能力

现在的软件越来越庞大,需要多人来协同工作。作为程序员要善于沟通,习惯沟通,要有团队精神。学生与学生、学生与老师交流问题时,往往要花费大量的时间描述问题。有的学生自己心里明白,但就是说不清楚,或者干脆不说,默默地做项目,甚至闭门造车。这些情况都会降低整个团队的工作效率。

再者,全球IT外包市场主要是欧美和日本,其中85%的IT外包市场是以英语为沟通语言。作为未来软件企业生力军,程序员应具备良好的英语应用能力,这是最基本的要求,如果对英语的熟练程度不高,对待引进的高技术以及与客户的沟通将会出现语言上的障碍。

2.3再学习能力

信息技术的更新速度是惊人的,程序员的职业生涯是一个要求不断学习的过程,永远不能满足现状,必须有很好的再学习能力。只有善于学习的人,才能够不断进步。真正优秀的程序员一定是掌握了很好的学习方法,否则现在是优秀程序员,两年后可能就被淘汰了。只有再学习,才能谈到创新,IT技术的日新月异使很多程序员眼花缭乱,什么都想学,却又不知从何学起,今天看看这个,明天学学那个,贪多不熟。虽然IT技术发展迅速,但很多技术都是有规律可循,一些基本的概念、原理和方法是通用的,可以举一反三。再学习的方法有很多,类比法、询问法、阅读示范程序、网上检索相关的资料等等。

3理论基础

大学计算机专业课大多是从二年级开起,有的学生由于目标不明确或数学基础不好,对专业课程学习不是非常扎实。由于信息技术发展快,有些课程内容陈旧。在培训阶段,对于知识的汇总归纳是非常有必要的。如果基于.net做多层结构的软件开发,以下的知识是必须的:操作系统原理、实体关系理论、SQL语句、面向对象的基本理论、数据结构、软件工程、VC++/JAVA、ASP/HTML、PSP/TSP/ISO、专业英语、程序设计风格、系统分析与设计等等。可以看出如果没有学过数据结构、程序设计方法、数据库概论以及软件工程的基本知识,要想成为一名合格的程序员显然是很困难的,而且一名熟练的程序员需要的知识远不止这些。掌握了基础的计算机科学理论,再拥有一定的学习能力,才能不断进步。

4工作习惯

良好的工作习惯是程序员个人开发过程成熟的体现,是效率的保证。程序员的培养很大程度上是习惯的培养。在实训过程中应注重培养如下几个方面的习惯:

4.1按照明确的编码过程工作

在进行一项编码工作时,需要按一个规范的过程来进行:

第一,定义做什么,包括功能范围、接口,任务;

第二,定义如何做,包括数据结构、算法;

第三,定义验收标准,如何检验正确与否;

第四,动手编程序、调程序;

最后,测试程序。

按照规范的过程来编码,才能真正提高工作效率。职业程序员的设计时间长于编码时间,业余程序员编码的时间长于设计时间。职业的程序员是设计程序,业余程序员是调试程序。职业程序员是预防BUG,业余程序员是修改BUG。为什么会出现这种情况呢?因为职业程序员是按照一个规范的编码过程来工作,编码的前期工作量超过了其实际的编码工作量。有的程序员经过简单考虑后就急于去写程序,往往是把简单的问题搞复杂了,复杂的问题搞乱了,效率很低。

4.2编码之前写文档

文档是软件实现思想的载体,是开发人员之间、开发人员与管理人员之间交流的工具,是设计人员与编码人员之间、设计人员与需求人员之间的一种约定,是组织的软件设计经验的积累,是组织软件财富的记录,是软件复用的基础。只有真正认识到了设计文档的重要性,才能积极主动地写文档。对程序员而言,在动手编程之前通过写文档可以把实现的方法想清楚、表达清楚、讨论清楚,这是已经通过无数的实践来证明了的好经验。初级的程序员往往在写程序的过程中发现越写越觉得复杂,程序越改越乱,等真正把工作做完了,再反思一下,却发现原来是很简单的事情。为什么会有这种感觉呢?问题就在于事先没有真正想清楚,弄明白,一旦进入问题的解决细节中,就很容易出错了,所以职业程序员应该具备写文档的好习惯。

4.3遵循设计进行编码

程序员不能随意自己决策,不按设计人员的设计去施工。同一个问题,可能有多种解决方案,在考虑解决方案时,程序员想的是局部,设计人员想的是全局,因而在进行决策时,设计人员是从全局的角度的考虑问题。在这种情况下,程序员要严格按照设计去实现,不能在如何实现上偏离设计,造成隐患。对于设计中有疑问的问题,可以讨论,但是不可以随意变更。

4.4按照良好程序设计风格编码

对于程序设计风格,原来要求效率第一,而现在要求清晰第一。

有人讲程序设计是一门个人艺术,包含了程序员个人的创造性,正是这样,才使得很多程序构思精巧,耐人寻味。但是同时它又使得程序的可读性较差,尤其是在多个人合作开发一个软件时,风格迥异的程序使得软件的可靠性与可维护性大大降低。程序设计语言一方面是人与计算机之间进行交流的工具,还是人与人之间进行交流的工具。单纯地作为人机交流的工具,只要程序能够正确、忠实地表达设计者的思想,也就发挥了其作用。但是人与人之间的交流没有一种固定的统一的模式,因此作为人与人之间的交流工具,还要表达得清晰易懂,能够为其他程序员所理解,这也正是要求程序员讲究程序设计风格的主要原因。

5总结

通过严格的专业素质训练和职业素质、综合能力、理论基础、工作习惯的培养,基本上可以使大学生走上社会前,从“学校人”转变为一个准“职业人”,使大学生在就业市场立于不败之地!

参考文献

[1] 王长春. 印度软件人才教育 成功就这么简单?[J]. 软件工程师,2005,(Z1).

[2] 刘克青,廖建新,张俊光. 软件项目策划中的工作量估算方法探讨[J]. 计算机工程与应用,2004,(27).

[3] 李洛,吴绍根. 基于印度NIIT培养模式的两年制高职软件人才培养思路[J]. 高教探索,2004,(2).

[4] 杜建立. 软件人才培养新挑战[J]. 中国远程教育,2004,(2).

收稿时间:2007-2-5

作者简介:李宗璞(1969-),女,山东郯城,临沂师范学院副教授

程序员培训总结范文第2篇

软件心理学的发展史

软件心理学发展大致可分为两个阶段[7],第一阶段是软件心理学的创立和初探阶段,第二阶段为软件心理学的丰富和发展阶段。两个阶段的主要区别是理论基础、研究对象和研究方法不同。20世纪70年代为软件心理学研究的第一阶段,研究学者主要由计算机科学家组成。1971年,Weinberg出版了《程序开发心理学》一书,开辟了软件心理学的新领域。该书从人类行为、社会行为和个人行为等3个角度审视程序开发。但是温伯格坦言,该书中的许多思想未找到“科学依据”,没有很好的理论基础。该阶段采用实验手段研究的代表是Shnei-derman,他采用内省、案例研究和实地研究等手段,对编程风格、项目组织、团队进程、程序员能力倾向和人格特质因素等方面进行了探索[4]。但是,Shneiderman的实验缺乏认知模型的支撑,面临设计问题简单、编程环境失真等问题。20世纪80年代至今为软件心理学发展的第二阶段,吸引了计算机科学家、心理学家和人素工程学家的参与。该阶段以认知模型的构建为特征,采用客观的行为分析作为严格试验方法的补充。从认知心理学引进理论框架,并将其研究成果引入到软件工程中,以促进软件工具的研发,改进编程活动。该阶段弥补了第一阶段的不足:研究对象扩展到专业程序员,而第一阶段的研究对象几乎都是学生;考虑了软件开发的集体性及协作性;所涉及的活动不只是编码,也研究需求规格说明及软件设计;考虑了语言和编程范式对编程活动的影响。纵观软件心理学的发展史,软件心理学的研究方法渐趋成熟、研究内容逐渐丰富、研究学者日益多元化。软件心理学的发展过程是软件工程与心理学融合程度逐步提高的过程。

软件心理学研究体系

从学术文献来看,软件心理学研究的热点主要集中在7个领域:程序设计的认知机制、程序理解理论、专家与新手的差别、程序员人格特质与绩效的关系、程序员情感与绩效的关系、程序员能力倾向测试和人机界面设计。笔者分析了各项研究内容之间的关系,如图1所示。软件心理学的研究从3个层面展开:第一层面为认知活动机理层,第二层面为根源因素层,第三层面为应用层。第一层面从软件生命周期的核心活动出发,研究其认知机制,主要包括软件设计活动的认知机制,以及编码、测试、维护中的程序理解机制。第二层面在第一层面的基础上,研究影响主体绩效的根源因素,一方面研究情感、人格特质对主体绩效的影响;另一方面从“主体的能力是由学习和训练得来的”这一观点出发,研究专家与新手在知识、策略和元认知方面存在怎样的差别。第三个层面是将前两个层面的研究成果应用到软件工程相关的活动中,如将根源因素层的研究成果与心理学测量方法相结合,研究程序员能力倾向测试,用于选拔适合从事软件开发的人员。将程序员的行为和认知机制的研究结果用于指导软件开发环境的人机界面设计。将专家与新手的差别的研究成果应用于软件工程人员的教育与培训。软件心理学在人机交互中主要应用于用户建模及可用性的设计与验证,关注用户描述,对用户的感知、认知和动作进行建模,并构建感知-认知-动作的集成建模。该方面的应用旨在了解和支持人与计算机的交互,使设计的软件或系统的可用性更高。该领域是软件心理学与计算机科学结合最成功的研究领域,存在的评述较多。本文接下来对前6个领域的研究现状及其对软件工程领域的启发展开论述。

主要研究进展

1程序设计的认知机制

研究进展程序设计认知机制主要包含3类元素:知识、策略和过程组织。程序设计知识分为句法知识、语义知识和图式知识[5]。前两类知识与程序语言紧密相关,而图式知识是程序设计的核心。图式(Schema)是主体内部的一种动态的、可变的认知结构单元,是由旧知识组成的无意识的心理结构。图式理论的核心思想是,将主体过去的经历形成模式,在解决问题的时候无意识地匹配和调用与目前情况相符的模式。图式的存在使得人类的认知具有自动加工的特点,同时也是认知失误的重要原因[6]。程序设计图式包括编程图式、结构图式和问题域图式[13]。编程图式是编程领域特有的图式,包括编程基础知识和算法知识等。结构图式是生成和理解文本的重要知识,如1个功能程序的结构图式由3个角色组成:输入、计算和输出。问题域图式是程序要解决的特定问题的领域知识。根据图式理论,程序设计的核心活动是相关图式的激活。程序设计过程就是程序员激活储存于记忆中的适合解决当前问题的若干图式,并对这些图式进行组合的过程。以图式为核心的程序设计模型以Adelson模型[7-9]和Détienne模型[10]为代表,将程序设计认知活动视为图式检索、图式匹配、解决方案评价、调试和通用化[7,8]的过程。程序设计的策略[11-13]包括:①自顶向下和自底向上。自顶向下是指将总体问题逐层分解为小问题解决的策略,自底向上是从细节到总体逐步构造的策略。②向前和向后。向前设计模式即程序解决方案按照执行方向设计,向后设计模式即程序解决方案按照与执行相反的方向设计。③广度优先和深度优先策略。广度优先策略是先解决完一个层面的所有问题,再解决低一个层面的问题,深度优先策略是将一个问题从上到下解决完成后再解决其它问题。④过程式和声明式策略。若编程方案是规程控制,则是过程式的。若编程方案用于声明静态属性,如对象、角色等,则是声明式的。⑤心理模拟,用于评价问题解决方案。程序员在不同情境下会使用不同的策略,策略的触景包括编程语言的认知维度[14]、编程环境特征、问题类型和程序员自身思维方式和已获得的图式,程序员趋于选择自己熟悉和使用频率高的策略[15]。程序设计的过程组织有两种方式。一种为结构化组织方式,认为程序设计是按照自顶向下、宽度优先的方式组织的。但是实验发现,实际的程序设计过程并不是严格按照这种结构化的过程进行的。程序员设计或编程过程中会出现机会性的偏离[16],即程序员(设计师)以实现目标为第一要务,不受规则的限制,自顶向下和自底向上、深度优先和宽度优先策略都会用到,取决于具体的情景。存在许多支持该模型的实验研究结果,如程序员有时会优先实现他认为最重要的功能。这种认知策略会被多个因素触发,如资源限制。当工作记忆超出容量时,结构化的工作模式就会失效,由宽度优先策略跳变为深度优先策略,产生机会主义偏离,即机会主义组织方式。

应用与启示从程序设计认知机制可以看出,良好的知识结构(设计模式)、恰当的策略和过程组织将促进设计工作的开展。基于此,可设计出更适合程序员使用的软件开发工具。在软件开发环境中提供可视化的结构图式和知识图式支持,对程序员具有重要的辅助作用。如在面向对象编程工具中提供一个通用化的对象图式,包括创建、初始化、读、写、输入和输出功能;在开发工具中提供控制流、数据流和功能分解图等。同时,领域知识库的构建对软件开发具有重要意义,也是软件开发工具面临的一个新挑战[17]。程序员机会偏离现象说明,编程环境不能过分强制程序员按照自顶向下的方式编程[18]。编程环境应提供相对灵活的导航工具,以便程序员在不同对象之间快速切换。在支持机会主义偏离的情况下,同时也要提供未完成任务的追踪功能,因为发生机会主义偏离后,被中断的任务搁置后容易被遗忘。

不足与展望程序设计的一个重要特点就是解决的问题是“不明确的问题”(ill-definedproblem)[13,18],存在需求描述不清晰、缺失等问题;并且,一个问题可能存在多个解决方案,无法通过单一的标准进行评价,甚至无法评价。因此,对所要解决的问题的表征(representation)非常重要,问题表征中生成的情景模型直接影响设计方案的生成,也与设计方案共同演化,是造成个体差异的重要活动之一[19]。而目前的研究都是假设所有程序员对问题的表征是一致的,缺乏对程序员问题表征的研究。分析程序员的问题表征,将其集成到程序设计认知模型中,是未来的研究趋势[13,19]。目前的认知模型将设计的核心活动简化为图式检索、匹配和评价的过程。而实际项目中,程序员可能面临知识不足的问题。因此学习成为程序设计中一项重要的认知活动。学习中理解和集成图式将占用大量的工作记忆资源(germaneload)[20],对程序设计的其它活动存在重要影响。而目前的认知模型均缺乏对学习活动的研究,这将是未来研究的一个重要内容。最后,人类认知的一个重要特性就是具有主动监控和调节的高级能力,即关于“认知的认知”———元认知能力。元认知能力与认知失效调节及问题解决能力密切相关[21],而目前的认知模型几乎都没有考虑这一全局性的认知活动。研究程序设计元认知能力对程序设计其它活动的影响机理及其评价和训练方法,对程序员的选拔和培训具有重要应用价值,将是未来一项重要的研究方向[22]。

2程序理解机制

程序理解可谓是程序开发心理学最古老的课题之一。它解决的核心问题是,程序员如何处理源代码和构建高效的软件系统[23]。研究程序员程序理解的行为和策略,以此指导软件可视化编程环境的开发[24]。

研究进展程序理解理论最初从文本理解理论借鉴而来。文本理解是通过信息加工构造表征的过程。该过程翻译文本中包含的显式信息,并调用经验知识得到推断信息,再将两类信息综合为一体。即信息加工过程的信息有两个来源:外源,编码在文本中的信息;内源,存储在记忆中的知识。Letovsky模型[25]使用知识库、心智模型(内部表征)和同化过程,从较高的抽象层次描述了这一过程。程序理解模型包括3类:功能方法,理解程序等价于利用知识图式;结构化方法,理解程序等价于构造关系网;心智模型方法,理解程序等价于构造详细的情景表征。功能方法的核心假设是,程序理解就是激活和实例化知识图式。程序理解的活动包括:激活储存在记忆中的图式,利用从程序代码中提取的索引,并从援引的图式出发推断程序所包含的某些信息。功能理解模型的主要代表是Soloway模型[26]。结构化方法认为,理解程序就是构造命题之间的关系网。程序可以用顺序、迭代和条件等控制结构的基本单位来描述。专家利用结构图式识别结构单元(顺序、迭代和条件),然后构造不同层次的表征。结构化方法的模型主要有Shneiderman&Mayer模型[27]。心智模型方法认为,程序理解就是构造情境表征。这就需要区分两类模型:程序模型和情景模型。程序模型与自然文本理解中的命题模型和文本库概念类似,反映程序在命题层次包含什么内容。而情景模型反映问题领域的实体及其关系,即问题目标及数据流。程序的理解首先需要构造程序模型,这依赖于结构化知识,特别是编程语言的语义和句法知识;在此基础上,构建情景模型,从而达到对程序的理解。心智模型主要有Pennington模型[28]。Mayrhauser集成元模型[29]将Soloway模型和Penning-ton组合起来,并且实验证明,程序员在3个理解过程中转换。该模型由4个部分组成:自顶向下、情境模型、程序模型和知识库。前3个部分反映理解过程,知识库是构建其它3个部分的必要因素,为程序理解过程提供相关信息并存储推断得出的新信息。

应用与启示对程序理解原理的研究,可指导程序理解辅助工具的设计[30]。如在程序浏览方面,对于自顶向下的理解过程,需要提供从顶层的抽象信息到底层的细节信息的浏览;对于自底向上的理解过程,需要提供控制流和数据流浏览;工具还需要同时提供宽度优先和深度优先的浏览,才能同时满足专家和新手的要求。除此之外,工具代码及注释检索功能将大大提高程序理解效率[31]。同时需要提供能够让程序员询问变量角色等的询问功能。最后,应考虑为程序理解提供一些其它认知支持手段,如为专家提供外部便签薄,为新手提供教学辅助,使其能够实时地获得语言和领域知识。集成领域知识将提高程序理解效率[32]。

不足与展望首先,在实际的软件项目中,维护人员很可能不是程序编写者,程序理解过程中通常伴随新知识的学习。因此,随着编程人员和技术的变化,终端用户相关的学习理论将成为一个研究趋势。第二,从理解模型可以看出,领域知识在程序理解过程中发挥重要作用。领域知识的集成是一大难点,也是未来的重要研究方向之一。第三,目前程序理解理论主要研究个体的认知机制,程序理解将向社会化组织化的方面扩展,同地合作和分布式合作方面将受到关注。第四,在工具方面,未来程序理解辅助工具将向快速改进、综合化、集成建议和搜索功能、接口高适应性、可视化、支持团队合作等方向发展[30]。

3专家与新手的差别

研究进展程序员的技能在很大程度上是一种习得性能力,因而研究专家与新手的差别对程序员的教育和培训有着重要意义。专家和新手的差别主要表现在4个方面:知识、策略、熟练程度和元认知[33]。专家与新手在领域知识和编程知识方面存在较大差别。Adelson&Soloway[7]和Burkhardt等人[34]发现,新手在领域知识方面的欠缺将导致其在构建情景模型方面存在困难,但是并不影响其构建程序模型。Schraagen[35]发现,即使都是有经验的程序员,领域知识欠缺的程序员的解决方案也会比领域知识丰富的程序员给出的方案差。因此,区分专家与新手的一个重要因素就是领域知识的掌握情况。在编程知识方面,Rist[36]发现新手更关注语言句法等表面细节信息,而专家更关注于语义信息或设计模式等深层次的信息。Soloway和Adelson等人发现[7],专家在解决模式化问题时的表现比新手好,而在解决非模式化问题时却不存在显著差别。Wiedenbeck[37]同样发现专家倾向于记住程序的语义等抽象表征信息,而新手倾向于记住程序的函数和语义等具体信息。Ye[38]指出,专家比新手拥有更大的图式组块(chunks),在他所研究的样本中,与新手相比,专家在C语言方面的概念块更抽象,组成元素更多。由于知识的组块,对新手是多个图式,对专家却可能只是一个图式,这使得专家的工作记忆能够调用和处理更多的信息。专家与新手除了在知识的数量与组织结构上存在差别之外,在知识的使用策略方面也存在显著差别。经验丰富的程序员倾向于使用自顶向下、宽度优先和向前的策略,而新手倾向于使用自底向上、深度优先和向后的策略[7,33,40,41];并且专家的编程策略可以在不同的问题上重用。Schraagen[35]指出,即使面临新的问题,良好的策略也能保障他们以较为结构化的方式解决问题。Ko[42]发现,即使在陌生的编程环境中,也不会影响专家程序员的问题理解策略。专家与新手在元认知方面存在重大差别。研究[33]发现,专家能够更好地意识到所犯的错误,并及时对生成的问题解决方案进行验证。专家元认知能力也表现在专家更善于利用外界记忆辅助设施(如笔记)作更多的注释[43]。

应用与启示专家和新手不只是存在知识占有多少的差别,在知识的组织、知识的使用策略、熟练程度和元认知方面也存在差别,这对软件工程人员的培训和学习以及专家系统的设计有重要指导意义。对程序员的培训不能只灌输编程语言规则等显性知识,还需要启发其分析知识之间的关系,以及不同解决方案使用的场景,进而形成高层次的图式;还需对知识使用策略和元认知进行训练;在培训的方式上,仅采用书本和授课方式是不够的,由于专家具有实用主义和自动化的特点[44],因此需要设计具体的任务对其进行实战训练。

不足与展望在弄清专家与新手的差别,特别是找到新手存在的缺点后,新手的学习和教育就成为重要的研究课题[45,46]。面向对象编程教育及可视化教育工具的开发成为近年来的一个研究热点[47]。

4程序员人格特质与绩效的关系

大量证据表明,软件开发中程序员的生产率和能力存在着巨大差别。具有相似背景的程序员在编程绩效方面存在巨大差别,学者们猜想,只有存在某种“固有的人格特质”才能解释这种差别。该领域的研究对程序员的选拔具有重要指导意义。

研究进展目前软件心理学领域主要采用迈尔斯-布里格斯类型指标(MBTI)和五因素模型[48]来研究人格特质类型与程序员绩效之间的联系。根据MTBI理论分析[49]:①在思考(thinking)/情感(feeling)维度方面(T/F),要检测和修改编程错误,克服语言错误,编程工作需要逻辑和分析能力,思考型比情感型更能胜任编程工作。②在感觉(sensing)/直觉(intuiting)方面(S/N),感觉型人更倾向于一步一步达到目标,对工作和细节更有耐性;而直觉型人工作更依赖于预感和直觉;但是直觉型人对复杂任务更感兴趣,感知型人更适合简单任务。③外向型(extrovert)/内向型(introvert)维度(E/I),内向型人更注意细节,在行动前喜欢彻底思考事情;外向型人思考问题倾向于表面化。在E/I维度的实证研究方面:David研究了MBTI与代码审查能力之间的关系,实验证明,E/I维度与代码理解能力之间存在强关联关系[50];Capretz[51]研究结果表明,软件工程人员大部分都是内向型性格;Chandler等人[52]发现,计算机专业的研究生主要都是内向、感知和判断型的;在程序员人格特质调查中,Turley发现软件行业样本中90%是内向型人[53]。在SN维度实证研究方面:Bishop[54,55]发现直觉型人在解决问题中表现得更好;Whitley[49]发现直觉型的学生确实更具编程潜能;Capretz[56]研究发现,他的专业程序员样本中直觉型人所占比例远远超过一般人群,他认为直觉型、思考型,特别是直觉-思考型在编程相关任务中能够工作得更好;Devito研究了MBTI与代码审查能力之间的关系[57],发现直觉型人比感知型表现好,直觉-思考型表现尤其好。在TF维度实证研究方面:Bishop[55]认为,完成软件开发中的一些任务(特别是问题解决相关领域的任务),需要在规定的限制条件下执行标准化过程,需要进行客观的逻辑的分析,思考型人更能胜任;Turley和Bieman[53]的研究表明,他们的样本中85%是思考型人;Capretz的专业程序员样本中81%是思考型;Chandler等人的计算机专业学生中86%是思考型;Myers研究表明,思考型人更适合于与逻辑思考有关的任务[58]。

应用与启示在现代软件人员选拔和项目管理中,人员的性格因素不容忽视。人员选拔需要根据角色的任务特点,选择适宜性格的人员,如直觉-思考型人普遍更适宜作编程工作;而需求分析更偏重交流能力,外向型性格比内向型性格更为适宜。实验表明,如果IT企业能够根据雇员的性格特点和潜能进行优化组织,生产效率和质量都可能得到提高[56,59]。

不足与展望正如Whitley所说[49],人格特质与绩效方面的研究是相关性研究,而不是本质上的实验研究,不能得出因果关系推论,不能说编程潜力、态度和行为的差别是由于人格类型导致的。需要对这种相关关系进行深入的机理研究,给出人格特质与绩效之间的相关关系的合理解释,这将是未来的一项重要的研究内容。在找到性格类型与能力偏好的关系的基础上,对于一个特定任务,如何选择和搭配团队成员以形成更加和谐、高效和多样化的团队也是未来一项重要的研究内容[48]。

5程序员情感与绩效的关系

情感(moods)是指“心境或主要情绪的意识状态”[60]。Merriam-Webster字典将情绪(emotion)定义为“意识的情感方面,一种感觉状态,是一种有意识的心智反应(如愤怒或恐惧),对特定对象的强烈感觉体验,一般伴随有身理的和行为的变化”。情感和情绪都是感情状态。情感持续的时间更长,引起的原因没有情绪明确。情感可以持续一两天或者更久,而情绪在几分钟或者几秒钟之内发生或者消逝。大多数心理学家认为情绪和情感在本质上是一样的。几乎所有的日常活动都受到情绪的影响,从驾驶飞机到编程,无一例外都能感受到正面或者负面情绪。情绪可能破坏日常任务,通常会对精力、睡眠和思维造成干扰,严重的可能导致疼痛。研究发现,情感会影响人类的多种活动,如创造性、记忆、推理、行为、认知加工、信息加工、学习、决策和工作绩效[60]。

研究进展虽然情感与绩效关系方面存在大量研究,但是很少有针对IT专业人士的情绪研究。近年心理学领域开展了情绪对行为的影响研究,情绪对IT专业人士的影响的研究却很少[60]。情绪心理学相关研究表明,情感影响推理。而推理是编程的必要元素,如果情感能影响推理能力,那也可能会影响程序员的绩效。Khan[61]设计了实验来测试情感对程序员调试任务的影响。其方法是让程序员在开始调试任务之前,先观看几组激发特定情绪的录像带,比对各组任务绩效。结果表明,情绪的觉醒水平对调试任务存在重大影响,而情绪的效价对任务的影响却不明显。即程序员检测和改正错误的能力依赖于情绪的觉醒水平。Good等人[62]意识到情感对程序员绩效的影响,在计算机实验室中引进了表达和监控学生情绪的设备。实验表明,此设备有助于学生的情绪表达、交流与修复,进而促进学业成绩,获得了良好的反馈。

应用与启示情感对编程绩效存在影响,该领域的研究对程序员的管理有着重要指导意义。如情绪的觉醒水平对调试任务存在重大影响,企业管理中就需要尽量避免员工情绪出现大幅波动,过于高兴或悲伤都对工作不利。需要避免员工带着负面情绪工作,思维受到影响可能引入严重的软件缺陷。情感波动对编程绩效存在较大影响,组织在选拔程序员过程中可参考此因素,优选那些情绪稳定型人格特质程序员负责关键性任务。可用大五人格测量中的神经质维度(neu-roticism)问卷衡量情绪稳定性。

不足与展望针对程序员情绪的研究目前还处于实验室研究阶段,这与实际工程项目中程序员的工作环境存在巨大差别;并且情绪具有实时性和积累效应,如何在不侵扰程序员编程工作的条件下,实时地检测程序员情绪进而帮助其调节情绪是未来的发展趋势。文献[63]提出通过程序员使用鼠标和键盘的信息来监测程序员的情绪。文献[64]提出通过增加人机界面的情感意识(emotionawareness)设计来促进用户的正面情绪。

6编程能力倾向测试

众所周知,有些人认为学编程很困难,而有些人却觉得很简单。要可靠地将这两类人识别出来却是一个大问题。编程能力倾向测试旨在解决这样的问题。

研究进展Wilson&Shrock[65]研究了12个预测因子后发现,有3个预测因子与编程能力有着重要的相关关系,依次是:舒适水平、数学和归因(把成功归因于运气的学生编程能力较差)。Beise等[66]考察了年龄、种族和性别与编程入门课程之间的关系,从统计学上表明,性别和年龄都不是有效的预测因子。Nathan等人发现学生的预期是一个重要影响因素,那些预期自己能得“A”的学生更容易成功[67,68]。Lister等[69]、Fincher等[70]、deRaadt等[71]、Simon等[72]、Tolhurst等[73]指出,在编程入门课程中表现差的学生缺乏问题解决能力。Stuart实验发现,系统商数(SQ)-移情商数(EQ)与编程存在强正相关[74]。Simon等人[75]、Sue&Gary[76]、Tolhurst等人[73]都发现,学生的空间观想能力与编程能力存在正相关,地图描绘实验中画俯瞰图的学生在课程中得分更高,画路线图的学生成绩比俯瞰图的差,画路标图的学生成绩最差。空间观想能力与代码导航能力有关,进而关系到程序心智模型的构建。

应用与启示编程能力倾向测试可以提供学业和就业方向咨询,选择那些适合学习编程的学生,提高编程课程的通过率,减少计算机学生的退学率[77];为企业选拔更适合编程的员工,并识别哪些员工需要进行计算机相关训练。

不足与展望可以看出,目前该领域的研究未能取得公认统一的结论。学者们对预测因子的选取具有较大随意性,各自提出的预测因子繁多且缺乏系统性。究其原因,研究者们未能对软件工程中各种角色所需的认知能力进行机理层面的分析。相关性分析不能说明因果关系。学生在某种任务中的绩效与编程绩效相关只能说明该项任务与编程任务在所需的认知活动上存在某种程度的交叠。因此,用这些因子预测学生将来的编程表现是不够合理的。作为编程能力潜力的预测因子,需要选取与编程认知活动密切相关且相对稳定的因素。本文前几节的分析和总结对编程能力倾向测试的未来研究方向具有重要启发:1)编程能力在很大程度上是习得性能力,知识与经验的差异是程序员个体差异的最主要原因。因此在个体经历和其它条件相同的情况下,学习能力的差异是影响程序员未来编程能力的一个重要因素。同时,学习能力是一项较为稳定的能力,可作为编程潜力预测因子之一。2)软件工程的核心认知活动是问题解决(problemsol-ving),而元认知对问题解决活动进行监控与调节。元认知能力的高低对问题解决绩效起着重要影响[78],并且元认知能力也是较为稳定的高级能力[21],可作为编程潜力预测因子之一。3)情绪、动机(motivation)等因素对认知活动存在较大影响。同样,在外界刺激条件下,人格特质是个体情绪动机差异的决定因素,且人格特质具有长期稳定的特点,可探索部分人格特质维度作为编程潜力的预测因子,如情绪稳定性。总之,编程能力倾向测试的未来研究应着眼于分析软件工程的任务活动特征,识别那些对编程活动有着因果关系且较为稳定的因素作为预测因子,才可能达到“潜力测试”的效果。

结束语

尽管自1987年召开首届程序开发心理学年会以来,软件心理学研究领域取得了上述的若干成果,但其总体上仍存在不足:1)目前软件心理学的研究对象主要是程序员,对软件工程中的其它角色如需求分析师、软件测试工程师、项目管理人员等研究较少。2)目前的研究主要考察个体的行为。而现代软件项目是大量人员合作完成的,个体之间的合作与交流日益重要。对编程中的合作与交流的研究是近年呈现的新热点[79]。3)软件心理学研究成果未能在软件工程中得到充分应用。如软件工程中缺乏对程序员使用的编程环境可用性的考虑,即使有少数系统考虑,也将其视为技术问题,而不是人-机系统问题。近年来软件工程学者开始意识到人的问题,开始采用编程活动模型来评价开发工具的可用性。但总体而言,软件心理学呈现与软件工程应用结合越来越紧密的趋势。将软件心理学与软件可靠性工程中各项技术相结合[80],对改进缺陷预防[22]、改善容错设计都具有重要应用价值。最后,笔者建议,进一步加强软件心理学和软件工程两大团体之间的交流,以软件工程需求为牵引,开展软件心理学基础研究,同时给出软件工程可实施的方法和技术,这将是推动软件心理学发展、实现其应用价值的根本思路。

程序员培训总结范文第3篇

关键词:对日软件外包;职业素质;CSDP

中图分类号:G642 文献标识码:A

目前,重庆市从政策上大力扶持软件产业,加大投入力度,而其中的一个重心就是放在软件外包产业上。基于这个前提,市场必然需要大量的软件外包人才,本学院已经完成两届对日软件外包人才培养工作,在此基础之上,时刻把握市场对于人才职业素质要求的变化,进入对日软件外包企业深入了解实际需求,制定有针对性的培养计划就具有重大意义。

1软件外包企业人才需求现状

软件外包企业面临的问题是极其缺乏合格的软件人才。学校和社会培训机构培养了大量的软件人才,但大部分不能满足企业的实际需求。

软件外包项目是开发满足用户需求、及时交付、不超过预算和无故障的软件的任务,它以质量保证为基础,包括过程、方法和工具等要素。若要成功顺利地完成软件外包项目,还必需具备软件外包团队,这支队伍要有合理的软件人才结构,即“金字塔”型:塔尖的5%是软件架构师,中、高层的35%是管理项目、技术和产品的高级软件工程师,底层的60%是软件编码人员。

然而,三个层次的人才供应都有问题。首先是在整个软件开发过程中起着重要作用的软件架构师,由于需求量较少,要求也最高,单靠国内自己力量很难培养可胜任大项目的架构师,重庆市在金融风暴来临之际,出台优厚政策,高薪从国外聘请具有跨国大型项目经验的人才。其次是金字塔底层的程序员,学校教育理论与实践的脱节使得毕业生缺乏实际动手能力,不能满足企业的需求。现在,社会涌现出一批实训教育机构,以弥补学校教育的缺失,可勉强解决人才结构的底层人才数量问题。但是这些实训教育机构缺少规范和标准,人才质量无法得到保障。

最关键的是金字塔中约占35%的中、高层工程师问题,是整个人才问题的难点,它体现着企业生产和实施项目的执行力,他们必须懂得正确地生产开发外包软件的管理方法和国际标准,不再是手工业作坊式的管理与操作。中国软件行业起步于20世纪90年代,欧美国家的软件产业已经有约50年的历史,多年的积累已经形成了对软件生产环节系统的管理和规范,有效地控制软件开发的流程。这些操作规程已被国际上软件企业普遍接受,执行多年,并且形成标准。遗憾地是国内绝大多数公司的工程师和项目经理,完全不知道这些标准的存在,有些虽然知道但也没有仔细研究、更不用说应用。不执行这些标准并不妨碍面向国内客户开发生产软件产品,但是当走向国际市场时,是不能够胜任任何外包项目的要求。

2对日软件外包人才应该具有的职业素质

对日软件外包人才应该具有很强的专业技能并接受系统的软件工程实施规范的熏陶。笔者从外包人才的两个层面进行说明。

2.1中、高层工程师层次

对于中、高层工程师层面的人才,需要使用软件工程国际人才标准来进行衡量,比如懂得国际软件工程标准CSDP(Certified Software Development Professional),该认证体系由IEEE-CS(国际电子与电器工程师学会-计算机学会)创建,是对全世界范围的软件工程师在知识领域、工作经验及职业道德等方面的资质的正式认证。虽然需要拿到相关认证书是极其困难的(到目前为止中国拿到CSDP认证的只有30多人),但是所有这个层面的工程师应该积极向这个标准看齐,CSDP国际认证的基本内涵是按照国际标准规范化地开发软件。试想,一个外包企业,如果有3~5人通过CSDP认证,何愁外包项目做不好。

2.2程序员层次

程序员层面人才(高校本科教育能够为工业界输送的软件人才层次)应该具有的职业素质是:具有较强的快速学习能力,扎实的高级数据结构和算法基础、娴熟的编码技能、良好的编码习惯、能够熟练地使用2~3种流行的开发工具,能够写出规范的项目文档,善于沟通、具有极强的团队协作精神、奉献精神和务实的作风等。

2.2.1快速学习能力

快速学习能力是软件外包程序员非常重要的一个素质。笔者与几位IT公司面试官在讨论学习能力和已有的知识储备对于应届毕业生来说哪个对于该毕业生发展更重要这个问题时,得到的一致结论是前者。原因很简单,软件外包行业是随时要保证跟上IT技术发展的步伐,而IT技术的发展变化快是当前其他任何行业都无法相比的。相关从业人员如果不能跟上技术发展变化步伐,就会失去主动。所以在繁忙的工作之余能够利用较少的时间快速学习新技术、新的架构思想就显得非常重要。

2.2.2数据结构算法基础

扎实的高级数据结构和算法基础是程序员必须掌握的基础技能,但往往也是很多包括已经在业内工作多年的程序员没有重视的一个问题。对于现在很多高级的集成开发环境以及应用框架、类库等已经将很多数据结构和算法细节隐藏以支持RAD,很多程序员已经不必再去了解这些细节就能够透明的去处理业务和UI。这种情况针对小项目没有太大问题,但对于跨国外包项目来说,在处理一些软件项目时要从全局性能的角度考虑问题,此时高水平的底层数据结构设计和高效率的算法思路就显得十分宝贵了。

2.2.3编码习惯

良好的编码习惯对于在外包团队内部工作的程序员来说是非常重要的。在规范的软件外包团队中,程序代码需要给其他程序员复审,在维护阶段还会有其他程序员进行代码维护工作。如果程序员没有良好的代码习惯,那么上述情形不管对于自己还是对于团队中的其他成员来说都是噩梦。

2.2.4重视文档的作用

在软件工程中,文档的重要性是显而易见的。然而,至今大量的国内软件项目都还是编码基本完成后再回头来补齐文档,这对于软件外包来说肯定是行不通的。软件的设计实施都需要按照文档的规范定义来严格执行。对日软件外包人才必须具备规范的项目文档编写能力。

2.2.5语言能力及精神品质

对日软件外包程序员必须要具有较强的日语口语交流技能,这样才能直接精确的理解客户的需求,完成良好的沟通。而团队协作精神是当前很多行业都要求职业人应该具备的基本素质,软件行业当然不会例外,当今的软件产品规模越来越大、架构越来越复杂,一个人是不可能完成大型软件项目的开发工作的。软件外包行业由于其特殊性,必然的面临着大量的加班压力,从业人员必须从容面对经常性的加班,这当然会从某种程度上影响从业人员的其他生活,但从全局出发,这样的牺牲是必须的、是值得的。要从思想上要求从业人员做好心理准备,能够吃苦、自愿奉献。

3如何培养具有高素质的对日软件外包人才

要使软件人才的素质达到国际标准,并能够顺利做好对日软件外包项目,首先要在中、高层工程师层面寻找出提升高级软件人才素质的切实可行的办法与途径。解决问题的方法是:直接引进软件工程国际标准与软件工程人才标准,普及与推广CSDP是迅速提升人员素质达到国际水平的一条“捷径”。这个群体一旦培养成型具有一定规模后,对于底层软件外包人员的发展壮大以及素质的全面提升都是至关重要的。

中、高层工程师层面的问题解决了,对于底层的对日软件外包程序员的从业素质培养有一定带头指导作用,但仍然需要一整套科学合理、符合各地域实际情况的培养模式。笔者结合本学院两届对日软件外包人才培养经验,以及重庆市实际情况提出一个概要的培养方案设计思路。

首先,高校应多与企业进行交流和合作,让高校能够根据企业需求适当进行教学改革,鼓励学生多参加社会实习实践,使大学生具有相应的就业能力。同时,软件外包企业应与IT职业教育和培训机构合作,将更多的应届大学生培养成IT应用型人才。因为目前学历教育更专注于学生的基本素质培养,其就业能力、工作技能的培养应由学校与职业教育机构共同完成。就本学院的经验看来,在以往传统的计算机教学模式下,学生基本上将精力投入到计算机基础理论学习中,走向社会找工作时,发现IT职场更需要的是具有一定理论基础的、较强的动手能力的实干型人才。经过两届的对日软件外包校企合作培训,已经有半数毕业生的实际动手能力能够为软件外包企业所认可。

其次,由企业与培训机构共同推动大学生IT实习实训基地建设,通过IT实训提高高校毕业生实际动手能力,并大力支持和发展大学生IT就业中介服务机构,为大学生提供专业的就业信息、职场素质、就业推介等服务。

再次,重庆位于我国的西南部地区,学习外语的大众推动力和外语培训的教学能力较之沿海发达地区有一定的差距。对日软件外包人才必须具备较好的日语交流能力,特别是对日软件外包技术专业术语的领会和表达能力是语言能力培训过程的重中之重。特别缺乏既熟悉日语教学,又具备一定软件开发经验的人员作为对日软件外包日语培训师。

目前,我国教育现状更多还是应试教育,这样培养出来的人才从一开始在团队协作方面就有一定的欠缺。在高校教育的过程中,应该有意识的去培养学生的团队协作精神,激发学生对团队的奉献热情。

4总结

本文分析了重庆市软件外包企业人才需求现状,归纳了对日软件外包人才应该具有的职业素质,概要的提出了对日软件外包人才培养方案设计思路。我们相信重庆市的软件外包产业必将走向美好的明天!

参考文献:

[1] 刘绍坚. 中国承接国际软件外包的现状、模式及发展对策研究[J]. 国际贸易,2007(6):27-32.

[2] 李岳云. 国际服务外包趋势与我国服务外包的发展[J]. 江苏对外经贸论坛,2007(3):25-30.

[3] 赵桂玉. 中国软件外包业发展的障碍及解决措施[J]. 现代企业,2006(6):65-66.

[4] 刘先雨. 大连软件外包产业集群发展探讨[J]. 现代商贸工业,2008(10):121-122.

Research on Cultivating Professional Quality of Software Outsourcing towards Japan

WU Yu, YANG Hao

(1. Institute of Computer Science, Chongqing Three Gorges University, Wanzhou 404000, China; 2. Institute of Computer Science, Chengdu University of Technology, Leshan 614000, China)

Abstract: Chongqing will be great efforts to support the development of software outsourcing industry, and has introduced a large number of supportive policies, but the city's software outsourcing professionals have a wide gap with coastal areas related to professional quality. The lack of language ability of employees are also seriously constrained the development of the industry. Response to the aforementioned questions, this article examined software outsourcing company’s requirements for the quality of manpower, summarizes our institute’s two years training experience of software outsourcing towards Japan, combined with actual situation of Chongqing, proposed training program design ideas.

程序员培训总结范文第4篇

关键词:软件开发;岗位管理;开发管理;团队发展

1 概述

由于空中交通管理行业的特殊性,安全性以及高技术性等特点,相关软件的自我研制与开发就成为必然,各级空管局也相继成立了软件开发团队。但由于软件开发并不是空管局的核心业务,所以机构小、待遇低、升职机会少、管理水平跟不上成了软件开发团队普遍遇到的问题,并由此导致高水平人才留不住、开发人员职责分配不当、开发流程不规范、难以积累管理和技术经验等等问题。

2 人员岗位管理

2.1 “选” 空管局在招聘软件开发人员时一般会遇到两方面问题:一是相比专业软件开发企业工资待遇偏低,难以吸引有三年以上开发经验的中高级人才加盟;二是部门人员编制少,每个开发人员都要掌握多种业务和不同的技术。确定了人员招聘的范围,接下来是怎样从众多的应聘者中挑选出团队所需,如图1所示。

图1 软件开发人员招聘试用过程

在招聘阶段,综合能力笔试和全方位的面试是必须的。笔试要对应试人员的数学能力、逻辑推理能力、归纳总结能力、语言文字能力等基本素质进行考查;面试针对的则是业务能力,技术能力,语言表达能力,应变能力等等。

2.2 “育” 虽然软件开发并不是空管系统的主业,但员工的培训却不能忽视。首先,应该经常进行交叉培训。交叉培训不仅快速、低成本的提高了部门员工多方面的技术技能,而且也促成了员工的“备份”,在某一员工离职时不至于出现技术断档。其次,软件是个高速发展的行业,要有针对性的进行新技术的培训。最后,空管业务的培训也十分重要,一个软件成功的开发永远离不开对相关业务的精通。

2.3 “用” 如今的软件行业岗位分工已经越来越细化。要想充分发挥每位员工的能力就要了解每个人的喜好特点,针对员工的个人能力分配合适的岗位和任务,做到知人善用。

2.4 “留” 留住人才有一整套的手段和方法。薪酬是很多软件开发人员首要看中的,要保持员工队伍的稳定,薪酬至少要在人力资源市场中的平均薪资水平。发展方向是另一重要因素。在员工建立自己的发展方向时,不仅要尊重他们自己的想法同时也要帮助他们发掘自己的特点,找到自我喜好和部门发展方向的契合点,让员工和部门共同发展。

2.5 岗位配置 岗位配置是涉及软件开发效率、软件开发进度、软件开发过程管理和软件产品质量的重大问题。面对软件部门人员少、项目杂等特点,将开发人员分成组内成员和公共成员两部分,如图2所示。

一般每个项目都成立一个独立的程序员小组,根据项目的大小和完成任务的时间设2至5人。程序员小组实行“主程序员”负责制,负责组织、规划、协调和审查小组内的全部技术活动。“主程序员助理”是主程序员的助手,除了协助主程序员的日常事务外,在必要时能代替主程序员的领导工作。这种一主一副的配置在最大程度上保证了项目开发的连续性和完整性。其他“程序员”负责模块代码编写和测试。

3 开发管理

3.1 开发规范 开发规范的有效建立和严格执行是提高软件开发质量,降低开发周期,增强代码的可重用性、易读性,使软件便于维护,使开发人员之间便于交流和协作的一个最有效的手段。开发规范包括:变量名、函数名、文件名、模块名等名称的命名规范;保证代码简洁、清楚、易读的代码规范;保证类关系清晰,有良好组织、严格区分的类组织规范;用户界面规范;测试规范;bug调试规范等等。

3.2 技术积累 技术积累是软件开发团队提高开发效率的关键因素,它不仅为将要开发的功能或模块提供了技术模版和参考,同时也大大降低了人员流动对团队、对项目开发带来的不利因素。技术积累并不是一堆代码的简单累积,它应该具有如下特点:首先,它应该能实现特定的功能并能被重复使用;其次,在多个项目中使用并被充分验证;再次,有详尽的技术说明文档,易于学习和使用;最后,被清晰的组织和索引,易于查找和引用。

3.3 配置管理 软件配置管理是一套规范、高效的软件开发基础结构。作为管理软件开发过程有效的方法,软件配置管理可以系统地管理软件项目中的多重版本;全面记载软件开发的历史过程,包括为什么修改,谁作了修改,修改了什么;管理和追踪开发过程中危害软件质量以及影响开发周期的缺陷和变化。通过配置管理工具的使用,打破了开发人员各自为政的开发模式,减少了代码冗余,提高了软件重用率,使整个项目组更容易完成统一编码、统一测试、统一部署、统一升级。

3.4 项目管理 项目管理包括:决定项目启动时间,确定项目范围,制定项目任务的重要性和优先顺序等等。项目管理运行机制没有一个统一的标准,它的建立需要长时间的摸索和积累并且要充分结合本部门发展的自身特点。

4 结语

程序员培训总结范文第5篇

技术

我在学校里学的是电气自动化,程序基础仅限于c基础课程的一些知识,后来由vb、html转向asp,在asp上花费了不少时间,对asp比较熟悉,后来由于公司业务需要,将开发平台转向,开始对不是很感冒,以为就是asp的一点扩展(那时还不知道三层架构,数据数据访问全在页面里——!),后来招来几个北大青鸟的过来终于意识到的强大之处,经过个人的努力已经逐步掌握了,现在层次上只能讲个人觉得是入门而已,原因是多方面的,待会儿会讲到。

相信从面向过程转向面向对象的同学都有一种感觉:面向对象开始真的有点别扭,涉及到属性,尤其是类之间的各种关系,那时老想用面向过程传递参数多方面啊。于是老在想对象这种东西,从概念中跳中来,以自己的方式去理解才逐渐体会到页面对象的精华来,分层次展现、分级别访问、封装对象之间各种关系逐渐真正理解了,尤其是对象之间的关系,如对象a与对象b两者之间的关系,有些需要完全公开,有些需要隐藏,有些需要通过第三方传递,有些需要给自己的下级可见,有些需要让下级去完成具体操作——这不是现实的实际模型吗?应该这么理解,面向对象来源于现实,它不是一种凭空空想出来的理论,这些对象之间的关系可以将其还原为父子、夫妻、领导下属、同事、朋友之间的关系。相比之下,页面过程往往像是一股脑全部推给用户使用,其中的数据与数据访问方法层次不清晰,在模拟现实上它与面向对象相比更易于入门理解,实质上难于准确直接地表述。

面向对象上另一方面是它的设计模式,在之前的面向过程中对这个设计模式并没有清晰地提出来,面向过程优秀的代码要求高内聚低耦合,从个人的理解上,这仅是对软件开发方法“技”上理论总结;设计模式是达到了“道”的层次,因为它从更大的方向、更抽象的层次来去表述具体的代码模块之间的关系,可以认为设计模式是完全从实际的应用来不断总结得来的经验,之间并没有这种术语,但相信前人肯定也使用到这种思想,它从实际应用于来,当然要应用于实际工作中,认真思考不断总结每个人都会有自己的“设计模式”,可以借鉴前人的思想来去提升自己,不可去为“设计模式”而设计模式。

具体到的实现模型中,真正理解它的机制与方法也就不难理解,记住b/s中离不开post或get,所有的autopostback、selectedindexchanged……都是去调用form传值,加上runat=server的服务器控件打开它生成的源文件也是普通的html标签,微软的让软件开发更容易的思路是很好的,时代在前进,很多年前你使用c写出mis证明你很牛,很多年之后你不在使用c去写“学生管理系统”、“图书馆管理系统”那只能说明你的脑子少一根筋,开发语言都有长处与不足的地方,因为它们适用的场合不同,类似不能拿匕首去跟炮弹比,也不能拿c与php比,程序员都有一种偏执的心理,但一点要记住,你面对的用户才有最终发言权,程序能不能满足需要,易用性、稳定性、成本才是应当首先放到重要位置来去谈的。

管理

最开始担任管理一职时开发团队加我在内只有四个人,那时只是抱着接受挑战的心理去做管理,加上我本人比较重感情,团队之间关系相处都不错,但严重的问题逐渐显露出来:工作的随意性、团队精神薄弱、工作方式蛮干,印象深刻的是有几个开始承诺项目不能完工,于是最后天天加班,一直做到早上6点,睡一会7点半接着上班,几个同事都是年龄差不多的小伙子,干劲十足。后来随着时间的推进,问题越来越摆在眼前:项目迟迟不能完工,又由于公司待遇方面让新员工感觉不值得,于是形成了老板抱怨员工也抱怨的状况,我在中间两点都要去“消火”,这期间是我们部门相对最累的时间但也是相对感觉最充实的时候,后来,之前的员工跟我说“再也找不到那种感觉了”,这是我能想像的。这期间主要是老总对我十分信任,工作上主要是管理方法上对我指点了不少。后来我逐步体会到,管理应该是“大家定规则去遵守”,而不应该是“人管人”。

人管人很容易陷入一个误区:领导去时时刻刻关注每个员工,这样最后往往后造成员工对领导的敷衍了事,管理松了员工会责任下下降,管理紧了造成员工与领导关系紧张,另一方面领导时间精力有限必然耗费大量的精力在日常的监督中而不能投入到全局的管理中。

于是“定制度-定分工-定进度”,明确日常所有的规章制度,这期间除了公司主要的工作规章制度外其他的日常工作纪律、日常管理等规章制度都是我本人制订,然后征求大家意见最后去贯彻执行。中间也遇到了不少问题,比如开始我们内部是允许使用qq的,后来员工用qq闲聊的时间增多,大大影响了工作效率,最后决心禁止,开始阻力较大(貌似程序员都喜欢挂上几个qq去到群里搞个群主,虽然群里大多都是菜鸟),最后多次开会,逐个谈话,阐明道理,形势逐渐好转。

项目分工上针对技术水平明确分工,制订项目开发计划,由于开始技术都不是很成熟,不少时间我这边强势要求,使用野蛮方法,完不成加班——我陪着加班,这段时间能感觉到员工对我稍有怨言但总体还是认可的。

这期间公司新招人员,人员的增多更使我意识到团队管理的重要性,这期间版本控制、编码规范、文档管理、bug管理等诸多问题都得到一一解决,技术水平上主要是我个人利用空余时间学习新知识充电,然后展开各种培训,主要是photoshop、css、js、sql等方面,培训一方面提升了员工的技术水平,一方面我本人在学习培训的过程中得到的最多,因为这个时候个人要求去思考的会更多,加上我本人对技术兴趣比较深厚,所以后期工作慢慢踏入良性循环。

待遇低、条件艰苦、工作时间长、工作压力大是团队中最大的难题,这方面公司在某些方面决策层有着严重的错误思想,造成技术人员对公司埋怨增多,在这方面我本人只能以劝架婆的身价去安慰身边的兄弟,因为我明白现在公司的问题与当前中国软件行业的通病一样,盲目追求利益最大化,不求质量,但求速度,整个社会风气造成软件行业良莠不齐发展,整个中国三四个人的开发团队组成的公司数不胜数,整个程序员阶层生存状况可想而知,疯狂加班、代码质量低下、维护成本大、稳定性差、用户体验差……。当然我们本身不能去逃避这个现状,对于个人来讲任何假大空的口号都是没有意义的,程序员作为技术人员最重要的是心态,以良好的心态去面对各种问题,发现问题、解决问题,发现问题抱怨是解决不了问题的(“it民工”是我个人认为it人最没有正确的自我定位的一个称谓,试想一个人连自己都看不起自己的职业,他能做好自己的工作吗?),最主要是解决问题。

我在面试员工时反复提到的三点是;工作态度、发展潜力、工作能力,由前向后排序,心态最重要,大公司大家都想削尖脑袋往里挤,但名额有限,所以广大的程序员同志绝大多数都集中在二流三流四流的软件公司,这个时候更应该做好个人职业定位。以我个人的经验,新员工选择一家公司往往最看重工资待遇跟发展潜力,程序员是一种不可以混日子的职业,工作能力很重要,但不是最主要的,工作态度是最重要的,工作态度往往跟个人的思想认识还有职业所在的环境有关,我个人的体会是绝不能太过于情绪化,情绪化无论是对工作还是对个人的发展都是不利的,就是说哪怕是明天你要辞职,你今天都要把今天要做的事情认真用心做好。

程序员培训总结范文第6篇

技术

我在学校里学的是电气自动化,程序基础仅限于C基础课程的一些知识,后来由VB、HTML转向asp,在asp上花费了不少时间,对asp比较熟悉,后来由于公司业务需要,将开发平台转向,开始对不是很感冒,以为就是asp的一点扩展(那时还不知道三层架构,数据数据访问全在页面里!),后来招来几个北大青鸟的过来终于意识到的强大之处,经过个人的努力已经逐步掌握了,现在层次上只能讲个人觉得是入门而已,原因是多方面的,待会儿会讲到。

相信从面向过程转向面向对象的同学都有一种感觉:面向对象开始真的有点别扭,涉及到属性,尤其是类之间的各种关系,那时老想用面向过程传递参数多方面啊。于是老在想对象这种东西,从概念中跳中来,以自己的方式去理解才逐渐体会到面向对象的精华来,分层次展现、分级别访问、封装对象之间各种关系逐渐真正理解了,尤其是对象之间的关系,如对象a与对象b两者之间的关系,有些需要完全公开,有些需要隐藏,有些需要通过第三方传递,有些需要给自己的下级可见,有些需要让下级去完成具体操作这不是现实的实际模型吗?应该这么理解,面向对象来源于现实,它不是一种凭空空想出来的理论,这些对象之间的关系可以将其还原为父子、夫妻、领导下属、同事、朋友之间的关系。相比之下,页面过程往往像是一股脑全部推给用户使用,其中的数据与数据访问方法层次不清晰,在模拟现实上它与面向对象相比更易于入门理解,实质上难于准确直接地表述。

面向对象上另一方面是它的设计模式,在之前的面向过程中对这个设计模式并没有清晰地提出来,面向过程优秀的代码要求高内聚低耦合,从个人的理解上,这仅是对软件开发方法“技”上理论总结;设计模式是达到了“道”的层次,因为它从更大的方向、更抽象的层次来去表述具体的代码模块之间的关系,可以认为设计模式是完全从实际的应用来不断总结得来的经验,之间并没有这种术语,但相信前人肯定也使用到这种思想,它从实际应用于来,当然要应用于实际工作中,认真思考不断总结每个人都会有自己的“设计模式”,可以借鉴前人的思想来去提升自己,不可去为“设计模式”而设计模式。

具体到的实现模型中,真正理解它的机制与方法也就不难理解,记住b/s中离不开post或get,所有的AutoPostBack、SelectedIndexChanged……都是去调用Form传值,加上runat="server"的服务器控件打开它生成的源文件也是普通的HTML标签,微软的让软件开发更容易的思路是很好的,时代在前进,很多年前你使用C写出MIS证明你很牛,很多年之后你还在使用C去写“学生管理系统”、“图书馆管理系统”那只能说明你的脑子少一根筋,开发语言都有长处与不足的地方,因为它们适用的场合不同,类似不能拿匕首去跟炮弹比,也不能拿C与PHP比,程序员都有一种偏执的心理,但一点要记住,你面对的用户才有最终发言权,程序能不能满足需要,易用性、稳定性、成本才是应当首先放到重要位置来去谈的。

管理

最开始担任管理一职时开发团队加我在内只有四个人,那时只是抱着接受挑战的心理去做管理,加上我本人比较重感情,团队之间关系相处都不错,但严重的问题逐渐显露出来:工作的随意性、团队精神薄弱、工作方式蛮干,印象深刻的是有几个开始承诺项目不能完工,于是最后天天加班,一直做到早上6点,睡一会7点半接着上班,几个同事都是年龄差不多的小伙子,干劲十足。后来随着时间的推进,问题越来越摆在眼前:项目迟迟不能完工,又由于公司待遇方面让新员工感觉不值得,于是形成了老板抱怨员工也抱怨的状况,我在中间两点都要去“消火”,这期间是我们部门相对最累的时间但也是相对感觉最充实的时候,后来,之前的员工跟我说“再也找不到那种感觉了”,这是我能想像的。这期间主要是老总对我十分信任,工作上主要是管理方法上对我指点了不少。后来我逐步体会到,管理应该是“大家定规则去遵守”,而不应该是“人管人”。

人管人很容易陷入一个误区:领导去时时刻刻关注每个员工,这样最后往往后造成员工对领导的敷衍了事,管理松了员工会责任下下降,管理紧了造成员工与领导关系紧张,另一方面领导时间精力有限必然耗费大量的精力在日常的监督中而不能投入到全局的管理中。

于是“定制度-定分工-定进度”,明确日常所有的规章制度,这期间除了公司主要的工作规章制度外其他的日常工作纪律、日常管理等规章制度都是我本人制订,然后征求大家意见最后去贯彻执行。中间也遇到了不少问题,比如开始我们内部是允许使用QQ的,后来员工用QQ闲聊的时间增多,大大影响了工作效率,最后决心禁止,开始阻力较大(貌似程序员都喜欢挂上几个QQ去到群里搞个群主,虽然群里大多都是菜鸟),最后多次开会,逐个谈话,阐明道理,形势逐渐好转。

项目分工上针对技术水平明确分工,制订项目开发计划,由于开始技术都不是很成熟,不少时间我这边强势要求,使用野蛮方法,完不成加班我陪着加班,这段时间能感觉到员工对我稍有怨言但总体还是认可的。

这期间公司新招人员,人员的增多更使我意识到团队管理的重要性,这期间版本控制、编码规范、文档管理、Bug管理等诸多问题都得到一一解决,技术水平上主要是我个人利用空余时间学习新知识充电,然后展开各种培训,主要是photoshop、css、js、SQL等方面,培训一方面提升了员工的技术水平,一方面我本人在学习培训的过程中得到的最多,因为这个时候个人要求去思考的会更多,加上我本人对技术兴趣比较深厚,所以后期工作慢慢踏入良性循环。

待遇低、条件艰苦、工作时间长、工作压力大是团队中最大的难题,这方面公司在某些方面决策层有着严重的错误思想,造成技术人员对公司埋怨增多,在这方面我本人只能以劝架婆的身价去安慰身边的兄弟,因为我明白现在公司的问题与当前中国软件行业的通病一样,盲目追求利益最大化,不求质量,但求速度,整个社会风气造成软件行业良莠不齐发展,整个中国三四个人的开发团队组成的公司数不胜数,整个程序员阶层生存状况可想而知,疯狂加班、代码质量低下、维护成本大、稳定性差、用户体验差。当然我们本身不能去逃避这个现状,对于个人来讲任何假大空的口号都是没有意义的,程序员作为技术人员最重要的是心态,以良好的心态去面对各种问题,发现问题、解决问题,发现问题抱怨是解决不了问题的(“IT民工”是我个人认为IT人最没有正确的自我定位的一个称谓,试想一个人连自己都看不起自己的职业,他能做好自己的工作吗?),最主要是解决问题。

我在面试员工时反复提到的三点是;工作态度、发展潜力、工作能力,由前向后排序,心态最重要,大公司大家都想削尖脑袋往里挤,但名额有限,所以广大的程序员同志绝大多数都集中在二流三流四流的软件公司,这个时候更应该做好个人职业定位。以我个人的经验,新员工选择一家公司往往最看重工资待遇跟发展潜力,程序员是一种不可以混日子的职业,工作能力很重要,但不是最主要的,工作态度是最重要的,工作态度往往跟个人的思想认识还有职业所在的环境有关,我个人的体会是绝不能太过于情绪化,情绪化无论是对工作还是对个人的发展都是不利的,就是说哪怕是明天你要辞职,你今天都要把今天要做的事情认真用心做好。

对于工作责任心不够的员工是尤其值得关注的,他们往往自我意识过于强烈,追求以自我为中心,很多时候伴随着工作得不到认可、工作感觉不充实不开心,我会主动找他谈话,我认识:你管理的是一个实实在在的人,他不是一台任你摆布的机器,人会有情绪往往是有心结,找到原因,多加开导,用心去关心每个成员。对于实在不适合在本团队发展的员工要做好最坏打算。程序员这个职业与现在的大学生具有一致的特征,一个是从天之骄子沦为多余人,一个是从高智商人士成为今天中国通行的”IT民工“。另一方面是程序员往往年龄集中在20-25之间的男性中,情绪化、失落感、心理不成熟等一系列问题都会出现。但这个阶段的人往往也最易沟通,可塑性也较强,适当的引导、合理的方式会比野蛮的管理效果强上百倍。

人生

程序员培训总结范文第7篇

【关键词】软件安全 漏洞 自动化识别

随着软件规模的增大,依赖人工进行软件安全漏洞风险的难度也日益增加,一点侥幸和一点为难,为软件安全隐患打开了方便之门,这种问题演变出来的影响如今不得不令人痛心决心予以考虑,这也正是软件代码安全漏洞工具用武之地。

1 软件代码安全检查工具功能评析

随着计算机软件编译技术的发展和市场的需求,目前有多种开源的和商业的静态源代码分析工具可以帮助开发人员和软件安全人员在编码阶段快速扫描出软件代码所潜在的安全隐患,这些技术在我们日常的开发过程中很普遍,只是我们平时没有注意到而已。通过源代码分析工具对代码扫描后的结果,开发人员和安全代码审查人员可以对结果再次复查,极大地提高了代码安全审查的效率,这些分析工具或者技术主要包括如下的功能:

1.1 类型检查

类型检查是静态分析使用得最为广泛的形式,也是程序员最为熟悉的方式,很多程序员并没有在类型检查方面太多的思考,毕竟类型检查的规则被编程语言事先定义好了,并被编译器强制执行,因此关于类型检查的分析器是如何执行的,程序员一般都了解得很少。类型检查能够帮助开发人员全面地排除编码类型方面的错误,比如把一个整型的值赋给一个对象的变量;在编译时捕获错误;也在一定程度上预防运行时的错误。

1.2 代码编写风格检查

Style checkers 是一个专门的代码风格检查的静态分析工具,这种工具在类型检查之外强制一些其它的编码格式的规则,比如空格检查、命名规范、不推崇函数的使用、注释、程序结构等.被style checker检查的错误通常是那些影响代码的可靠性和可维护性方面的缺陷,这些缺陷在程序运行时并不一定是一个特定的错误。

1.3 程序理解

程序理解工具帮助用户理解代码量大的程序,帮助用户理解代码,集成开发环境(IDE)也总是包含一些程序理解功能,比如:“find all uses of this method”and “find the declaration of this global variable””一些高级的分析可以支持自动程序重构的特性。比如把单个的复杂的函数,裂解成多个更为简单的函数。

高级的程序理解工具也尽量帮助程序员去获取程序是按哪种方式工作的,有些工具尽量使用逆向工程了解代码的设计。因此会给程序员一个图形化的视图,这对程序员去理解代码量大的程序非常有用,尤其是这些代码不是程序员自己写的时候。

1.4 程序确认

程序确认工具接受一组规格要求和代码,并企图为代码提供证明:“代码的实现是满足规格要求的”,如果规格是程序应当作的每一件事情的完整描述,程序确认工具就能够执行一个等同的检查,以确保代码和规格是一致的。

1.5 缺陷发现

缺陷发现工具的目的并不像style checker 那样去抱怨代码的格式问题,也不去对程序代码和规格做比较。它仅仅指出在程序在哪儿,它的行为将不是程序员本身的意图,大多数程序缺陷工具是易于使用的,因为它们是与一组特定的缺陷规则相关,这些规则描述了一些特定的代码模式,这些代码模式将通常指示代码缺陷。

2 软件代码安全的审查路径

关注于安全的静态扫描工具使用了多种其它静态分析工具的技术,但它更关注识别安全问题这个目标,这就意味着它们应用这些技术的不同,它检查潜在的不安全的库函数的调用;检测边界错误和类型转换错误;使用控制流检测操作顺序不合理所带来的隐患;使用数据流跟踪技术去跟踪不安全的数据的引入及其不安全的操作…。同时也提供自定义安全规则的接口,以满足用户特定安全目的的需求。以下是数据流和控制流的例子。

数据流跟踪来自网络的数据,该数据最后在一块给定的内存执行操作,对来自网络的数据没有做大小控制,会导致缓冲区溢出。

控制流分析所有的操作路径,发现在特定的逻辑下,程序执行不安全的操作,比如下面的对同一内存块释放了两次,导致内存管理紊乱。

3 软件代码安全检测工具功能限定

静态安全扫描器并不是设计去发现架构方面的问题,或者说设计方面的缺陷,也不适合去发现集成方面的BUG,安全扫描器也有一些局限,特别是让它去分析一些大的系统,这些系统包含多种可执行的组件,或者不同的结构层次。应当强调的是:就像人工审计一样,安全扫描器并不能发现软件系统的所有代码的安全缺陷,它们也只能发现一些,毕竟安全扫描器它自己也是一个软件,这剩下的未被发现的问题仍然需要人工去把他们找出来。因此,不要仅仅单一依赖安全的扫描器去确保整个系统代码的安全。开发人员需要学会避免安全扫描器指出的问题,这是好的事情,但并不意味着能够避免那些安全扫描器没能发现的问题。安全扫描的结果不能作为仅有的判断软件质量的唯一方式。否则,软件可能从表面上看起来已经得到改善和提高了,但实际上仍然在有些方面很糟糕。

4 总结

源代码安全扫描器综合了多种静态扫描技术,能够在一定程度上帮助我们检测软件源代码的安全性,我们可以借助它的能力配合人工的安全审计快速审查代码安全。开发组织,为了开发安全的软件,不能仅仅依靠单一的源代码扫描分析工具,还需要加强开发人员安全编码的培训和教育,并结合自身组织的特点,整理出适合自身的安全编码实践,并在不断的项目实践中丰富和完善。

参考文献

[1]Weber S,Karger P A,Paradkar A.A Software Flaw Taxonomy:Aiming Tools at Security[C].Proc.of ACM Software Engineering for Secure Systems――Building Trustworthy Applications.Louis,Missouri,USA:[s.n.],2005.

[2]Landwehr C E.Formal Models for Computer Security[J].ACM Computing Surveys,1981,13(3):247-278.

作者单位

程序员培训总结范文第8篇

程序员试用期工作总结及转正申请范文一

光阴如梭,半年的工作转瞬即将成为历史,伴随着新年钟声的临近,我们依依惜别硕果累累的20XX年,满怀热情的迎来即将到来的20XX年。在这年终之际,现对来公司5个月的时间里所作的工作汇报如下:

1、正义erp项目的编码工作。从了解新疆正义项目的背景、及计划安排,熟悉正义公司制度及业务流程,再到熟悉新能开发模式,之后我根据需求调研报告,从基本的数据库创建,到编码,完成了销售部、生产部、采购部、质检部四个模块的基本单据的制单、审核、选单、查询、打印等系列的编码工作;完成了正义项目的模块测试及流程测试。

通过这段时间的努力,使我个人的耐心、细心程度及对工作的合理安排得到了锻炼,学会了在繁忙之中找条理,危难之中找希望。同时自己也有一些不足之处,一些细节地方技术上还不太成熟,还需加以学习与钻研。

2、、正义erp项目的实施工作。从十一月初开始进行正义项目的实施,每天早起赶在企业上班前赶到企业进行erp的实施。实施期间主要是软件的安装实施及对企业的erp系统的使用人员进行软件使用培训;纪录客户使用过程中出现的问题,晚上下班后加班加点将每天的小错误及客户变更修改完毕。

通过这项工作,使我原本欠缺的业务能力得到了很大的提高,并学到了很多与客户交流的技巧及业务上的知识,更加明晰了erp系统的流程。但离一个成功程序开发人员的标准还差得很远,在今后工作中,定会多多注意,加以改善。

3、帮助和使用手册文档的编写。帮助的编写使我熟悉了dreameweaver和fireworks的使用,为后期的oa开发也奠定一定的基础,使用说明的编写,使我更加加深了项目开发的整体思路与技术要点,总结了前期开发和实施中碰到的问题,并又一次的对软件整体进行了测试,对暴露出的小bug进行了最后的修改。

4、利用工作之余的休息时间加强学习。平时注意收集有关pb方面的资料文件,提高自己的处理新问题和解决新问题的能力,并加强学习java及oa方面的知识(现转为学习.net),为后期的工作打好基础。

以上为本人粗略的个人工作小结,请领导审阅,如工作上有不到之处,请领导不吝指出,以便本人及时改正,从而能更好地工作。

展望临近的20XX年,我会更加努力、工作上认真负责,再接再厉,更上一层楼。相信自己会完成新的任务,能迎接新的挑战。

程序员试用期工作总结及转正申请范文二

来公司担任程序员一职已一年多时间,在这一年时间里,我学到了很多东西。每个人都是在不断的总结中成长,在不断的审视中完善自己。在这半年里自己也是在总结、审视中脚踏实地地完成好本职工作,现将这半年的工作总结如下:

一、 思想方面:

严格按照一个程序员应有的素养要约束自已,爱岗敬业,具有强烈的责任感和事业心,积极主动认真的学习专业知识,工作态度端正,认真负责,听从公司的安排,积极配合全友家私完善 ERP 系统,任劳任怨。

二、 工作方面:

热爱自己的本职工作,能够正确认真的对待每一项工作,工作投入,热心为大家服务,认真遵守劳动纪律,按时上下班,有效利用工作时间,坚守岗位,需要加班完成工作按时加班加点,保证工作能按时完成。在这半年里,我本着把工作做的更好这样一个目标,开拓创新意识,积极圆满的完成了以下本职工作:

配合全友家私开发并完善 SRM 系统

独自开发全友家私 SAP 日志维护系统

三、 存在不足:

一公司领导以及部门领导同事的帮助和指教,使我的工作有了很大提高,当然我还存在着很多不足之处,处理问题思路简单,不够成熟,工作中容易产生急躁情绪,需要更深入学习专业知识,提高自己的工作水平。

程序员试用期工作总结及转正申请范文三

伴随着充实紧凑的工作生活,两个月的时间已经过去了。这一段时间里有工作上的收获,知识的丰富,经验的增长,同时也暴露出很多问题和不足。总结经验,吸取教训,本文将主要从几个方面来对工作进行总结:工作的主要内容;其中的失败和教训以及成功和经验;展望下一阶段的工作,确定自己的目标。以此作为惩前毖后的记录。

1. 工作的主要内容

在这两个月的工作中,我的总体任务是协助苏薇做好武警黄金部队矿业权管理系统的后期测试,编码,修改,文档编写的工作,分解开来之后,我主要做了三件事:1.编写矿业权系统的各类文档;2.矿业权系统的编码及bug勘误工作;3.矿业权系统的测试工作。下面依照时间来对我的工作进行介绍。

初踏入职场,进入专业的软件制造公司,对我,一个没有接触过标准软件制作过程的新人来说,起步就是一个很大的难题。若直接做开发,则业务不熟练,代码不规范,弊大于利;若仅做学习,则不能跟上项目的步伐,不能以最快的速度融入工作中去。

在我还在忐忑自己到底要做什么工作的时候,任务已经下达了,首先进行矿业权系统的测试工作。这样的好处在于能够在测试的过程中,了解项目的整体布局,了解项目中的业务逻辑,了解项目中尚未完成的工作并以此作为下个阶段的工作目标。至此,入职工作顺利起步。

在对矿业权系统进行测试之后,暴露了系统的诸多问题,测试过程中发现矿权系统没有进行输入限定,为了解决这个问题需要对整个系统的数据进行整理,我的下一个任务就是编写矿业权系统的数据需求文档。在编写该文档的过程中,对矿权系统进行了更深入的了解,为之后的bug勘误工作奠定了一定的基础。

完成了矿业权系统的数据需求文档的编写之后,新的任务是对整个矿权的输入数据进行输入限定,在任务开始之处是极为困难的,幸而得到了同事们的帮助才得以顺利完成任务。任务虽然完成,但是对输入限定实现方法的一知半解以及任务完成过程中的不仔细,为之后发生的问题也埋下了苦果。

在对矿业权系统添加输入限定完成之后,进入了解决程序小问题的阶段,对矿权系统进行细微的缝补工作。这段时间是学习多于工作的,不同的问题督促我要每天和百度亲密接触数百次,又要劳烦诸位在百忙中的同事抽出时间来给我帮忙。虽然辛苦一点,但收获却是满满。

完成了系统的修补之后,我们的程序送到了四惠进行第一轮测试,在测试的一周里,我主要是补充网络编程的基础知识。

第一轮测试结果出来之后,我们项目组开始了紧张的第一轮矿业权系统bug勘误工作。拿到bug列表之后,发现有一小半错误皆是因我而起,输入限定问题很多,我也主动承担了输入限定部分的bug勘误工作。

第一轮bug勘误工作完成后,进行了第一轮了回归测试,测试结果已然不尽人意,仍然存在大量的问题需要修改,而且很多问题还是因我而起,输入限定仍然存在大量问题,再一次进行修改之后,我们的程序送到了十五所进行所检。

在进行所检之余,我又接到了新的任务,完成矿权系统的概要设计以及详细设计文档的编写。这两份文档已于9月2号编写完毕。

现阶段我的任务是根据所检的bug列表,对矿权系统进行回归测试。

2. 工作中失败的教训以及成功的经验

对于失败的教训要吸取,成功的经验要进行总结。我对成功的定义是:在保证质量的前提下完成既定的计划或目标就是成功。其他的所有结果都是失败。

成功的经验:

1) 敢于接受任务并想尽一切办法完成

入职两个月最大的收获就是敢于接受任务并想尽办法完成,每一个任务对于初入职场的我都是一个挑战,如何保质保量完成任务是最基本的要求。这两月最大的成功在于没有一次任务是拖沓的,每次都尽最大努力完成了任务。

2) 勇于承担错误,正视自身的问题

在这两个月的工作中可谓是错误不断,从文档的错别字这种小问题到矿权系统bug修改不正确导致崩溃这种大错误,暴露出来了很多的问题,我秉承着有错即改,下不为例的思想,正视自己的错误并积极改正,因此这也算是一个成功。

失败的教训:

1) 重视每一个细节,不要忽视小问题

在最初进行矿业权系统数据需求文档的编写的过程中,对某些页面的数据在数据库中没有存储的情况没有加以重视,在后期进行数据限定的时候,还要重新修改数据需求文档,造成了不必要的时间浪费。从这个事情上得到教训就是不要放过任何一个小问题,这个小问题可能导致之后的大问题。

2) 进行重复工作也不能大意

在对矿权系统进行输入限定的方法熟悉之后,都是重复性的工作,给每个页面,每个字段进行输入控制语句的添加,在进行了数个页面之后,出现了有的页面没有添加完整,或者提示语句不正确的情况,在后续的bug勘误中出现了大量此类问题,浪费了大量的时间和精力修改。从这个事情上得到的教训就是工作不能大意,重复性的工作更要完成好。一般重复性的工作第一次做不好,后续检查修改是非常浪费时间的。

3) 考虑问题要严谨

在对矿权系统bug勘误的过程中,对输入限定条件的判断出了问题,我想当然的按照我的主观思路对数据进行了限定,而在回归测试的时候出了问题,这些都是考虑不严谨的后果。这个事情的教训就是考虑不严谨直接导致问题推倒重来,影响了工作效率,而且很容易埋下隐患。

4) 注重用户体验

在矿权系统bug勘误的过程中,修改最多的在于坐标系统的提示语句,因为坐标系统不仅要求数据必须填入,而且每一个数据都有严格的格式限定,因此每一个错误提示的弹出都要本着如何让用户知道哪里错了为原则进行设置。在最初的限定里面,语句粗糙,弹出语句不明确,造成了用户使用的不方便,还得重新进行改造。这个问题的教训是一定要从用户的角度出发考虑问题,注重用户体验从简单的提示语句做起。

3. 展望下一阶段的工作

下一阶段短期内我们的工作主要针对矿权系统的使用的数据库变更来对我们的系统进行修改。我的工作任务主要是学习oracle数据库和sql数据库的使用上的区别,做好从sql数据库向oracel数据库的迁移工作。

程序员培训总结范文第9篇

我在学校里学的是电气自动化,程序基础仅限于C基础课程的一些知识,后来由VB、HTML转向asp,在asp上花费了不少时间,对asp比较熟悉,后来由于公司业务需要,将开发平台转向,开始对不是很感冒,以为就是asp的一点扩展(那时还不知道三层架构,数据数据访问全在页面里——!),后来招来几个北大青鸟的过来终于意识到的强大之处,经过个人的努力已经逐步掌握了,现在层次上只能讲个人觉得是入门而已,原因是多方面的,待会儿会讲到。

相信从面向过程转向面向对象的同学都有一种感觉:面向对象开始真的有点别扭,涉及到属性,尤其是类之间的各种关系,那时老想用面向过程传递参数多方面啊。于是老在想对象这种东西,从概念中跳中来,以自己的方式去理解才逐渐体会到页面对象的精华来,分层次展现、分级别访问、封装对象之间各种关系逐渐真正理解了,尤其是对象之间的关系,如对象a与对象b两者之间的关系,有些需要完全公开,有些需要隐藏,有些需要通过第三方传递,有些需要给自己的下级可见,有些需要让下级去完成具体操作——这不是现实的实际模型吗?应该这么理解,面向对象来源于现实,它不是一种凭空空想出来的理论,这些对象之间的关系可以将其还原为父子、夫妻、领导下属、同事、朋友之间的关系。相比之下,页面过程往往像是一股脑全部推给用户使用,其中的数据与数据访问方法层次不清晰,在模拟现实上它与面向对象相比更易于入门理解,实质上难于准确直接地表述。

面向对象上另一方面是它的设计模式,在之前的面向过程中对这个设计模式并没有清晰地提出来,面向过程优秀的代码要求高内聚低耦合,从个人的理解上,这仅是对软件开发方法“技”上理论总结;设计模式是达到了“道”的层次,因为它从更大的方向、更抽象的层次来去表述具体的代码模块之间的关系,可以认为设计模式是完全从实际的应用来不断总结得来的经验,之间并没有这种术语,但相信前人肯定也使用到这种思想,它从实际应用于来,当然要应用于实际工作中,认真思考不断总结每个人都会有自己的“设计模式”,可以借鉴前人的思想来去提升自己,不可去为“设计模式”而设计模式。

具体到的实现模型中,真正理解它的机制与方法也就不难理解,记住b/s中离不开post或get,所有的AutoPostBack、SelectedIndexChanged……都是去调用Form传值,加上runat=server的服务器控件打开它生成的源文件也是普通的HTML标签,微软的让软件开发更容易的思路是很好的,时代在前进,很多年前你使用C写出MIS证明你很牛,很多年之后你不在使用C去写“学生管理系统”、“图书馆管理系统”那只能说明你的脑子少一根筋,开发语言都有长处与不足的地方,因为它们适用的场合不同,类似不能拿匕首去跟炮弹比,也不能拿C与PHP比,程序员都有一种偏执的心理,但一点要记住,你面对的用户才有最终发言权,程序能不能满足需要,易用性、稳定性、成本才是应当首先放到重要位置来去谈的。

管理

最开始担任管理一职时开发团队加我在内只有四个人,那时只是抱着接受挑战的心理去做管理,加上我本人比较重感情,团队之间关系相处都不错,但严重的问题逐渐显露出来:工作的随意性、团队精神薄弱、工作方式蛮干,印象深刻的是有几个开始承诺项目不能完工,于是最后天天加班,一直做到早上6点,睡一会7点半接着上班,几个同事都是年龄差不多的小伙子,干劲十足。后来随着时间的推进,问题越来越摆在眼前:项目迟迟不能完工,又由于公司待遇方面让新员工感觉不值得,于是形成了老板抱怨员工也抱怨的状况,我在中间两点都要去“消火”,这期间是我们部门相对最累的时间但也是相对感觉最充实的时候,后来,之前的员工跟我说“再也找不到那种感觉了”,这是我能想像的。这期间主要是老总对我十分信任,工作上主要是管理方法上对我指点了不少。后来我逐步体会到,管理应该是“大家定规则去遵守”,而不应该是“人管人”。

人管人很容易陷入一个误区:领导去时时刻刻关注每个员工,这样最后往往后造成员工对领导的敷衍了事,管理松了员工会责任下下降,管理紧了造成员工与领导关系紧张,另一方面领导时间精力有限必然耗费大量的精力在日常的监督中而不能投入到全局的管理中。

于是“定制度-定分工-定进度”,明确日常所有的规章制度,这期间除了公司主要的工作规章制度外其他的日常工作纪律、日常管理等规章制度都是我本人制订,然后征求大家意见最后去贯彻执行。中间也遇到了不少问题,比如开始我们内部是允许使用QQ的,后来员工用QQ闲聊的时间增多,大大影响了工作效率,最后决心禁止,开始阻力较大(貌似程序员都喜欢挂上几个QQ去到群里搞个群主,虽然群里大多都是菜鸟),最后多次开会,逐个谈话,阐明道理,形势逐渐好转。

项目分工上针对技术水平明确分工,制订项目开发计划,由于开始技术都不是很成熟,不少时间我这边强势要求,使用野蛮方法,完不成加班——我陪着加班,这段时间能感觉到员工对我稍有怨言但总体还是认可的。

这期间公司新招人员,人员的增多更使我意识到团队管理的重要性,这期间版本控制、编码规范、文档管理、Bug管理等诸多问题都得到一一解决,技术水平上主要是我个人利用空余时间学习新知识充电,然后展开各种培训,主要是photoshop、css、js、SQL等方面,培训一方面提升了员工的技术水平,一方面我本人在学习培训的过程中得到的最多,因为这个时候个人要求去思考的会更多,加上我本人对技术兴趣比较深厚,所以后期工作慢慢踏入良性循环。

待遇低、条件艰苦、工作时间长、工作压力大是团队中最大的难题,这方面公司在某些方面决策层有着严重的错误思想,造成技术人员对公司埋怨增多,在这方面我本人只能以劝架婆的身价去安慰身边的兄弟,因为我明白现在公司的问题与当前中国软件行业的通病一样,盲目追求利益最大化,不求质量,但求速度,整个社会风气造成软件行业良莠不齐发展,整个中国三四个人的开发团队组成的公司数不胜数,整个程序员阶层生存状况可想而知,疯狂加班、代码质量低下、维护成本大、稳定性差、用户体验差……。当然我们本身不能去逃避这个现状,对于个人来讲任何假大空的口号都是没有意义的,程序员作为技术人员最重要的是心态,以良好的心态去面对各种问题,发现问题、解决问题,发现问题抱怨是解决不了问题的(“IT民工”是我个人认为IT人最没有正确的自我定位的一个称谓,试想一个人连自己都看不起自己的职业,他能做好自己的工作吗?),最主要是解决问题。

我在面试员工时反复提到的三点是;工作态度、发展潜力、工作能力,由前向后排序,心态最重要,大公司大家都想削尖脑袋往里挤,但名额有限,所以广大的程序员同志绝大多数都集中在二流三流四流的软件公司,这个时候更应该做好个人职业定位。以我个人的经验,新员工选择一家公司往往最看重工资待遇跟发展潜力,程序员是一种不可以混日子的职业,工作能力很重要,但不是最主要的,工作态度是最重要的,工作态度往往跟个人的思想认识还有职业所在的环境有关,我个人的体会是绝不能太过于情绪化,情绪化无论是对工作还是对个人的发展都是不利的,就是说哪怕是明天你要辞职,你今天都要把今天要做的事情认真用心做好。

程序员培训总结范文第10篇

【关键词】软件安全;漏洞;自动化识别

随着社会信息化的发展,大型社会服务部门对外信息服务多已建立了信息系统,也正是随着各种公众信息服务软件的应用,软件信息安全事件也不断冲击着公众的管感点,因软件安全问题引起服务中断的事情屡见报端,究其原因,很大成分是在软件规模的演变中,原来软件定位多服务于小型区域和内部使用,对软件安全的要求自然比较低,在软件功能定位已发生明显变化,服务于公众客户,承载规模越来越大的时候,软件安全的建设未随之提升,而且随着软件规模的增大,依赖人工进行软件安全漏洞风险的难度也日益增加,一点侥幸和一点为难,为软件安全隐患打开了方便之门,这种问题演变出来的影响如今不得不令人痛心决心予以考虑,这也正是软件代码安全漏洞工具用武之地。

1.软件代码安全检查工具功能评析

随着计算机软件编译技术的发展和市场的需求,目前有多种开源的和商业的静态源代码分析工具可以帮助开发人员和软件安全人员在编码阶段快速扫描出软件代码所潜在的安全隐患,这些技术在我们日常的开发过程中很普遍,只是我们平时没有注意到而已。通过源代码分析工具对代码扫描后的结果,开发人员和安全代码审查人员可以对结果再次复查,极大地提高了代码安全审查的效率,这些分析工具或者技术主要包括如下的功能:

1.1 类型检查

类型检查是静态分析使用得最为广泛的形式,也是程序员最为熟悉的方式,很多程序员并没有在类型检查方面太多的思考,毕竟类型检查的规则被编程语言事先定义好了,并被编译器强制执行,因此关于类型检查的分析器是如何执行的,程序员一般都了解得很少。类型检查能够帮助开发人员全面地排除编码类型方面的错误,比如把一个整型的值赋给一个对象的变量;在编译时捕获错误;也在一定程度上预防运行时的错误。

1.2 代码编写风格检查

Style checkers是一个专门的代码风格检查的静态分析工具,这种工具在类型检查之外强制一些其它的编码格式的规则,比如空格检查、命名规范、不推崇函数的使用、注释、程序结构等.被style checker检查的错误通常是那些影响代码的可靠性和可维护性方面的缺陷,这些缺陷在程序运行时并不一定是一个特定的错误。

1.3 程序理解

程序理解工具帮助用户理解代码量大的程序,帮助用户理解代码,集成开发环境(IDE)也总是包含一些程序理解功能,比如:“find all uses of this method” and “find the declaration of this global variable.”“一些高级的分析可以支持自动程序重构的特性,比如把单个的复杂的函数,裂解成多个更为简单的函数。”

高级的程序理解工具也尽量帮助程序员去获取程序是按哪种方式工作的,有些工具尽量使用逆向工程了解代码的设计.因此会给程序员一个图形化的视图,这对程序员去理解代码量大的程序非常有用,尤其是这些代码不是程序员自己写的时候,

1.4 程序确认

程序确认工具接受一组规格要求和代码,并企图为代码提供证明:“代码的实现是满足规格要求的”,如果规格是程序应当作的每一件事情的完整描述,程序确认工具就能够执行一个等同的检查,以确保代码和规格是一致的。

1.5 属性检查

属性检查工具关注临时安全的属性上面,临时安全的属性按顺序列出一些不允许发生事件的清单,。比如不能去访问已经释放了的内存块的地址,大多数属性检查工具允许程序员写自己的规则去检测特定程序的属性。

1.6 缺陷发现

缺陷发现工具的目的并不像style checker那样去抱怨代码的格式问题,也不去对程序代码和规格做比较。它仅仅指出在程序在哪儿,它的行为将不是程序员本身的意图,大多数程序缺陷工具是易于使用的,因为它们是与一组特定的缺陷规则相关,这些规则描述了一些特定的代码模式,这些代码模式将通常指示代码缺陷。

2.软件代码安全的审查路径

关注于安全的静态扫描工具使用了多种其它静态分析工具的技术,但它更关注识别安全问题这个目标,这就意味着它们应用这些技术的不同,它检查潜在的不安全的库函数的调用;检测边界错误和类型转换错误;使用控制流检测操作顺序不合理所带来的隐患;使用数据流跟踪技术去跟踪不安全的数据的引入及其不安全的操作…。同时也提供自定义安全规则的接口,以满足用户特定安全目的的需求,以下是数据流和控制流的例子。

数据流跟踪来自网络的数据,该数据最后在一块给定的内存执行操作,对来自网络的数据没有做大小控制,会导致缓冲区溢出。

控制流分析所有的操作路径,发现在特定的逻辑下,程序执行不安全的操作,比如下面的对同一内存块释放了两次,导致内存管理紊乱。

静态源代码安全扫描工具器的潜在价值:

减少成本。静态安全扫描工具主要用于开发阶段去识别潜在的安全风险,在研发早期就识别出安全问题,修复问题早,修复的成本低。

教育开发人员进行安全编程。大多数开发人员没有培训如何安全编程,好的安全扫描工具不仅仅发现问题,也解释问题的根源,并推荐怎样去修复问题。这提供给开发人员第一手的资料,作为他们如何去改善编程实践的参考。

重新检测老的代码。即使老的代码在开发的时候考虑到安全的,当这些代码被开发出来以后,新的类别安全漏洞也可能使得原有的系统不安全,安全扫描器能够帮助找出这些问题。

作为安全度量的米尺。尽管因为安全扫描工具的误报和漏报的原因,我们无法确定软件的安全有多好,但安全扫描分析器能够帮助测量软件安全到底有多么坏。

自动重复源代码安全审计方面单调乏味的工作,解放人工的安全分析去跟踪更多更困难的问题。

以安全的观点去检测好的编程风格。 如果没有定制安全规则,分析器将以它自己定义的编程风格去确定编码风格的好坏,定制规则帮助开发团队固化好的编程风格,这使得从安全的角度去提高编码的风格。当然定制规则是需要一定的时间和一定经验的。

3.软件代码安全检测工具功能限定

静态安全扫描器并不是设计去发现架构方面的问题,或者说设计方面的缺陷,也不适合去发现集成方面的BUG,安全扫描器也有一些局限,特别是让它去分析一些大的系统,这些系统包含多种可执行的组件,或者不同的结构层次。应当强调的是:就像人工审计一样,安全扫描器并不能发现软件系统的所有代码的安全缺陷,它们也只能发现一些,毕竟安全扫描器它自己也是一个软件,这剩下的未被发现的问题仍然需要人工去把他们找出来。因此,不要仅仅单一依赖安全的扫描器去确保整个系统代码的安全。开发人员需要学会避免安全扫描器指出的问题,这是好的事情,但并不意味着能够避免那些安全扫描器没能发现的问题。安全扫描的结果不能作为仅有的判断软件质量的唯一方式。否则,软件可能从表面上看起来已经得到改善和提高了,但实际上仍然在有些方面很糟糕。

4.总结

源代码安全扫描器综合了多种静态扫描技术,能够在一定程度上帮助我们检测软件源代码的安全性,我们可以借助它的能力配合人工的安全审计快速审查代码安全。开发组织,为了开发安全的软件,不能仅仅依靠单一的源代码扫描分析工具,还需要加强开发人员安全编码的培训和教育,并结合自身组织的特点,整理出适合自身的安全编码实践,并在不断的项目实践中丰富和完善。

参考文献

[1]Weber S,Karger P A,Paradkar A.A Software Flaw Taxonomy:Aiming Tools at Security[C]//Proc.of ACM Software Engineering for Secure Systems――Building Trustworthy Applications.Louis,Missouri,USA:[s.n.],2005.

[2]Landwehr C E.Formal Models for Computer Security[J].ACM Computing Surveys,1981,13(3):247-278.

[3]Xia Yiming.Security Vulnerability Detection Study Based on Static Analysis[J].Computer Science,2006,33(10):279-283.

上一篇:程序员转正工作总结范文 下一篇:程序员转正总结范文