如何学习C语言?

作者: 鱼鹰谈单片机 | 来源:发表于2018-12-18 18:39 被阅读0次

    如何入门C语言?这是一个很大的问题,涉及到方方面面。下面把我认为适合入门的学习方法介绍一番,仅供参考,当中将穿插一些我自己学习的过程。
    C语言学了四年,用了四年,是时候回顾一下了。
    大一的时候加入实验室,作为一枚新生,什么都不懂,什么都是好奇的,看到有人在焊接电路板,就想焊;看到有人在画PCB,也想画;看到有人参加比赛,拿各种各样的奖,也想试一试……作为一个农村出身的我来说,什么都是新鲜的,什么都是有趣的,当然还有无形中对技术的敬畏、对技术的渴望。
    加入实验室后,学长们就开始进行51单片机的培训,当然最重要的就是如何利用C语言写出自己的代码,去控制你的单片机工作,最简单的就是用代码控制一盏灯的亮灭了。很多人初学者都在纠结自己该学什么,其实根本没必要。
    首先就看你的环境是怎样的,你的环境需要哪种语言就学哪种,哪怕学的只是皮毛都是无所谓的,重要的是能形成自己的理解,因为环境真的很重要,如果你的学长学姐们都学Java,而你却学C++,那么学习过程中遇到的很多问题,学长学姐都无法为你解决,虽然现在互联网发达,很多东西都可以上网搜,但如果你身边就有一个高手,那么将很快带你入门的,因为你连基本的认识都没有,又如何通过网络提升自己呢?而你入门之后能走多远,就看你的毅力了。所以当时的我没什么可考虑的,就是学C语言。如果当时学长要用汇编控制单片机,那么我现在可能就是一个汇编高手了,手动微笑脸。
    那么如果说没有环境怎么办?那就只能靠自学,自学学哪一门语言就比较有讲究了,如果你有自己的目标,那么就找适合完成你这个目标的语言学就可以,比如想学人工智能,你就去学Python;如果你想学安卓开发,你就去学Java。如果你没有目标,只是单纯想进编程的世界看看,那么我建议学C语言,当然用其他语言入门也不是不可以,只是我个人建议而已,但如果你问学单片机用什么语言比较好,那我肯定首推C语言了。
    编程语言没有好坏,只有适合不适合的问题,语言只是一个工具,学会了一个工具,其它同类的工具很容易就上手了,重要的是在常年累月中获得的一种编程思想,一种解决问题的能力,而编程过程中用到的一些算法,可以说是任何一种语言的灵魂,一定要重视。
    如果说现在你已经确定了学习C语言,那么又该如何继续走下去呢?
    当时培训的学长大部分是大二的,有些是大三的,他们没有给人培训的经验,只是把自己最好的理解教给新生,吸收的效果好不好,不知道。说实话,我从学长的培训中并没有学到多少东西,更多的知识是在郭天祥的视频中学到的。但是我现在还推不推荐这种方式呢?答案是肯定的!郭天祥视频教授的东西都是最适合他开发板的内容,放到我们自己实验室设计的开发板就不一定适合了,如果有学长进行培训,当然再好不过了。而且培训的时候大家可以凑在一起交流,一起学习,可以让你知道你并不孤单,你们可以互相督促、共同进步,这就是环境带给你的好处,很多人都想报一个培训班进行培训,其实很大程度上只是需要一个环境而已。
    但是如果说你没有实验室的环境,身边也没人懂这些,又不想报所谓的培训班,那么又该如何呢?
    视频+书籍+网络。这就是我的答案,并且我的观点是视频为主,书籍为辅,遇到问题上网搜,这是我认为最快的入门方式。但如果入门之后你还采用这个模式,那效率就会很低下了。
    为什么说这种方式最快呢?首先对于视频,一定要选择有口皆碑的视频,不能随便找一个视频就开始学了,这样得不偿失。如果说你不知哪个视频比较好,那么上网搜吧!你要相信,你遇到的绝大部分问题别人都遇到过,不管是技术上的,还是生活上的,都是如此。外事问谷歌,内事问百度。
    视频学习有很多好处。每一个能录制视频的人在这个领域肯定比你这个小白强,以他们的思维高度讲授的内容更全面,更具有代表性,同时他们也会在讲授的过程中穿插一些自己的编程经验,自己的思考、故事,让你的学习不那么枯燥。而且,如果你选择的视频是有口皆碑的,那么不管从内容上,还是教学方式上肯定是比较适合小白学习的,不然不可能那么多人去推荐的。而如果你碰到的是一位幽默的老师,那么你可能就是在边学边笑过程中度过了。我一直认为,能把复杂的东西用通俗的方式解释才是最好的,所以我的笔记一直都向这个方向努力,尽可能的通俗化;我也相信一张图片能胜过千言万语,所以我的笔记中有很多图片,尽可能的将自己的理解转化为图片方式显示在读者面前。
    然后再说说书籍,和视频一样,也是找有口皆碑的书籍,如果你选择的视频有配套的书籍,那么这本书你肯定得买,比如郭天祥的视频就有对应的书,一开始我不知道,每次郭老师在视频中说把书翻到第几页第几页时我都不知道他在说什么,后来才知道原来还有一本书存在啊,所以果断买了。如果说你经济上有一些压力,那么可以买二手的,或者盗版的,当然我不是很推荐盗版,毕竟作者花了那么多时间精力写的东西。
    对于书籍,不要过多的看,你要把重点放在视频上,要理解好视频中讲的每一个知识点。如果没听清楚,那么退回去再听;如果不理解,那么暂停一下,自行思考;如果实在理解不了,那么暂时放弃即可,不必钻牛角尖。开始的时候一定要将重点放在对视频的理解上,当你理解差不多的时候,你再拿起你的书,再对视频中介绍的知识进行系统全面的学习,因为有的时候视频看的太快,忽略了一些东西,而且视频中讲的内容很少,只是一个引子,你要通过这个引子对书上相关的知识进行更全面的学习,当然这个学习过程可以在你把所有的视频看完之后再进行,毕竟有了整体的印象后再进行书籍学习更有好处。对于视频中没有介绍知识点,别去看,现在的你不要看太多书上的知识,以后用到以后再说。我把郭天祥的视频都看完了,但书却没有。郭天祥的书砖头一样厚,每一页都看,那不累死小白我吗?到现在我也没看完,但是你拿一页我没看过的内容给我看,现在的我能看懂吗?你猜。
    还要再强调一点的就是,别背书,不要像高考一样,靠死记硬背去学东西,那个是应试教育的方法,不是学技术的方法。如果你自认为记忆力好,算我没说。书是用来翻的,用来看的,记不清了回来翻书就行,没人叫你默写单词,也没人叫你默写古诗词,技术的东西多用几次,多看几次自然而然就记住了,你要将重点放在知识点的理解上,理解了记不住又有何关系呢,翻书就是了(面试的时候就不一样了,有些东西真的要死记硬背,因为面试官真的可能叫你默写代码的,比如写一个冒泡算法试试)。
    通过视频+书籍的方式你已经掌握了足够的理论知识,那理解得好不好,就看你的实践效果了。没有实践的理论是空洞的理论,没有理论的实践是盲目的实践。初中班主任说过这么一句话:一看就懂,一做就错,说的就是这个道理。很多时候你自认为理解了,但是到底理解的正不正确,就看你的实践了。实践除了能帮你验证你的理解,还能将你当前的问题暴露出来,让你知道你的不足在何处,同时也能增加你的学习兴趣,毕竟看着自己亲手做出来的东西还是很有成就感的。在实践中遇到问题,就上网搜,注意要换各种关键字去搜,这样才可能搜到你想要的答案;如果网上搜不出来,那么可以问身边的高手,请他们帮助你;如果身边没有这样的高手,这个时候你可以在论坛发帖,在知乎问,总能解决的。办法总比困难多,何况你只是在走别人曾经走过的路。
    对于代码,除了多敲,还要多看。网上有很多源代码可以参考,同一种需求可能有多种解决方式,通过多学习别人的方法,你将进步更快,毕竟一个人的思考能力总是有限的,也很容易被当时自己的知识水平、思维习惯限制住,所以一定要多学习别人的代码,然后在理解的基础上丢开参考代码,自己独立写出来。我在单片机学习的过程中,看的最多的就是STM32的库函数了,如果你想学习如何规范写代码,如何写出一个好的底层驱动程序,那么看库函数的源代码是一种不错的选择。
    代码一定要自己一个字母一个字母的敲,否则你不会知道一个main你会写成mian,一个英文分号写成了中文分号。还有敲代码的时候一定要注意编程规范问题,变量不要用a、b、c表示,不然几年之后别说别人了,自己都不知道自己写的是什么。变量名也不要用汉语拼音,太难看了,不知道英语单词可以用有道词典查。写代码的时候注意多写一些注释,但也不是每一行都要写注释,那不累死,但关键点一定要写出来,方便自己以后理解,也是防止以后回来改代码的时候不小心掉进自己挖的坑里了。我的代码很大的一个特点就是注释多,很多有可能对以后修改代码有影响的地方都会进行注释,以防自己忘记。
    学习第一门编程语言一定要深耕细作,这是我的观点。有些人一会看这门语言,一会看那门语言,都是浮于表面的学习,认为输出个Hello Word就算学会了,让你做一个项目可能就无从下手了。我认为我入门C语言的一个标志是在大一的时候独立完成了一个电子闹钟,但也只是入门罢了,我并不认为我已经学会了这门语言,而是继续学习,看到别人的代码中有自己陌生的语法,我都会上网寻找答案,力求吃透。而直到工作,我还是以C语言为主,当然期间稍微学习了一下汇编,但只是为了更好的理解C语言罢了。直到现在我也不敢说自己精通C语言,只是远比一般人理解的深刻罢了。高三之前我的英语一直不好,一直不知道该如何学习英语,后来想到一个办法,就是用汉语去攻克英语。汉语毕竟是母语,不说精通,起码能流利说、顺利写。所以一开始的时候,把一个个单词翻译成中文,然后连起来看是否通顺,如果不通顺,那么继续换别的中文意思,直到通顺为止。确实,一开始有很多不懂的单词,可能短短的一句话大部分单词都不认识,但我对那些不懂的单词都会注释。随着词汇量的提高,可能很长一段话就只有几个单词需要注释了,而且当你看过一遍句子之后,自然而然的就会在脑海中形成中文意思,根本不用特意去翻译了。正是这种学习经历,让我决定深入学习C语言,就像自己的母语一样,等自己感觉差不多的时候,学其他语言时有C语言作为参照,我认为会是比较轻松的事情。
    同样的道理,开发平台也是一样。很多初学者对于自己的开发平台只是会编译、下载,但是对于重要的调试功能却不怎么上心了。其实很多开发平台都有自己的调试手段,而掌握了这些调试手段将能更快的定位你的bug,很多不确定的东西也可以通过调试方法确定,根本不用去问别人,自己就能顺利解决。而我在工作中写代码的时间大于调试的时间,最重要的原因就是我掌握了很多的调试方法,对于很多逻辑bug我可以很快的通过平台的调试手段解决。而一旦掌握了一个平台,你心中就有了参照物,就会想其它平台也应该有这功能吧。
    当你入门之后,你就要抛开视频了,毕竟视频学习适合入门,但却不适合进阶了。因为视频还是比书籍稍微啰嗦那么一点,而且时间也比较长,所以不建议用视频去进阶了。这个时候就要以书籍为主了。网上有很多书可以看,有电子版,也有实体书。如果喜欢实体书,那买实体书看就行;如果喜欢电子书,那么上网搜就是了,很多都是免费的。同样的道理,还是选择有口皆碑的书,这样你的学习效果才会更好。而且我建议购买实体书,除了方便翻阅之外,睡觉之前拿起枕旁的书看上那么几页,对于催眠效果还是杠杠的。
    做技术的一定要有长期学习的觉悟,毕竟社会发展的太快了,有很多新东西要学习,不能墨守成规,认为自己当前的技术水平足以应对当前工作就停止学习了,而且我也不认为你把当下所有的旧技术学会了,更别说新技术了,当然也不是说旧的技术没学完,就不能学新技术,看情况、看兴趣的,重点是你不能停下学习的脚步。
    学习的过程中记得写一些笔记,将自己的理解、心得体会写出来,将自己如何一步步解决一个问题的步骤写出来,这样以后你会感谢当时的自己的。而我目前能写这么多内容就是因为大二的时候意识到笔记的重要性,才一直坚持到现在。
    ----------------------------------------------------------------------------------2018/12/10 Osprey

    相关文章

      网友评论

        本文标题:如何学习C语言?

        本文链接:https://www.haomeiwen.com/subject/uvalkqtx.html