时间:2022-12-16 20:32:50
引言:寻求写作上的突破?我们特意为您精选了12篇程序员培训总结范文,希望这些范文能够成为您写作时的参考,帮助您的文章更加丰富和深入。
1、“备课”不等于“背课”教师要树立正确的备课观,课堂教学是由师生双边的活动构成的,因此,上课的过程绝不可能僵化死板地背着教案走,要树立自己独特的教学风格。
2、处理好“预设”和“生成”之间的关系,预设要适度,要留有空间。过度的设计必然导致对教学的控制,导致对学生活动和发展的包办、强制干预。在教学过程中,则应关注学情,准确把握“生成”,拓展学生思维空间。
3、重视教师的第二次备课“课后备课”。必须尽可能地征求学生的意见,细心记录学生的反映,能更好地促进课堂教学,为学生全面发展服务。
4、教学目标要具体,不管采用什么教学方式与手段,都必须有明确的针对性和目的性。注意学科之间的综合,以学生为本,建立平等互动的师生关系。
5、关注学生主体,合理使用媒体课件,有效辅助教学。
二教师专业化与教师专业化发展
1、教师专业化是世界教师教育的发展趋势和潮流。
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)等因素对认知活动存在较大影响。同样,在外界刺激条件下,人格特质是个体情绪动机差异的决定因素,且人格特质具有长期稳定的特点,可探索部分人格特质维度作为编程潜力的预测因子,如情绪稳定性。总之,编程能力倾向测试的未来研究应着眼于分析软件工程的任务活动特征,识别那些对编程活动有着因果关系且较为稳定的因素作为预测因子,才可能达到“潜力测试”的效果。
中图分类号: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 校企合作现有模式分析
我国高职院校的校企合作已经历十多年的发展,合作模式不断创新,合作的领域达到了一定深度和广度,按照合作的深度,可将校企合作模式分为浅层、中层、深层三个层次。
1.1 浅层次合作模式即“企业配合”模式
在这种模式中,企业处于“配合”的辅助地位,它只是根据学校提出的要求提供相应的条件协助完成校外实习的培养任务。学校按企业所需确定专业方向,并在企业建立实习基地。具体表现为:一是,学校根据行业、企业的岗位需求,制定基于岗位的模块化课程体系;二是,企业为学校的校外实习基地,解决学校学生校外实训和顶岗实习问题。
1.2 中层次合作模式即“校企联合培养”模式
在这种模式中,企业不仅参与研究和制定培养目标、教学计划、教学内容和培养方式,而且参与实施与产业部门结合的培养任务。学校为企业提供咨询、培训等服务,根据企业的需要进行人才培养。“校企联合培养”模式最直接的表现为定单培养,在培养方案的设计中,将学生需要掌握的基础理论、知识与技术按照分层次、分模块的方式,集中地安排在前几个学期,而后几个学期则由校企共同制定培养方案。这种培养模式是先由企业招聘,通过笔试和面试的学生根据企业的要求,学校与企业共同组织对学生进行后期培养。经过培训的学生作为见习生到企业中参加项目实训,实训合格的学生成为企业的正式员工。
1.3 深层合作模式即“校企实体合作型”模式
在这种模式中,企业以立足于建设企业文化,构建学习型组织,促进企业创新为目的,主动与学校相互渗透,参与高校人才培养。企业对学校的参与是全方位的整体参与、深层参与,企业主动向学校投资,建立利益共享关系,真正实现“教学―生产”一体化。这种合作模式中,企业以主人的身份直接参与办学过程和学校人才培养,分享办学效益。具体表现为:一是,通过“引企入校”,校企共建“校中厂”模式,在校内建立生产性实习实训基地;二是,引校入企,校企共建“厂中校”模式,在工厂建立生产性实习实训基地。不管哪种方式,校企双方必须签署协议,明确资源配置、成本核算、收益分配、财产管理、师生实训等方面的责权利,并共同制定生产经营等方面的管理制度,形成以“契约”为保障的利益共享机制。
2 校企合作开展方式探索
长沙民政职业技术学院软件技术专业(以下简称“专业”)是2004年与印度NIIT合作开办的特色专业,通过置换部分课程,引进国外先进的教学思想和教学理念。2006年,专业开始探索“校企合作、工学结合”的有效实施途径,构建了基于软件开发过程以程序员为核心岗位的相关岗位群、基于岗位群的模块化课程体系、基于项目的能力递进式实践教学体系、基于仿真工作场景的实践教学环境,有效地实现了“校企合作、工学结合”的深度融合。
2.1 构建基于软件开发过程以程序员为核心的岗位群
专业依据业界权威的标准――软件统一过程(RUP,Rational Unified Process)理论,按着软件开发的流程,从RUP中提供的职业岗位入手,分析职业岗位的职责、候选者的经验和知识背景,确定了由程序员、测试员、技术支持、软件营销、界面美工、设计师、项目经理组成的岗位群,并结合当前软件开发技术的流行趋势及极负盛名Tiobe全球编程语言排名榜,将程序员做了进一步的划分,然后将这些岗旆治核心岗位、辐射岗位、拓展岗位和发展岗位4种类型:
核心岗位:程序员,专业面向的主要岗位。根据当软件开发技术流行性,进一步将程序员岗位细分为Java程序员、.Net程序员和Android移动程序员。
辐射岗位:测试员和技术支持。在培养学生核心岗位能力的同时,同时也培养其他岗位的能力,这些岗位为辐射岗位。如程序员开发完程序后需对程序进行必要的测试,并成功地安装在实际的应用环境中,这些能力正好是测试员需具备的能力。
拓展岗位:界面美工、软件营销、软件外包、微信开发、PHP程序员。通过附加专业拓展课来获得的岗位能力。一些学生有特长,他们想根据自己的专业特长,来选择自己的就业岗位,如有艺术修养学生想从事界面美工的工作,英语、日语水平好的学生想从事软件外包的工作,口才好的同学想从事软件营销,看好Php网站开发的想学习Php技术,但专业核心课程并不能完全满足学生的要求,学生可能通过选修专业拓展课来加强这些岗位能力的培养。
发展岗位:设计师、项目经理。在培养学生核心岗位能力,进行学期综合项目开发时,需要有学生熟悉其他相关岗位的能力,但因需要其他的综合素质或较丰富的实践经验,并不是每个人能达到的,有少部分学生可以达到或向这个方向发展。如设计师需要较强的自学能力,项目经理应具有项目管理的专业知识,有较强的沟通能力及领导能力。
2.2 构建基于工作岗位的模块化课程体系
在课程体系的构建方面,专业始终坚持课程跟着岗位能力走的建设思路。课程体系中的每门课程都是针对培养学生的职业素养能力、专业通用能力、岗位特定能力三个层次能力开设,形成的主要思路如下:
①获取程序员岗位(Java程序员、.Net程序员、移动程序员)在实际软件开发过程中具有完整工作过程的典型工作任务,归纳整合典型工作任务,按照职业成长的规律分类排序整理典型工作任务。
②将一个典型工作任务转化为一个或多个学习领域,一个学习领域对应一门课程,将多个典型工作任务中公共的学习领域划分为专业基础课,称为专业通用能力培养模块。特有的学习领域划分为专业课,称为核心岗位能力培养模块,该模块又包括.net程序员、Java程序员和移动程序员课程学习子模块。
③根据岗位群拓展岗位类型,开设了用于培养拓展岗位所需能力的专业选修课。
④开设相关的职业素养课程,用以培养学生的IT职业素养。如每个学期开设的ISAS信息搜索与分析技巧课程用来培养学生的信息处理能力、解决问题能力、自主学习能力、团队合作能力、表达沟通能力、时间管理能力。
这样就形成了由专业基础课、专业课、专业选修课组成的课程体系,专业基础课围绕不同类型程序员典型工作任务中公共的学习领域及职业素养培养开设,专业课紧紧围绕不同类型程序员特有的学习领域开设,专业选修课则围绕培养岗位群的拓展岗位能力开设。
2.3 构建基于项目的能力递进式实践教学体系
专业始终坚持“以行业为依托、校企合作、工学结合、突出核心能力培养”的原则,构建“以项目为载体、层次化、能力递进式”的实践教学体系,“层次化、能力递进”使学生技能培养及角色转换从简单到复杂、从单项到综合、从熟练到精湛、从实训到生产、从校内到校外、从学生到员工的递进,从而提高学生的职业能力和就业竞争力。实践教学体系的层次由四个层次构成:
第一层次为教学做一体化教学,培养的是学生专业通用能力、岗位基本能力和岗位特定能力。
第二层次为学期综合项目实训及校内生产性实训,培养的是学生项目综合开发能力。
第三层次为署假校外集中实训,培养的是学生在校外进行项目综合开发能力。
第四层次为校外企业毕业顶岗实习,培养的是学生现场项目开发能力,实现了由学生到员工角色的转变。实践教学体系结构示意图如图1所示。
2.4 基于仿真工作场景的实践教学环境
为确保实践教学体系的顺利实施,专业与企业深度合作,组建与业界同步的多类型综合实践教学环境,形成了“校企联动、合作育人、协作生产、共同研发”的运行机制,实现学校教学环境与企业现场环境、学校文化与企业文化有机融合。图2为专业实践教学环境体系结构示意图。
①专业建有多个教学做一体化软件类实训室,确保实践教学体系第一个层次学做一体化教学的顺利实施;实验室以软件产品开发流程为主线,营造真实的软件产品开发氛围,从合理利用空间和设备等硬件资源的目标考虑,引进物理产品线和逻辑产品线的概念,按物理产品线的思想规划实验室的布局及设备资源,按照逻辑产品线的概念配置软件实训环境,以满足第二层次学期综合项目实训及校内生产性实训的需要;专业依托长沙安博牛耳青竹湖实训基地,创建一个可同时容纳600人进行实训的校外生产性实训基地,以满足实践教学体系第三个层次署假校外集中实训的需要;专业与企业广泛合作,共建立多个校外软件实训基地,以满足实践教学体系第四个层次校外顶岗实习的需要。此外,专业通过引入10个企业进校,采取企业化运作的形式,建有项目工作室10个,由学校、企业、教师各按一定比例投资入股,利益按股分配。每个工作室建筑面积86平方米,根据公司需要,划分为不同的工作区域,可接受15~25名学生进行真实项目开发,用来培养技术骨干,也是教师和公司人员一起进行科研的场所。
②在校企合作的过程中,为实现校企双赢,形成一套完整的“共建共赢、协作生产、合作育人”的运行机制。先后制定了《校企共建实训基地专项管理办法》,明确学校的人、财、物支持;制定《校企共建实训基地协议》、《项岗实习管理办法》,保证校企合作双方如约履行各自权利义务,对校企合作过程以及后期成果进行保障性说明,保障企业的利益;制定《校企联合科研开发管理办法》、《科技成果奖励办法》等,鼓励教师主动和企业联系。制定评价标准,保护和激发双方参与合作的积极性。高职院校制订各专业开展校企合作工作的具体评价指标,纳入学校教学质量保障体系中。在政府、行业组织等第三方的参与下,加强对校企合作的过程性评价和终极性评价。评价指标包括实训基地建设的质量、人才培养的质量、科研合作的成效等,也包括培养人才的数量、效益,合作企业的成本、产值等。
③为规范实践教学环境的管理,专业建立健全各项管理制度。借鉴ISO90001、CMM及先进的企业管理理念,完善标准化、工程化的管理体系,制定了“6S”现场管理制度、实践教学环境的分类管理制度、设备的操作规范、对外开放共享管理办法,制定了程序员岗位职责、软件开发流程规范、校内技能训练管理办法。
3 校企合作的实践成果
经过多年的努力,专业在“校企合作、工学结合”思想的指导下,灵活组合“企业配合”模式、“校企联合培养”模式和“校企实体合作型”模式,实现了企业与学校的深度融合。2007年,专业成为民政部信息化人才培养基地;2012年,专业成为湖南省软件技术生产性实习实训(教师认证培训)基地;2013年,专业实践教学体系获湖省级教学成果二等奖。
对于高职院校而言,校企合作是一个系统工程。建立长效机制,促进校企合作持续深入开展,需要政府、企业和学校共同努力。地方政府应加强鼓励和引导,充分调动学校和企业积极性,引导行业组织发挥在职业教育校企合作项目的评估、职业技能鉴定及相关鼓励工作。企业从战略高度看待校企合作的人才培养模式,积极参与到合作教育中来,把学生看成一种待开发的人力资源,为学生提供实习、培训以及工作岗位,投入不大成本,获得所需要的人才将成为企业引进基础应用型人才的主要模式。学校要根据区域经济发展的特点和生源情况能及市场需求,发挥职业院校的基础作用,实现职业院校人才培养与企业需求的对接,不断总结经验和调整思路,在探寻与完善中摸索有效的软件人才培养模式和校企合作方式,总结合作过程中的经验与不足,提炼成功合作案例的精髓,形成系统、完整的合作模式。
【参考文献】
[1]王冠华,王东.企业参与校企合作的动力机制研究[J].重庆科技学院学报,2011(24).
我在学校里学的是电气自动化,程序基础仅限于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等方面,培训一方面提升了员工的技术水平,一方面我本人在学习培训的过程中得到的最多,因为这个时候个人要求去思考的会更多,加上我本人对技术兴趣比较深厚,所以后期工作慢慢踏入良性循环。
随着软件规模的增大,依赖人工进行软件安全漏洞风险的难度也日益增加,一点侥幸和一点为难,为软件安全隐患打开了方便之门,这种问题演变出来的影响如今不得不令人痛心决心予以考虑,这也正是软件代码安全漏洞工具用武之地。
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.
想要摆脱“张江男”的标签么?向阳生涯CCDM职业规划师提醒你,现在,立即行动起来,重新进行职业规划!
向阳生涯案例
这样,我成了悲催的“张江男”
大学四年,S读了大家都再熟悉不过的专业——计算机。刚进校的时候,互联网信息技术专业很热,感觉前景一片大好。
转眼四年过去了,本来想考研,但听师兄说做技术的还是要在实战中才有收获,所以早早就打消了这念头。毕业后S来到了上海,这里是IT业发展聚集地,大大小小的IT公司很多,工作机会自然也比其他地方多。
S顺利进了一家IT公司,做起了程序员。刚进去时还好,基本正常下班,可没过半年,每天下班时已是披星戴月。只要挨上了项目,这日子就难熬了,基本处于日夜兼程的状态。
因为刚出校门不久,S编写代码还不是很熟练,加班似乎是理所应当的事,只能硬着头皮扛。“扛过这前三年,等有资本了日子就好过了。”每当S疲惫烦躁时,他总是这样安抚自己。
日子就在这没日没夜的加班中流过了。S的技术比以前娴熟了很多,可日子还是不好过,新毕业的大学生们一批批进来,带着新知识新技术,对于渐渐变为“老人”的他来说,无疑是个无形的压力。每天应付堆积如山、繁杂琐碎的工作,晚上十点十一点回去后还要看书,天天都是一两点睡。有时候他感觉自己不是程序员,而是吃青春饭的“三线小明星”,时刻都有被淘汰的危机感。
期间,为了高薪,S换过一次工作,但情况并没有好到哪里去,连张江这地都没跳出去。这周围弥漫着程序、代码的味道,有时候走在路上,感觉旁边随便一个什么人都是哪个公司的程序员。“一水儿的IT男儿聚集在这里,哪会有灵感和动力写出好代码呢?天天都一个样啊……”S总感觉上班和回家没什么两样,隔壁邻居就是同事,回家不是要看书就是带着工作回来赶工。
S越来越觉得这样的日子没有尽头,工资涨得不多,又看不到前途,程序员还是程序员,感觉自己就是IT领域里一个“打酱油”的,打打这家再打下家;生活社交圈也越来越窄,浦西就像是另一个城市;平常除了见同事,就是下班回家上QQ解解闷。苦于没有发展前景和逼仄的生活圈,S实在难以忍受,拿着资料和简历找到了向阳职业规划咨询中心,寻求专家的帮助。
解决方案
业定位,清晰,再清晰一点
向阳生涯CCDM职业规划师认为,S最大的问题,就在于职业定位不够清晰,发掘他现有的职业资源和能力特长,理顺发展通道,才能明确适合的发展道路。
测评及咨询过程中,CCDM职业规划师发现,S的性格、能力特长以及职业价值观是比较适合程序员这份工作的,他的发展关键在于,需要从目前的领域中细分方向,并规划一条中长期的发展通道。一般而言,程序员在经过多年磨练和学习后,可成为主程序员,再往后则有两条路可选:晋升为管理层或技术顾问等职。从S的性格特质和能力来看,有向管理层晋升的潜质。
朝着成为项目经理或技术部门主管的方向,CCDM职业规划师建议S:
首先要在目前的岗位上取得质的突破,在IT领域要想坐上高端职位,有过人的技术功底是必须的,因此S要尽最大努力,把技术提上来,利用时间加紧充电,掌握新的技术趋势和技能。然后,再有意识地学习管理方面的知识和技能,如能在内部获得管理方面的实践机会则更佳。
对于这个方案,S感到有压力,但更多的是动力。在繁忙的工作之余还要添加学习任务,CCDM职业规划师就建议他学习时间管理,提高时间的利用率以达成目标。咨询完,找到了未来的发展方向,S心里的石头总算落了下来。有了明确的目标,也有CCDM职业规划师的认可与鼓励,S信心满满,开始了新的征途。
案例启示
清“千头万绪”,细分方向寻发展
“张江男”的悲剧不只发生在S身上,他们只是IT行业程序员族群群体生存状态的一个缩影:工作压力大,工作超负荷,淘汰率高,没有生活只有代码,如果没有很好的职业规划,发展岌岌可危;与此同时,个人问题也解决不了,可谓是成不了家、立不了业。
如何才能彻底撕掉“张江男”的悲催标签?从S的案例中,向阳生涯专家团队总结出以下三点:
莫让定位落入“大方向”的迷惘
IT行业内领域细分比较复杂,方向很多。因此,有必要透彻清晰地了解IT行业的宏观发展及各领域方向的具体情况,职业定位不能光有“大方向”,还要细分“小方向”,这样才能减少发展中的迷茫。
向阳生涯CCDM职业规划师富饶指出,IT行业所包含的岗位,大体上分为四大类:管理类、销售类、技术支持类与研发类,而IT高端岗位主要又包括:老板、企业高管、CTO、项目管理人员、IT咨询师、IT资深培训师、系统架构师、高级工程师等。单从程序员的发展路径看就有多个方向,从专业性发展方向是高级程序员、系统分析员,或者还可成为系统架构分析师、信息流程优化师。具体朝哪个方向发展,还得以个人的实际状况、工作经验、能力等方面来综合评估和规划。
巨大的热情是持久的动力
对于IT男来说,这份工作一定是需要极大的兴趣和热情作为强大的动力源泉。IT行业是个高速发展的行业,竞争激烈并且知识构架更新速度很快,对从业人员学习能力的要求很高。在忙碌的工作之余,还要花精力和时间来补充和更新知识储备以提升技能,无疑需要有强大的热情来作为驱动。如果自己缺乏兴趣,别说学习,可能连本职工作都举步维艰,何谈发展呢?
程序员季度总结报告1
我是一名程序员,在过去的一年里,软件研发部团结协作,以及在公司这充满奋斗的环境下,我以严肃认真的工作态度和百折不饶的精神,努力的完成了公司的各项工作,在软件研发、团队协作和个人成长上也取得了一定的成绩。在公司一年的工作已经结束,特向公司总结汇报如下:
一、软件研发
根据公司的安排,项目的需要。在自身的努力、伍经理的帮组,团队的合作下,克服重重技术困难,增长了工作经验,收获丰盈:
1、asp开发
以前我在其他公司也做过一些开发,但是底层和架构与页面样式我都是没有涉及到的。通过这一年在本公司的的这些项目程序中的锻炼,我成长了,我学会了很多很多。
首先,面向对象语言的收获。对于当前编程的主流思想是对象,任何事物都可以用对象来表示。以前理解这些话很费解都是从表面上理解,没有从中的体会,通过这次asp项目的开发,不管是数据还是外部一些条件我们都可以抽象成对象,都可以用对象来表示,具体可以用语言中的类方等。asp如此,c#如此java也同样如此。
其次,具备独立完成vb知识方面的能力。以前没有做过vb的东西,加上这次asp的做,这次涉及到的领域也非常广,常用的重要的都有涉及,并且还补充__ml,java实际操作中空白的部分。通过这一年的开发,我能胜任这方面的工作,能独立完成这方面的工作。
再次,c#方面存在一些不足。LocALhOST通过c#这次软件的开发,也发现自己的不足,如基础知识掌握不牢,缺乏编程整体思想。这些都是需要在工作中完善和改进的。
2、数据库开发
数据库是伴随着项目以来用的最多最平凡的技术。以前对数据库只是会一些简单常用的操作,经过这一年项目的实战,对数据库的操作增加了一些丰富的经验。为以后的工作和经验的积累都奠定了坚实的基础。同时在项目中还用到了oracel与access数据库,这是我的收获。
优点:
能熟练的运用数据库技术进行开发。特别是对sql数据库的操作,经过这么长时间的积累,基本上能合理的设计和新建数据库,同时在数据结构上也加强了对数据库的理解。通过项目的实践现在能熟练使用和编写多种sql语句。还掌握了一些关于数据库优化sql语句优化的方法,能进行一些简单的优化。
缺点:
数据是一门比较先进的技术,并不是你会写一些sql语句,能建几个数据库你就是数据库工程师。要成为一个好的数据库管理员是要经过长时间的工作积累。针对自己的不足,在以后的工作和学习中多接触,多运用新的知识点。充实自己的经验和知识储备。
二、团队协作
上面的成功与收获,除了自身努力外,以及公司的支持。是这个团队铸造了我。我们这个团队也是因为有了我们这些拼搏协作的队员,使得它成为一个具有务实、拼搏、创新精神的团队。我与软件研发小组是一个整体,这里的团队总结也就是我在这个团队中的收获。
务实:公司下发的任务,下发的工作,件件都是用心去做的。我们这个团队中没有一个人在工作的时候做了工作以外的事情,都是实实在在的做跟工作相关对公司有益的事情。相信在伍经理的带领下现在是这样,以后同样也是这样。
拼搏:公司给的每一个任务不管它多难,如果工作没有完成我们会晚上加班,也要尽可能的完成当天的工作。如果工作实在忙,为了赶进度我们放弃周末休息时间也要尽可能的使项目提前。
创新:现在我们开始项目的时候都会进行研讨,一般都会进行一个效率和逻辑的分析与讨论,保证程序正确的前提尽可能的提高程序的效率。
互助:我们小组内只要任何一个人出现技术或其它的问题,我们都会彼此都会尽可能的去帮助他。不会因为某一个人而拖住整个项目滞后。
交流:我们在项目中会及时沟通自己的收获,特别是一些针对性的技术问题。这样可以省了很多重复研究的时间,这是一笔很可观的时间。
在交流中只要我会的,我懂的,我不会去吝啬。我会积极的去与你交流,我的团队名言“人强团则强,人弱团则削”。
三、个人成长
通过公司这快一年的锻炼与学习我真的进步了很多,不管从技术上还是做事上,都不像以前那样了。我在公司学到的懂得的使我飞速成长。
技术上:不管从语言上还是做事的逻辑上都得到了很大的的提高。现在在软件小组里面自己能独立完成一部分工作,承担自己的责任。
程序员季度总结报告2
光阴如梭,一年的工作转瞬即将成为历史,伴随着新年钟声的临近,我们依依惜别硕果累累的过去,满怀热情的迎来即将到来的新的一年。在这年终之际,现对来公司一年的时间里所作的工作总结如下:
一、____项目的编码工作
从了解____项目的背景、及计划安排,熟悉____公司制度及业务流程,再到熟悉新能开发模式,之后我根据需求调研报告,从基本的数据库创建,到编码,完成了销售部、生产部、采购部、质检部四个模块的基本单据的制单、审核、选单、查询、打印等系列的编码工作;完成了____项目的模块测试及流程测试。
通过这段时间的努力,使我个人的耐心、细心程度及对工作的合理安排得到了锻炼,学会了在繁忙之中找条理,危难之中找希望。同时自己也有一些不足之处,一些细节地方技术上还不太成熟,还需加以学习与钻研。
二、erp项目的实施工作
从__月初开始进行____项目的实施,每天早起赶在企业上班前赶到企业进行erp的实施。实施期间主要是软件的安装实施及对企业的erp系统的使用人员进行软件使用培训;纪录客户使用过程中出现的问题,晚上下班后加班加点将每天的小错误及客户变更修改完毕。通过这项工作,使我原本欠缺的业务能力得到了很大的提高,并学到了很多与客户交流的技巧及业务上的知识,更加明晰了erp系统的流程。但离一个成功程序开发人员的标准还差得很远,在今后工作中,定会多多注意,加以改善。
三、帮助和使用手册文档的编写
帮助的编写使我熟悉了____的使用,为后期的oa开发也奠定一定的基础,使用说明的编写,使我更加加深了项目开发的整体思路与技术要点,总结了前期开发和实施中碰到的问题,并又一次的对软件整体进行了测试,对暴露出的小bug进行了最后的修改。
四、利用工作之余的休息时间加强学习
注意收集有关____方面的资料文件,提高自己的处理新问题和解决新问题的能力,并加强学习java及oa方面的知识,为后期的工作打好基础。
展望临近的新一年,我会更加努力、工作上认真负责,再接再厉,更上一层楼。相信自己会完成新的任务,能迎接新的'挑战。
程序员季度总结报告3
在过去的一年中,我担任公司开发部的一名程序员,主要从事着____项目的开发工作,这一年来我低调努力工作着,不求闪亮显眼和光芒四射,只为平静和淡定;这一年中所做的成绩如下:
一、独立开发方面
____项目中本人独立负责开发会计处的三个子系统:会计人员信用查询系统。记账机构信用查询系统。会计人员网上报备系统。这三个子系统上线后,方便了社会各界查验会计人员的真实信息、方便了查询合法的记账机构信息,以及方便了各单位对会计人员的报备。
二、团队开发方面
餐饮行业项目,在团队开发项目中直接参与了____餐饮有限公司总部的信息综合管理平台项目,主要负责的系统有:房屋租赁合同管理系统。短信收发管理系统。会员管理系统。基础信息管理系统和人事管理系统的部分功能模块。系统应用后,____在管理全国各门店房屋租赁合同上,一定程度上提高了管理效率,并且及时有效提供了相应预警信息;短信收发系统方便了总部及时传递各项信息;会员系统更好的管理全国各门店的会员信息;人事系统在管理中减少工作量等。
三、项目管理方面
金融行业项目,我参与了____银行____分行,企业转账管理系统中的部分模块开发。本系统方便了企业快速实现大量和复杂的转账工作。____项目正在负责和开发的是住房货币化补贴网上申报审核系统。本项目采用了新技术,使界面更加大方美观,很大程度上改善人机交互平台的效果。
普通企业虽涉足软件开发业务,但由于业务主导方向不是软件,企业领导往往忽视软件工作的特殊性,对软件的认识停留在“程序员编一些代码”的水平上。对企业内部的软件开发缺乏管理意识,使得软件开发在“认识上”就面临问题。
与IT业的软件开发组织相比较,普通企业中的软件开发工作机构小、人员少。企业里的软件人员待遇低,难以吸引高水平的人才,开发队伍中的人才流失率达到50%以上。由于没有高水平的开发人员和技术管理人员,软件工作状况处于初级的水平,软件开发不能按照软件工程的要求执行。企业既对软件工作没有清晰的投入产出期望值,对效果不满意,同时又对软件工作手足无措。
在这种情况下软件生产的效果不佳,进行改进势在必行。但这种改进既要利于软件开发水平的提高,又要改进整体环境,困难显而易见。要彻底地改进企业软件开发,我们要先总结一下企业里开发软件的几个主要问题。
不恰当的组织结构
某企业的软件开发工作模式如下:当面临软件需求时,成立一个临时项目小组,由提出需求的业务人员为小组组长;指定几个软件程序员为组员;业务人员提出业务设想,程序员整理需求和编程,业务设想不断更新,软件开发随之变化,最后业务人员认为效果满意则采纳,认为不可行或开发出的效果不好则项目自动取消。 这是一个比较典型的、作坊式的企业软件开发的组织模式。
在这个例子中可以看到,许多企业的软件开发模式存在问题,这类项目开发组织机构关系不平衡:开发人员处于被支配地位,利于开发的需求无法得到满足;没有程序开发主要负责人,在技术上缺少整体性考虑和设计,不能按照软件工程执行;操作过程不规范,一个好的业务设想会因为缺少科学的工程过程、充分的可行性研究、完善的产品设计,导致开发出的软件产品与设想的产品功能效果相距甚远。这样的项目组织结构,生产软件的成功率可想而知。
职责分配不当
软件系统建立过程中需要多方面人才:需求方人员、懂得软件项目管理的人员、软件程序员、系统分析员。普通企业中由于对软件生产的不了解,往往由软件需求提出方人员对软件工作直接管理。这个工作显然超过了其能力范围,不符合软件工作的相关原则。业务人员作为项目负责人,既不能合理计划软件开发工作,也不能管理好软件工作中的各种风险。这将使软件开发处于无序的风险之中。
以笔者了解的一个项目为例。该项目的业务负责人既不懂软件也不懂项目管理,但在项目中对于软件开发工作的时间要求、工作分配有绝对的控制权,而开发人员仅成为编程机器,导致开发人员士气低下。该项目差两周就要对外时,业务负责人才要求开发人员在一周内完成开发工作。而实际上,开发这个业务的软件需要至少一个半人月的工作量。可想而知,这个项目最终以失败告终。
工作流程不规范
由于企业的软件开发一般是为了对内部业务进行支持,是辅的服务工作,所以一般的企业忽略了投资预算和与业务相关联的成本核算。
企业里软件开发的随意性还表现在:没有软件相关的规范管理工作,缺少项目管理的方式方法和应遵守的工程过程,项目成败完全依赖个人因素和项目小组的自行组合能力;缺少高水平的技术人员和管理人员,软件方面开发经验不足,不能把握软件工程各阶段的工作重点,没有完善的需求确认过程和完整的系统设计,造成重复编程和更改大量程序。
有一个实例:某项目开发程序只保存在程序员开发用的计算机中,未加备份。开发过程中,程序员的机器硬盘突然出现故障,软件源文件处于极度危险之中,最后经过硬件厂商做硬盘修复,才避免前功尽弃。
可以说,我们的企业开发软件或多或少在某些地方存在“畸形”的现象。项目人员各居其位、各司其职的完善分工,在现在的企业内部软件项目组里实不多见。
据统计,企业开发软件中能达到投入使用标准的项目不足60%;已经开发但尚未完成或刚试用就宣告终止的项目占23%;使用一到二周时间后就宣告终止的项目占17%。而在60%完成项目中,有95%项目的维护期远超过软件开发期或需要不断升级。其主要原因是需求描述不充分,系统运行后还不断追加功能,开发周期短,没有充分的测试时间等,由此导致项目的软件开发工作几乎没有结束标志。从开发周期的角度来看,投入开发工时6个人月以上的项目的失败率达到50%以上。在所有项目中令用户比较满意的项目不足5%。
程序员年度工作总结1以前在校很少自己做程序,对软件工程更是一无所知。来到公司,开始接触"大规模"(其实现在看来实习的项目其实还是很小的)软件开发,一时真的有些迷茫。比起VSS,MVC,QA,CMMI,我对JAVA,JSP,_ML的一窍不通根本不值一提。大家都不想输在"起点",所以都默契地在加班,这样一直持续了实习的两个月。
刚来的时候"始业教育"显得慢吞吞,我们还经常盘算去哪哪玩之类的。我和__(20个新生里一个南区的兄弟,软件学院的)还经常出去吃各种小吃,每到一处都尝尝本地的风味,这是他的习惯。之后开始的培训还不是很难过,JAVA,C++,ORACLE,老师们讲的很"好",可以说是非常好,好得我们没有几个人能听懂。大家开始发愁,我也是每天晚上都基本看书到10点。
"我心说得亏哥们我还练过",来之前的2月份我就自己买了一本THINKINGINJAVA,看懂看不懂怎么说也算是准备了一下JAVA。C++虽说没去上过课,但凭我的直觉我就一下看中这东西很有用,自己也看过一阵。至于ORACLE,虽然不了解,但毕竟因为佩服"云飞扬"的性格和敬业精神,咱SQL选修也不是白混的。专业倒还有点"基础",再加上咱这自学能力也不是吹的,基本维持。可等到后来的日语课就全迷糊了:本就没有语言天赋,再加上记忆严重欠缺,总是特别害怕去上日语课。不过特别喜欢那个老师说话的感觉,加上她一直对我都很好,所以还是很用心的学着。
随着培训的收尾,我们开始正式进入项目。从需求分析,概要设计到详细设计,我们一步一步的开始接触软件开发的每个细节。不了的就是每天都要记"周报",填写自己的劳动成果。因为这个我还被QA通报了好几次呢,真的很郁闷。其实现在我很感谢这种制度化的东西,某些情况下好习惯的养成是要靠强制来确保的。详细设计之后就是企盼已久的编码,我心想终于可以做点"正事"了。现在回头一看才知道,其实编码只占软件开发的整个过程劳动量的1/4左右,而且其他的环节也不是想象中的那么无足轻重。
编码我其实做的很不好,主要是因为需求分析阶段就没有认真仔细的理解需求和规格说明,加上编码时一个关键时段我回校和老同学叙旧。那阵项目经理(PM)就经常和我们说,"有问题自己想办法,不要经常问我"。PM其实是在叫我们自己酝酿,遇到难题只有"憋"一"憋"才能有真的收获。而我不在的那三天正好是大家技术/思路上的一个"跃迁",很多难题的解决方法都基本成熟,大家的编码也接近50%了,所以回来时我感觉已经掉队很多。再一个就是编码中期时机器出问题,环境搭不上了,这使我更加紧张和急躁,大大影响了我的士气。
后来利用五一其间的加班我终于赶完了自己的模块,达到了第一个里程碑。其实从发现落后到加班赶完这段经历,对我来说也具有里程碑的意义。不仅考验了我自己的能力和心理素质,也证明了我对集体的责任感和合作意识。我可以叫别人来帮我做赶上进度,但那样我会错过自己学习的机会,以后再遇到难题我还是不行;我也可以硬着头皮导致项目延期,那样我以后的日子保证不好过,而且这么做也不符合我的性格。事实证明我顶住压力独立完成任务不管是对集体还是对我个人都是一件大好事。
紧张的编码之后是单体测试,很多人都在继续编码,原来大家的编码都是没有完全做完。本是自己给自己挑毛病的过程,我们却都用来完成之前没有完成的任务,说来不禁可笑。
单体测试之后就是恶梦一样的系统测试。传说系统测试压力很大,测试组找到BUG上报后这边就得限期修改,之后提交给测试组进行下一轮的测试,回归若干次,测试结束后产品达到允许的缺陷率才可以出荷。不过由于这时已经有人要返校体检,其他人也军心涣散导致集体"早退",测试没有很正式的进行,只是简单的做了一下界面的统一和功能的检查,连性能测试都没做。不能不说是实习的一个败笔。
回想之前的工作,不到10周时间我们从学生开始转变为员工,从对公司完全陌生到有了一定的了解,不管是处世为人还是技术思想我们都有确确实实的进步。
再结合我自己来看一看。的收获就是我克服了有些自大的坏毛病,虚心的向别人学习。我知道这就是我练习与不同类型的人适应,交流的开始。技术上自不必说,我绝对学到了以前在学校一年也不一定学到的东西,这就是一个态度的问题。"态度决定一切",这句话太有道理了。
另外一点遗憾就是小孟说的,我似乎也感到自己有点"工作狂"的味道。为了拿下那些代码和BUG,我有好几周都连续加班到晚上11点,由于工作占用了时间,我连以前一直的跑步都没坚持下去。这样不是好兆头,我必须要养成合理的作息制度,不管工作怎样忙,必须不能占用自己的作息时间。还有一个就是和别人的交往。曾因为一些小事分别和老胡和哲明闹了不愉快,幸好后来都说开了,大家没计较。我一定要严谨,克制,绝对不在以后的正式工作中做这样的蠢事。
总体来说,我对实习充满了快乐的回忆,也许是因为我在大学的生活过于平淡和压抑。希望我可以延续这样的快乐,将自己带上事业的顶峰。
程序员年度工作总结2过去的一年,在马总的亲切关怀,伍经理的殷勤管理与认真指导,软件研发部的团结协作,以及在公司这充满奋斗的环境下,我以严肃认真的工作态度和百折不饶的精神,努力的完成了公司的各项工作,在软件研发、团队协作和个人成长上也取得了一定的成绩。在公司一年的工作已经结束,特向公司总结汇报
第一部分工作总结
一、软件研发
根据公司的安排,项目的需要。在自身的努力、伍经理的帮组,团队的合作下,克服重重技术困难,增长了工作经验,收获丰盈
1、asp.net开发
以前我在其他公司也做过一些开发,但是底层和架构与页面样式我都是没有涉及到的。通过这一年在本公司的的这些项目程序中的锻炼,我成长了,我学会了很多很多。
首先,面向对象语言的收获。对于当前编程的主流思想是对象,任何事物都可以用对象来表示。以前理解这些话很费解都是从表面上理解,没有从深入的体会,通过这次asp.net项目的深入,不管是数据还是外部一些条件我们都可以抽象成对象,都可以用对象来表示,具体可以用语言中的类方法等。asp.net如此,c#如此也同样如此。
其次,具备独立完成vb.net知识方面的能力。以前没有做过vb的东西,加上这次深入的做,这次涉及到的领域也非常广,常用的重要的都有涉及,并且还补充_ml,t实际操作中空白的部分。通过这一年的开发,在.net方面我能胜任这方面的工作,能独立完成这方面的工作。
再次,c#方面存在一些不足。通过c#这次软件的开发,也发现自己的不足,如基础知识掌握不牢,缺乏编程整体思想。这些都是需要在工作中完善和改进的。
2、数据库开发
数据库是伴随着项目以来用的最多最平凡的技术。以前对数据库只是会一些简单常用的操作,经过这一年项目的实战,对数据库的操作增加了一些丰富的经验。为以后的工作和经验的积累都奠定了坚实的基础。同时在项目中还用到了oracel与access数据库,这是我的收获·
优点:能熟练的运用数据库技术进行开发。特别是对sql数据库的操作,经过这么长时间的积累,基本上能合理的设计和新建数据库,同时在数据结构上也加强了对数据库的理解。通过项目的实践现在能熟练使用和编写多种sql语句。还掌握了一些关于数据库优化sql语句优化的方法,能进行一些简单的优化。
缺点:数据是一门比较先进的技术,并不是你会写一些sql语句,能建几个数据库你就是数据库工程师。要成为一个好的数据库管理员是要经过长时间的工作积累。针对自己的不足,在以后的工作和学习中多接触,多运用新的知识点。充实自己的经验和知识储备。
二、团队协作
上面的成功与收获,除了自身努力外,以及公司的支持。是这个团队铸造了我。我们这个团队也是因为有了我们这些拼搏协作的队员,使得它成为一个具有务实、拼搏、创新精神的团队。我与软件研发小组是一个整体,这里的团队
总结也就是我在这个团队中的收获。
务实:公司下发的任务,下发的工作,件件都是用心去做的。我们这个团队中没有一个人在工作的时候做了工作以外的事情,都是实实在在的做跟工作相关对公司有益的事情。相信在伍经理的带领下现在是这样,以后同样也是这样。
创新:现在我们开始项目的时候都会进行研讨,一般都会进行一个效率和逻辑的分析与讨论,保证程序正确的前提尽可能的提高程序的效率。
互助:我们小组内只要任何一个人出现技术或其它的问题,我们都会彼此都会尽可能的去帮助他。不会因为某一个人而拖住整个项目滞后。交流:我们在项目中会及时沟通自己的收获,特别是一些针对性的技术问题。这样可以省了很多重复研究的时间,这是一笔很可观的时间。
在交流中只要我会的,我懂的,我不会去吝啬。我会积极的去与你交流,我的团队名言“人强团则强,人弱团则削”。
三、个人成长
通过公司这快一年的锻炼与学习我真的进步了很多,不管从技术上还是做事上,都不像以前那样了。我在公司学到的懂得的使我飞速成长。
技术上:不管从语言上还是做事的逻辑上都得到了很大的提高。现在在软件小组里面自己能独立完成一部分工作,承担自己的责任。
第二部分____年工作设想
通过今年的实践和学习,明年是一个新的开始,立足当前的优缺,肩负起一个软件工程师应有的工作和性质。希望为公司明年的发展尽的努力,也希望自己明年有更大的收获。明年计划在以下几方面有所突破,有所建树:
一、在编程语言掌握方面,达到本公司的编程思想—不被语言所束缚。在这方面伍经理是我的榜样,积极努力的提高自身的技术水平,真正做到不被语言所束缚。
二、数据库方面,在当前已有的基础上提升自己,明年自己给自己定的目标是,能非常合理的去使用数据库各类技术,掌握更多的数据库优化思想和技术点。有时间多向许总交流。
三、加强软件开发的辅知识使用和积累。针对当前软件开发中的一些情况,明年更加积极的学习javascrip、aja_和fle_等技术。能辅的把软件做的更好。
四、工作质量上,现在编程我是属于会写会编和局部效率,并不是全局的效率,明年一定要做到,编一个高效率的代码。这就要综合上面的三点,才能使其达到全局的高效。
程序员年度工作总结3过去的一年,我参与了较多的产品设计,从中受益匪浅,不仅学到了很多专业知识,对动态产品有了更全面的理解和把握,而且培养了我作为机械工程师所应该具备的基本素质。同时,我坚持自学,学习了当前机械行业新的工具软件和专业书籍,提高了理论水平。现将具体工作总结如下:
1.设计、调试出口印度的摩托车试验机
印度之行是成功的,也是艰难和值得回味的。我们一行三人,在没有翻译的情况下,克服当地天气炎热和饮食不适应的困难,在不到三周的时间内将四台设备调试完毕,拿到了用户的验收纪要,这是值得肯定的。但,我觉得也有一些遗憾的地方。由于是第一次做车辆产品的出口,缺乏经验,我们的包装和防锈做的不够好,设备出现了故障,让印度人对我们的满意度下降。如果我们注意这些细节,用我们的产品打开印度这个工业刚起步的国家的大门,那么,我相信我们会从中受益。
2.主管设计PWS-J20B1
此试验机已经交检完毕,各项指标达到了技术协议要求,等用户款到发货。
3.参与设计PWS-200B
与毛工一起设计,对液压夹头,气液增压泵等的工作原理有了更深入的理解,从毛工身上学到了很多东西。比如,设计的严谨和严肃性,此产品已发货。
开发四部的工作是繁重和艰巨的,我在车工和毛工的指导下,较好的融入了这种紧张和严谨的氛围中,较好地完成了各项任务,自身的业务素质和工作能力有了较大提高,对工作有了更多的自信。
程序员年度工作总结4我是一名程序员,在过去的一年里,软件研发部团结协作,以及在公司这充满奋斗的环境下,我以严肃认真的工作态度和百折不饶的精神,努力的完成了公司的各项工作,在软件研发、团队协作和个人成长上也取得了一定的成绩。在公司一年的工作已经结束,特向公司总结汇报如下:
一、软件研发
根据公司的安排,项目的需要。在自身的努力、伍经理的帮组,团队的合作下,克服重重技术困难,增长了工作经验,收获丰盈:
1、asp.net开发
以前我在其他公司也做过一些开发,但是底层和架构与页面样式我都是没有涉及到的。通过这一年在本公司的的这些项目程序中的锻炼,我成长了,我学会了很多很多。
首先,面向对象语言的收获。对于当前编程的主流思想是对象,任何事物都可以用对象来表示。以前理解这些话很费解都是从表面上理解,没有从深入的体会,通过这次asp.net项目的深入,不管是数据还是外部一些条件我们都可以抽象成对象,都可以用对象来表示,具体可以用语言中的类方等。asp.net如此,c#如此java也同样如此。
其次,具备独立完成vb.net知识方面的能力。以前没有做过vb的东西,加上这次深入的做,这次涉及到的领域也非常广,常用的重要的都有涉及,并且还补充_ml,java实际操作中空白的部分。通过这一年的开发,在.net方面我能胜任这方面的工作,能独立完成这方面的工作。
再次,c#方面存在一些不足。LocALhOST通过c#这次软件的开发,也发现自己的不足,如基础知识掌握不牢,缺乏编程整体思想。这些都是需要在工作中完善和改进的。
2、数据库开发
数据库是伴随着项目以来用的最多最平凡的技术。以前对数据库只是会一些简单常用的操作,经过这一年项目的实战,对数据库的操作增加了一些丰富的经验。为以后的工作和经验的积累都奠定了坚实的基础。同时在项目中还用到了oracel与access数据库,这是我的收获。
优点:能熟练的运用数据库技术进行开发。特别是对sql数据库的操作,经过这么长时间的积累,基本上能合理的设计和新建数据库,同时在数据结构上也加强了对数据库的理解。通过项目的实践现在能熟练使用和编写多种sql语句。还掌握了一些关于数据库优化sql语句优化的方法,能进行一些简单的优化。
缺点:数据是一门比较先进的技术,并不是你会写一些sql语句,能建几个数据库你就是数据库工程师。要成为一个好的数据库管理员是要经过长时间的工作积累。针对自己的不足,在以后的工作和学习中多接触,多运用新的知识点。充实自己的经验和知识储备。
二、团队协作
上面的成功与收获,除了自身努力外,以及公司的支持。是这个团队铸造了我。我们这个团队也是因为有了我们这些拼搏协作的队员,使得它成为一个具有务实、拼搏、创新精神的团队。我与软件研发小组是一个整体,这里的团队总结也就是我在这个团队中的收获。
务实:公司下发的任务,下发的工作,件件都是用心去做的。我们这个团队中没有一个人在工作的时候做了工作以外的事情,都是实实在在的做跟工作相关对公司有益的事情。相信在伍经理的带领下现在是这样,以后同样也是这样。
拼搏:公司给的每一个任务不管它多难,如果工作没有完成我们会晚上加班,也要尽可能的完成当天的工作。如果工作实在忙,为了赶进度我们放弃周末休息时间也要尽可能的使项目提前。
创新:现在我们开始项目的时候都会进行研讨,一般都会进行一个效率和逻辑的分析与讨论,保证程序正确的前提尽可能的提高程序的效率。
互助:我们小组内只要任何一个人出现技术或其它的问题,我们都会彼此都会尽可能的去帮助他。不会因为某一个人而拖住整个项目滞后。
交流:我们在项目中会及时沟通自己的收获,特别是一些针对性的技术问题。这样可以省了很多重复研究的时间,这是一笔很可观的时间。
在交流中只要我会的,我懂的,我不会去吝啬。我会积极的去与你交流,我的团队名言“人强团则强,人弱团则削”。
三、个人成长
通过公司这快一年的锻炼与学习我真的进步了很多,不管从技术上还是做事上,都不像以前那样了。我在公司学到的懂得的使我飞速成长。
技术上:不管从语言上还是做事的逻辑上都得到了很大的的提高。现在在软件小组里面自己能独立完成一部分工作,承担自己的责任。
程序员年度工作总结5光阴如梭,一年的工作转瞬即将成为历史,伴随着新年钟声的临近,我们依依惜别硕果累累的20_年,满怀热情的迎来即将到来的20__年。在这年终之际,现对来公司一年来的时间里所作的工作汇报如下:
1、正义erp项目的编码工作。
了解新疆正义项目的背景、及计划安排,熟悉正义公司制度及业务流程,再到熟悉新能开发模式,之后我根据需求调研报告,从基本的数据库创建,到编码,完成了销售部、生产部、采购部、质检部四个模块的基本单据的制单、审核、选单、查询、打印等系列的编码工作;完成了正义项目的模块测试及流程测试。
通过这段时间的努力,使我个人的耐心、细心程度及对工作的合理安排得到了锻炼,学会了在繁忙之中找条理,危难之中找希望。同时自己也有一些不足之处,一些细节地方技术上还不太成熟,还需加以学习与钻研。
2、、正义erp项目的实施工作。
从十一月初开始进行正义项目的实施,每天早起赶在企业上班前赶到企业进行erp的实施。实施期间主要是软件的安装实施及对企业的erp系统的使用人员进行软件使用培训;纪录客户使用过程中出现的问题,晚上下班后加班加点将每天的小错误及客户变更修改完毕。
通过这项工作,使我原本欠缺的业务能力得到了很大的提高,并学到了很多与客户交流的技巧及业务上的知识,更加明晰了erp系统的流程。但离一个成功程序开发人员的标准还差得很远,在今后工作中,定会多多注意,加以改善。
3、帮助和使用手册文档的编写。
帮助的编写使我熟悉了dreameweaver和fireworks的使用,为后期的oa开发也奠定一定的基础,使用说明的编写,使我更加加深了项目开发的整体思路与技术要点,总结了前期开发和实施中碰到的问题,并又一次的对软件整体进行了测试,对暴露出的小bug进行了最后的修改。
4、利用工作之余的休息时间加强学习。
平时注意收集有关pb方面的资料文件,提高自己的处理新问题和解决新问题的能力,并加强学习java及oa方面的知识(现转为学习.net),为后期的工作打好基础。
中图分类号:TP311文献标识码:A文章编号:1009-3044(2011)26-6409-02
Studying on Code for Programming Standardization
HE Cheng-ju1, GUO Wei2
(1.Nanning Municipal Public Security Bureau, Nanning 530022 China;2.Nanning City Personnel Testing Management Office, Nanning 530022, China)
Abstract: There are something to focus on when using c# language programming, according to author's many years experience on software developing, this paper mentions several points need to concentrate on when programming and gives a way to resolve the problems base on practical examples.
Key words: software developing; programme criterion
随着软件行业的日益发展,C#作为软件开发语言中的后起之秀,在软件开发领域中的地位日益提高。目前,已成为面向对象开发中仅次于JAVA和C++的开发语言。本文探讨了运用C#语言开发软件中需要注意的编程事项,包括变量命名规则、方法格式、语句长度等方面需要注意的细节。
1 我们对软件开发有一定的认识
经历过大大小小的成功,也经历过不少的失败。对于软件编程,只有在有一定的编程水平和经验积累的情况下,才能写出质量较高的代码。一部完善的软件规范可以对程序员的工作起到事半功倍的作用,因此,需要有一套较为完善的软件编程规范来对程序员的编程行为进行约束。
那么,对于代码规范都需要注意哪些方面呢?
1.1 同一项目组中,需要统一的编程规范
在软件规模和大小不断扩大的今天,个人单打独斗完成一个软件编码工作的情况已经越来越少,更多的软件开发需要以团队合作的形式完成。这样就需要在项目开发之前,制定出一套相应的规范,方便程序员之间进行交流,在一个程序员离开项目组后,新加入项目组的程序员能够很快接手工作,进行新的功能开发。
在编程规范的制定当中,倘若项目组中之前从未制定编程规范,那么可以考虑以网上较为成熟的代码规范基础,结合核心程序员的编程习惯,制定出项目组的编程规范。这样既保证了核心程序员不至于因为编程规范的大规模变动而影响工作效率,也对新加入项目组对员工以及新入职的员工起到了良好的规范作用。如果项目组公司已有编程规范,那么则需要对新入职及新加入项目组的员工进行培训,以让新员工尽快将编程规范运用到工作中,在编写代码的过程中熟悉和掌握编程规范。
1.2 命名规则
变量、方法名、类名及接口名称的命名必须清晰明了,能够让人很快知道该变量的含义,避免容易被主观解释和难懂的名称。类似x、y、a1、b1这样的命名方式,不能让人很快理解该对象的含义,应尽可能使用于短循环索引中。
在变量命名时,必须采用英文名称命名变量。推荐在类属性中不要包含类名,例如Color.blackColor,应该命名为Color.black。
在类名、枚举类型、枚举值、事件、接口、只读静态字、接口、方法、命名空间、属性中应使用Pascal大小写规则,对于方法参数、方法变量应采用Camel规则。
在大小写规则中在,对于C#语言最重要的两个规则是Pascal和Camel规则。Pascal大小写规则的含义是“将标识符的首字母和后面连接的每个单词的首字母都大写”,例如,GetColor();Camel大小写规则的含义是“标识符的首字母小写,而每个后面连接的单词的首字母都大写”,例如blackColor。这样方便开发人员理解变量及类名的含义。
对于ASP页面中的ASP控件,命名时采用控件名简写+英文描述的方式进行命名,采用Camel规则进行命名,英文描述首字母大写,这样便于区分控件类型,提高代码的可阅读性。
1.3 代码格式
在同一项目中,代码的编写格式需统一,每行代码的开头统一缩进四个空格,代码需要垂直对齐左大括号和右大括号,格式如下:
If (x == 0)
{Response.Write("必须输入用户编号!");}
不允许以下格式出现:
If (x == 0) {
Response.Write("必须输入用户编号!");}
对于if、while这些控制软件流程的语句,必须跟随大括号,这样不易产生混乱。同时,大括号需要另起一行,不能与语句并行。
由于一般开发人员所用的电脑显示器尺寸为17寸4:3比例的显示器,分辨率为1280*1024像素,因此每行代码列宽大约控制在110个字符左右,这样既基本满足了Visual Studio开发软件的布局宽度,又满足了17寸显示器在显示上的需要。在代码超出规定列宽后,请在逗号后换行或者这操作符前换行。
为了区分代码块,方法与方法、类与类,以及方法中的逻辑块之间、类的属性与属性之间、属性与方法之间需要增加空行,以方便程序员阅读和熟悉代码,在发现Bug的时候,也能很快定位到相应代码处进行修改。
方法中的关键词和左括号、等号与变量以及赋值结果都必须以空格隔开,方法中的每个参数除了以逗号隔开外,必须在逗号后添加一个空格。。在Visual Studio运用较为熟练的情况下,完成方法里的最后一条语句之后,删除方法的右大括号,然后自己添加一次,所有必须的空格均可由Visual Studio2008/2010自动添加。上述方法同样适用于为ASP页面编写的JavaScript函数。
对于方法而言,每个方法最好仅仅完成一项功能。若对代码进行分层,每层代码必须仅仅完成一种类型的功能。这样的架构不仅满足了面向对象编程中抽象和封装的概念,也提升了代码的可阅读性。每行最多只有一条语句,超过一条语句会让代码显得不美观。对于方法中代码的行数,如果是按照某些大公司的要求,每个方法体中代码行数不要超过40行,但是对于 C#编程,尤其对于新入职的员工,很难达到这一要求,那么也应尽量控制代码的行数,以尽量简洁和高效率的代码完成功能的编写。
对于新人而言,在编写代码中很容易犯的一个错误是将别人写的代码移植到自己的代码中时,会将与实现功能不相关的代码一起拷贝到自己的文件中,甚至会由于执行不相干的功能而降低后台文件运行的效率。那么,必须在代码移植之后,仔细检查一遍代码,若是不必要的功能,需要尽可能的精简掉,以免影响代码效率。
1.4 代码分层
在软件规模不断扩大,开发工作日益加重,尤其是以JAVA、为代表的网络编程发展不断加快,技术手段日新月异的今天,软件代码分层的重要性不断体现。软件架构分层不仅提高了代码的可读性和优雅型,更是大大提高了代码执行效率。
目前,网站开发通用的MVC(Model、View、Controller)架构就是一个很好的分层架构例子。在此基础上,通过对Controller层的进一步细化,可将该层分解为页面控件控制层(主要是JavaScript函数)、后台逻辑层、数据库访问层、数据模型层等架构,在这其中,页面控件控制层控制前台页面的样式,通过WebService调用后台逻辑层的运行结果。后台逻辑层通过调用数据库访问层的代码,获得从数据模型层中返回的操作数据库结果。这样的分层结果,使得每一层次的代码只能调用自己下一层次的方法获得返回结果,层层调用,层次分明,大大提升了代码的效率和可读性。
1.5 代码注释
代码注释是软件编程中一个非常重要的问题。程序员在编写代码的过程中,如果能多花半分钟编写代码注释,在后续开发中将大大提高代码的可读性和可重用性。
例如,如下一段代码:
if ( 1 == 1 )
{statement;}
相对于初学者或者新加入项目组的程序员来说,对于“1 == 1”这个判断条件的理解就会产生歧义,但是如果在if语句后加上注释,如下所示:
if ( 1 == 1 )// always true
通过注释语句,明显可以知道,该判断条件的意思是每次该语句的判断结果均为true,每次程序运行至此都将进入该判断语句下的方法体中。
如果是初学者,在不熟悉代码注释格式的情况下,可以考虑采用Visual Studio的Visual Assist X插件来统一注释的格式。在日常开发工作中,对该插件的注释功能应用较多,但是其他功能相对使用较少。该插件可以自行编辑注释的格式,也可以对注释及代码拼写进行校正。该插件也可以对Visual Studio的编程界面进行更改,让程序员在工作的时候更为舒适。
1.6 代码优化
对于 C#网页编程,代码效率的高低主要体现在循环语句和分支判断语句的使用上,尤其体现在数据库操作和DLL文件的引用调度上。良好的编程规范,能够大大提高代码的运行效率。
对于循环语句,需要减少一切不必要的循环操作。当页面逻辑完成必要的循环操作后,如果还未达到循环体语句规定的循环次数时,为了减少不必要的服务器资源消耗,提高页面反应速度,必须跳出循环。对于分支判断语句,例如if()...else if()...else...以及switch ()...case “xxx”:...,需要将命中次数较多的条件放在判断语句序列的前列,命中次数较少的判断语句放在判断序列的末尾。以
上的编程规范在网站访问量较少的时候体现不明显,但是当网站的访问用户达到一定数目之后,将会对服务器负载产生较大影响。
在完成一套软件的开发之后,如果有时间,必须反复不断的对源代码进行重新阅读和检查,在检查过程中可以不断发现源代码中可以优化的部分。提高了软件效率的同时,也提高了自己的编程水平,积累了更多的经验,一举两得。
2 结论
总之,上述几点是我们对于软件代码规范中的一些小小的看法。对于编程来说,需要不断地在实践中总结经验,时刻将编程规范运用于软件开发中,通过实践,不断提高自己的编程水平,养成良好的编程习惯,提升代码的运行效率,增强代码的优雅性。
参考文献:
[1] 石晓宁.C/C++风格软件的编程规范与稳健性探讨[J].雷达科学与技术,2005(6):346-349.
中图分类号:TP311.52 文献标识码:A 文章编号:1671-7597(2014)15-0053-01
Java语言具有工程强大和简单易用两个特征,是静态面向对象编程语言的代表。Java的三层结构程序由用户层、数据层、web服务层(业务逻辑层)组成。在功能上可以满足数据应用平台的开发。但是从技术操作的难易度上来讲,Java的使用要难于微软的net和asp,如果没有Java程序的实际开发经验,仅靠J2ee开发工具和Java基础知识的培训来建立基于Java的数据应用平台是很困难的。通过实践的探索,降低Java程序的开发难度可以通过建立实用型Java程序开发框架来实现。
1 流行框架较难学习
在程序开发界普遍认为可以通过Java程序的开发框架来减少Java程序的开发难度,这也是Strus、Hibernate等框架很流行的原因所在。对资历较深的计算机专业人员来讲这些框架的难度不高,但对经验不丰富的计算机专业的人而言难度就
很高。
2 建立一种适合专门信息系统的实用型框架
因为数据查询和数据处理是数据分析应用的主要业务需求,所以尽可能建立一种只运用SQL语言和Java语言构建起来的框架,来满足全部的数据处理业务所需,如:JavaScript、Html、CSS、J2ee、Xml等。Java三层结构应用程序开发框架的建立虽然较难,但只要从简单的应用框架建立做起,积极总结项目开发应用在实际过程中所需的各项功能,然后再逐步添加到框架中,这样就可以充分保证该框架的实用性,并在后续的项目应用中对框架进行逐步完善。
3 设计框架的主要思路
由富有Java程序开发技术经验的程序员,根据Java面向对象的特性,把JavaScript、Html、CSS、J2ee、Xml等封装于框架层中,经过一定的开发完善,就可以使应用层程序员摆脱一些技术细节,通过Java语言满足自身业务需求和一些集成开发的高级功能辅助(如:“代码重构”等),从而改变程序编写环境。
设计该框架时,可采取一系列措施来简化应用层难度:首先,减轻程序员操作难度,尽量从数据库获取信息。框架数据表的字段类型、非空字段、主键等信息从数据库获取,并用在数据的自动输入校验中,省去额外程序。其次,尽可能使功能与Java程序文件形成对应的关系,减少相关文件数量;同时模型、视图、数据在Java程序文件中实现,降低维护成本。最后,方便的URL映射,流行框架中Java类对应关系的xml映射文件在再次定向浏览器请求URL时,会模糊对应关系,导致网页有错误显示,且很难快速找出问题所在。本框架中Java程序文件和URL直接一一对应,如果出现网页错误,能容易找出问题。
4 框架结构的介绍
4.1 数据访问对象Sql和DataStore
数据查询和处理是数据应用的关键,对于底层数据操作可以采用JDBC数据访问接口属性,但对应用层采取该方法就会出现中文字符集处理不好、使用不便等。DAO模式在业界较为看好,它要求应用程序用一个对象封装数据库访问操作。本文将常用的数据库访问划分为两类:一类是在Sql对象中封装相关功能,不涉及数据输入和显示;另一类是在DataStore对象中封装相关功能,涉及数据输入和显示。本文用Sql对象对DataStore对象进行简单数据处理。Sql查询脚本的读取通过Sql对象实现后,可将一些扩展查询条件添加在Sql查询脚本上,同时还可将数据库访问的字符集问题解决。
为实现数据访问功能,模仿PowerBuilder中DataStore对象,开发出Java版DataStore对象。与许多数据持久化方案(如:Hibernet等)相比,数据的容纳无需实体Bean来完成,这在一定程度上加强了数据处理的灵活性和缩减了Java类的量。再者,省去配置xml文件的程序,提高了时效性。
4.2 HzBean对象
由于HzBean是作为显示网页、响应浏览器指令的主要对象,因此如在网页上显示对象,名称要以“Bean”结尾且属性要继承HzBean对象。一些基础的数据处理事件(onSave是保存表格数据,onShowForm是显示表单,onShowMain是显示主界面等)都被封装在HzBean对象中;而且权限控制功能也能实现。
4.3 Html*对象
当需要控制浏览器端显示细节时,可运用Dramewave等工具设计jsp网页满足框架需求,但jsp文件是一个Java代码、jsp标签、Html的整合体,所以检查语法不能用编译器完成。本框架将常用Html元素封装在一批对象中。通常Html元素对象归于底层对象类,在要求严格控制显示细节时才可能被用到。在网页上显示Html元素,是用addBar、addSheet等在HzBean后代对象中的onShowForm或onShowMain中显示。通过此方法将弱类型Html标签用强类型Java对象替换,就可以加强Java的控制性。
4.4 DbConns对象
提供通过应用服务器数据库连接池或JDBC驱动来连接数据库的路径,可用来连接PostgreSQL数据库、Oracle、Sybase Adaptive Server Anywhere、Tomcat数据连接池。
5 结束语
本文中讲述的提供基础功能支持的框架,不仅可以大幅减小编写Java程序的难度,而且降低了对技术人员的要求。只要具备SQL和Java等基础知识,并经过短期培训后就能投入工作。为方便大家学习和对其改进,框架实行开源,通过在项目开发中不断完善框架程序,可使其功能日益完善。此外,开源代码也可省去用文档说明该框架程序的麻烦,为框架的理解和改进创造有利条件。同时,该技术也可推广到其他应用程序设计上。
参考文献