我们现在假定一个初学者没有任何程序设计语言的基础。先来比较一下各种语言: PascalPKC 现在,看我们学习Pascal和C的过程:学Helloworld,然后知道怎么编译,运行。然后学习基本数据类型,然后输入输出。不管学校希望学生能学多好,实际来看,学生学Pascal跟学C是没什么区别的。不同的只是语言风格。有人也许会说,学C的精华在于指针。学C的人会比Pascal强很多。没错,指针是学C的一个重点。但是就按我学C的课本来看,用到的指针只是很简单的。理解了*p和p有什么不同,就够了。然后会编个简单的几行代码,就自认为会C了。C库中有很多函数,教师在课堂上几乎没讲。比如memset,qsort等,少了这些。你学Pascal和C没什么不同,只是作为了学习其他语言的铺垫而已。而新生由于没有语言根基,有不少好学生由于教师在课堂上没讲,就以为学完教师所教的了。这正是好学生的弱点所在。如果是“坏”学生,不听课堂的。倒还可能发现课堂所学的C是多么肤浅。还有,我至今没见过有学校会教C的图形开发的。虽然图形开发不是语言基础。不过对于扩展新生的编程视野是一个不错的选择。现代程序软件支持图形窗口的太丰富了,几乎不会太多的学生去在意窗体的设置,定位等功能。图形编程还能激起学生的编程欲望。笔者曾经实现过C的动画演示,当里面的所有图形都按预期的运动起来的时候,那种兴奋感犹如你在冰天雪地的情况下忽然淋你一盘冰水所感到的那种感觉。 CPKC++ C++是在C的基础上发展起来的。看起来似乎这两个pk,赢者肯定C++。其实未必。C至今还有生存的空间,而没有被C++全盘代替。说明了C还是具有不可替代的作用。C目前主要应用在于硬件底层的部分,以及对于性能要求较高的应用程序中。但是对于复杂的系统级的开发,显然C++显得从容自在。联系实际,不少人学C++的时候,就已经有C的基础了。有C的基础,学C++的基本类型的时候可以快速渡过,然后学类,继承,多态等概念。还是从我的经历说起,我选了C++,然后几乎没怎上课,因为实在听了想睡觉,期末前用C++做了一个大作业后,就叫懂C++了哈,然后考试当然轻松过了。其实我那时还是没学到C++,本质点说,我只是还是在会点C的基础上。多了一个结构类型:类,而已。后来使用了1年的C++后,才恍然察觉到当年的无知。才明白C++是什么。我相信已经学过C++的同学估计现在连IO流的概念还没搞清楚的人很多。造成这种现象的原因在于:1.学生本身没有认真去编程实现。2.教师只是重复的讲课本而已。最终判定学生是否会C++的标准也只是考试为主。关于高校的考试制度在计算机系中的效用,笔者将在未来几天内出一篇个人观点文章。 JavaPKC# 目前不少人对这两种语言议论纷纷。笔者在开始学C#的时候,曾经看过Java程序员对于C#的观点。把C#贬得一文不值。忽然发现,似乎很多Java的程序员对C#怀有天生的敌意。笔者目前自认为精通的是C#(别BS我)。以往学过Java,在此我写一下我所感触到的。虽然微软一直称C#是继承于C/C++,但是不论从代码结构,还是内置的支持类,都跟Java有惊人的相似之处。我感觉C#就是在Java之上,针对Java的优点和缺点来设计的。我用过C、C++、Java,感觉还是C#最好,这只是笔者的个人感受。由于C#还保留着指针,当要实现一下比较底层的,性能要求高的时候,解决办法之一是C#可以打开指针,而Java是做不到的,Java只能通过其他途径,比如优化算法来解决。 Java在非windows下获得了很大的成功:某调查公司曾经使用Google搜索引擎来统计以下指标:熟练使用某种语言的工程师数量、某种语言课程教学的可用性、有多少公司在出售用某种语言编写的软件。最后综合得分情况是:Java以45.2分排名第一;第二名是C,得分是32.2;C++是以24.6分排名第三;C#远远落后在第九位,得分为4.6。这些数据是几年前的数据。在这次测试中还发现,C#的受欢迎程度正在急剧上升;而Java相对稳定。这其中一个原因是.net允许许多种编程语言,而不像Java那样,限制人们只能使用一种语言。开发者能够使用包括C、C++、C#甚至Java在内的几乎任何语言来编写代码,然后把这些代码翻译成机器看得懂的CLR代码(公共语言运行时代码)。这样.net可以让开发者保护自己的“代码投资”,换句话说,过去人们用C、C++编写的代码都能再次被利用。而Java只能重新写代码。 所有指导者(学校、培训机构、带你的人)在足够的时间内都希望新生能打下编程良好的基础。从Pascal的介绍来看,似乎从它开始是很适合的。但是笔者是从C起步的,没学过Pascal,对程序设计的习惯以及特点一点也不比学Pascal的人差。我觉得这不是语言的异同造成个人水平不同,在于拿了一门语言的书,新生是如何学编程的。不少新生可能会认为好好上课,听老师讲课,然后回来自己的电脑上把老师讲过的内容上机去试一遍,就ok了。估计连不少教师也是这样想的。笔者认为即使真有学生做得到,效果也是不好的。比如C语言把,我看过不少的C的教程的书,内容大同小异。前面几章,也就详细的讲了语言定义的基本类型。然后讲结构体什么的。C++则是讲类,继承等。这些东西,我感觉上课没什么好讲的,要讲最多也就半节课。如果有一定编程基础的人,这些东西学得更快。但是笔者的经历是这些课都上了满满一个学期,还有后面某些章节是来不及讲的。笔者不幸运,在上Java课的时候,没有上机课,前面的基本类型都上了半学期了,不少学生自己连SDK都没装,最终考试就笔试过关罢了。连这种本应动手的课程还是按照传统的考核方法:卷面考试来解决。能通过高考的学生,不管是真的有料还是假的有料,相信都已经是考试能人了,对于计算机系来说,笔者认为不能全按照传统的教学模式来套,这只是闭着眼睛瞎说话而已。程序是具有很强的唯一性的。你行就行,不行就是不行。卷面答得再好也只是吹。我相信不仅我学校,其他各大高校情况也不会差太多。 这里顺便说几句感想:对于新生来说,应该自己能看清进入计算机系跟中学时候的环境不同。中学可以专门应试,不必学一些太实用的东西(除非不读下去了,准备出来工作的)。但是到了本科,如果你也只是应付教学,然后只是争取拿奖学金,最后你不考研或者考不上研,那可以说你在最后一年找工作的时候首先是自己心虚。虽然外面社会对本科要求不会太高,不必学生的技术像外面的技术牛人那么高。但这不代表学生能什么技能都不会。现在恐怕只有国企性质的企业很看重学生的成绩、拿奖学金情况等等。但是不能期望所有同学都能顺利去国企。 选择编程语言也是比较重要的一个环节,这就看新生个人的兴趣在哪。比如有人喜欢黑客,那么它可能就适合学C,以及各种脚本。有人只喜欢网络编程,那么也许他选择Java或C#就比较适合。如果有人想成为很好的windows编程,那么VC++、.Net编程也许是一个不错的选择。语言不在于多,而在于精。如果只学了一点就换语言,那不如不要学了,去打游戏,找人聊天更好。 数据结构:这是编程最基础的课了。可以说能否学好编程的一个原因在于你有没学好数据结构。注意,没学数据结构的,未必编不好程。如果学生只是每节课听老师讲结构。然后理解了就完的话,数据结构是不会学好的,别以为考了个9X分就高兴。说不定比考了60分的学得还差。依照笔者的经历。一个班里不少的人,估计一个学期上完了,连个链表如何用语言实现都不懂。对于数据结构,新生用什么语言来实现,这个无所谓。只要你会用某种语言,就行了。 学编程有一点是很重要的,就是学会看别人代码。从代码中看懂别人的意图。这样,可以快速学到各种技巧,提高自身的编程能力。 不少新生可能会遇到一个比较普遍的问题,就是以前编过的东西会忘记,以后再要写同样的功能代码的时候,就忘了。我以前也经常碰到。我认为应该懂得把你写的代码保存起来或封装起来。以后要用的时候可以直接拿来用,不必重写。如果以后想到了更好的算法,那么再替换掉旧的代码。这里我建议学会创建链接接口,Windows下就是dll或lik,其他系统我没试过,不清楚,不过总会有相应的链接口文件的。这样,把代码测试完毕后,封装到dll中,就可以长久保存。需要用的时候可以调用。这样可以把大部分注意力集中在新的问题上,而不是纠缠于实现过的算法。 学编程最主要的一点,还是要多编程。并且尝试去接触不同方面的问题,并试图去解决它。这样,就能在技术上有很大的提高。本科学校的教育教不出一个程序员的。程序员只有编程、再编程、然后还是编程,这样的历程才能锻炼出来的。 说到最后,我也没正面回答标题。很遗憾,我也没法给你明确的回答,因为各有优势。我的观点是你根据你兴趣选一个你认为有发展的语言,然后闭关修炼去。甭管外面怎么说,学好了才是硬道理。以后不用担心你转不成其他语言。对于学生来说,我建议C/C++作为入门的基础。重点可以放在C++中,学好面向对象的思想。从编程中体会到为什么要用面向对象,而不是单纯的背书。计算机系的课不应该去背的,不懂的就查资料就行了。当学生有了一定编程能力后,就可以选择你以后作为主要的语言。即可以继续研究C++,也可以选择Java或.net中的任何一门语言。如果不浪费太多时间,大学时间内足够造就一个技术根基很好的计算机系学生。 白癜风的症状图片初期专业治白癜风的医院转载请注明原文网址:http://www.gzdatangtv.com/bcyyfz/5741.html |