1、计算机编程语言的入门学习作者:翔宇 来源:ithao123 ithao123 整理 2007-04-04IT 人应该学习哪 种语言,我觉得应该根据你的工作需要或者说你的发展方向而定。基本上两大类吧:C/C+和 Java。比如,如果你要做企业级应用的你应该学习 Java和 C;如果你想做嵌入式,那么应该学好 C 语言;其他情况下,在你不知道要做什么之前你可以选择学习 C/C+。学会这两大类中的一类,对于你学习其他语言都将是比较轻松,包括脚本语言,动态语言呵呵,这里想就自己的学习经历和情况给大家一个建议,仅供参考。注:2006.4.27 更新,原稿见附录二,原稿有一定的局限性,故做修改以免误导大家
2、,并请批评指正,谢谢。写在开始之前:应该学习哪种语言,我觉得应该根据你的工作需要或者说你的发展方向而定。基本上两大类吧:C/C+和 Java。比如,如果你要做企业级应用的你应该学习 Java和 C;如果你想做嵌入式,那么应该学好 C 语言;其他情况下,在你不知道要做什么之前你可以选择学习 C/C+。学会这两大类中的一类,对于你学习其他语言都将是比较轻松,包括脚本语言,动态语言 、我的入门是从学习 C 语言开始的(其实课程是C),这是我们学校的公共课,我上课比较认真(虽然老师讲得很差,而且一段时间后,我就发现自己的基础掌握比她好,当然理解深度没她好),因此,我认为对于完全没有基础的人而言,听别人
3、讲比较容易入门。当时的教材是学校自己编的,挺烂的。建议一(以 C/C+为例),对于刚想进入编程的人(就是从来都没有接触过编程的人),最好是听课的方式(自己看的话估计要很慢,而且很痛苦),可以找视频或者培训等。C 语言推荐入门教材:谭浩强的 C语言,最新版是第三版,不过第二版应该也可以了(蓝色的)。说明一下:坚决不同意直接看 K 如果你是为了挣钱还想搞搞技术, 就学 C+之类的语言; 如果你想搞系统开发, 你就要从硬件,汇编,一点一点学起了. 从初学者到编程高手,几种必学的编程语言如果每种语言总是略学皮毛,然后又急匆匆的跳到另外一种语言,那你就会一事无成,永远彷徨在初学者的门槛边。 对于初学者,
4、我建议从 python 开始学。因为它在语言设计上很整洁,帮助文件也很全面。而且也是 object-oriented (O-O),尽管我把它作为一个初学者开始的语言,并不代表它的用处和功能不强大。实际上它是个功能强大,可以用来做大的编程工程的语言。 我知道国内对 python 可能还不了解,因为它相对来说也比较新(1990),到现在有 12 年的历史了,但是它在国外已经被广泛接受和认同,快速发展。不过我知道邮电出版社最近刚出了一本介绍 python 编程的书,大家可以查询。python 的主页 http:/www.python.orgJava 也是个很好的语言来开始学编程。不过它比 pytho
5、n 复杂。国外的大学现在都采用 java 作为电脑专业的凯时语言。总之我觉得除了 python 之外,它也可以作为一个极好的初学者语言。 不过,会了这两种语言,并不代表你就是一个编程员了。学会编程的关键就是 - “ 编程思想“ 。 学会怎样用一种很“ 广泛的思维“ 去考虑“ 编程问题 “,也就是这种思维是可以放之于任何一种编程语言都可以解决问题的,而不是局限于单纯的一种语言。这样当你需要学习一种新的语言时,你只要学习他的语法等等就可以了,至于怎样用这种语言解决编程问题不是早就在你的脑子里了吗。所以,这也就是为什么很多程序员可以拿到一种语言,一两个星期就可以使用的很熟练了。这,也同样要求你去学几
6、种完全不同的语言。 C 语言是非常有效率的,很多时候你都需要考虑内存的管理等底层的东西。很可惜这些都需要你去花很多的时间去做,问每一个 C/C+ 的程序员,用 C/C+ 编程是不是一个很头疼的事。好消息是,现在的机器都已经很高级,运算的很快,在很多时候我们是不用考虑用 C/C+ 去做,忽略它所带来的好处,当然除非这个工程真的很需要处理底层的东西(象 内核的编辑,3-D 图形等)。很多时候 python, java 等都可以实现。另外在现在很多工程所要求的时间都不是足够充裕来用 C/C+ 去做,所以在商业上时间就是金钱,这个代价谁也付不起。 我这里并没有说 C/C+ 不好,你不应该学。相反我觉得
7、我们应该学,但不是作为一个初学者的语言来学。在 C 和 C+ 之间,我推荐先学 C 。.因为它相对来说较小,简单。作为一种底层编程语言,C,你可以学到很直接的内存管理,指针,等。另外,很多语言都是用 C 来设计的, 比如 perl , java, python 其它语言值得一学的有 perl , Lisp(当然你也很一说 effile, proflog),提到 perl 是因为它的实用性,广泛的应用在网络和系统管理,perl 提倡 “There is always more than one way to do it“ 这主要是从 perl 的语法以及它的独特设计上来获得,记得用几行code
8、你就可以写出很有效率的程序?这也就是为什么我很喜欢 perl 了。但是 perl 的语法着实让很多人头疼 而且对于用 perl 写的大型程序,维护性不是很好,python 就没有这方面的问题,这也是为什么很多 perl 的用户转向了 python 。很多人用 perl 的目的和用 python 一样,避免在不要求 C 的效率时 使用 C。 Lisp 据说是很有启迪性的语言,会让你成为一个更好的程序员.(我还没有到达那个程度 :-) 我个人推荐 (python, java, C ,perl, 和 Lisp),因为他们使用不同的方法来编程,每一种都会在某种程度上交给你些很有价值的东西。 谈到学习编
9、程,单纯的上课和看书只会让你学习语言的特性等,只有学会用编程的思想来思考才是你终生受用的。这些只能依靠 “ 练习 “ 具体就是 1) 读程序 2) 写程序 看似简单,但坚持下来你才会真正体会到,这里没有其他可以投机取巧的方法学习编程了。 至于学多少种,是越多越好吧。但并不是指每个都精通,我想大家也没那么多时间和精力。但在你有了坚实的编程经验和基础,了解其它语言的设计方法、构造会开阔你的眼界,没准什么时候你也可以编出自己的语言(咱中国人编的!) :-) 要提醒大家的是,如果每种语言总是略学皮毛,然后又急匆匆的跳到另外一种语言,那你就会一事无成,永远彷徨在初学者的门槛边。我想这句话不只是对程序员,
10、对我们来说也是生活中的一个道理。程序入门:初学者应从何种编程语言开始学起 根据你兴趣选一个你认为有发展的语言,然后闭关修炼去。甭管外面怎么说,学好了才是硬道理。以后不用担心你转不成其他语言。对于学生来说,我建议 C/C+作为入门的基础。重点可以放在 C+中,学好面向对象的思想。从编程中体会到为什么要用面向对象,而不是单纯的背书。计算机系的课不应该去背的,不懂的就查资料就行了。当学生有了一定编程能力后,就可以选择你以后作为主要的语言。即可以继续研究 C+,也可以选择Java 或.net 中的任何一门语言这是一个争论不休的话题,不同人总会有不同的见解。传统的说法是从 Pascal 开始,而较为新点
11、的是 C 开始,这几年以来,也有提出直接从 C+或者 C#/Java 开始学起。 本人是本科出身的,对于专科或者不读书的初学者来说,他们的环境也许跟我的不同,不过我的观点可以作为参考。 首先,我先来介绍一下各种编程语言的来源、特点。 Pascal 语言:Pascal 是一种计算机通用的高级程序设计语言,由瑞士 Niklaus Wirth教授六十年代末设计并创立的。 Pascal 的主要特点有:严格的结构化形式、丰富完备的数据类型、运行效率高、查错能力强等特点。由于上述特点,Pascal 可以方便用于描述各种算法和数据结构。对于程序设计的初学者,Pascal 语言有益于培养良好的程序设计风格和习
12、惯。IOI(国际奥林匹克信息学竞赛)把 Pascal 语言作为三种程序设计语言之一。NOI(全国奥林匹克信息学竞赛)把 Pascal 语言定为唯一提倡的程序设计语言,在大学中 Pascal语言也常常被用作学习数据结构与算法的数学语言。 C 语言: C 语言是介于汇编语言和高级语言之间的语言,属于高级语言,也称为中级语言,是集汇编和高级语言优点于一身的程序设计语言。于1972年在美国贝尔实验室里问世。早期的 C 语言主要用于UNIX 系统。由于 C 语言的强大功能和各方面的优点逐渐为人们认识,到了九十年代,C 语言开始进入其他操作系统,并很快在各类大、中、小和微型计算机上得到广泛的应用。成为当代
13、最优秀的程序设计语言之一。 C 的特点 1 是一种结构化语言。层次清晰,便于按模块化方式组织程序,易于调试和维护。 2 C 语言的表现能力和处理能力极强。不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构,它还可以直接访问内存的物理地址,进行位级别的操作。 3 由于 C 语言实现对硬件的编程操作,所以既可用于系统软件的开发,也适合于应用软件的开发。C 语言还具有效率高,可移植性强等特点。因此广泛地移植到了各类计算机上,从而形成了多种版本的C 语言。 4 由于C 语言允许直接对位、字节和地址进行操作,能实现汇编语言的大部分功能。 5 目标代码质量高,程序执行效率高。 总体上来说,C 语言
14、的优点是简洁、紧凑、使用方便、灵活、易于学习和应用。仅有 32 个关键字。9 种控制语句,程序的书写形式也很自由。 C 语言的弱点:非强类型;语法限制不严格,使得编程者无法过多地依赖 C 编译程序去查错;缺少实时检查,如数组越界等。 从严格上来说,C 语言是块结构语言,这是因为它在结构上类似于 ALGOL、Pascal 和 Modula-2。从技术上讲,块结构语言允许在过程和函数中定义过程和函数。因为 C 语言不允许在函数中定义函数,所以不能称为通常意义上的块结构语言。 C 语言作为一门面向过程的计算机语言,至今已有三十多年历史,应用广泛,无论是 Windows还是Linux,你所看到的底层都
15、是用C 写的。大部分的网络协议也都是用 C 实现的。你看到的最漂亮的游戏画面也是用C 实现的,工业控制程序也是用 C实现的。不过 C 不是万能,只是某些方面它适用而已。 C语言 C是于 1986 年由 AT&T 贝尔实验室开发的,语言开发的目的在于通过数据封装减少程序变量的副作用,从而降低程序的复杂性并提高程序的可靠性。(笔者曾经听到的开发 C的目的是由于懂得 C 语言的人越来越多,所以需要再出一门更难的、比 C 语言强大的语言,才能保住饭碗,so。C出世啦)C是 C 语言的直接扩展,C的多继承机制能更好地描述对象的属性和行为。 C是 C 的扩展,但 C可以作为一种全新的语言来看。 C+的特点
16、:面向对象、继承、封装、多态性。 由于 C是 C 的扩展,所以也具有C 的特点。 C在 C 的基础上,加入了面向对象编程思想,也就决定了C的效率在某一方面是不如 C 的。比如定义一种类型,C用类(Class)来封装,而 C 可能就直接几个变量的组合就成了一个结构体(Struct),类不仅具有成员变量,还具有成员函数等,在精细的比较其效率时,C 会比 C的效率要高。但由于时代的发展,项目或工程的庞大化,基于面向对象的思想显然更能适应。即C在这方面能比 C 要做得更漂亮。现在不少系统级编程都是用 C实现,许多应用级别的软件也是用 C实现。 这里要注意一点,就是 C并不是完全的面向对象语言。它是提供
17、了面向对象的模型以及思路,但是同时兼容了面向过程的模型。 Java 语言 Java 语言来自于 Sun 公司的一个叫 Green 的项目,其原先的目的是为家用消费电子产品开发一个分布式代码系统,这样我们就可以把 email 发给电冰箱、电视机等家用电器。对他们进行控制和信息交流。开始,准备用 C,但 C+太复杂,安全性差,最后用一种新的语言 Oak(Java 的前身),Oak 是一种用于网络的精巧而安全的语言,Sun公司曾依此投标一个交互式电视项目,但被 SGI打败。可怜的 Oak 几乎无家可归,恰巧这时 Mark Ardreesen 开发的 Mosaic 和 Netscape 启发了Oak项
18、目组成员,他们用(Java)编制了 HotJava浏览器,得到了 Sun 首席执行官 Scott McNealy 的支持,触发了 Java 进军 Internet。Java 的取名有一段趣闻:有一天,几位 Java 成员组的会员正在讨论给这个新的语言取什么名字,当时他们正在咖啡馆喝着 Java(爪哇)咖啡,有一个人灵机一动说就叫 Java怎样,得到了其他人的赞赏,于是,Java 这个名字就这样传开了。 Java 的特点: 1 简单性:风格类似于C+,Java 摒弃了 C+中容易引发程序错误的地方,如指针和内存管理。 2 面向对象:Java 是一种完全面向对象语言。从这点来看,Java 类似于
19、SmallTalk,但其特性、尤其是适用于分布式计算环境的特性远远超越了SmallTalk。 3 分布式:Java 包括一个支持HTTP 和FTP 等基于 TCP/IP 协议的子库。因此,Java 应用程序可凭借 URL 打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。 4 健壮:Java 致力于检查程序在编译和运行时的错误。类型检查帮助检查出许多开发早期出现的错误。Java 自己操纵内存减少了内存出错的可能性。 5 结构中立:Java 将程序编译成一种结构中立的中间文件格式。只要有 Java 运行系统的机器都执行这种中间代码。这种中间语言被设计在虚拟机上运行,由机器相关的运
20、行调试器实现执行。 6 安全: 1)删除了香指针和手动释放内存等功能,避免了非法内存操作。 2)当 Java用来创建浏览器时,语言功能和浏览器本身提供的功能结合起来。 Java 在机器上执行前,要经过很多测试,它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。7 可移植的:同体系结构无关的特性使得 Java应用程序可以在配备Java 解释器和运行环境的任何计算机系统上运行。任何 Java 代码会被解释成一种中间语言,然后通过不同机子的特定环境(如机器指令)运行程序。实现方便移植的特点。8 解释性。Java 解释器能直接运行目标代码指令。链接程序通常比编
21、译程序所需资源少。 9 高性能。如果解释器速度不慢,Java 可以在运行时直接将目标代码翻译成机器指令。Sun 用直接解释器一秒钟内可调用 300,000 个过程。 10 多线程:Java 提供的多线程功能使得在一个程序里可同时执行多个小任务。多线程带来的更大好处是更好的交互性能和实时控制性能。 11 动态:动态特性允许程序动态地装入运行过程中所需要的类。在运行时确定引用的好处是可以使用已被更新的类,而不必担心会影响原有的代码。如果程序连接了网络中另一系统中的某一类,该类的所有者也可以自由地对该类进行更新,而不会使任何引用该类的程序崩溃。 Java 在诞生之后不久,便受到广大群众的欢迎,甚至有
22、人说出有了 Java,可以不要 C/C+了。一度把 Java 提到了很高的地位。这当然是对Java 的一种赞赏,只是有点过了。到今天,Java 依然不能取代C,C+,而且还出现了新的对手.Net(后面将会介绍)。 Java 目前主要应用:Web 浏览器、网络应用系统。C#语言。 C#是一种精确、简单、类型安全、面向对象的语言。说到 C#,就不得不先简单介绍一下.net。到底什么是.net 呢,按照微软总裁兼首席执行官 Steve Ballrner 把它定义为:.Net 代表一个集合,一个环境,它可以作为平台支持下一代Internet的可编程结构。C#是.net 的代表语言。 C#的特点: 1.
23、 完全面向对象。 2. 支持分布式,之所以有 C#,是因为微软相信分布式应用程序是未来的趋势,即处理过程分布在客户机和服务器上。所以 C#一出生就注定了能很好解决分布式问题。 3. 跟 Java类似,C#代码经过编译后,成为了一种IL(中间语言)。在运行时,再把 IL 编译为平台专用的代码。 4. 健壮,C#在检查程序错误和编译与运行时错误一点也不逊于 Java,C#也用了自动管理内存机制。5. C#不像 Java 那样完全摒弃了指针和手动内存管理。C#默认情况下是不能使用指针的,程序员在有必要时可以打开指针来使用。这样可以保证编程的灵活性。 6. 安全性:C#的安全性是有.net 平台来提供
24、的。C#代码编译后成为 IL 语言。是一种受控代码,.net 提供类型安全检查等机制保证代码是安全的。7. 可移植性:由于 C#使用类似 Java 的中间语言机制。使得 C#也跟 Java 类似,可以很方便的移植到其他系统。在运行时,再把中间代码编译为适合特定机器的代码。 8. 解释性:C#也是一种特殊的解释性语言。 9. 高性能:C#把代码编译成中间语言后,可以高效的执行程序。 10. 多线程:与 Java类似,可以由一个主进程分出多个执行小任务的多线程。 11. 组件模式:C#很适合组件开发。各个组件可以由其他语言实现的,然后集成在.net 中。 C#是在 Java 流行起来后所诞生的一种
25、新的语言。由于微软在操作系统上占有很大的优势。在以往的开发中累积了不少经验,所形成的.net 平台,所以 C#在 Windows 方面可以说比 Java 具有更大的优势。如果单纯从技术上来讲,C#在网络编程上可以与 Java 匹敌。C#还在 Windows Forms也有一定的优势。C#是一种非常类似于 C+的语言,风格是更接近于 Java,不管是 C+程序员还是Java 程序员,都可以很方便的转到 C#上来。 C#的强大是依赖于.net 的发展,而.net 的发展是看微软在.net 上的决心和投入有多少。从 Windows 2003 和Vista系统可以看出(前者内置.net1.1,后者内置
26、.net2.0。).Net 在 Windows 编程中具有重要的战略意义。C#目前主要是应用在网络编程上,其他领域比如数据库、窗体编程,都逐渐在增大。 终于写完了各种语言的特点。如果读者对以上观点不同意,请留言。别 BS 我就对了。好了。继续,我该讲主题了!其次,我们现在假定一个初学者没有任何程序设计语言的基础。先来比较一下各种语言: Pascal PK C 现在,看我们学习Pascal 和 C 的过程:学 Hello world,然后知道怎么编译,运行。然后学习基本数据类型,然后输入输出。不管学校希望学生能学多好,实际来看,学生学 Pascal跟学 C 是没什么区别的。不同的只是语言风格。有
27、人也许会说,学 C 的精华在于指针。学 C 的人会比 Pascal 强很多。没错,指针是学 C的一个重点。但是就按我学 C 的课本来看,用到的指针只是很简单的。理解了*p 和 p 有什么不同,就够了。然后会编个简单的几行代码,就自认为会C 了。C库中有很多函数,教师在课堂上几乎没讲。比如memset,qsort等,少了这些。你学 Pascal 和 C没什么不同,只是作为了学习其他语言的铺垫而已。而新生由于没有语言根基,有不少好学生由于教师在课堂上没讲,就以为学完教师所教的了。这正是好学生的弱点所在。如果是“坏”学生,不听课堂的。倒还可能发现课堂所学的 C 是多么肤浅。还有,我至今没见过有学校会
28、教 C 的图形开发的。虽然图形开发不是语言基础。不过对于扩展新生的编程视野是一个不错的选择。现代程序软件支持图形窗口的太丰富了,几乎不会太多的学生去在意窗体的设置,定位等功能。图形编程还能激起学生的编程欲望。笔者曾经实现过 C 的动画演示,当里面的所有图形都按预期的运动起来的时候,那种兴奋感犹如你在冰天雪地的情况下忽然淋你一盘冰水所感到的那种感觉。 C PK C+ C+是在 C 的基础上发展起来的。看起来似乎这两个 pk,赢者肯定 C+。其实未必。C至今还有生存的空间,而没有被 C+全盘代替。说明了 C 还是具有不可替代的作用。C 目前主要应用在于硬件底层的部分,以及对于性能要求较高的应用程序
29、中。但是对于复杂的系统级的开发,显然 C+显得从容自在。联系实际,不少人学 C的时候,就已经有 C 的基础了。有 C 的基础,学C+的基本类型的时候可以快速渡过,然后学类,继承,多态等概念。还是从我的经历说起,我选了 C+,然后几乎没怎上课,因为实在听了想睡觉,期末前用 C+做了一个大作业后,就叫懂 C+了哈,然后考试当然轻松过了。其实我那时还是没学到C+,本质点说,我只是还是在会点 C 的基础上。多了一个结构类型:类,而已。后来使用了1 年的C+后,才恍然察觉到当年的无知。才明白 C+是什么。我相信已经学过 C+的同学估计现在连 IO流的概念还没搞清楚的人很多。造成这种现象的原因在于:1.
30、学生本身没有认真去编程实现。2. 教师只是重复的讲课本而已。最终判定学生是否会 C+的标准也只是考试为主。关于高校的考试制度在计算机系中的效用,笔者将在未来几天内出一篇个人观点文章。 Java PK C# 目前不少人对这两种语言议论纷纷。笔者在开始学 C#的时候,曾经看过 Java 程序员对于 C#的观点。把 C#贬得一文不值。忽然发现,似乎很多 Java 的程序员对 C#怀有天生的敌意。笔者目前自认为精通的是 C#(别 BS 我)。以往学过Java,在此我写一下我所感触到的。虽然微软一直称 C#是继承于 C/C+,但是不论从代码结构,还是内置的支持类,都跟 Java 有惊人的相似之处。我感觉
31、 C#就是在 Java 之上,针对 Java 的优点和缺点来设计的。我用过 C、C+、Java,感觉还是C#最好,这只是笔者的个人感受。由于 C#还保留着指针,当要实现一下比较底层的,性能要求高的时候,解决办法之一是 C#可以打开指针,而Java是做不到的,Java 只能通过其他途径,比如优化算法来解决。 Java 在非 windows 下获得了很大的成功:某调查公司曾经使用 Google搜索引擎来统计以下指标:熟练使用某种语言的工程师数量、某种语言课程教学的可用性、有多少公司在出售用某种语言编写的软件。最后综合得分情况是:Java 以45.2 分排名第一;第二名是 C,得分是 32.2;C+
32、是以 24.6分排名第三;C#远远落后在第九位,得分为 4.6。这些数据是几年前的数据。在这次测试中还发现,C#的受欢迎程度正在急剧上升;而 Java相对稳定。这其中一个原因是.net 允许许多种编程语言,而不像 Java 那样,限制人们只能使用一种语言。开发者能够使用包括 C、C+、C#甚至 Java 在内的几乎任何语言来编写代码,然后把这些代码翻译成机器看得懂的 CLR 代码(公共语言运行时代码)。这样.net 可以让开发者保护自己的“代码投资”,换句话说,过去人们用C、C编写的代码都能再次被利用。而 Java只能重新写代码。 所有指导者(学校、培训机构、带你的人)在足够的时间内都希望新生
33、能打下编程良好的基础。从 Pascal的介绍来看,似乎从它开始是很适合的。但是笔者是从 C 起步的,没学过 Pascal,对程序设计的习惯以及特点一点也不比学 Pascal 的人差。我觉得这不是语言的异同造成个人水平不同,在于拿了一门语言的书,新生是如何学编程的。不少新生可能会认为好好上课,听老师讲课,然后回来自己的电脑上把老师讲过的内容上机去试一遍,就 ok 了。估计连不少教师也是这样想的。笔者认为即使真有学生做得到,效果也是不好的。比如C 语言把,我看过不少的 C 的教程的书,内容大同小异。前面几章,也就详细的讲了语言定义的基本类型。然后讲结构体什么的。C+则是讲类,继承等。这些东西,我感
34、觉上课没什么好讲的,要讲最多也就半节课。如果有一定编程基础的人,这些东西学得更快。但是笔者的经历是这些课都上了满满一个学期,还有后面某些章节是来不及讲的。笔者不幸运,在上 Java 课的时候,没有上机课,前面的基本类型都上了半学期了,不少学生自己连 SDK都没装,最终考试就笔试过关罢了。连这种本应动手的课程还是按照传统的考核方法:卷面考试来解决。能通过高考的学生,不管是真的有料还是假的有料,相信都已经是考试能人了,对于计算机系来说,笔者认为不能全按照传统的教学模式来套,这只是闭着眼睛瞎说话而已。程序是具有很强的唯一性的。你行就行,不行就是不行。卷面答得再好也只是吹。我相信不仅我学校,其他各大高
35、校情况也不会差太多。这里顺便说几句感想:对于新生来说,应该自己能看清进入计算机系跟中学时候的环境不同。中学可以专门应试,不必学一些太实用的东西(除非不读下去了,准备出来工作的)。但是到了本科,如果你也只是应付教学,然后只是争取拿奖学金,最后你不考研或者考不上研,那可以说你在最后一年找工作的时候首先是自己心虚。虽然外面社会对本科要求不会太高,不必学生的技术像外面的技术牛人那么高。但这不代表学生能什么技能都不会。现在恐怕只有国企性质的企业很看重学生的成绩、拿奖学金情况等等。但是不能期望所有同学都能顺利去国企。 选择编程语言也是比较重要的一个环节,这就看新生个人的兴趣在哪。比如有人喜欢黑客,那么它可
36、能就适合学 C,以及各种脚本。有人只喜欢网络编程,那么也许他选择Java 或 C#就比较适合。如果有人想成为很好的windows 编程,那么 VC、.Net 编程也许是一个不错的选择。语言不在于多,而在于精。如果只学了一点就换语言,那不如不要学了,去打游戏,找人聊天更好。 数据结构:这是编程最基础的课了。可以说能否学好编程的一个原因在于你有没学好数据结构。注意,没学数据结构的,未必编不好程。如果学生只是每节课听老师讲结构。然后理解了就完的话,数据结构是不会学好的,别以为考了个 9X 分就高兴。说不定比考了 60 分的学得还差。依照笔者的经历。一个班里不少的人,估计一个学期上完了,连个链表如何用
37、语言实现都不懂。对于数据结构,新生用什么语言来实现,这个无所谓。只要你会用某种语言,就行了。 学编程有一点是很重要的,就是学会看别人代码。从代码中看懂别人的意图。这样,可以快速学到各种技巧,提高自身的编程能力。不少新生可能会遇到一个比较普遍的问题,就是以前编过的东西会忘记,以后再要写同样的功能代码的时候,就忘了。我以前也经常碰到。我认为应该懂得把你写的代码保存起来或封装起来。以后要用的时候可以直接拿来用,不必重写。如果以后想到了更好的算法,那么再替换掉旧的代码。这里我建议学会创建链接接口,Windows 下就是dll或 lik,其他系统我没试过,不清楚,不过总会有相应的链接口文件的。这样,把代
38、码测试完毕后,封装到 dll 中,就可以长久保存。需要用的时候可以调用。这样可以把大部分注意力集中在新的问题上,而不是纠缠于实现过的算法。 学编程最主要的一点,还是要多编程。并且尝试去接触不同方面的问题,并试图去解决它。这样,就能在技术上有很大的提高。本科学校的教育教不出一个程序员的。程序员只有编程、再编程、然后还是编程,这样的历程才能锻炼出来的。 说到最后,我也没正面回答标题的提问。很遗憾,我也没法给你明确的回答,因为各有优势。我的观点是你根据你兴趣选一个你认为有发展的语言,然后闭关修炼去。甭管外面怎么说,学好了才是硬道理。以后不用担心你转不成其他语言。对于学生来说,我建议 C/C+作为入门的基础。重点可以放在 C+中,学好面向对象的思想。从编程中体会到为什么要用面向对象,而不是单纯的背书。计算机系的课不应该去背的,不懂的就查资料就行了。当学生有了一定编程能力后,就可以选择你以后作为主要的语言。即可以继续研究 C+,也可以选择Java 或.net 中的任何一门语言。如果不浪费太多时间,大学时间内足够造就一个技术根基很好的计算机系学生。