zoukankan      html  css  js  c++  java
  • 怎样学好C语言,一个成功人士的心得!

    今天,我能够自称是一个混IT的人,并能以此谋生,将来大家能一次谋生,都要感谢两个人:克劳德.香农和约翰.冯.诺依曼,是他们发现了全部的数字化信息,不论是一段程序,一封email,一部电影都是用一连串的1和0进行编码的;是他们发现了我们能够利用一个预先编写好的程序控制机器,并使之完毕我们期望它完毕的动作。建议大家在心里默念三遍他们的名字,以示敬仰。当然,假设让你们带着如今的知识回到他们的那个时代,那么就没有什么图灵奖了。
    C语言程序设计是我们的专业基础课,可是C语言本身却是一个非常强大的工具,它是到眼下为止最为广泛使用的工具,并且在能够预见的将来,它仍然是皈依为程序猿的人们心中的神器。这个工具作什么的呢?它在人和机器之间建立了一个交流的平台。
         某天,你须要完毕一个求100的阶乘的作业,于是你搬来一个最新的电脑,为它安装了最新的windows vista操作系统,然后坐在它的身前,喊“喂电脑,给我计算100的阶乘”,电脑说“ok, wait a moment”; 过了一会,一盘香菇小白菜端了上来!呵呵,电脑不是waiter, 你喂它它是不会有反应的,假设你真的wait a moment, 恐怕你就须要wait one more moment了!一万年后,人们就把你命名成“望夫崖”。
         既然电脑不是伺应生,听不懂我们的话,那么我们要怎么控制它呢?假设你们给我装聋作哑,我会告诉你期末挂了你,哦,你立刻老实了!对于电脑,我要怎么才干使唤它,让它为我工作呢?不错,我们有个强力工具,C语言!
       好,我们把上面的场景复习一下:
    你要我算100的阶乘,于是我去机房上机,编写了一个程序:
    ( 參加ppt......)
    执行程序,哦,结果出来了!
        有人觉得,如今是java和.net的时代,有谁还须要C以及汇编呢?孰不知,java和.net是建立在软件之上的,是为了垄断市场而建立起来的体系,宛如挖好一个金壁辉煌的坑,请你往下跳,还自以为站在巨人的肩膀上,事实上成了坑底之蛙。要成为一个真正的程序猿,并期望成为一个程序猿高手,必须从机器出发,从cpu到操作系统,再到软件体系,高手的境地就是悟道后的明镜灵台,软件设计出神入化,我就是程序,程序就是我。
         听完我讲高手的境地,于是乎你非常受感动,说:我要努力学习,向高手学习!隔天就买了一堆MFC, VB, JAVA以及.NET的书回来,早上五点钟起来背书!这样是不行的,正确的入门方法仅仅有一个,要证大道,唯有此法!同学们,从C语言入手,努力学好C语言!
        旁观者李四说:此人大笨也!我用鼠标随便拖几个控件,就是一个xxx管理系统了,你用C语言怕是一年也写不出来吧!好吧,我要承认,讲这话的都已经是mS的奴才了,别的我不了解,MFC本身就是一个封闭的架构,从MFC入手学习,你仅仅会形成一种封闭的思维模式,由于MS希望非常多人仅仅学会表面的东西,不致成为高手,所以它大力推荐所谓的可视化的程序开发工具,也真有非常多人愿意上他的当,最后真正迷失方向。说他坐不了程序吧,他也能够作,可是假设程序复杂一点,出现故障时,问题出再哪里就搞不清楚了,反正是不清楚!
         梁肇新,大牛啊,他说:“我就搞不懂了,用鼠标怎么敲代码呢?在我的公司里,高手的键盘响个不停,鼠标偶尔响一下,新手是鼠标响个不停,键盘偶尔响一下,他们的薪水相差的就不是一倍那么多了!”
         C语言是各大操作系统的基础,Unix、Linux、Windows其内核都清一色是C语言开发的,(某些地方是和汇编语言混合开发的),君不见Windows API都是C语言函数的接口?Unix/Linux绝大多数应用都是C语言开发的;Windows应用程序用纯API开发已然不多,大多都是依靠某种Application Framework,比方所谓的VC++,事实上就是指VC IDE + C++语言 + MFC(如今重点已转向ATL、WTL),可是Windows服务、网络、驱动程序等底层软件,还是C语言开发的。各种语言的编译器,包含java虚拟机,都是用C语言开发的。各种嵌入式设备,如手机、PDA也都是C语言开发的。C语言历史悠久
    ,其内容也绝非谭浩强老师的《C语言程序设计(第二版)》所描写叙述的那么简单——那本书仅仅是针对中国国情的教学入门书而已。
        学生总喜欢问:那种语言好?学那种语言有前途?这样的问题天天在讨论,永无休止。事实上我觉得大家所关心的,无非是那种语言更有“钱途”,学习那种语言毕业后能够轻松找到高薪的工作——当年我也是这么想。那么,我告诉你,假设你精通C语言,请你去华为,不要在小池塘里浪费青春了!
      OK, 听了我苦口婆心的劝告,你准备从C语言入手,開始攀登程序猿高手这座山峰了,在你出发之前,你的行囊中须要准备什么呢?
    第一个要装进行囊和你一起前进是“规范的格式”,有非常多教科书,參考书,不太注重程序的格式的问题,写出的程序就象一堆堆的垃圾一样,这也导致了如今非常多人写的程序中有非常多的废码,垃圾代码,这和那些入门的书有非常大的关系,要把那些作者都拿来打打PP。真正的商业程序绝对是规范的,张三写的程序和李四的程序格式大致同样,各种标识符的命名规则一样,否则谁也看不懂你写的程序。假设写出来的代码谁也看不懂,那绝对是垃圾。假设要把那些垃圾翻半天,勉强才把金子找出来,那这样的程序不如不要,还不如又一次写过,这样,思路会更清楚一点。所以说,规范的格式是入门的基础。那这个规范的格式包含什么呢?不少啊,要坚持才干做到!长标志符命名,代码缩进,一对大括号范围不超过一屏幕,等等。
        第二个要装进行囊的是耐心,所谓工欲善其事,必先利其器。要想成功,没有一个相对平淡的过程是不可能的。这不仅仅指你在学习过程中要有耐心,要循序渐进,而起也说的是还有一个重要的方面:调式程序。调试是敲代码过程中一个重要的方面,假设有人能一次写成程序,牛啊,并且是大牛,不光是大牛,还是老子骑的那头青牛,凡人是做不道的!调试是每一个程序必然经历的历程。常常有同学问我:老师,我的程序全然没错误啊,都是照书抄的啊!怎么就执行不出来呢?对于这个问题我也看不出来!你们有问题能够找我,找其它的老师,老师找谁啊?李师父?那是非常荒谬的!我就仅仅好坐下来调试,这个说实话,调试是非常枯燥的,所以有同学抱怨说我操作太快,不理解为什么要这样,为什么要那样,我的脾气不太好,一烦躁就会骂人地,所以,这个就须要你们自己修炼内功了!
    有了这两个就能够了,能够出发了,预计有人说了,英语和数学不要了?大家都说大学生了,这样的问题就不要问了嘛!你已经用早晨和傍晚的时光学习了英语了,我这个没有要去,计算机专业英语超简单,小学水平而已,记住一些专业词汇就能够了!关于数学,说数学好,敲代码就好是没有科学依据的!我就有个同学,数学回回100分,敲代码也就是hello world的程度,只是人家如今是数学博士了!羞愧啊!做为的大学生,并且是我们这个专业的大学生,已经全然具备了敲代码所须要的数学素质了!所以这个不是我们要操心的,Ready? Go!
    第一招,学什么呢?打狗棍法!呵呵
    有一个伟人说过:“反复权威是成熟的必经之路”,这是站在巨人的肩膀上的做法,习武之人首先要学的都是各种套路,比方说辟邪剑法,然后才干融会贯通,开宗流派;我们学习敲代码也要这样来,这是一个捷径,帮你走得更远得捷径。
       看书,看好书!书中所写,是前人数十年经验所写,看十本书,就相当于汲取了前人数十年的功力,那么你的内功也会迅速上升1甲子。:)书当然要看好书,仅仅有好书才营养丰富。要做到读书破万卷,编程如有神;枯燥的看书是非常郁闷的,非常easy变成化石!如今非常多是书都是用源代码说明问题的,源代码就像是动画、就像是幻灯片,把书中的招式一一演练给你看。能够说高手的经验大都是源自代码,最后也都化成源代码展如今大家面前,把书上的程序一个一个的输入(用键盘,用你的手指)到电脑中,编译执行。自己手工输入这一步不能省略,如今非常多书有配套源代码,非常多同学或者成年人学习的时候都耍小聪明,直接把源代码复制过去编译执行,hoho, 这是没有效果的。
       自然,我让你输入程序不是让你练习盲打,你在输入的过程就能够品出程序的好坏来了,假设发现自己输入了非常多反复代码,那至少这个程序的结构就不好了,穷则变,变则通嘛,你就想改进它啊,这不是非常好吗?
        当然,程序输得多了,盲打功力也上了一个台阶,键盘敲得快了,薪水也跟着涨上去了!^_^
    只是,键盘敲得快不代表你的程序就写得好,否则学校仅仅要每一个学生发一份盲打联系软件,四年毕业后,个个都是程序高手了!
    好了,你输了一个程序进电脑了,锻炼了手部肌肉,也执行出了结果,愉悦了身心,就此满足了?那离高手还远呢,要变成高手,你还要锻炼一下你得脑部肌肉!拿起你得笔,拿起你得纸,用你得大脑,这号称世界上最精密的机器来执行你输入的程序,记录下不同执行时刻变量的值,记录下程序的执行分支,最后发现,这个程序被你解剖到了纸上,我相信也解剖到了你的心里!这是捷径的核心,一定要记住,输入的程序不是说正确执行就完事了,要去阅读一下代码,利用笔和纸做辅助工具,做一下笔记,这就是反复权威 ,当然,假设你是天才,那请你塞上耳朵,你不在我们讨论的范围之内!
      为什么这一步非常重要呢?
    大家刚開始学习的时候,是不是有种感觉,假设让你写一个程序,你从哪里下手呢?前面?后面?上面?以下?为了解决问题,我的程序该怎样写呢?抓耳挠腮,好烦啊,于是乎干脆睡觉去,不写了,你看,这样的行为是要打PP的!
      练武功,总是先反复师父的动作,才干有自己的动作,所以也让我们重反复别人写的程序開始,然后再写自己的程序吧!
    遵循这种方法,你们就跟着组织走上了通往罗马的大路了!
       接下来,你得走啊,不走怎么到罗马呢? 把你学会的程序设计方法应用到你写的程序中去啊!
    某天,你看到这里有个问题,你有了想法,怎么办?上机去,和键盘奋战去!stop, stop! 暂停一下,上机之前,不要忘记了你的笔和纸,勇敢地把你的想法写下来,假设写不出来,就不要去机房浪费爸爸妈妈的血汗钱了!
      当然,你不能乱写啊,写出来的东西怎么样才叫不是乱写的呢?实践是检验真理的唯一标准!用你的大脑去执行一边啊,不是叫“人程序合一”嘛?,这就是了!学武功就要学绝世武功!尽管号称最精密,实际效果上,人脑还是没有电脑的精确度的,假设你的大脑能马马虎虎地执行出来之后,那么OK,带上规范的格式和耐心,去上机吧!
        自然,我们说一天到晚面对字符界面的TC是有些郁闷,大家都习惯了windows,微软的客户体念设计中心可不是吹出来的!windows多好,色彩斑斓的。当你修炼到我这个程度的时候,非要听这京剧才文思泉涌的敲代码的时候,当然要用windows下的集成开发环境了。可是对大家来说,不是如今,windows是非常危急地,程序猿还是回到TC中去吧!
      TC至少有一个长处,能够锻炼我们使用组合键的习惯,能够锻炼我们使用键盘编程的习惯,回忆我们刚刚说的梁某说的话“用鼠标怎么编程呢?”有同学不免要提出疑问了,我是80年代甚至是90年代生人,你还让我面对那么枯燥的输入输出界面?我跟你有代沟!我期待有更丰富更吸引人的交互手段
    哦,这个问题问得好,C语言中也有图形啊,全然能够满足大家寓教于乐得心理!让我们来看这个程序,非常easy,就是在屏幕上话一个周期得正弦波!
    (參见ppt......)
    执行效果是不是非常好?你学数据结构的时候,树啊,图啊,你都能够这样输出啊,非常多地方你都能够做的更好呢!

    好了,到这里,我们基本攻克了在学习C语言程序设计时的一些方法论的东西,关于详细的学习过程,假设你要我在这里给你们讲指针要怎样学习?函数要怎样学习?那我讲的内容也不会多于任课老师的内容,或者开个专题叫“怎样学好指针”,当然,假设你愿意和我探讨一下指针的本质和高级应用的话,课后,课后啊!
    如今,我们要谈最后一个问题!我们这个专业的女生的比例较其它的工科专业还是要高一些的,不知道为什么常常到例如以下的说法:1,我是女生,我不适合敲代码啊;2,我的性格比較外向,不适合坐下来安静的敲代码呢!
       性格外向不适合敲代码?你们看我啊,觉得我是性格内向的任吗?程序猿也非常须要发散的外向型思维,老比,地球上最富裕的人说,他招程序猿更愿意招原来是学物理的人,由于学物理的人的思维能够从极大(宇宙)到极小(原子)。全部,说性格外向不适合敲代码的话是懒惰的借口,是要掩盖他不可告人的目的的接口!狂打PP!
      女生又为什么不适合敲代码呢?我到知道一个理由,对皮肤不好啊!你们看我这满脸沧桑的,就知道了!除此之外,还会又其它的理由吗?英国科学家早就证明了男女的差别全然不是人们想象的那样,非常多方面女性是要超过男性的!想想曾经的母系社会,如今的惠安女!
    我就见过一个上市公司的研发二部全是女性!,从软件project师到硬件project师再到部门经理都是女性,业绩根本不输其它的研发部门,这个公司在湖南,不是我瞎掰的!
    同学们,问大家一个问题,“二十一世纪最贵是什么?”,不错,是人才,所以,我能够负责任地告诉大家,“不学好C语言,老师非常生气”,老师非常生气,后果怎么样啊?是非常严重!
    That’s all, thank you!
        学习C语言不是一朝一夕的事情,但也不须要花费十年时间才干精通。怎样以最小的代价学习并精通C语言是本文的主题。请注意,即使是“最小的代价”,也绝不是什么捷径,而是以最短的时间取得最多的收获,
    同一时候也意味着你须要经历艰苦的过程。

    一、要读就读好书,否则不如不读

      全部刚開始学习的人面临的第一个问题便是:怎样选择教材。好的開始是成功的一半,选择一本优秀的教材是事半功倍的关键因素。不幸的是,学校一般会帮你指定一本非常差劲的C语言课本;而幸运的是,你还能够再次选择。
      
    大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过400万,据我所知,非常多学校都会推荐这本书作为C语言课本。尽管本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚定地黑他这本书的。这本书不是写给计算机专业的学生的,而是给那些须要考计算机等级考试的其它专业学生看的。这本书的主要缺点是:样例程序非常不专业,不能教给你程序设计应该掌握的思考方式;程序风格相当地不好,会让你养成乱写代码的恶习;错误太多,曾经有人指出过这本书的上百个错误,当中不乏关键的概念性错误。好了,这本书我也不想说太多了,有兴趣大家能够百度一下:)

      Kernighan和Ritchie的《The C Programming Language》(中译名《C程序设计语言》)堪称经典中的经典,只是旧版的非常多内容都已过时,和如今的标准C语言相去甚远,大家一定要看最新的版本号,否则不如不看。另外,即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言參考手冊》是十分必要的。《C语言參考手冊》就是《C Reference Manual》,是C语言标准的详细描写叙述,包含绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的《C程序设计语言》是依据C89标准修订的,而《C语言參考手冊》描写叙述的是C99标准,二者可能会有些出入,建议依照C99标准学习。还有一本《C和指针》,写得也是相当地不错,英文名是《Pointers on C》,特别地强调指针的重要性,算是本书的一个特点吧。只是这本书并不十分适合刚開始学习的人,假设你曾经学过C语言,有那么一些C语言的基础但又不是非常扎实,那么你能够尝试一下这本书。我相信,仅仅要你理解了指针,C语言便不再神奇。

      假设你已经啃完了一本C语言教材,想要更进一步,那么有两本书你一定要看。首先是《C Traps and Pitfalls》(中译名《C陷井与缺陷》),非常薄的一本小冊子,内容非常非常地有趣。要注意一点,这本书是二十多年前写成的,里面提到的非常多C语言的缺陷都已被改进,只是能够了解一些历史也不是什么坏事。然后你能够挑战一下《Expert C Programming》(中译名《C专家编程》),书如其名,这本书颇具难度,一旦你细致读完并能透彻理解,你便能够放心大胆地在简历上写“精通C语言”了。
      切记一个原则,不要读自己眼下还看不懂的书,那是浪费生命。假设你看不懂,那你一定是缺失了某些必需基础知识。此时,你要细致分析自己须要补充哪些内容,然后再去书店寻找讲述的这些内容的书籍。把基础知识补充完毕再回头来学习,才会真正的事半功倍。

    二、Unix/Linux还是Windows,这是个非常大的问题

      不同的编程环境会造就出不同思维的程序猿。Windows的程序猿大多依赖集成开发环境,比方Visual Studio,而Unix程序猿更加钟爱Makefile与控制台。显而易见,集成开发环境更easy上手,在Windows上学习C语言,仅仅须要会按几个基本的Visutal C++工具栏button就能够開始写Hello, World!了,而在Unix下,你须要一些控制台操作的基本知识。有人或许觉得Unix的环境更简洁,但习惯的力量是非常大的,大家都非常熟悉Windows的基本操作,而为了学习C语言去专门装一个Unix系统,似乎有点不划算。
      对于一个仅仅懂得Windows基本操作、连DOS是什么都不知道的新手而言,尽快做一些有趣而有意义的事情才是最重要的。用C语言写一个小程序远比学习ls、cat等命令有趣,况且我们要专注于C语言本身,就不得不临时忽略一些东西,比方编译链接的过程、Makefile的写法等等等等。

      所以我建议刚開始学习的人应该以Visual C++ 6.0(不是VisualC++ .NET)或者Dev C++作为基本的学习环境,并且千万不要在IDE的使用技巧上过多纠缠,由于今后你一定要转向Unix环境的。Visual C++ 6.0使用非常方便,调试也非常直观,但其默认的编译器对C标准的支持并不好,而Dev C++使用gcc编译器,对C99的标准都支持良好。使用顺带提一下,非常多大学的C语言课程还在使用Turbo C 2.0作为实验环境,这是相当不可取的,原因其一是TC 2.0对C标准差点儿没有支持,其二是TC 2.0编译得到的程序是16位的,这对今后理解32位的程序会造成极大的困扰(当然,用djgpp之类的东西能够使TC 2.0编译出32位程序,只是那过于复杂了)。

      等你学完一本C语言的教材,你一定要转向Unix平台继续学习,差点儿全部的C语言高级教程都是基于Unix平台的(比方《C专家编程》)。转变的过程是痛苦的,你须要面对的是各种纷繁复杂的命令,全然不同于Windows平台的思考方式,可是这样的痛苦是值得的。Unix与C是共生的,Unix的思考方式和习惯更加符合C语言的思考方式和习惯。在Unix下,你能够找到无数优秀的源代码供你尽情阅读,你能够方便地查看某个库函数的联机手冊,还能够看到最棒的代码风格(说到代码风格,我会专门写一篇文章详细叙述)。

      归结起来就是一句话:初学C语言,建议使用Windows系统和集成开发环境,在准备向“高手”方向努力时,请先转向Unix平台。

    三、万事俱备,你就是东风
      书已选定,环境配置完毕,正所谓万事俱备,仅仅欠你自己的努力了。请从书的前言開始,细致地阅读手头的教材,非常多人看书喜欢直接从第一章開始看,这是错误的做法。前言是作者对整本书的大体介绍,作者一般会告诉你须要什么基础才干够顺利阅读本书,这能够帮助你检验自己的基础知识是否已经具备。看完前言,还要浏览一下文件夹,了解一下书的总体结构,顺便给自己安排一下学习计划。

      学习C语言,必需注意每一个细节,书上的样例代码一定要自己亲自敲一遍,编译执行输出都跟书上说的一致才干算是学完了一个样例,假设不一致,就要细致找原因。出了书本上有的样例,自己还要“创造”一些样例,比方学习运算符优先级的时候,能够写几个同样的表达式,在不同的位置加上括号,看看有哪些不同的行为,比方*p++和(*p)++,又比方a = b == c、(a = b) == c和a = (b == c)等等。自己抄的书上的样例以及改造之后的样例,还有自己“创造”的样例,都应该细致地归类保存,并且要在源代码中写上简短的凝视,阐述这个样例的意图。

      样例之后就是习题了,我建议刚開始学习的人把全部的习题都独立做一遍,然后对比答案的代码,看看自己的代码有那些不足,再试着改动自己的代码。非常多人不重视习题,这是极大的错误,由于作者一般会在习题中说明一些重要的道理,而不是单纯地检验前面的知识。

      或许你觉得这样学习太慢,事实上不然。学得细致就不用走回头路,等你学到后面才发现自己前面没搞清楚,那才是真的得不偿失。一般说来,整本书读完,你应该完毕数千行乃至上万行的代码,不管是原封不动照抄书上的,还是自己心血来潮写就的,都是今后继续学习的一笔財富。以我自己举例,阅读《Windows核心编程》时(我仅仅阅读了3/4的内容),除了抄书上的代码,还自己写了非常多样例,一共同拥有5574行(用unix下的wc工具统计),时隔多日,我早已记不清Windows的系统编程了,但仅仅要花几分钟翻出曾经的代码看看,便会又一次了然于胸。所谓好记性不如烂笔头,就是这个道理。

      细致读书、认真抄写源代码、独立完毕习题外加更进一步的实验,最后将全部的代码留下,成为自己的经验和財富,绝对的辛苦,也绝对的事半功倍。当然,这样的方式仅仅适合学习须要精通的技术,假设不是学习C语言,你还要详细情况详细分析。

      写到最后,还有非常非常重要的一点没有提及──代码风格,从最開始学习就必须强迫自己模仿最棒的代码风格。由于代码风格太重要内容也太多,我会用专门的一篇文章来详细讨论,请大家关注《程序猿之路──关于代码风格》。
         题目是关于C语言,事实上我主要想说说程序该怎么学,或者一点感悟罢了,在这里,我仅仅想引用身边的几个人的样例,来谈一下对程序学习的理解

    第一个人要说到我了,我对程序产生兴趣,是听说程序能够作游戏,那时候是在初一,然而借来一本G-BASIC简明教材后,我便傻了眼。

    陌生的词汇,古怪的逻辑,都是些天文的中文译本,头疼了好一阵子。

       然而当时又没有别的闲书可看,我就整天捧着那一本书,什么方法都试过了,甚至倒着看过了,都没看出什么眉目,自己又没有电脑,仅仅能不停地大胆地想象,然后满脑子的疑惑……

       在这里停一下,上面说的便是我学习的风格:总要经历一番波折,瞎折腾几下,然后才会有偶然间的明悟-开窍了!我甚至没见过几个人有我这么笨,如今明确过来了,我总是一開始把事情想得过于复杂,造成狗咬刺猬的难堪的局面,然而居然有意想不到的收获!可是不建议大家模仿这样的风格,起码追女朋友的时候不能这样,生活中非常多机会在于接手的那一瞬间,失去就永远找不回来了。

       如今回来,后来偶然间,我看懂了一行代码,是print 语句,当时兴奋得要命,又细致看了这个看了那个,一下子看懂了非常多东西,像是在霎那间被什么给击中似的,立刻间醍醐灌顶。。。。
        初三在学校学了FOXBASE,基本上自学的,我发现了一件奇怪的事,我这人是出了名的记性不好,然而当时背程序中的命令却是过目不忘,到如今还记得非常多,或许是感兴趣吧,也感谢我的微机老师给我提供自由上机的机会!后来我又自学了QBASIC,初四暑假又学了一点C,那时学C遇到不少困难,当时我们学校机房连C语言都没有,我仅仅好闷在家里,一本二级C教材,一本配套习题,整天发呆地想,把自己的脑袋当电脑cpu使,有时进入死循环,有时又彻底崩溃。我花十几天看完了一本书,做完了一本题,然而脑袋里充满了疑惑,由于没有上机实践的机会,我就凭自己的推測与推理己慢慢建立了一大堆理论,十分得意与自信,但后来证明大部分是错的,害我花了非常长时间去纠正,这是后话。可是,还是那句话不破不立,不阻不行。就像我如今有了电脑,整天泡在互联网的海洋里,感受着快餐文化,好久都没静下心来好好想点东西了.

       高中还上过几节电脑课,仅仅只是忙于应付高考,我将学程序的打算放弃了,到这里我该说下一个人了。
    高中时坐我旁边一女生,她的文曲星里有BASIC,我偶尔拿过来编了几个小程序玩,她看到后非常感兴趣,令人惊讶的是,她仅仅看了三五个程序,听我讲了几个命令的功能,就能依据自己的想象编出小动画来,她此前是绝没有学过程序的!我曾一度怀疑过她的智商,然而她程序是如此之快,却让我的眼都瞪大了好几圈,比我当年高了好几个境地!我后来常常在想,是不是我当时的方法不正确,程序究竟应该怎样学。。。
        一晃就到了大学,我碰到还有一个让我佩服的人,跟我一样是学计算机的,他是偶尔看到我在编动画,然后十分感兴趣,便開始自学。他令人惊讶的是,指针,结构体,位运算等等,都没搞懂(更不用说算法和数据结构),仅仅学了三种程序结构,如今仅仅学了C半年,便自己能编出贪吃蛇,俄罗斯方块,扫雷,还有非常多叫不出名字的小游戏来,如今又在写黑白棋,我知道我确实是走了不少弯路。
    程序应该怎样学,
    对C来讲,我觉得应该从绘图学起。
    原因有二。
    一,绘图程序非常能振奋人心的,它能带给你浓厚的兴趣,这是学程序的关键。
    二,绘图程序easy上手,非常easy的道理,就能做出非常美丽的东西来。有非常多东西甚至不用看课本,就能自己推出来(我觉得推理的方法非常重要,它是你自学的必要条件)。
      比方画一个圆,从数学角度来分析,要确定一个圆,仅仅需知道它的圆心(x,y)与半径r,那好一个圆就画出来了,circle(x,y,r);
    其它的类推,再画一个立体的,选择立方体,再分析,仅仅要知道两个对角的坐标即可了吧,翻一下课本,不是这样,为什么?你或许会想到,电脑屏幕本来就是平面的,用立体坐标的理论在这里,恐怕就不是最简单的方法。所以它採用的应该是两个平面图形平移。此处留下疑问,立体图形在平面坐标中怎么表示?自己慢慢研究,非常浅的东西。
    想作动画吧,想象一下动画的原理仅仅是从一个图形变幻到还有一个图形,不同地变幻就出现动画效果,那就能够画一个,擦了,再画一个新的,再变化。。。
    数学功底好的话,从二维到三维,从静态到动态我觉得是非常快的过渡。
      详细该怎么学呢,你能够多找几个绘图的样例,敲到电脑里,多敲几个,慢慢地你就会知道哪些东西是干什么的,慢慢地就会自己做出东西来。
    但这里不要沉溺太久了,先学绘图仅仅是帮助你轻松地入门(非常多人C学完了还没有入门)。
    从绘图里临时走出来,你应该打打基础了,这里不再赘述。能够边学边实践,物理,数学课本中非常多问题都能够用程序来演示,来解决,尝试着多做些东西,这比你老学课本中的模型强多了,仅仅有你自己去体会才干知道。
      谈及C语言,我想凡是学过它的朋友都有这样一种感觉,那就是“让我欢喜让我忧。”欢喜的是,C语言功能非常强大、应用广泛,一旦掌握了后,你就能够理直气壮地对他人说“我是电脑高手!”,并且以后若是再自学其它语言就显得轻而易举了。忧虑的是,C语言宛如“少林武功”一般博大精深,太难学了。事实上就笔者觉得C语言并不是是“difficult(困难)”的,仅仅要你能理清思路,掌握它的精髓,那么自学C语言是一件非常easy且又其乐无穷的事。今天本人就与大家一起谈谈怎样学习C语言或者说学习C语言应从哪几方面着手。
    了解一些基本知识

      一.C语言的背景

      就个人感触,不管学习哪门语言首先应该了解一下自己所学语言的背景,也能够说它的发展史。

      C语言属于高级程序语言的一种,它的前身是“ALGOL”。其创始人是布朗·W·卡尼汉和丹尼斯·M·利奇。C语言问世时是带有非常大的局限性,由于它仅仅能用于UNIX系统上。然而随着科学技术的进步,计算机工业的发展,C语言逐渐脱离UNIX。1987年美国标准化协会制定了C语言的国际标准,简称“ANSI C”,从此以后它便成为一种广泛使用的程序语言。C语言的长处非常多,基本的有例如以下四点:

      1.兼备高级语言与低级语言的长处,属于一种中间语言。

      2.它是一种结构化程序设计语言,非常适合结构化程序设计。

      3.有较丰富的数据类型、运算符以及函数供以选用。

      4.直接与内存打交道,使改动、编辑其它程序与文档变得轻松,简单。

      二.二大语系二种不同的学习方法

      笔者学习过非常多程序语言,比如:C,C++(C语言的扩展),QBASIC,VB(BASIC的可视化),JAVASCRIPT,JSCRIPT ,VBSCRIPT,JAVA,ASP,FOXPRO,PERL等等,就本人实践所得,事实上高级程序语言分为两大语系。一路是以C为主的程序语言,比如:JAVASCRIPT,JAVA等,这类语言在函数的调用,程序语句的书写,循环的控制都极为类似。还有一路是以BASIC为首的程序语言,比如:FOXPRO,VBSCRIPT等,此类语言同样具有类似的函数调用,程序语句书写以及循环控制,但与C语系是不同的。因此若是您曾经是从QBASIC起家的,那么在学习C语言前最好是先洗洗脑,千万不要把学习BASIC的方法以及思路用在C身上。

      说到这里,我想大家对C语言一定有了感性认识吧!以下让我们再升华一下,全方位亲热接触它。学习C语言必须从以下四点入手,也就是说,仅仅要你能掌握这四点的内容,那么基本上就大功告成了。
        怎样才干学好c语言
    有人问我c语言是不是非常难学,我说不是,后来问的人多了,我就萌生了写一篇关于c语言怎样入门的文章的念头来。
    事实上c语言非常easy,它仅仅是一种交流的规则,一种表达的工具,一种承载思想的容器而已,之所以感觉难,我觉得是还不习惯使用计算机特点来考虑问题。这就好比中国人从到英国定居一样,尽管你学过英语,可是那仅仅是想象中的英国,和现实的英国的情况还相差非常远,所以要有一个适应的过程,也就是常说的过渡期或磨合期。
    想尽快上手就得掌握计算机的特点,计算机的特点包含:
    1、 计算机在问题的处理方式上要求全,将全部的可能都要告诉它。人能够依据习惯忽略一些东西,但计算机不行。比方说求解一元二次方程,我们考虑问题就已经默认了a不等于0,更有甚者把b方减4ac也默认大于等于零了。这是我们的习惯,既然有解,我们一般习惯上就把它定为实数解,所以你做出来的程序通常是不考虑这两个条件的,可是计算机不行,计算机是有名的弱智。计算机没有象人一样的智能处理能力,它是人忠实的信徒,不管你怎么想,它都会执行你的命令。由于你的习惯,导致一些别实用心的人或者无意犯错的人来犯错误,致使计算机有时无所适从。非常疲惫,甚至崩溃,报错,造成你的程序是不成功的,所以你感觉非常难。
    2、 计算机要求程序的描写叙述精确,无二义性。人的语言有非常强的随机性和二义性。我们平时说话时,有时是一些招呼,有时说话的逻辑性能够不太清楚,话既能够表达这样的意思,也能够表达那样的意思,人能够依据环境和对方想表达的含义进行分析,终于得到正确的结果,可是计算机非常弱智,尽管它非常听话,可是他不能理解你表达的思想,仅仅会按你交给的指令执行,这样导致执行时报警和出错。
    3、 计算机编程是要求有非常强的全局性和逻辑性,不存在起伏的问题。人的思维有非常强的活跃期和蛰伏期,计算机不会,它随时待命。人在考虑问题时,有非常多尽兴的东西,但这不是处理问题的总体,而是一部分,所以就出现做完一段代码后,就不愿意再写,或感觉非常吃力,所以感觉非常难。
    计算机要求它的主人,考虑问题要全面,全部可能的情况及处理都要告诉它,要求学会沉稳,心态要稳定,要求交流的语句一定要明了含义单一。
    怎样才干非常快的学会c语言,更快的度过磨合期呢?C语言的语法规则记忆理解当然是不可少的,除此之外还应注意以下几个方面:
    1、 好好理解一下变量和函数的概念,至少要又一次回头看看初等数学。这是基础,否则就会先天不足,你学的再好,也成不了大气候。
    2、 平衡心态,尽管不能做到“不以物喜,不以己悲”的水平,但至少不要浮躁,不要急于求成,欲速则不达。
    3、 培养自身的全局意识,既能小无内,也能大无外,才行。
    4、 严格依照程序设计过程设计程序,不要跳脱,天马行空,没有规矩是不成方圆的。
    5、 努力提高自身的综合素质。程序是人思维的表达形式,是人处理问题思路和语言的结合体。你对客观看成到什么程度和你掌握的知识成正比。假设你对处理的问题不理解,不会处理,你怎么也写不出程序。
    6、 学会交流,多交流,相互补益,同一时候团队合作也是非常重要的。
    总之,实践出真知,多学、多练、多思、多交流,勤奋好学才干学成。

  • 相关阅读:
    jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
    如何使用 jMeter Parallel Controller
    使用 Chrome 开发者工具 coverage 功能分析 web 应用的渲染阻止资源的执行分布情况
    使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
    关于 SAP 电商云首页加载时触发的 OCC API 请求
    SAP UI5 确保控件 id 全局唯一的实现方法
    SAP 电商云 Accelerator 和 Spartacus UI 的工作机制差异
    介绍一个好用的能让网页变成黑色背景的护眼 Chrome 扩展应用
    Chrome 开发者工具 performance 标签页的用法
    Client Side Cache 和 Server Side Cache 的区别
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/3820366.html
Copyright © 2011-2022 走看看