编写程序与做文章 ----- 致C语言初学者 付:C还是C++

herryhuang 2004-08-25 10:49:36
看到许多初学者的发问帖子,感触良多,故作此文章,初学者聊且一看,经验丰富者帮助点评。对于那些学习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所关注的内容,这样的话会错过提高的很好机会。

最后希望各位的学习过程顺利,进步迅速!!
...全文
12041 490 打赏 收藏 转发到动态 举报
写回复
用AI写文章
490 条回复
切换为时间正序
请发表友善的回复…
发表回复
ermao998 2005-09-08
  • 打赏
  • 举报
回复
金玉良言
bombwang 2005-09-07
  • 打赏
  • 举报
回复
ddddddd
Chaibin104 2005-09-07
  • 打赏
  • 举报
回复
to 楼主:大部分观点同意,只是对于学C之前要学汇编有点意见,个人认为学点计算机原理比较好,当然是皮毛中的皮毛原理咯。至于C和C++的学习顺序,其实我认为C和C++是二个不同的语言,不存在先学谁的问题,当然,学了C之后再学C++,可能进度稍快。(也有可能把C和C++的语法搞混,就像我当初一样-_-)
庄鱼 2005-09-07
  • 打赏
  • 举报
回复
To: oldbiestar(居然真的有oldbie这个词……)
那是因为你没看见过宝马贴,以及C/C++各水人到Java倒版的贴子,回复都是过千的
--------------------------------
哈,学Java的人通常都认为他们的工具是多么的先进,当然不容别人说半点反对意见了。其实,C/C++是专门为程序员设计的语言,因此很多时候使用C/C++要比其他的语言要辛苦很多但也灵活自由许多;Java则是针对网络工程项目设计的语言,使用者定位为工程技术人员,因此语言的健壮性要求比较高,但去多时候为了程序的健壮性常常会有许多的限制而显得低效和不够灵活。其实C/C++当其完全像Java那样规范时,其运行速度与Java可以说是相当的。只是现在不少厂家都跑去搞C#或.Net了,优秀的C/C++编译器越来越少了而已。
ruiding 2005-09-02
  • 打赏
  • 举报
回复
好帖 当顶...
shenming125 2005-09-02
  • 打赏
  • 举报
回复
金玉良言
xujiwei 2005-09-02
  • 打赏
  • 举报
回复
C学习ing……受益多多~~~
Featured 2005-09-02
  • 打赏
  • 举报
回复
真搞笑,居然有人说Basic害人,
我也学过Basic,比DOS下面的那个Basic还原始,是运行在文曲星上的,让我着迷了很久。
它是玩具,但不能说它害人
玩具并不害人
scu_hurricane 2005-09-01
  • 打赏
  • 举报
回复
学习。
wxyfx 2005-09-01
  • 打赏
  • 举报
回复
这个帖子看得我莫名得感动,看了很久,想了很多,想想以前自己学习还真是浮躁啊,得好好静下心来学习了
na1ve 2005-08-27
  • 打赏
  • 举报
回复
受益良多,好贴,还嫌短。正在努力学习C,我的工作,汗
pencil001 2005-08-26
  • 打赏
  • 举报
回复
一条持续了一年多的帖子,看完不留名太对不起了
oldbiestar 2005-08-26
  • 打赏
  • 举报
回复
回复人: xteo27(迷你苏打) ( ) 信誉:100 2005-08-26 20:29:00 得分: 0


看完是我在CSDN里看到的最长的帖子,收益很深,希望能和各位高手一样能在自己喜欢的行业中有自己的一席只地,看来现在只有努力的去学去做。


====================================
那是因为你没看见过宝马贴,以及C/C++各水人到Java倒版的贴子,回复都是过千的
titan52 2005-08-26
  • 打赏
  • 举报
回复
只要我还在用,我就还会继续努力学习它
Bobby136 2005-08-26
  • 打赏
  • 举报
回复
留名

楼主说的不错,学C之前学学asm,学C++之前,应学学C,学好了C++,语言就不会有什么障碍了,Java,C#,只不过是熟悉一下语法和类库而已。

学习C语言的重要性不在于学习它的语法,也不在算法(任何语言的算法都是一样的),而在于理解为什么要封装,为什么要继承,为什么要多态,C语言也可以实现OO(封装,继承,多态),如果你掌握C
的OO,C++的OO理解的会更深。C语言中没有一丝多余的东西,是最经典的语言。C++却是最强大的语言,用起来会更方便,发挥的空间更大,简直无所不能,当然先要理解它。

但是编程的重点不在语言,而在于算法和数据结构。程序=算法+数据结构
软件设计的重点也不在编程,编程只是软件工程中很小的一部份。

因此语言只是一个工具,程序员掌握语言就像人人都要学会用筷子一样(当然也有人用手或者叉子)!!
xteo27 2005-08-26
  • 打赏
  • 举报
回复
看完是我在CSDN里看到的最长的帖子,收益很深,希望能和各位高手一样能在自己喜欢的行业中有自己的一席只地,看来现在只有努力的去学去做。
lian909 2005-08-26
  • 打赏
  • 举报
回复
本人刚刚开始学习算法。看到各位的文章,真是受益匪浅啊。
SammyLan 2005-08-26
  • 打赏
  • 举报
回复
MARK
foochow 2005-08-26
  • 打赏
  • 举报
回复
强贴,留个名
hyg2008 2005-08-26
  • 打赏
  • 举报
回复
终于看完了,留名
加载更多回复(470)

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧