答辩一般都会根据你的设计论文和展板内容问。最通常的就是询问你的设计想法是什么。让后让你讲解你做的设计的设计风格和手段用的是哪种?设计特点体现在哪里。当然这些都是泛泛的话,最关键的是老师会找到一些你在设计中出现的问题来问你。有可能回答的出来,也有可能回答不出来,不管哪种,你都需要冷静一些,学会自圆其说,但是不能跟老师犟嘴,知道自己错的前提下尽量回答的圆满,把主要矛盾会比过去。参加答辩的老师也能是一些曾经教过你的老师,不用担心什么,他们基本上不会为难你的。
一:时间头文件 包含对时间的操作函数,就像一样2:取随机数的操作语句利用时间来取。rand()函数返回0到RAND_MAX之间的伪随机数(pseudorandom)。RAND_MAX常量被定义在头文件中。其值等于32767,或者更大。 srand()函数使用自变量n作为种子,用来初始化随机数产生器。只要把相同的种子传入srand(),然后调用rand()时,就会产生相同的随机数序列。因此,我们可以把时间作为srand()函数的种子,就可以避免重复的发生。如果,调用rand()之前没有先调用srand(),就和事先调用srand(1)所产生的结果一样。
最近很多人都在问如何学习编程。我觉得学习编程最重要的是入门,如果你入门的时候有一个好的方法和思路,打下比较扎实的基础,对今后的编程工作是很有益处的。即使在学习新的编程语言也无所谓,因为它们有很多相通之处,可以相互借鉴。 我认为可以先学习一下pascal,这个语言比较严谨,适合初学者。pascal它被称为教学语言,结构严谨,不像C语言那么灵活,易于理解和学习。 然后可以继续学习C语言,这个语言比较灵活。有了pascal的基础,在进行C语言编程就不会因为C语言的灵活而有问题 。后面的就可以学习VC什么的了。 C语言的书推荐谭浩强的,比较好。 我当时学习pascal和C语言的时候是将书后的习题都做了一遍,感觉效果很好。 当然了,学习什么语言也要看你具体准备从事什么行业。例如你要进行嵌入式开发,C就是很好的选择,如果是Windows开发,那么VC就不错。还有数据库方面的开发、网络开发等等。不同的语言适合不同的方面。要看自己的选择的,呵呵 。 还有很多人说自己的基础很差,甚至中学毕业什么的。其实这个并不重要,比较说英语,在计算机语言里所用到的单词量很少,而且都是常用词,经常使用就记住了。当然,如果你要看原文资料或者帮助的话,专业词汇比较多,不过在金山词霸的帮助下,经常看,也是没什么大的问题的。至于数学什么的,其实数学只是培养你一个逻辑思维能力,在初学编程的时候影响不是很大。况且,作为一个基础编程人员来说,上面还有系统分析师、项目经理,他们会把需求分析、概要设计和详细设计做好的,你只要按照文档写代码就OK了。不过,要上更上一步的话,其他基础知识就非常重要了,毕竟你不能写一辈子代码。 在你学习好C语言以后,个人建议好好学习一下数据结构和软件工程。这两门对你的水平提高都是很有帮助的。特别是软件工程,它能够使你按照科学的工程方法进行软件开发,对今后的发展很有好处。 只是一家之言,有不到之处,还望见谅! 参考资料:
根据上面的输出可以看出日期格式位置太短,你可以设定日期显示的长度printf("%12s", "Mon");如果还是短了或者超了,可以适当调整变量,然后在后面加\t进行控制这种格式化输出都是调节出来的,因为中文和英文的间距不一样!字体也有差异
就是问你的程序里用到了些什么算法,你是怎么实现这个功能的,有的时候还会问你的那个代码是什么意思,你的某个功能在哪里,你的这样的算法有什么优点,有什么缺点,你的这个程序可以怎么改进等
肯定会问一些关于 基本数据类型 比如 int 整形 char 字符型 等 复杂点就会问数组 指针等问题楼主 你学学这几点应该问题不大 祝你答辩顺利啊
#include <>,包含时间函数库,因为程序中要用系统时间time生成随机数。第二,你要做的是一个四则运算的题目,num1,num2是用来存储参加运算的两个数的。menu用来保存运算的类型,result保存运算的结果
只要课设是你自己做的,我相信什么问题都难不倒你
对于许多初尝文献综述的科研工作者而言,在写作的时候,常常不知如何动笔,建议你多看看计算机科学与应用这本期刊,,然后自己写吧,
关于计算机入门方面的书籍有:
一、《c语言程序设计 》
《c语言程序设计 》是2012年12月18日清华大学出版社于出版的图书,作者是黄容、赵毅。本书是学习C语言程序设计的基础教程,内容包括C语言概述、顺序结构程序设计、分支结构程序设计、循环结构程序设计、数组、函数、指针、结构体、文件等。
本书以程序设计思想的掌握为主线,以编程应用为驱动,通过案例和问题引入内容,由浅入深,循序渐进,重点训练学生的编程思想,能够充分提高学生的编程能力,锻炼学生的工程能力和创新能力,并鼓励学生利用所学C语言知识解决专业的具体问题。
二、《计算机概论》
《计算机概论》是出版的一本图书,作者是严世杰 金子葳 洪秀朋 周伯毓。本书主要讲述了整个计算机科学划分成体系结构软件数据组织和机器的潜力四大部分,对这四部分以及相关领域的知识做出了贴近时代深入浅出的介绍。
三、《Java编程思想ThinkinginJava》
Bruce Eckel是MindView公司的总裁,该公司向客户提供软件咨询和培训。他是C++标准委员会拥有表决权的成员之一,拥有应用物理学学士和计算机工程硕士学位。
除本书外,他还是《C++编程思想》的作者,并与人合著了《C++编程思想第2卷》(这两本书的英文影印版及中文版均已由机械工业出版社引进出版)及其他著作。他已经发表了150多篇论文,还经常参加世界各地的研讨会并进行演讲。
四、《微型计算机原理及应用第三版》
本书主要介绍由80x86/Pentium微处理器构成的微型计算机的原理、应用及最新发展现状。书中阐述了80x86/Pentium微处理器的编程结构、指令与寻址方式、汇编语言程序设计、存储器技术、总线技术,并阐述了80x86/Pentium微处理器构成的微型计算机硬件电路系统。
五、《计算机网络》
《计算机网络》是2008年电子工业出版社出版的图书,作者是谢希仁。该书全面系统地介绍了计算机网络的发展和原理体系结构、物理层、数据链路层等内容。
全书分为10章,比较全面系统地介绍了计算机网络的发展和原理体系结构、物理层、数据链路层、网络层、运输层、应用层、网络安全、因特网上的音频/视频服务、无线网络和下一代因特网等内容。
试论职业理想与大学学习的关系 --以计算机专业为例摘 要:职业理想是人们在职业上依据社会要求和个人条件,借想象而确立的奋斗目标,即个人渴望达到的职业境界。大学学习会对我们的职业理想产生相当的影响,甚至决定我们将来的职业.职业理想是人们对职业活动和职业成就的超前反映,大学学习则为职业理想奠定一个坚实的基础. 关键词:职业理想、工作、大学、计算机、网络工程、学习一、 先论述职业理想(一)职业理想的特点1、职业理想具有差异性职业是多样性的。一个人选择什么样的职业,与他的思想品德、知识结构、能力水平、兴趣爱好等都很大的关系。政治思想觉悟、道德修养水准以及人生观决定着一个人的职业理想方向。知识结构、能力水平决定着一个人的职业理想追求的层次。个人的兴趣爱好、气质性格等非智力因素以及性别特征、身体状况等生理特征也影响着一个人的职业选择。因此,职业理想具有一定的个体差异性。2、职业理想具有发展性一个人的职业理想的内容会因时因地因事的不同而变化。随着年龄的增长、社会阅历的增强、知识水平的提高,职业理想会由朦胧变得清晰,由幻想变得理智,由波动变得稳定。因此,职业理想具有一定的发展性。孩提时代,想当一名警察,长大后却成了一名教师的事实就说明了这一点3、职业理想具有时代性社会的分工、职业的变化,是影响一个人职业理想的决定因素。生产力发展的水平不同、社会实践的深度和广度的不同,人们的职业追求目标也会不同,因为职业理想,它总是一定的生产方式及其所形成的职业地位、职业声望在一个人头脑中的反映。计算机的诞生,从而演绎出与计算机相关的职业,如计算机工程师、软件工程师、计算机打字员等等职业。不仅要求从业人员有较高的理论知识素养,而且要求有较强的动手能力,属于高技能人才中知识技能型人才。(二) 职业理想的作用1、职业理想的导向作用理想是前进的方向,是心中的目标。人生发展的目标是通过职业理想来确立,并最终通过职业理想来实现。俄国的托尔斯泰曾说过:“理想是指路的明灯,没有理想就没有坚定的方向,就没有生活。”同学们在现阶段的学习生活中也已经深切地感受到,一旦学习目的不明确,学习的热情就会低落,学习的效果就不明显。因此,有了明确的、切合实际的职业理想,再经过努力奋斗,人生发展目标必然会实现2、职业理想的调节作用职业理想在现实生活中具有参照系的作用,它指导并调整着我们的职业活动。当一个人在工作中偏离了理想目标时,职业理想就会发挥纠偏作用,尤其是在实践中遇到困难和阻力时,如果没有职业理想的支撑,人就会心灰意冷、丧失斗志。此外,如果一个人只把自己的追求定位在找过“好工作”上,即便是将来有实现的可能,也不能算是崇高的职业理想,因为,这样的理想一旦实现,他就会不思进取,甚至虚度年华。总之,一个人只有树立正确的职业理想,无论是在顺境或者是在逆境,都会奋发进取,勇往直前。3、职业理想的激励作用职业理想源于现实又高于现实,它比现实更美好。为使美好的未来和宏伟的憧憬变成现实,人们会以坚忍不拔的毅力、顽强的拼搏精神和开拓创新的行动去为之努力奋斗。12岁时,周恩来就发出“为中华之崛起而读书”的誓言,表达了他从小立志振兴中华的伟大志向。同学们,你们现在是学生,你们有什么样的理想啊!我想,我们应该向敬爱的周总理学习,从小立志,树立一个崇高的人生目标,然后,为实现这个目标坚持不懈,奋斗不止,为人民,为国家做出贡献,这样的人生才有意义。二、 再论述大学学习我是一名网络工程专业的学生,该专业属于计算机的一部分。计算机专业一直是全国各大高校的热门专业,发展迅猛.伴随着互联网的发展,计算机专业人才的短缺现象将会越来越严重.在我国,IC人才、网络存储人才、电子商务人才、信息安全人才、游戏技术人才严重短缺;在软件人才层次结构上,水平高的系统分析员和有行业背景的项目策划人员偏少,同时软件蓝领也比较缺乏。我觉得对于网络工程专业的学生来说,学历只是一个敲门砖,有句话说的好,学历不是万能的,没有学历是万万不能的,这句话放在网络工程专业的学生身上最合适,一般企业对于学历都是面试过后再要求拿出学历来的,如果你学历低一点,能力高一点公司也是会要的!我想我们应该更注重技能方面的学习!对于学习编程方面,我了解到好多同学自学完后,知识点都懂了,就是不知道如何穿起来去写项目,而且是写东西不知道如何下手,这就是典型的大学教育方式,学生只会看书,不去理解编程思想!一开始我自己也是这样的情况。后来有同学向我建议多写项目,多到网上找一些实际项目的源代码或教学视频,不要只看不写,重在实践,有可能你觉得你很简单,但是照着抄一遍都有可能运行不起来,有可能是标点的格式不对,我觉得要多动手,多调试程序!对于想找C方面的开发的同学,建议要找实习的公司才能学得出来,C是绝对不能参加培训班的,因为C不是一年两年能培训出来的,不像JAVA,可能JAVA半年就能培训出一个成手的开发人员,而C是不可能的!从上课安排上来说,也不是说一天上七八个小时就是好的,要合理的安排,每天整天上课,你不去练习又怎么能记住,软件开发不是别的东西,听懂就行,你不去写,是肯定不行的!要把讲过的东西吸收,理解才可以,开发学的是思想,不是去单纯的写代码,你去公司是用你的想法去实现客户想要的东西,所以重在理解的基础去去开发,学习编程思想是很重要的!在大学四年得时间里有三年是用于学习课本知识,因此在实际操作方面很容易造成技术薄弱。大学低年级的课程,主要包括公共课和基础课。这些课程的特点是:一是比中学具有更强的理论性和系统性,要求学生提高分析与概括的能力;二是大班上课提问题的机会减少,要记下一些问题自己钻研或课后提问;三是讲课速度较快,教师讲解的顺序与教科书不一定完全一致,内容上有所取舍,也有所补充,着重点也不同。学生听课时要摸清教师的思路,抓住重点、难点,提高记笔记的能力。网络工程专业的学习首先就是要注重计算机语言的学习。这相当于学习一门全新的语言,这门语言和我们平时接触到的计算机有很大差异。一般来说,非计算机专业的人耶不会去接触计算机语言。有的人会觉得计算机语言很奇妙、很生动,学起来劲头十足;反之,也就有人觉得它艰涩、难懂,学起来不知所云,有的甚至放弃直接转专业。对计算机专业兴趣比较浓厚的人大多会自己主动去学习更多的计算机知识和锻炼自己的技术。而不感兴趣的人则会感到无力,只能尽力去完成老师布置的作业。其实,不管怎么样,大学是一个很好的学习环境,里面也有很不错的资源和机会。但是,机会是留给有准备的人,如果没做好准备,很肯能你就和机会擦肩而过了。在学校里面,我们应该抓住每一个可以学习的机会,充分利用学校提供的各种资源。三、 论述职业理想与大学学习的关系大学的学习主要是理论方面的知识。很多人都会觉得枯燥无味,可是它的重要性却是不容忽视的。就业形势日益严峻,我们因该消除盲目心态,明确上大学的目的和自己肩负的责任。我们应该着手设计自己的职业生涯规划书,制定长远目标和阶段性目标及切实可行的措施。首先,我们应该消除盲目心态。明确上大学的目的和自己肩负的任务,着手设计大学职业生涯规划书,制定长远目标和阶段性目标及切实可行的措施。第二,我们要调整学习方法。大学的学习目的、内容、方法都有别于中学,更注重主动性、创造性和广泛性。因此,要及时调整学习方法,变被动为主动,尽快适应大学学习。第三,我们要克服自卑心理。我们要懂得人没有自卑的理由,任何人都有自己的长处和短处,所谓“尺有所长,寸有所短”,要坚信自信会使你取得成功。同时,和自信的人交朋友,你会发现自己也慢慢自信起来。第四,我们要培养自己的独立能力。学会安排自己的生活,管好自己,合理安排经济开支,学会精打细算;培养人际交往能力,建立和谐的人际关系。第五,我们要修养自己的个性品质。通过参加各种有意义的活动,树立远大的理想,确立正确的人生观、价值观和世界观。如通过参加社会实践活动、先进人物报告会、党课等多种途径来陶冶自己的情操,提高自己的综合素质。计算机专业就业前景我国从事计算机工作的专业人员不到100万人,伴随经济结构的调整,科技兴国战略的进一步实施,科学、工业、国防和教育事业需要一大批高素质的计算机专门人才.就很多毕业生而言,与其说是“就业困难”,不如说是“就业迷茫”,不知道自己应该从事什么样的工作。很多学生在初入大学时持有“大一大二先轻松一下,大三大四再努力也不迟”的心态,对自己的未来发展缺乏科学的规划,这往往成为他们面对就业压力时感到手足无措的一个重要原因。大学作为大学生职业生涯规划的第一站,起着至关重要的作用。首先,要树立正确的职业理想。大学生一旦确定自己理想的职业,就会依据职业目标规划自己的学习和实践,并为获得理想的职业积极准备相关事宜。其次,正确进行自我分析和职业分析。自我分析即通过科学认知的方法和手段,对自己的兴趣、气质、性格和能力等进行全面分析,认识自己的优势与特长、劣势与不足。职业分析是指在进行职业生涯规划时,充分考虑职业的区域性、行业性和岗位性等特性,比如职业所在的行业现状和发展前景,职业岗位对求职者的自身素质和能力的要求等。第三,构建合理的知识结构。要根据职业和社会发展的具体要求,将已有知识科学地重组,建构合理的知识结构,最大限度地发挥知识的整体效能。第四,培养职业需要的实践能力。除了构建合理的知识结构外,还需具备从事本行业岗位的基本能力和专业能力。大学生只有将合理的知识结构和适用社会需要的各种能力统一起来,才能立于不败之地。从具体实施来看,职业生涯规划应从大一做起,并根据自己的长期目标,在不同阶段采取不同的行动计划。比如,一年级为试探期,这一时期要初步了解职业,特别是自己未来希望从事的职业或与自己所学专业对口的职业,但由于学习任务繁重,不宜过多参加实践活动;二年级为定向期,要通过参加各种社会活动,锻炼自己的实际工作能力,最好能在课余时间寻求与自己未来职业或本专业有关的工作进行社会实践,以检验自己的知识和技能,并根据个人兴趣与能力修订和调整职业生涯规划设计;三年级为冲刺期,在加强专业学习、寻求工作和准备考研的同时,把目标锁定在与实现自己的目标有关的各种信息上;四年级为分化期,大部分学生对自己的出路都应该有了明确的目标,这时可对前三年的准备做一个总结:检验已确立的职业目标是否明确,准备是否充分,对存在的问题进行必要的修补。 学校和社会是有差距的,其运行规则和社会的运行规则有很大不同。这种环境的隔离,往往使得“象牙塔”里的大学生对社会的看法趋于简单化、片面化和理想化。一些企业对应届毕业生表示出冷淡,其中一个重要原因就是刚毕业的大学生缺乏工作经历与生活经验,角色转换慢,适应过程长。他们在挑选和录用大学毕业生时,同等条件下,往往优先考虑那些曾经参加过社会实践,具有一定组织管理能力的毕业生。这就需要大学生在就业前就注重培养自身适应社会、融入社会的能力。借助社会实践平台,可以提高大学生的组织管理能力、心理承受能力、人际交往能力和应变能力等。此外,还可以使他们了解到就业环境、政策和形势等,有利于他们找到与自己的知识水平、性格特征和能力素质等相匹配的职业。适者生存,生存是为了发展。对社会和环境的适应应该是积极主动的,而不是消极的等待和却步。大学生只有具备较强的社会适应能力,走入社会后才能缩短自己的适应期,充分发挥自己的聪明才智。因此,在不影响专业知识学习的基础上,大胆走向社会、参与包括兼职在内的社会活动是大学生提升自身就业能力和尽快适应社会的有效途径。 从一定意义上说,能力比知识更重要。所以招聘单位也都希望得到这样的人才。但面试时间很短,因此他们就从面试者的一言一行、一举一动中进行判断。一位礼仪专家曾说:“教养体现于细节,细节展现素质。”因为一些小事情或一些不经意的细节往往会透露出一个人的内心世界,显现出一个人的本质,招聘方就能从中迅速产生判断,结果就可能会影响到一个人的前程。而这些都不是大学生短时间靠突击就能具备的,需要长时间的培养。如果你拥有良好的全面素质,你就会比别人拥有更多的机遇。 大学生在求职过程中,要想把握住更多的机会,就必须具备较高的综合素质。在知识面广、专业技术精通、业务能力强的基础上,还必须提高个人的修养,在日常的生活、学习中养成良好的习惯,以避免因为一些细节问题而影响自己的前程。要想提高个人的修养,就必须掌握一些必备的礼仪知识。 实事求是讲,在诸多专业里计算机专业平均起步收入应该是很高的,而且就业面比较宽,对于一个本科毕业生,各个行业都可以找到合适的工作.但我们也应该注意到,计算机是一门快速发展,日新月异的学科,时时刻刻都有新的理论,知识,产品被推出.如果想在这个行业做好,无论作哪个层次,都得不停地充实自己.是个学校都有计算机系,就业市场是大,就业竞争也很激烈.在大学学习时打好基础,就能更加靠近我们的职业理想,也更有可能去实现我们的职业理想。而不是让自己成为啃老一族,成为“毕业等于失业”的大学生。英国作家福斯特有一篇小说,题为《带风景的房间》。我想,这“带风景的房间”一定是一间位置极佳的屋子,打开窗户可以瞥见不同的景观。也许,在你的人生旅程中,一扇窗户已经关上,但请打开另一扇窗子,那边有很多新的风景等待你去发现、去欣赏!参考文献:1、作者:钟声、张晋 《离散数学》 中国铁道出版社2、作者:于晓坤、邓文新 《大学信息技术基础》 中国铁道出版社3、作者:严蔚敏、吴伟民 《数据结构》 青华大学出版社4、作者:孙辉、吴润秀 《C语言程序设计教程》 人民邮电出版社5、作者: 陈俊荣 《网页程序设计》 清华大学出版社
你得说写什么C语言程序呀?大哥!我大二了,写了《学生档案管理》C语言程序,《职工工资管理》C语言程序等等~~就是不知道你要什么哩~`
计算机专业C与C++程序设计研究论文
摘要 :首先介绍了目前高校计算机学院C族语言相关程序设计课程的建设状况。然后从C族语言的相互衍生关系出发,提出了在高校计算机课程体系中去除C语言的基础课程,将其综合成一门C++程序设计课程来供学生学习,并对课程内容、参考教材和课时安排上给出了自己的建议。
关键词 :C语言;C++语言;程序设计
高校的C族语言教学总是按照先学C语言,再学C++的顺序进行,这种学习顺序随着C++标准的不断升级改革后变得越来越不适用。早期的C++属于多面性语言,即可以像C一样进行模块化的面向过程的编程设计,也可以像Java一样进行抽象的面向对象程序设计。那时的教学者考虑的是学生应当从较为便于理解的面向过程的编程思路入门学习C语言编程,然后在熟练了面向过程的编程方式后再从C语言延伸到C++,转而学习面向对象的程序设计。可是随着面向对象的程序设计在应用市场上占领了绝对的主导地位后,再让学生从面向过程着手就等于是浪费学习时间。加上C++和C两门语言的初级语法思想是完全一致的,开设两门课程浪费了学时,也耽误后续更重要的核心课程的学习。
1程序设计语言C与C++的比较
与C++的共性。一般简要的介绍是把C++当作C的加强版,这种认知当然是错误的,C++语言的设计者在设计之初为了保障自家语言会受到开发者的关注,所以兼容了的C的语法,这就自然使得C++可以使用C的编程方式进行程序设计,所以也导致了很多人对这两种语言的关系产生了错误的认知。同时由于C语言本身设定上的优越性,所以C++在进行自我定义的时候也沿用了C语言很多优良的性质。基础数据结构一致,C与C++的基础数据类型都是以变量和常量作为基本属性划分,类型上有字符型、整型、长整型、单精度浮点型和双精度浮点型,不过C++额外增设了布尔型。复合型数据结构上也都同时具有数组、多维数组、结构体、枚举类型和共同体,但是C++增设了字符串类型以替代C语言中的字符数组,功能上更加强大,也更加便捷。在语法方面,声明、赋值、循环、选择的结构和实现都是一致的,并且C++虽然提倡使用类和对象的概念去设计程序结构,可也同样支持函数体结构的程序设计结构。并且C语言中函数的赋值都是间接调用,在使用C语言函数时总是会在指针上出现各种纰漏,但是C++的函数体可以使用引用参数,这就使得C++的函数体比之C的更加好用。总的说来就是,C++标准下用户可以完全使用C语法进行编程而不会出现任何BUG,同时C++自身的优越设定和标准使得其设计能力比C要强大数倍,是目前市场上大型程序开发的首选语言。
与C++的不同。上一节介绍了C++和C的.基础语法上的区别,这些区别都是C++的作者在C的基础之上修订而来的结果,是为了让C++标准下得面向过程的程序设计比之单纯的C更加便捷方便。但是C++的诞生伊始,就是一门向上使用面对对象的程序设计思想的高级编程语言。它的封装性、继承性、多态性和对象唯一性才是C++成为强大高级语言的重要原因,这些特性都是C语言不可能拥有的。所以C能够实现的程序,C++能够实现并且实现的更为方便,C不能实现的程序,C++同样可以实现。
的特色。承接上一节,C++和C之间最大的不同,也是C++自身最值得夸耀的特性,就是面向对象程序设计思想。这种思想使得C++语言设计出来的程序,变成了类和对象的有机结合,这种结合的代码比之面向过程的函数体架构的代码更加易读,共同开发起来容易上手,后续的维护者也不用费更多的脑筋去理解前人的代码含义。而类和对象的设计思路,使得开发者合作时相互之间的工作变的更为独立,双方之间只需要知道对方所写的类实现的功能和包含的数据就行。这种特性我们称之为良好的封装性,开发者之间不需要去知道对方的代码是如何实现,甚至在此之上还可以保证良好的代码健壮性。因为类的引入,更先进的作用域机制也被引入进来,类的书写者往往会将自己类中的数据进行严格的作用域限定,防止其他合作者擅自去修改和使用自己类中的数据。合作者想要知道类中的数据或者使用类中的数据,只能通过类的书写者定义的带有检查机制的方法才行。这样会使得很多人合作开发的大型项目的稳定性和安全性比之用C语言开发时再上一个台阶。同时类的概念中还有一个先进的设定就是继承性,并且由这个继承性还延伸出了接口的概念。有了可以继承的接口和类,那么开发者在对程序进行迭代的瀑布开发流程时,就可以很好的使用自己曾经开发的源代码,或者借用其他项目的源代码,因为只要学会科学的使用继承机制,就不仅仅是节约程序员的代码时间,也减少了程序员在回顾曾经代码时发生的错误和歧义。而与继承机制配合使用的是多态性,曾经C语言中定义的函数,其灵活度非常差,特定的函数只能满足特定程序定义的需求,想要重用曾经的源代码是几乎不可能的事情。我们刚才提到的继承机制使得C++开发者复用源代码成为了一种习惯,但是复用时不可避免的修改问题又摆到了台面上,多态机制顺应而生了。多态机制使得类不仅可以继承其他类,将父类的数据和方法都在本类体中自如的使用,同时还可以用本类中新的定义和代码去覆盖父类中的数据定义和方法。这就让程序员变的更加自由,想用父类的数据和方法时就去继承,但是不想全部使用时就加上多态机制去覆盖。这样代码之间的重复利用率变得十分客观,节约了大量的开发时间和开发成本。
2程序设计语言C与C++开设建议
C++课程的内容应当如下安排:第一部分,教授C++的基础语法,让学生可以编写出在DOS命令行下输入输出的程序,了解编程的基本概念和思想。并且这时应当同时进行C和C++的双向语法教学,为日后学生进入高年级后的方向选择打下基础。此部分使用半个学期最为适宜,并且此时并不灌输学生何为面向对象何为面向过程,而主在让学生使用基础语法进行最基本的编程探索。第二部分,在学生有了基础编程知识后,将数据结构的内容放入课程中去,用半学期的时间教授学生用C++实现的各类常见数据结构。并且结合实际开发项目中的代码作为阅读补充,让学生明白数据结构的知识对程序开发的意义,然后将简化后的小项目作为课堂的主要内容,用实际的代码让学生去理解那些枯燥的数学定理和概念。而且在实现数据结构的过程中,必然会面对一些更为高级的C++语法和概念。总的来说,用大一上的一个学期让学生对于基础编程有了良好的认知和深入,是十分值得和有效的。第三部分,在学生有了数据结构的基础和C++的基本语法掌握后,应当面对一些实际的开发项目和问题。当然实际的问题还是需要老师进行简化,其主要目的是让学生掌握C++的高级特性和实际软件开发的过程与思路,并且想学生传授基础的算法。这一部分较为困难,应当使用一个学期让学生慢慢的掌握和熟悉。第四部分,在学生算是对C++语言和数据结构与算法都有了基础的入门后,再进行课堂教学意义就不大了,应当再大二上学期开设一门课程设计实验课,让学生完成几个难度从小到大的项目,循序渐进的掌握基本的实际开发技巧和思维。
参考文献
[1]罗莉.计算机程序设计的多应用型开发与实现[J].产业与科技论坛,2015(14):54-55.
[2]邓薇,何锫,钱俊彦,等.深度优先的多基因表达式程序设计[J].模式识别与人工智能,2013(9):819-828.
[3]宛西原,汪霞.非计算机本科专业计算机程序设计课程的改革思考[J].计算机工程与科学,2014(z1):56-59.
什么是C语言程序设计呀?
C语言编写的迷宫小游戏 源代码#include <>#include <>#include <>#include <>#include <>#define N 20/*迷宫的大小,可改变*/int oldmap[N][N];/*递归用的数组,用全局变量节约时间*/int yes=0;/*yes是判断是否找到路的标志,1找到,0没找到*/int way[100][2],wayn=0;/*way数组是显示路线用的,wayn是统计走了几个格子*/void Init(void);/*图形初始化*/void Close(void);/*图形关闭*/void DrawPeople(int *x,int *y,int n);/*画人工探索物图*/void PeopleFind(int (*x)[N]);/*人工探索*/void WayCopy(int (*x)[N],int (*y)[N]);/*为了8个方向的递归,把旧迷宫图拷贝给新数组*/int FindWay(int (*x)[N],int i,int j);/*自动探索函数*/void MapRand(int (*x)[N]);/*随机生成迷宫函数*/void PrMap(int (*x)[N]);/*输出迷宫图函数*/void Result(void);/*输出结果处理*/void Find(void);/*成功处理*/void NotFind(void);/*失败处理*/void main(void)/*主函数*/{ int map[N][N]; /*迷宫数组*/ char ch; clrscr(); printf("\n Please select hand(1) else auto\n");/*选择探索方式*/ scanf("%c",&ch); Init(); /*初始化*/ MapRand(map);/*生成迷宫*/ PrMap(map);/*显示迷宫图*/ if(ch=='1') PeopleFind(map);/*人工探索*/ else FindWay(map,1,1);/*系统自动从下标1,1的地方开始探索*/ Result();/*输出结果*/ Close();}void Init(void)/*图形初始化*/{ int gd=DETECT,gm; initgraph(&gd,&gm,"c:\\tc");}void DrawPeople(int *x,int *y,int n)/*画人工控制图*/{/*如果将以下两句注释掉,则显示人工走过的路径,*/ setfillstyle(SOLID_FILL,WHITE); /*设置白色实体填充样式*/ bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);/*恢复原通路*/ switch(n)/*判断x,y的变化,8个方向的变化*/ { case 1: (*x)--;break; /*上*/ case 2: (*x)--;(*y)++;break ;/*右上*/ case 3: (*y)++;break; /*右*/ case 4: (*x)++;(*y)++;break; /*右下*/ case 5: (*x)++;break; /*下*/ case 6: (*x)++;(*y)--;break; /*左下*/ case 7: (*y)--;break; /*左*/ case 8: (*x)--;(*y)--;break; /*左上*/ } setfillstyle(SOLID_FILL,RED);/*新位置显示探索物*/ bar(100+(*y)*15-6,50+(*x)*15-6,100+(*y)*15+6,50+(*x)*15+6);}void PeopleFind(int (*map)[N])/*人工手动查找*/{ int x,y; char c=0;/*接收按键的变量*/ x=y=1;/*人工查找的初始位置*/ setcolor(11); line(500,200,550,200); outtextxy(570,197,"d"); line(500,200,450,200); outtextxy(430,197,"a"); line(500,200,500,150); outtextxy(497,130,"w"); line(500,200,500,250); outtextxy(497,270,"x"); line(500,200,450,150); outtextxy(445,130,"q"); line(500,200,550,150); outtextxy(550,130,"e"); line(500,200,450,250); outtextxy(445,270,"z"); line(500,200,550,250); outtextxy(550,270,"c");/*以上是画8个方向的控制介绍*/ setcolor(YELLOW); outtextxy(420,290,"Press 'Enter' to end");/*压回车键结束*/ setfillstyle(SOLID_FILL,RED); bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6);/*入口位置显示*/ while(c!=13)/*如果按下的不是回车键*/ { c=getch();/*接收字符后开始各个方向的探索*/ if(c=='w'&&map[x-1][y]!=1) DrawPeople(&x,&y,1);/*上*/ else if(c=='e'&&map[x-1][y+1]!=1) DrawPeople(&x,&y,2);/*右上*/ else if(c=='d'&&map[x][y+1]!=1) DrawPeople(&x,&y,3);/*右*/ else if(c=='c'&&map[x+1][y+1]!=1) DrawPeople(&x,&y,4);/*右下*/ else if(c=='x'&&map[x+1][y]!=1) DrawPeople(&x,&y,5);/*下*/ else if(c=='z'&&map[x+1][y-1]!=1) DrawPeople(&x,&y,6); /*左下*/ else if(c=='a'&&map[x][y-1]!=1) DrawPeople(&x,&y,7); /*左*/ else if(c=='q'&&map[x-1][y-1]!=1) DrawPeople(&x,&y,8); /*左上*/ } setfillstyle(SOLID_FILL,WHITE); /*消去红色探索物,恢复原迷宫图*/ bar(100+y*15-6,50+x*15-6,100+y*15+6,50+x*15+6); if(x==N-2&&y==N-2)/*人工控制找成功的话*/ yes=1; /*如果成功标志为1*/}void WayCopy(int (*oldmap)[N],int (*map)[N])/*拷贝迷宫数组 */{ int i,j; for(i=0;i
要论文自己写嘛,求人不如求己!
要么是某某管理系统要么是某种常见软件。你可以做个根据人的照片做成表情包的,就像iphone x上那个相机一样。另外就是面部识别,跟踪,这个也比较新
这个具体得知道你的专业呀,还有就是选的是什么题目,每个题目的要求和要的功能那些都是不一样的,总之计算机的就是这样,比较独立的。所以要知道你所学的方向才能确定的。
论文写作,先不说内容,首先格式要正确,一篇完整的毕业论文,题目,摘要(中英文),目录,正文(引言,正文,结语),致谢,参考文献。学校规定的格式,字体,段落,页眉页脚,开始写之前,都得清楚的,你的论文算是写好了五分之一。然后,选题,你的题目时间宽裕,那就好好考虑,选一个你思考最成熟的,可以比较多的阅读相关的参考文献,从里面获得思路,确定一个模板性质的东西,照着来,写出自己的东西。如果时间紧急,那就随便找一个参考文献,然后用和这个参考文献相关的文献,拼出一篇,再改改。正文,语言必须是学术的语言。一定先列好提纲,这就是框定每一部分些什么,保证内容不乱,将内容放进去,写好了就。参考文献去中国知网搜索,校园网免费下载。 合适采纳
近年来,随着全球网际网路技术的普及、计算机技术的迅猛发展、数字技术的瞬息万变,计算机工程在人们生活、生产中的应用越来越广泛。下面是我为大家整理的计算机工程毕业论文,供大家参考。
计算机软体大体分为三类,一种是总述,一种是系统软体,一种是应用软体,系统软体的作用是促使各个硬体按照一定的规律协调工作,保证计算机处于正常运转状态。而应用软体的作用则是为了实现某种使用愿望而开发出来的软体。
1计算机软体工程专案管理的基本概念
工程专案管理的含义工程专案管理主要是业主通过委托从事工程专案管理的企业,签署相关协议,工程专案管理企业有义务和权力代表业主在工程专案进行的情况卜干预和服务。工程专案管理企业可以协助业主同项目工程总承包签订一系列合同,只是起到辅助性作用,不直接与总承包企业或者施工、勘察、供货和设计签署协议或合同,工程专案管理企业有责任在施工过程中监督合同的完成情况。
软体工程专案的概况
管理人员开展有序的专案计划
企业必须把人员管理放在重要位置,在软体工程专案的开发上人员的调配问题是保证工程顺利进行的重要因素,因此,专案能否成功和工作人员的工作能力、写作能力息息相关,针对工程专案的操作类别不同,可以分配成各个研究小组,进行科学合理的针对性开发和高效的协作,有利于工程的快速推进和更加完善。小组内的人员根据自身优势,确定自己的工作内容和工作时间。对专案进行正确的认识和对风险进行评估,与此同时从节约成木的方而出发,形成科学的人力资源调配机制,使专案得以顺利开展。
质量和配置管理工作
软体的质量管理工作是整个专案的核心工作,质量管理决定着计算机软体工程专案管理是否真正的成功,通过一系列保证质量的手段,有计划的编制、控制和保证专案质量。保证专案质量的方式可以通过定期的进行质量评估得以实现,在日常专案管理中要不断的对工作进行考查,对于专案不合格的地方要提出意见并且考虑整改措施,不断完善整个软体配置管理的记录工作,使专案的质量能有一定的检测体系,这样开发者会对专案工程的质量问题有比较深入的了解。
风险评估和管理工作
风险管理大致分为两种工作,一种是风险识别,另一种是风险评估。得到评估结果以后要针对问题提出相应的解决办法,定期检测计算机软体工程的好处是可以减小产生风险的概率,还可以避免一些因疏忽而产生风险,使专案的损失减少到最低,也减少了因专案风险而造成的一些相关责任人的利益冲突。
2计算机软体工程专案管理中存在的问题
管理团队的协作问题
分工合作是我们完成一个专案的基木因素,在软体开发方而更需要每个人的智慧一起凝聚出果实,共同享受成果,而目前在计算机软体工程专案管理方而资讯的交流方而存在一些问题,例如分工不清、团队不合作等问题。
需求分析和实际中的业务存在差距问题
计算机软体工程专案没有结合实际的活动需求,也没有调查有效的资料分析,因此计算机软体工程专案管理在开发出新的产品以后并没有取得理想的业务效果。
风险管理的问题
专案的风险工作是企业需要考虑的很重要的问题,如果风险没有相应科学管理,很容易带来巨大的损失,但是很多员工并不懂得如何规避风险,缺乏相应的专业知识,更是缺少对风险工作的管理,导致很多企业在风险来临时无法做出正确行动,造成巨大的经济损失。
3计算机软体工程专案管理的对策
对风险管理和工作进度进行有效管理
制定风险管理制度。计算机软体工程专案管理的工作人员必须具有一定的风险识别意识和相应的遇到风险的专业知识,并且能有效的控制风险的能力。在平时要做好风险评估的管理报告,针对可能发生的风险要及时预测并且做出相应的解决行动。设定专门的人员对计算机软体工程专案定期进行风险的评估和检查工作。在整个专案中,根据需要进行多次的风险管理工作,因为风险无时无刻都有可能存在,检查的目的是尽量减少风险发生,在一般情况卜处理风险的措施一般有三种:减缓、规避和转移。提高工程的进度,不断的推进工程的工作效率。要制定详细的工作计划表,并且尽可能达到最高的工作目标。工作人员有严谨的工作态度和高效的作息时间安排,管理人员要密切关注工程进度,不断的督促员工完成应做的工作量,有条理、高效的完成对员工的工作任务的监督工作。
建立完善的管理体系针对计算机软体工程的人员日常管理工作,要建立科学有效的管理方案。合理安排人才资源,确保在进行计算机软体专案工程时人员调配顺利进行。专业知识的培训对于工作人员来说
是必不可少的,可以极大的丰富计算机软体工程专案人员的专业水平和实践能力,减少工作上的失误,提高工作效率和工作人员的素质。奖罚制度是对企业员工优劣的衡量标准,所以在计算机软体工程专案管理方而采取奖罚制度可以极大程度上调动员工的积极性,使员工主动为企业创造效益,企业的发展才能有长远的未来。
建立合作的团队
在员工内部建立有效的交流机制。员工的内部工作经验交流是非常重要的,因此要完善沟通方法,开辟多种交流方式和渠道,不断的增强各个部门的沟通意识,使团队的力量不断凝聚起来。明确分工,责任落实到个人。计算机软体工程管理非常复杂,需要的人员也众多,因此必须要使每个员工明确自己的工作内容和范围,清晰的划分自己所需要负责的区域,清楚自己的责任,这样能够确保每一个步骤都井井有条,非常有秩序。调动整个团队的工作积极性。通过一些活动、奖励措施等使每一个工作人员全身心的投入到工作中去,愿意并想要去做的更好,不断激发团队的潜力和员工的协作能力,这样专案不仅会做的越来越好,员工内部也会越来越和谐并且充满正能量,企业的效益也会不断得到提升。
4结语
计算机软体工程专案管理的工作内容十分的复杂,要保证软体工程按照工程原计划进度顺利开展工作,并且要节约成木、保证质量,必须熟练对计算机软体进行操作,在现在的大多数生产计算机软体的企业中最为重要的就是软体工程专案的管理效率,软体工程专案的成功条件是软体专案要具有科学性和高效性,在此基础上企业的合理管理也是企业走向成功的关键。
1现状分析
培养高质量的软体开发人才一直是社会和行业关注的焦点。早在11年前,对于工程教育的迫切性就被人提出来[1]。工程教育本身也作为一个系统问题被讨论[2]。现在从国家层面在战略上建立了软体学院进行专门培养,各个高校也不断推出新的课程、新的措施方案。在这一领域虽然比过去似乎已经有了翻天覆地的变化,但来自企业的呼吁似乎一直反映出诸多不尽如人意。更多的思路希望将企业的力量直接引入到教学,比如实训基地等[3];而国家层面也非常关注实训[4]。但实际效果可能变得流于表面,因为企业往往难以将核心的工作拿给学生做,而其训练的专案也并未从更全面系统的角度去设计,其锻炼效果就有限了。在软体开发这一领域,由于其具有变化迅速,新技术不断涌现的特点,导致不少在教育内容上选择了追逐新技术、新语言、新平台,以能用会用这些流行主流技术为目标。典型的代表就是北大青鸟,有些二本的学生在毕业前专门花钱去青鸟学习,似乎可以看到这种教育的优势。但另一个矛盾的情况是,往往那些关注员工后劲的公司却不愿意招聘青鸟的学生。如果将目光投向国外的顶级大学,例如斯坦福,其教学上并没有去“依赖”校企合作,以及很热门的“实训”。其核心课程依然是过去的传统经典课程。以一个研究生为例,一学期能修2门课是正常,3门就很优秀。它并没有追逐所谓的新技术。但无人质疑其学生的工程能力、科研能力和创造能力。
2什么是计算机工程能力的核心
什么才是我们软体开发教育的核心知识架构,怎样才能培养学生可持续发展的核心竞争力?我们调查过一些非常高水准的软体开发者,发现他们往往在底层软体上持之以恒地进行长时间深刻的锻炼,然后在未接触的新领域才能非常迅速地掌握核心。例如,一个非计算机专业的系统分析员曾经“只”在DOS这种原始的作业系统下玩了10年,甚至自己写过一个汉化的DOS。他只有书本上的一点点网路知识时,就用一两天时间解决了一个学通讯的研究生1个月都不能解决的网路故障。这是一个典型的例子,他并没有“实际的”网路经验,什么使得他如此轻松地进入了新的领域呢?而另一个曾就职于vmware、google等顶级公司的程式设计师,在Unix下只用C语言做了10年系统级程式设计。当用Java,C++甚至是javascript时,其学习时间只是1天,很快就比做了几年专门java程式设计的程式设计师还精通。如何才是软体开发人员的本质力量?什么才能让他们在变化万千的新技术面前屹立不倒,乘风破浪?
计算机工程能力
我们认为计算机工程能力包含两方面的内容:1核心知识架构;2计算机的思维方式。什么是核心知识架构呢?是反应该领域最基本规律和支撑技术的知识。简单地说就是传统的作业系统、编译、资料库。作业系统将硬体、软体、高阶语言和汇编融汇在一起,它几乎包括了软体工程中所有重要的因素。举一个简单的例子,似乎只有面向物件这种“高阶东西”才有的虚拟函式运用,其实在Linux中就有相应的虚档案系统。作业系统是最为复杂的计算机工程之一。编译融汇了大量的演算法,而且能让大家真正看“穿”语言的外表,深入到其内里,体现了最根本的计算机技术。其优化技术,也深刻地和硬体交融在一起,很好体现了底层风范。资料库,不仅是运用演算法最多的地方,甚至是超越作业系统的一个复杂的系统,从快取技术到i/o优化,到索引,再到事务处理,无一不是反映计算机最深刻规律。大家可以发现,所谓核心知识架构,都具有两个特点,反映本质规律,体现软硬融汇交织。也只有这样,才能建立下面谈到的“计算机思维方式”。
核心知识架构
为什么我们没包括一些新兴的语言和技术呢?似乎它们很“实用”。而且已经出现的问题是,按照传统科目和方式学习后,学生在企业什么都不会。这也正是大家关注工程教育的初衷。为什么不强调这些新兴实用技术的教育还在强调“古老”的“基础”。计算机领域一个显著的特点是,表面上知识更新非常快,新技术、语言层出不穷。这很容易导致当我们发现学生能力欠缺时,将问题归罪于新技术的学习不得力,知识结构老化。但其实目前的问题可以从另外一个角度考虑,是否是基础教育不得力?分析国外著名大学,如斯坦福、伯克利的课程,我们发现两个特点:1关键的基础课程,如作业系统、编译原理、资料库,始终是其最重要的课程,并没有过分追逐各种“新潮”技术。2学生一学期能修的课程非常有限,一般为3门课。而国内却呈现相反的状况,比如编译原理被降到了选修课的角色,新潮课程层出不穷,一个学生二年级一学期要修13门课。在这种走马观花的状况下,计算机这种具有强烈“手艺”色彩和工程实践的学科,被完全纸上谈兵化。而一些可怜的实验内容,还被学生的复制拷贝所湮没。我们认为,恰恰是这种情况,使得基础核心知识教育没有工程化,没有充分动手,导致了基础知识教育某种程度上的巨大失败。从以下鲜明的对比可以窥见问题的端倪:国内学生反映作业系统课程是文科课程只需要背条款考试即可;而相对地,国外著名高校作业系统课程要求学生实现“小”作业系统。国内资料库只讲其应用如大量讲解sql等运用,sql即使非计算机专业人士也很容易学习,这也是它被发明的初衷。斯坦福的资料库课程中有一门需要实现一个数据库系统。在笔者走访的计算机工程上优秀的人才,发现其共同的特点就是在诸如作业系统或资料库上都有很深入的学习经历,比如前面提及的自己构建过汉化DOS系统,或者在Unix下,做核心以及驱动很多年等。而当他们接触新技术时,之前深刻的经验和淬炼的思维就让他们如虎添翼,快人一等。更有甚者,国外真正的最顶级专家,都是在这些领域有无与伦比水平的专家,从delphi的缔造者,转战到微软并入主平台的开发,也可看到雄厚的底层知识和能力的巨大作用。所以“老”知识并不是障碍,而是通向天堂的阶梯。究其原因,就涉及到工程能力的第2个方面,计算机思维方式。
计算机思维方式
对非专业人士它是很抽象的概念,而对真正专业人士,这又是一个非常鲜活的概念。这里限于篇幅,我们只举一个简单的例子。面对在C++中外部程式码如何直接修改私有变数的问题,计算机的思维方式就是:物件也是放在记忆体中,只要能拿到物件的地址,并知道物件的布局,那么就可修改。而没有建立这种思维的人,就完全被高阶语言的语法所左右,无从下手。一句话,无法看到本质,没有从下而上的底层思维。核心知识课程的有效深入教学和计算机思维方式建立有何直接关系呢?我们认为核心知识因为其反应了计算机本质规律,而且从底层建立起来,所以对其深入掌握运用后,它从开始的逼迫到最后的陶冶,最终潜移默化地让受众建立起“计算机思维方式”。而这正是计算机工程师安身立命之本,就如同音乐家有其独特的音乐思维方式一样。为什么诸如java之类的课程于建立计算机基本思维不太合适呢?因为它更高层,无法让学生看到最下面。而唯有彻底、深刻和系统的底层淬炼,才能真正建立起“计算机思维方式”。
3如何打造强大的计算机工程能力
大家一方面指责基础课程的“空洞”、“无用”、“陈旧”;另一方面在不断开设的海量新课和技术中压得学生更加远离程式设计,远离实践。即使能培养出熟悉某种语言的学生,也无法看到他们和培训学校有何不同。实训也似乎没有根本解决问题,我们在实践中发现,往往是那些自己醉心于程式设计的学生最后有着卓越的表现。让基础知识能支撑和指导实践,而非仅仅“符号”,并引导学生进行高效的实践。
“3块连一线”,4门基础课程整合打造核心知识架构
我们将4门基本课程进行贯通式整合,着力塑造学生的“计算机思维”。下层的是3门基础课在上一小节探讨了其在工程能力训练上不可替代的重要地位,对软体开发环境产生支撑。而软体开发环境又通过精心的设计和工程实践,从应用角度将3门课程所学的知识串联起来。从而将基础知识和工程开发更有机整合在一起。首先,阐述为什么将以上课程整合在一起的理由。要回答这个问题,必须先回答什么东西支撑了优秀程式设计师。在我们的调查人员中,无一例外地都具有很深厚的底层软体开发背景。有长期从DOS的Hack入手的;有长期从事Unix核心程式设计的;有从Windows的driver起步的;有以反汇编逆向为根基的。长期在最底层的经历,使他们建立了最真实和能触控的系统观,能以计算机的方式思考。所以面临新技术时,他们能透过新形式很快把握其精髓,深刻地把握其实质。“太阳下面没有真正的新事物”,例如号称21世纪最新的重要的软体技术AOPAspectOrientedProgramming,AOP,其实在20世纪60年代就出现在了汇编一级的软体技术中,它本质就是钩子技术的系统化。在底层的软体世界,我们不仅能够用到那些所谓的最新的技术,而且能看到其本质我们可能就是用机器码自己构建出来的,而不被新技术的华丽外衣障目。这些使得具有底层经验的开发者,更有创造力,更能创造,也更能洞察迷乱后的本质,庖丁解牛,解决那些异常复杂的工程问题。举一个笔者遇到的真例项子,一个具有深刻底层经验的程式设计师一直只有C语言和作业系统程式设计经验和一个只有深刻Java经验的程式设计师,在同时学习Javascript的闭包概念时,后者一个礼拜都还有些似是而非。前者很快就能自如运用,且最后指点了后者1个小时,后者顿时豁然开朗。这是典型的“新”与“老”,上层和底层经验在面对新事物时的对比。既然底层软体赋予我们如此强大的能力,那么哪些是底层软体呢?大家公认,作业系统、编译和资料库由来就是计算机工程自身的根基。所以,我们必须将这3门课涉及的知识好好淬炼。而如何将3门课的知识和我们日常的软体开发联络起来呢?如何用它们指导平时程式的开发呢我们大多数是开发使用者级软体,不会开发核心软体,因此许多人认为几乎整个在核心中的作业系统对使用者级软体开发无从指导?另一门课,《软体开发环境》解决了这一问题。它有一条主线,通过反汇编将C语言和汇编串联起来,让系统级的知识从高阶语言的面纱下展现出来。同时用逆向工程这把庖丁之刃,将编译、连结、面向物件等软体开发中的重要知识块剖剔,让底层与上层贯通一气。而逆向的技术技巧,本身也是非常高阶的软体开发技术。因此,我们用“3块连一线”来总结4门课的关系是最好不过了。为什么不纳入语言课程,比如C/C++语言?从我们的工程经验来看,语言只是计算机原理和思想的载体,是表述方式而已。为了表述形式而专门花大力气是不值得的。比如,国外的著名大学很多都不开设语言课,在其他课程作业中必须用C语言程式设计,学生们就在那里锻炼了。真正的语言的力量并非来自语言本身,而是底层知识为支撑的专案锻炼。我们的思路是以构建式完成大量的完整系统的编写,这样就很好锻炼了软体开发和工程能力。同时,“软体开发环境”本身从逆向层面也对语言有了深刻的剖析,这是纯粹的语言课难以完成的。另外,从大纲安排上,我们在大一就会让学生用C语言来初步接触程式编写,这时并不适合放入太高阶主题。而在教学中,语言的力量已经渗透到一个个工程构建中,随风潜入夜了。为什么不纳入演算法课程?从某种程度上,“程式就是演算法与资料结构吗”?我们认为在系统中运用演算法,演算法才具有生命力。而编译、作业系统、资料库以及我们专门设立的一些课程设计将全面运用各种演算法和资料结构。在实战中运用并学习提升才是王道。这也正是构建式学习的精髓所在,这也正是探索式学习培养学生的创造能力的精髓所在。演算法课已经为我们准备了元件,就看你怎么去组装甚至改造。
以构建主义的思路,深度实践的风格改革课程
前面我们论述了底层知识架构的重要性,那么怎么来将它们实际地建立在学生的工程实践中呢?简单地说就是“构建一个具体而微的系统”。讲作业系统就构建一个小作业系统,讲编译原理就构建一个我译器。同时,设计一些跨度较大的课程设计覆盖这些课程的一些重点内容。构建完整系统本身就可真实淬炼工程能力,而这些内容的复杂性、难度以及运用知识点的广度,本身就超越了简单的企业实训专案,在培养人才方面具有系统性、完整性、挑战性独特优点。我们需要的是运用团队的思路和现代软体工程的手段,将其开发过程管理发起来,从而熟悉企业级开发的工具链,将软体工程学到的知识贯通到实作中。这也回答了“和以前相似的强调基础课程教育,什么特点使得我们的做法能获得强大的工程能力?”这一问题。以前更多注重理论知识的学习,而现在的做法是回归计算机工程的自身科学规律———实践为王。
改革考核评价标准,充分强调动手实践
以前我们一直是卷面考试,实验分数只是象征性的点缀。这本身违反了计算机工程的特点。只有改变评价考核标准,才能真正驱动学生充分锻炼工程。在课程软体开发环境中,我们采取了平时的考试结合期末考试的方式,而两者均为软体编写。期末考试在实验室上机编撰指定题目。不强调对一些函式名等死知识点的记忆,可以用线上帮助。这本身也符合软体开发的规律。
4结束语
我们在计算机工程教育上试图做一些回归本质的工作,也取得了一些效果。比如在软体开发环境中,学生普遍认为:“似乎将3年学的程式课全学习了,收获很大”。更有同学,在外企公司的面试中,直接运用了课堂上的知识,这在传统的教学环节中是难以获取的。但整个工作尚在起步阶段,所以仍有很多工作需要做,许多环节需要优化。我们希望在以后的工作中更深入探索工程教育的规律和本质。