看到许多初学者的发问帖子,感触良多,故作此文章,初学者聊且一看,经验丰富者帮助点评。对于那些学习C语言的目的就是想考什么证书的人,谢谢您请关掉此窗口。
我已经用了12年C语言了,应该还算是经验丰富把,有些建议要说给初学者们。
编程语言其实是一个很初级的工具,但是你又必须熟练的掌握它,学懂一门编程语言就好像学会了写字,但是会写字的人不见得会写文章,而会写文章又不见的写得好。可是如果你不会写字,那就一定写不出文章来。
首先,在学习C语言之前,应该学好计算机基础。里面的很多概念对于C程序员都是非常重要的。如果你在着手学习C之前,或者已经开始学习C,但是碰到了很多问题,应该再把计算机基础的书拿来好好看看。
如果你有足够的耐心,十足的毅力,应该再学习C语言之前学学汇编,这会让你对许多比较细腻的概念有清醒的认识,如果你不是那么有耐心(恕我直言,大部分人可能没有)。那么可以在看完一遍C语言的教材后再看,但是一定要看一遍,相信我一定会受益匪浅。
看 到有些人发问的帖子,很明显的没有仔细的思考过问题,或者没有认真地查阅过书籍,因为其中的语法和逻辑错误实在是不能理解。想来如果你的语文作业上面满篇 都是错字,老师一定不会放过你。为什么不先打好基础呢?有些人抱怨说因为教材不好,老师水平不行等等。但是我本人就是在TC2下学习C语言的,那时候除了 谭浩强的书,也几乎找不到什么别的书。我不打算就谭浩强的书发表什么意见,那也是在称不上是一本好书,但是如果这本是能学好,全部看好,都记住,也应该有 相当的水平了。建议不管看什么书,先认真地看懂,不要贪速度,应该力求深入的理解。
如果你能够比较熟练的解决一本教材上的所有习题,那么就应该转入对算法的学习,尽管此时你的C语言还称不上精通,有许多细节问题还不了解,许多问题还没有碰到,但是这些问题会在后面的工作和学习中得到解决的。
过 去,有个著名的公式,大概是:程序=语言+算法+数据,不知道现在还提不提这个了。可能现在要加上更多的内容:项目管理、质量控制、代码规范…………。但 是这个公式还是有相当的参考价值,还是用写文章来类比,语言好比文字,算法是文章的思想,数据是文章的内容。所以在经过一个阶段的识字之后,应该试着发表 一下自己的思想了。
经过一段零零散散的算法学习,对“算法”这两个字有了概念之后,应该系统地对算法进行学习,这个过程是与数据结合在一 起的,应该看看数据结构,而且必须熟练的掌握。在这里提到的一本书是《运筹学》,里面的算法大都可以用计算机实现,我推荐这本书的原因在于,它不仅介绍了 特定问题的算法,而且详细解释了为什么要这样算,怎么得出这个算法的,等等。对于提高思考问题的能力有很大帮助。
如果你的精力和时间允 许,现在就应该开始大量的阅读和编写代码了,两者同样重要。“读书破万卷,下笔如有神”,尽管这种学习方法效率较低,而且很枯燥,但是应该看到,古代的这 种教育方式培养了千古文豪,而现在的语文教育培养出来的…………(唉,中小学语文教育的现状大家都知道,我就是受害者)。读代码确实是一件非常辛苦的事 情,我曾经试图阅读全部的Linux内核原代码,最后只看了不到十分之一,而其中看懂领会的,也就一半而已,但还是感到有很大帮助。至于大量编写代码,理 由很简单:实践性的技术要在实践中提高。但是要注意,如果你已经学完了C语言和数据结构(而且学得不错),那就不应该专注于那些小程序了,那根本就是在浪 费时间,此时应该编写有些规模的,具有一定实用性的程序。并在这个过程中开始领会软件工程的一些思想。第一个写出来的程序一定是错误百出,一点点地修改, 一点点地调试,一定会通过的。对于写代码,说一个我本人的经历,我第一遍看谭浩强的那本书,看到条件分支的时候,突然很兴奋,想要写点什么,于是看了一些 TC2的帮助,懂得了图形编程,就自己写了一个水果赌盘的游戏,可能有人在游戏厅见过,就是可以压什么苹果橙子之类的。各位可以想象一下,当时我还不会数 组,不知道循环,于是所有的这类东西都是用goto来完成的,这个历史上最蹩脚的程序居然也正常运行了,后来我发现原来可以使用循环,于是将这段代码替换 掉,学到数组的时候,终于将那些小灯在屏幕上的位置放到了数组里,学到文件的时候,将图形放进了二进制文件(原本都是一条线、一个点画出来的),记不得经 过了多少次修改,总之程序能运行之后,长度从2700行变成了127行。所以,想学好编程是要有点毅力的。
最后发表一下先学习C还是先学习C++的问题,这个问题见仁见智,我的意见是,先学习C。
尽 管现在我很少用C了,但是C语言确实更加基础,一个C++的高手要考虑的一些问题(比如内存的操作方面的问题),C语言的初学者可能就必须有所了解,否则 会犯错误。这些只是迟早是要掌握的,但是因为C++关注更高层的概念,所以在学习C++的过程中这些问题可能被忽略了,以至于有人用了一两年C++,还是 有些问题不是很清楚。另一个主要的原因是:C++太优秀了,而C++的程序员会在某种程度上感觉自己比C程序员高明(他们确实有理由这样),于是学完C+ +之后你可能就不屑于学习C所关注的内容,这样的话会错过提高的很好机会。
最后希望各位的学习过程顺利,进步迅速!!
gkisme(空想主义者):
ASM是我所知道的最麻烦最不好用的东东,也差不多是几种比较难学的东西之一,但是学习ASM对C肯定大有帮助。我甚至可以肯定地说,学过汇编与没学过汇编的C程序员至少差两个档次。
另:ASM的基础就是计算机基础这本书,没有别的了,ASM已经是很基础的了。
我已经用了12年C语言了,应该还算是经验丰富把,有些建议要说给初学者们。
编程语言其实是一个很初级的工具,但是你又必须熟练的掌握它,学懂一门编程语言就好像学会了写字,但是会写字的人不见得会写文章,而会写文章又不见的写得好。可是如果你不会写字,那就一定写不出文章来。
首先,在学习C语言之前,应该学好计算机基础。里面的很多概念对于C程序员都是非常重要的。如果你在着手学习C之前,或者已经开始学习C,但是碰到了很多问题,应该再把计算机基础的书拿来好好看看。
如果你有足够的耐心,十足的毅力,应该再学习C语言之前学学汇编,这会让你对许多比较细腻的概念有清醒的认识,如果你不是那么有耐心(恕我直言,大部分人可能没有)。那么可以在看完一遍C语言的教材后再看,但是一定要看一遍,相信我一定会受益匪浅。
看 到有些人发问的帖子,很明显的没有仔细的思考过问题,或者没有认真地查阅过书籍,因为其中的语法和逻辑错误实在是不能理解。想来如果你的语文作业上面满篇 都是错字,老师一定不会放过你。为什么不先打好基础呢?有些人抱怨说因为教材不好,老师水平不行等等。但是我本人就是在TC2下学习C语言的,那时候除了 谭浩强的书,也几乎找不到什么别的书。我不打算就谭浩强的书发表什么意见,那也是在称不上是一本好书,但是如果这本是能学好,全部看好,都记住,也应该有 相当的水平了。建议不管看什么书,先认真地看懂,不要贪速度,应该力求深入的理解。
如果你能够比较熟练的解决一本教材上的所有习题,那么就应该转入对算法的学习,尽管此时你的C语言还称不上精通,有许多细节问题还不了解,许多问题还没有碰到,但是这些问题会在后面的工作和学习中得到解决的。
过 去,有个著名的公式,大概是:程序=语言+算法+数据,不知道现在还提不提这个了。可能现在要加上更多的内容:项目管理、质量控制、代码规范…………。但 是这个公式还是有相当的参考价值,还是用写文章来类比,语言好比文字,算法是文章的思想,数据是文章的内容。所以在经过一个阶段的识字之后,应该试着发表 一下自己的思想了。
经过一段零零散散的算法学习,对“算法”这两个字有了概念之后,应该系统地对算法进行学习,这个过程是与数据结合在一 起的,应该看看数据结构,而且必须熟练的掌握。在这里提到的一本书是《运筹学》,里面的算法大都可以用计算机实现,我推荐这本书的原因在于,它不仅介绍了 特定问题的算法,而且详细解释了为什么要这样算,怎么得出这个算法的,等等。对于提高思考问题的能力有很大帮助。
如果你的精力和时间允 许,现在就应该开始大量的阅读和编写代码了,两者同样重要。“读书破万卷,下笔如有神”,尽管这种学习方法效率较低,而且很枯燥,但是应该看到,古代的这 种教育方式培养了千古文豪,而现在的语文教育培养出来的…………(唉,中小学语文教育的现状大家都知道,我就是受害者)。读代码确实是一件非常辛苦的事 情,我曾经试图阅读全部的Linux内核原代码,最后只看了不到十分之一,而其中看懂领会的,也就一半而已,但还是感到有很大帮助。至于大量编写代码,理 由很简单:实践性的技术要在实践中提高。但是要注意,如果你已经学完了C语言和数据结构(而且学得不错),那就不应该专注于那些小程序了,那根本就是在浪 费时间,此时应该编写有些规模的,具有一定实用性的程序。并在这个过程中开始领会软件工程的一些思想。第一个写出来的程序一定是错误百出,一点点地修改, 一点点地调试,一定会通过的。对于写代码,说一个我本人的经历,我第一遍看谭浩强的那本书,看到条件分支的时候,突然很兴奋,想要写点什么,于是看了一些 TC2的帮助,懂得了图形编程,就自己写了一个水果赌盘的游戏,可能有人在游戏厅见过,就是可以压什么苹果橙子之类的。各位可以想象一下,当时我还不会数 组,不知道循环,于是所有的这类东西都是用goto来完成的,这个历史上最蹩脚的程序居然也正常运行了,后来我发现原来可以使用循环,于是将这段代码替换 掉,学到数组的时候,终于将那些小灯在屏幕上的位置放到了数组里,学到文件的时候,将图形放进了二进制文件(原本都是一条线、一个点画出来的),记不得经 过了多少次修改,总之程序能运行之后,长度从2700行变成了127行。所以,想学好编程是要有点毅力的。
最后发表一下先学习C还是先学习C++的问题,这个问题见仁见智,我的意见是,先学习C。
尽 管现在我很少用C了,但是C语言确实更加基础,一个C++的高手要考虑的一些问题(比如内存的操作方面的问题),C语言的初学者可能就必须有所了解,否则 会犯错误。这些只是迟早是要掌握的,但是因为C++关注更高层的概念,所以在学习C++的过程中这些问题可能被忽略了,以至于有人用了一两年C++,还是 有些问题不是很清楚。另一个主要的原因是:C++太优秀了,而C++的程序员会在某种程度上感觉自己比C程序员高明(他们确实有理由这样),于是学完C+ +之后你可能就不屑于学习C所关注的内容,这样的话会错过提高的很好机会。
最后希望各位的学习过程顺利,进步迅速!!
gkisme(空想主义者):
ASM是我所知道的最麻烦最不好用的东东,也差不多是几种比较难学的东西之一,但是学习ASM对C肯定大有帮助。我甚至可以肯定地说,学过汇编与没学过汇编的C程序员至少差两个档次。
另:ASM的基础就是计算机基础这本书,没有别的了,ASM已经是很基础的了。