作为高年级的学生,很高兴与大家相聚在同济大学软件学院。C语言是我们软件学院的第一门专业基础课。一个刚刚接触程序设计的人,肯定会有各种各样的疑惑。近来,有很多大一的同学问我如何学好C语言,在这里我结合自己的学习经历谈谈个人的一些看法,希望大家能够从中受到启发,这是我最大的心愿!也欢迎大家与我多交流沟通。

一、勿在浮沙筑高台
任何一门课程,基础都是很重要的。如果基础不牢,其他都无从谈起。具体到C语言,既然是一门语言,就像汉语,英语一样,都有自己的语法规则。汉语英语说话语法不对,别人有可能也能明白我们的意思,但是计算机只会严格按照我们的指令去做。所以,C语言语法这部分虽然不难,但一定要牢记!做到得心应手。+=*/运算符,for、while循环,if、switch选择,宏,malloc、free内存分配和释放,指针和数组的存取……这些都是最基本的东西。只有熟练掌握了这些,我们才可以与计算机畅通无阻的交流。
对于这部分内容,没有什么好的方法,建议大家多看书,多上机,多练习。我学习的第一门编程语言是VB。VB的语法与C语言相比相对简单,但是我依然还记得那个时候连循环语句都不会写就去写游戏,然后碰的焦头烂额的日子。

二、程序 = 算法 + 数据结构
说英语要懂得语法,但是懂得了语法也不一定就能流畅的与老外交流。学习C语言也是一样。学习一门语言,除了掌握最基本的语法,还要学会使用计算机的“思维方式”来解决问题。其中,至关重要的两点就是算法和数据结构。
算法就是我们解决问题的方法。小到把两个变量的值互换,大到设计一套类似于google的搜索引擎,都需要算法。作为一个入门者,我们首先要学习的,是一些已经十分成熟,日常中又经常会用到的算法。例如:数组的排序,数组的查找,字符串拆分……这些都是以后经常会遇到的。就像解决一个问题有多种方法,算法也有好坏。我们还可以试着去分析一下,有几种方法可以达到我们的目的,哪种更好一些,好在哪里。
数据结构就是我们的数据在计算机内组织的形式。只有把我们的数据以适当的方法放入计算机,才能进一步的做处理。其实数据结构并不神秘,最简单的数据结构就是数组,它把我们的数据顺序的存储在计算机里。再复杂一点的是链表,它把我们的数据“串”成一串……
算法和数据结构之所以值得每个初学者下功夫,还在于它的通用性,以后大家学习C++,Java, C#,变的是语言的语法,算法与数据结构在各种语言之间是不变的。另外,也可以为将来学习数据结构这门课打下一定的基础。

三、勤能补拙
经常听到一些同学来问我,“我的基础很差,以前没接触过编程,甚至没接触过计算机,与班上的一些同学差距很大。”然后问我如何能赶上来。
首先,我觉得这是个心态的问题。可能有些人现在是比我们捷足先登,走在了我们前面。但是我们不能因此就觉得我们落后了,永远也赶不上他们了。“士别三日当刮目相看”,这句话一点不错。只要我们肯下功夫,一定可以赶上别人。所以,请大家首先摆正心态。拿我自己做例子,我接触电脑很晚,高中毕业以后才第一次摸到电脑,大学的计算机文化课才给我真正扫了计算机盲,我第一次接触C语言是在大二下学期。但是我相信,只要肯努力,我就不会落在任何人后面。
其次,程序是写出来的,所以我们需要编写大量的程序,也就是让大家多上机实践。最初可以学着别人的程序打,慢慢就应该独立出来,把自己的想法用C语言描述出来,这是一件十分快乐的事情。建议初学者不要看高级编程,先勤写代码、多看代码、培养风格、熟悉语法、最关键的还是把握思想。当我们能够信手拈来的时候,我们的C语言才可以说学会了。一定要养成自己独立写完一个程序的能力,这样可以有一种成就感。不断培养这种成就感,循序渐进,进步是自然的事情。
另外,编程是很严谨的事情,务必聚精会神,不容三心二意。经常在机房里面看到一些新生一边开着VC++一边在聊QQ,MSN,看电影。这样怎么可能静下心来去写好程序呢?

四、君子生非异也,善假于物也
作为初学一门语言的人,熟练的使用一些工具,有利于提高我们编程的效率,达到事半功倍的效果。请大家关注两样东西,一个是MSDN,还有一个是VC++集成环境的调试功能。
MSDN是我们写程序的函数参考大全。当我们函数参数记不清楚,可以通过MSDN迅速的找到答案。
VC++的调试功能可以帮助我们更好的了解代码到底是如何运行的。学会使用调试器,有时候可以很快的找出我们的程序为什么不能正确的运行。既节省时间,又让我们明白了一些程序运行的逻辑。
当然,使用工具并不能过分依赖工具。就相练武功,学会了使用十八般兵器,并不是说就不要再扎马步。

五、积水成渊,蛟龙生焉
学习是个长期的过程,要不断的积累,并且总结经验,我们学习就怕不能持之以恒。关于这点大家比我更清楚。一旦我们学会了它,其他的语言就可以触类旁通了,例如:C++,C#,JAVA,VB,DELPHI……这些学起来就会比那些C语言基础不扎实的人要轻松许多。

六、没有规矩,不成方圆
初学C语言,最容易被忽略的两样东西是文档和编码规范。而这两样东西在软件工程中是至关重要的。
文档简单的说就是描述我们程序的文字。我以前也是特讨厌写文档,在我的思想里,所谓的文档就是一些废话。对一些小的程序,当然可以上手就写,但是后来我的程序写大了,没有文档,感觉就力不从心了。文档其实要先于我们的程序产生,所谓“兵马未动,粮草先行”。
编码规范就是我们写的源程序要有一定的版式要求,例如:换行,缩进,代码对齐,以及合理的注释。这样做是为了增加代码的可读性。否则经常是一段时间后,回过头来看自己写的程序,已经不知道是什么意思了。

七、庖丁解牛
谈到这里,也应该谈一下C语言的一些高级话题。对C语言有兴趣,并且富有研究和怀疑精神的同学,可以在学过汇编之后反过来再研究一下C语言。在这里,我只留下几个问题,希望能引起大家的兴趣:
lC语言是如何被翻译成汇编甚至机器码的?我能不能也试着翻译一段?
l函数递归是如何实现的?
l我调用fopen(), malloc()时到底发生了什么?C语言是如何跟操作系统打交道的?
如果你真的弄明白了上面几个问题再回过头来看C语言,我想你就应该可以达到“目无全牛”的境界了。