`
音频数据
  • 浏览: 36977 次
文章分类
社区版块
存档分类
最新评论

这样学习C语言最有效

阅读更多

一、一字真言

各位看官,学好C语言,其实只需一个字,那就是“编”。

(一)遍。

学习C语言,乃至学习所有的语言,都讲究一个动手——不是动手打人,而是动手编程序。你必须通过编写程序来熟悉知识、理解知识。倘若只学不编,只看别人的程序,自己不动手写,是不能从入门到精通的。要知道,在计算机界,只说不练的人很欠揍。试想一下,你在哪里辛辛苦苦的编程序,他却站在一边,如老板一样喋喋不休,对你提出这项意见,那项思路,甚至畅谈自己编程将会如何如何,好像很牛皮的样子,但就是不编一行代码。估计大家碰上如此之人,只会一个动作,那就是点击“踩”。

一个“编”字就可以学好C语言吗?真的如此简单吗?不是的,仅仅“编”是不够的,你还需要“我编”。

(二)我编。

请注意修辞,“我”编!这个“我”其实就是只“你”,也就是学习C语言的人。

大家在学习C语言时,要多编写程序,比如学习链表时,要自己编写链表程序,甚至自己编写俄罗斯方块等游戏程序来练习。不过有个前提条件,你必须自己编写这些所有的程序才有效果,如果你从网络上下载了某某源代码,或者拷贝了同学的程序,任何大言不惭的说是自己编写的,那么我也只能大言不惭的告诉你,这样做出了养成偷窃的习惯外,没有任何效果!

有同学会问,那么“亲自”编程序总可以精通C语言了吧,其实还差一点点,仅仅“编”是不够的,只是“我编”还不足以精通,为了达到C语言的最高峰,你还需要“我编编编”。

(三)我编编编。

“编”字重复三次,这里的“三”,代表多,意思是你必须多多的编写程序。亲自编写10行代码等于没有编,亲自编写1000行代码是远远不够的,亲自编写1万行代码还马马虎虎,亲自编写10万行代码,你绝对成为程序员中的战斗员。

乍一看10万行代码,估计有同学会先直挺挺的躺下去,然后又眼珠一转站了起来——他们想起了坏主意。“不就是10万行吗,容易!现在的编程工具都有代码生成功能,随便在VC中用鼠标拖曳几下,搞一个MFC窗口程序,系统就自动生成了几百行的代码。在搞几个三方控件,几千行代码就生成了!”

再次声明,“编编编”是有前缀的,那就是“我”,也就是学习者自己,使用代码自动生成工具产生的代码难道是“学习者”编写的?

要不上有政策,下有对策,“不用代码生成器,那么就抄,照着输入代码就行!”哎,人不能无耻到那种地步!这十万行代码要“你”亲自完成,亲自在脑海中发芽、生根,再亲自逐行输入。这又不是什么政绩任务,也不是什么形象工程,欺骗别人最终只能是自欺欺人。

二、两种态度

一般人提起C语言,常常一个字如影随形涌上心头,那就是“难”!害怕啊,C语言真是太恐怖了,传说中的指针真是太锋利了,一不留神就把系统划破,搞出几个死机重启都是太正常不过了。

其实没有必要这么担心,本朝太祖曾经说过:“在战略上藐视敌人,在战术上重视敌人。”

(一)战略上藐视C语言

其实,C语言也就是一个普通的语言而已,别把它想象的太难!与Java相比,C语言也只是程序复杂一点、代码冗长一点、库函数少上一点、三方控件难学一点,编译工具简陋一点、指针麻烦一点,其他的都差不了多少,程序设计思想总是一样、程序构建总是相同的、程序语法总是类似的、程序逻辑总是差不多的。

没有必要对C语言谈虎色变,把他当成一门普通的语言就行了。要知道,就算C语言再难,总比汇编语言容易掌握、比机器语言容易记忆、比英语容易掌握。所以要自信!一切C语言都是纸老虎。

(二)战术上重视C语言

虽然我们在C语言面前保持了激昂的斗志,虽然我们无所畏惧。但是真正在学习得过程中,还是务必保持谦虚谨慎的态度,戒骄戒躁,不要因为搞了一两个俄罗斯方块游戏程序就洋洋自得,以为老子天下第一,甚至只遍了10行代码,就到CSDN博客中到处骂人,到处“踩”人的帖子。要知道,“雄关漫道真如铁,而今迈步从头越”,无论你学了多少,只要还没有走上工作岗位,那么万里长征就只是才迈出了第一步,还有很长的道路等待着你。

三、三个框架

学习C语言,“编”不是问题,问题是“编什么”、“怎么编”、“编多深”,下面就来解决这些问题。

(一)静心不静

1、静心。

学习的过程,是一个漫长而枯燥的过程,学习者必须要有吃苦耐劳的准备,静下心来,从大家的视觉中消失,经受一个长时间的编程学生过程。吃尽苦中苦,方成人上人!等你重新回到大家的视野时,你会有一个蜕变,那时一切的痛苦都将化为甘甜。

温瑞安先生有一部武侠小说,叫做《请借夫人一用》,我们这里也借用一下。当然不是借用别人的女朋友,而是了解一下主人翁的学习历程。主人翁韦青青青出场时浑然是一个高手,他把一千零一招的功夫柔和在一招之中,但是在其出场之前,江湖上没有人知道韦青青青这一号人物,因为他正在十年如一日的专心练功,正是这种练功时的不为人知,才造就了了日后的温瑞安小说高手。

不谈武侠,来个IT版的例子。在遥远的大洋彼岸,在微软的IE横行之前,在互联网刚刚起步之时,有一个叫做“网景”的浏览器占据了市场99%的份额,网景公司在当时的美国更是比易中天还如日中天。可是,大家知道这个“网景”浏览器是谁开发的吗?是一个学生,他在大学中不显山不漏水,别的同学每天考虑着泡MM,他却每天除了上课就是泡机房,是上也泡,下也泡,终于泡出了浏览器。

所以说,静下心来,无论其他同学在多么兴奋的展示他们的某某系统,他们的某某网站,既然你选择了学习C语言,那么以韦青青青为榜样吧,总有一天,你会一举成名天下知的。

2、不静

学习C语言,务必不可以急躁,务必一步一个脚印,此乃静心。但是,学习C语言,也不可以太过沉默,一个人呆在机房里闭门造车妄想着创造出某个绝世程序然后成为中国的比尔盖茨是不可能的。

学习靠自己,所以大部分时候我们需要自己思考、闭关修炼。但是一个人的力量终究是有限的,很多时候我们需要借助外力。比如不懂的地方咨询老师,不明白的地方可以与同学相互讨论等等,都是可以的。

有很多同学,学习时碰上困难,遇上了麻烦,于是自己冥思苦想——这是对的——还是得不到结果,于是故意回避不闻不问——这是自欺欺人。有同学说,那是因为无人可问,问老师,貌似大学老师总是神龙见头不见尾,根本找不到;问网络大虾,网络大虾们经常不在线,就算在线,面对洋洋洒洒的留言也视而不见,更别提回复了;问同学,别提了太丢面子!大家同学而已,为什么要问他,问他岂不是说明自己低人一等吗,不问!

其实,大学之中同学之间相互讨论是最可行的一种做法,毕竟一个王重阳没有时间指点全真七子,网络大虾比投名状中的兄弟还不可靠,所以除了自己多思考就是同学之间多讨论了。不要担心问问题会低人一等,老祖宗有一句话叫做“不耻下问”,虽然你的水平比我低上一点点,但是,我不觉得向不如自己的问提问是耻辱。多好的阿Q精神啊,用这点!

只有静心,才可以更好的学到知识;只有不静心,才可以更快的学到知识。

(二)深入不深

1、深入

学好C语言,就一定不能浮躁,要深入的学习知识。

其实,以上的话就极其浮躁,极其不深入。谁不知道要深入学习啊,但是你的告诉大家,到底什么内容属于深入学习的内容。

其实,浮躁就是学习知识就是浮于表面,没有深入理解专业知识。表现在编程上就是只想编写一些所谓漂亮的、能够拿得出手的程序,而对于一些底层的支持程序置之不理。

有的同学喜欢编写一些漂亮的程序,比如设计漂亮的网页,使用某某工具开发某某‘大型’系统等等,当然这都是人之常情。正如鲁迅先生所说,文章写出来总是希望拥有更多的读者,除非是写给恋人的。程序编出来,总是希望拥有更多用户,除非是专门为爱人开发的。但问题是,只编写这类程序是不够的,是有缺陷的。

这些所谓的程序,往往只需要对知识应用,并不需要刨根究底研究知识的本身,甚至有很多加入了很多相当专业的内容,并不适合于初学者学习。比如VC中的MFC就是一个典型的误导初学者的工具。利用MFC可以很方便的编写出DIAG界面程序或者视图文档程序,从表面上看风光无限,但对初学者却祸害无穷!假如使用VC学习C++,大部分时间将用于消息的处理,控件的处理,还要阅读大量的视图文档结构类库说明,这些操作将耗费了你大量的时间,得不偿失。而且VC++的大部分编程是在某些位置插入代码,至于C++部分系统自动实现了,留给你的是纯C语言操作。同学请注意,你学习的是C++,不是VC类库,也不是VC操作!

比如使用数据结构,就必须自己编写有关链表、队列和栈等内容,你是在学习,又不是工作,当然得用自己编写的东西呢。

又比如说C语言的内存分配函数,就是那个malloc和free。一般人直接调用就行了,但是计算机专业的学生不应该止步于此,而应该思考这两个函数的系统实现方法,并且编程序模拟内存分配和释放。设计这样的程序,不但可以增强动手能力,还可以加深对计算机知识的理解,一举多得,何乐而不为。

2、不深

深入学习C语言是极其应该的,但是大家也必须有所侧重,不能胡子眉毛一把抓,所有的东西统统深入,具体表现在两个方面:

其一、一些知识范围不可过于深入。

有一些知识,属于偏僻的内容,既不是基础,日后工作中也很难碰上,而且还极度困难,像这样的东西,了解即可,完全没有必要深入。比如说某同学心血来潮,要编写一个漂亮的输入法软件,于是苦心学习了有关输入法的所有知识,还妄图气死清华紫光,饿死搜狗拼音,于是仔细研究输入法的犄角旮旯。其实这些知识均相当偏僻,了解即可,完全没有必要打破沙锅问到底。

其二、一些界面或者不必要的功能不可过于深入。

大家编写的程序,往往伴随大量的交互式界面设计。事实上,编程有个二八原则,即编写80%的核心内容将耗费你20%的时间,而另外20%的功能将耗费你80%的时间。实际上,作为C语言学习,深入编写好那80%的核心功能就可以了,耗费80%的时间去深入完善那些20%的功能,得不偿失!

所以,练习用的程序,最好是一些基础的、底层的实现,不要有太多花俏的图像和交互式操作。当然也可以设计一些简单的具备图形界面的小游戏,但此时你应该将精力更多注重于游戏本身的设计,而不是游戏的画面风格和动画效果上。

学习C语言,有所为有所不为。

(三)枯燥不枯

1、枯燥

学海无涯苦作舟,学习当然是一个枯燥的过程。用语言设计程序,表面上程序漂漂亮亮风光无限,其实风光的背后是黑漆漆的屏幕和冗长的代码。程序员是把美丽献给别人,把枯燥留给自己的职业。

所以,学习C语言,就必须多设计一些枯燥的、无趣的实例。当flash程序员在展示图片时,C语言程序员要去学习空洞的0和1的图片格式;当Java程序员设计网站时,C程序员要去理解抽象的HTTP协议;当.net程序员使用对象托管时,C程序员总是要考虑内存的申请与释放;当C++程序员在欢乐的使用STL库时,C程序员必须自己搭建所有的数据结构。

在C语言的学习路上,绝对没有学习其他语言那么多鲜花,这是每一个C语言爱好者必须接受的事实。

2、不枯

其实,人都是需要动力的,凭什么别的程序员可以通过漂亮的程序享受MM的崇敬和同学的赞叹,而C语言程序员就只能在0和1的世界中与电脑沟通。其实,学习C语言的过程完全可以是快乐的。

大家在基础内容了解的差不多时,完全可以循序渐进设计一些简单的趣味游戏程序,从贪吃蛇到俄罗斯方块,从搞怪碰碰球到连连看,从扫雷到雷电,甚至还可以是植物大战僵尸和愤怒的小鸟,编写一些在界面上简化的趣味游戏程序来,同意可以激起自己的兴趣并获取老师、同学尤其是MM的阵阵掌声。

枯燥,是因为学习并非玩耍。不枯,是因为要像玩耍一样的学习。

四、四项注意

(一)错误观点:C语言低人一等

由于C语言常常应用于一些服务器程序,没有漂亮的界面,在一些同学的心目中,C语言程序员就成了IT民工的代名词。类似于煤矿工人,整天生活在地底下。而那些Java程序员,.net程序员则成了白领丽人。

(二)错误观点:C语言高人一等

与第一种情况相反,一部分同学则认为C语言才是语言正统。俗话说:真正的程序员用C,聪明的程序员用delphi。那么其他的语言统统是神马牌浮云,不值一提。其他的程序员,无论聪明也好,愚蠢也罢,都是盗版水货。

(三)错误观点:C语言是忠贞情人。

弱水三千,只取一瓢。有人在爱情上的忠贞,有人去在语言上忠贞,有人如斯内普般一生只爱一个女人,有人欲效仿之,一生只使用一种语言。

正如人生而平等一样,其实,语言也没有高低贵贱之分,只有适合于不适合之分。Java适合做WEB开发,C语言适合服务器,C++适合做游戏,等等。真正的程序员,不是只使用C语言的人,而是到什么山唱什么歌。任何语言、任何数据库、任何操作系统对他来说都只是工具,呼之能来、来之能战、战之能胜、挥之能去。当JQuery方便时,我不直接用JavaScript;当速度优先时,我不用Java;当稳定优先时,我不用Windows。总之,倚天剑也好,屠龙刀也罢,统统是工具,为我所用,为我所奴役。

(四)光说不练假把式

学习C语言的真言是“编”,但是也有同学会反驳,“这么简单的程序,也需要我亲自编写吗?”、“这个程序我看一眼就知道怎么做了”、“跳过这个程序,直接编写后面的程序”、“不要把天才浪费在这种小程序上”等等之类的言论不绝于耳。

上面其实就是典型的“眼高手低”。

大家在高中学习数学时常常有这样的体会:一看就会,一做就错。计算机编程其实也是一样,咋一看简简单单,谁都可以说出个丁三卯四来,但是真正上一实战,手也抖了,腰也弯了,脑袋也浆糊了。要么半天写不出一行代码,要么编译就是报错,怎么查也查不出原因之所在。

所以,这里奉劝各位“高手”,实践出高手。是骡子是马,拉出来溜溜。请那些所谓的“高手”先试着做一两个作业,真正得心应手一气呵成才才是真正的高手,否则,老老实实的地毯式编程吧。

分享到:
评论

相关推荐

    有效值计算 c语言

    C语言由于其高效、可移植性强的特点,常被用来实现这样的算法。本文将详细讨论有效值计算的原理以及如何用C语言来实现这一算法。 有效值是衡量交流电信号强度的一种方法,它相当于等效直流电平,使得交流电流在一段...

    漫谈C语言及如何学习C语言

    #### 一、为何学习C语言? C语言作为一种历史悠久的编程语言,至今仍被广泛应用于各个领域。理解其重要性和学习动机对于初学者来说至关重要。 **1.1 工程实践性强** C语言的诞生和发展紧密联系着实际工程项目的...

    学习C语言程序的好历程

    在学习过程中,不断的编程练习和解决实际问题是最有效的学习方法。通过编写小程序、参与开源项目或者解决算法题目,可以不断提升编程技能和结构化思维能力。 总的来说,"学习C语言程序的好历程"是一个全面的过程,...

    如何学习C语言(七条准则)

    学习C语言是许多程序员入门的重要步骤,它以其简洁、高效和强大的底层控制能力深受程序员喜爱。遵循以下七条准则,可以有效地帮助你掌握C语言: 1. **理解基础概念**:首先,你需要了解C语言的基本构成,包括变量、...

    学习C语言100问 \学习C语言100问

    在学习C语言的过程中,常常会遇到一些基础但重要的概念和结构,比如分程序、switch语句的使用及其注意事项。下面将详细解释这些知识点。 首先,分程序(复合语句)是C语言中的基本构造之一,由一对大括号{}包围的...

    经典C语言编程范例 C语言学习助手

    如何高效地学习C语言,是每个初学者必经的思考。《经典C语言编程范例 C语言学习助手》即是一盏明灯,它通过一系列精心挑选的编程案例,帮助学习者牢牢掌握C语言的基础知识,以及如何运用这些知识解决实际问题。 ...

    c语言学习及小游戏

    本学习计划将详细介绍如何通过深入学习C语言及小游戏开发,来全面掌握C语言的精髓和实践编程能力。 ### 一、C语言深入学习 C语言的学习是一个不断深化的过程,从基础语法到高级特性,每一步都需要踏实的理论基础和...

    c语言的学习资源.rar

    在"学习方法"方面,动手实践是学习C语言最有效的方法。通过编写小程序,逐步熟悉C语言的语法和编程思维。同时,阅读和理解他人的代码,参与开源项目,也是提升技能的有效途径。编写习题则是巩固知识的好方式,可以...

    怎样学好C语言 C语言学习必备

    2. **实践编程**:学习编程最有效的方式是通过阅读和编写代码。阅读程序可以快速理解语言的用法,而亲手编写则能巩固知识。对于初学者,每学完一个章节,都要尝试理解并重写其中的示例程序,通过实践来加深理解。 3...

    学习C语言结构化思维111

    在“学习C语言结构化思维111”这个主题中,我们主要探讨的是如何运用C语言进行有效的程序设计,特别是针对单片机应用层程序开发的架构思维。C语言是一种强大的、低级的编程语言,它允许程序员直接操作硬件资源,因此...

    如何学习C语言.txt

    ### 如何学习C语言 #### 一、C语言的重要性及应用领域 C语言作为一种结构化编程语言,在计算机科学领域有着举足轻重的地位。对于初学者来说,掌握C语言不仅能够帮助他们理解程序设计的基本概念,还能为后续学习...

    C语言算法学习资料

    - 在C语言中实现上述算法,需要理解和运用C语言的特性,例如如何利用指针实现动态内存分配,如何有效地处理数组和链表等数据结构。 4. **算法分析** - 时间复杂度和空间复杂度:了解如何分析一个算法的时间和空间...

    c语言课件零点学习c语言

    "c语言课件零点学习c语言"是一个专门针对初学者设计的课程资料包,旨在帮助零基础的学员快速理解和掌握C语言的基本概念、语法和编程技巧。 在C语言的学习中,以下是一些核心知识点: 1. **基础语法**:包括变量...

    c语言编程技巧200例,在实例中学习C语言

    通过实例学习是理解和掌握编程语言的有效途径,因为理论知识只有在实践中才能得到巩固和深化。 首先,C语言的基础部分包括变量、数据类型、运算符、控制结构(如if语句、switch语句、for循环、while循环)、函数...

    C语言学习整理思维框图

    理解指针的概念、声明、赋值和解引用操作,以及指针与数组、函数的关系,对于深入学习C语言至关重要。 数组和字符串是常用的数据结构。数组是一组相同类型的元素集合,字符串是字符数组的特殊形式,通常以空字符'\0...

    怎样学习C语言.pdf

    在探讨如何学习C语言的过程中,首先需要了解C语言的基本概念以及它在当今编程语言中的地位和作用。C语言是1972年由贝尔实验室的丹尼斯·里奇和肯·汤普逊开发的一种通用、过程式编程语言。由于其接近硬件的特性,...

    零基础入门学习C语言完整版视频教程(全65集 2.7G).zip

    这个“零基础入门学习C语言完整版视频教程”提供了全面的学习资源,帮助初学者从零开始掌握C语言。 在C语言的学习过程中,首先会接触到基本的编程概念,如变量、数据类型、运算符、控制结构(如if语句、switch语句...

    C语言学习资料全家桶

    对于C语言学习资料来说,readme文件可能会介绍资料的组织结构,教学路径,以及可能的练习项目等,这对于系统性地学习C语言至关重要。 另一个文件是"C语言学习资料.exe",这是一个可执行文件,可能是C语言学习的教程...

Global site tag (gtag.js) - Google Analytics