C语言怎么系统化的高效学习?
今天给大家分享一个学习路线,也算是给这段时间C语言系列的一个总结,大家按图索骥,能够飞快的掌握C语言。
首先我想说下,C语言是非常重要的语言。为什么这么说呢?原因在于C语言是连接了硬件和软件的桥梁。
如果你学习Java,会发现自己是在Java虚拟机上,你要是用硬件功能,除了依赖系统API之外,就没招了。
这也是为什么我说:你不会C语言,基本上就如同无根之草一样,因为没根基,上层建筑就是摇摇欲坠。
而在C语言这里,最为重要的一个环节是,操作系统,这个庞然大物,直接支撑了各种开发需求,调度,快速的实现功能。
而C语言的学习,基本上保持一个路线,就是没问题的:
1 基础语法
2 练习,做笔记
3 数据结构与算法
4 项目,模仿
5 操作系统
6 反编译逆向
7 设计原理
那么具体该如何学习呢?
1 基础语法
学习简单的语法,if switch while ,各种变量声明,函数定义
简单数据结构,链表指针操作
内存管理,申请释放
结构体使用,typedef ,#define 使用
常见的库,函数
文件操作
字符串操作
作用域
指针,回调函数
推荐书籍:(更多书籍文末免费获取)
《C primer plus》
《小甲鱼C语言》
《C与指针》
推荐网站:
https://www.runoob.com/cprogramming/c-tutorial.html
视频教程:
https://www.bilibili.com/video/BV1TT4y1F7Z9?from=search&seid=17613620503982455285
https://www.bilibili.com/video/BV17s411N78s/?spm_id_from=333.788.recommend_more_video.0
全部视频清单,关注公众号 程序员入门进阶 后台回复 C语言视频我最棒 获取全部链接。
学编程一定要记住一点:
语法永远只是基础,不是能力。如果你听见谁说它学会了哪个语法,却不会做项目,那么基本上等于白瞎,没啥用,只是刚入门而已。
程序员之间的薪资差距,主要来自于一些抽象的能力,比如创造力,沟通力,解决问题的能力。
2 练习,做笔记
练习,第一个是所谓的课后题,多练习,把语法熟练的掌握,再一个就是去做笔记,把学到的知识进行归类,总结。
很多人会有一个困惑,自己学了就忘了,等于没学。这个解决方式就是做笔记,加深印象。
只看不做,基本白瞎的。一定要去动手,去调试,用VS开发或者codeblocks,都是没问题的,如果你喜欢Linux,可以装个虚拟机,或者cygwin去编程。
一些练习题:
https://www.runoob.com/cprogramming/c-100-examples.html
视频讲解:
https://www.bilibili.com/video/BV1ur4y1c7d2?from=search&seid=13029503385076204138
3 数据结构与算法
当你学习完语法,或者是在学习的过程中,会遇到比较困惑的内容,就是不知道如何描述物体,如何设计,这个原因是语法掌握了之后,这些东西都是零散的,不成系统,你不会用。
当你用的时候,绕不过去的一个知识,就是数据结构与算法,因为这两个合起来就是写程序了。
一个物体描述出来,就是一个结构体,或者联合体,然后通过一些函数调用,操作,影响数据,最终提通过界面显示,或者终端输出,完成整个过程。
于是C语言学习语法完后,就是学数据结构与算法,一定要记得这个学完,才是入门了,才能真正的做项目了。
这里主要学习哪些知识呢?
线性表
栈
队列
串
数组
广义表
树和二叉树
图
查找
排序
书籍文末可以找到,视频这里分享几个:
https://www.bilibili.com/video/BV1Ut411g76f?from=search&seid=4659630938965125971
https://www.bilibili.com/video/BV1xK4y1U7Dc?p=4
4 项目,模仿
上面的这些学习完后,就要开始做项目了。而做项目的技巧是什么?先去找案例,教程学习,项目实战。
当我们看完一个后,学会了如何去分析,开发一个新的项目。比如,如何描述一架飞机,它有哪些参数,哪些方法。
是否可以飞,可以发子弹,是否碰撞,宽高。
这个在理解起来就是,内部的结构,以及外部的关联。对内属性,对外方法调用。
这个如果你理解了,那么算是学成精了,进入开悟阶段。
这块教你一个方法,直接百度搜索 C语言 项目 源码 下载 。或者去github去搜索。
更多内容,记得关注公号 :程序员入门进阶。
5 操作系统
当这个阶段完成后,后面就进入所谓的操作系统阶段,这个迈过去了,就是开悟之坡的封神阶段,会进入真正的辉煌阶段。
而关于操作系统,要学习哪些知识呢?
操作系统的概念
进程,线程的存在
通信机制
互斥锁,消息
死锁,如何避免竞争
虚拟内存,进程间不可直接访问
分页,分段,缓存的意义
文件系统
驱动加载
这边推荐几本书,《现代操作系统》《自己动手写一个操作系统》,我自己当时是看着一本叫做《操作系统》的书,看了很久。
这块建议看下《linux操作系统设计》,然后就去看下小型操作系统,代码少,好学习,这块可以使ucos2,freertos,去学习中断上下文,所谓的现场保护。
如果这块学的不错了,在进阶一下,进入微指令,计算机组成原理,深入到计算机硬件这块,会给你带来质的飞跃。
《计算机网络》《操作系统》《 组成原理》计算机知识该怎么个学习顺序?
6 反编译逆向
完成了操作系统,就结束了?非也。下来会进入到世界颠倒的地方。反编译。有谁会写完代码后,进行反编译看看的?如果你这么做了,你一定是高手了。
因为你进入了自我探索阶段,在开悟之后,就变成了所向披靡,而反编译就是最好的切口。
这里推荐几本书:《C++反编译》《加密与解密》,加密与解密解决所谓的PE结构这些,说到这里又想起来了,《程序员的自我修养》《链接器与加载器》,一定要去读,太经典了。
这块我当时使用的是OD破解器,现在IDa,做一些分析学习(现在不输出这类内容了,自己探索乐趣无穷,不想被烦扰)
当你看到代码,能够看到的是它的流动,就像侠客行里面,最后石中玉看到蝌蚪文的那个感觉,各个经络活跃起来,感受到代码在流淌,而不是静态的,这时候你才是真的热爱编程。
这也是我喜欢的一个状态,一个在代码世界的屠龙少年。
当完成了这些,会到所谓的大神阶段,就是会游刃有余的解决问题,但是还处在孙悟空的阶段,没有大彻大悟。
最后一个,我们来说下终极思维。
7 设计原理
虚实结合,创造系统,这个才是最终跳出束缚,完成所谓的天眼过程。所谓你永远看不到真相,因为你一直在真相里面。
要想真正打通,最终完成的是所谓的设计,比如操作系统架构设计,模型,物联网模型,协议,这些是在制定规则。
制定规则,是在创造过程。制定规则,是具有了主导的权力,一切皆在股掌之中。
好了,今天就聊这么多,更多内容,敬请期待!
帮发转发文章,便是最大的支持!
--end--
热门文章
职场老鸟,互联网十年从业生涯,分享 [Java,Python,安卓,AI,爬虫] 技术文章,学习资料, 热点趣闻等。关注回复 1024 Python 电子书大全 面试资料,给你一份私藏的程序员好礼,永远更新中!赶紧来关注哦!
我的微信 code_gg_boy 。