Java PK C#
目前不少人对这两种语言议论纷纷。笔者在开始学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中,就可以长久保存。需要用的时候可以调用。这样可以把大部分注意力集中在新的问题上,而不是纠缠于实现过的算法。
学编程最主要的一点,还是要多编程。并且尝试去接触不同方面的问题,并试图去解决它。这样,就能在技术上有很大的提高。本科学校的教育教不出一个程序员的。程序员只有编程、再编程、然后还是编程,这样的历程才能锻炼出来的。
说到最后,我也没正面回答标题的提问。很遗憾,我也没法给你明确的回答,因为各有优势。我的观点是你根据你兴趣选一个你认为有发展的语言,然后闭关修炼去。甭管外面怎么说,学好了才是硬道理。