题主跟我当年一模一样!!都是这么过来的!
但是其它一大堆答主在那推荐一堆的 C 语言书,我只能说看书基本没用!
学习编程就是学一项技能,就像让你一直看科目一各种选择题,你能学会开车吗?
想学会开车,还是得自己上手去,知道如何启动、离合、刹车、油门怎么配合。
编程也是这样的!
初学者不要上来就去抱着书啃!!
初学者不要上来就去抱着书啃!!!!
初学者不要上来就去抱着书啃!!!!!!
借着这个机会,我也分享一下自己「系统学习C语言的路线」吧
首先,分享一份大学期间自己整理的电子书库,绝不是在网上那种打包下载的,而是自己需要学到某个方向知识的时候,去网上挨个找的,最后汇总而成。
汇集了编程语言(Java、C++、C、Python等等)、操作系统、计算机网络、系统架构、设计模式、程序员数学、测试、中间件 、前端开发、后台开发、网络编程、Linux使用及内核、数据库、Redis....等主流的编程学习书籍。
我整理的这些书大家可以在这里获取,对于学习计算机的同学帮助非常大,且十分系统:
书单:书单推荐,少即是多(含下载方式)
第一阶段:初学少看书,多看视频
这真的是血泪教训,我大一会傻乎乎的去把课本看一遍,然后做课本后面编程练习题。
学得那叫一个艰难呀,大家都知道,课本为了保留其严谨性和全面性,往往都具有一个特点,那就是「不说人话」。
对于 C 语言,初学者有一个难点需要克服,就是容易遇到各种编译、链接错误,而且不知道怎么解决:
比如这种很初级的报错,但是初学者往往看到就慌了。
遇到这种情况,我的建议是仔细读报错的提示,解决方法往往就在这些 note 中,如果实在解决不了,就复制 note 去 Google 上搜。
这个阶段你需要三份资料:
- 一是补 CS 基础概念,也就是计算机导论
- 二是一本 C 语言的好书。
- 三是一个优质的 C 语言视频
对于每一点,我都只推荐一份我觉得最合适的,避免你陷入选择困难症:
CS 50,这是哈佛的一门计算机入门神课,忘了是在大一下还是大二看的了,当时觉得如获至宝。 链接如下:
https://cs50.harvard.edu/college/2021/spring
让我现在还记忆尤新的一个点,是这个老师讲到 binary search 的时候,直接举了查字典这个过程,然后现场手撕字典。。。
另外,这门课是用 C 语言作为教学语言的,非常难得。
因为现在国外很多 CS 名校的导论课都会采用类似 Python、Schema 这样的语言。
但其实你会发现,在 CS 50,不会讲多少 C 语言的语法,C 语言只是作为一种传递编程思想、引领你入门计算机的媒介。
而不是在教 C 语言。
不多说了,推荐一个我以前在地铁都在刷的,浙大翁凯老师教授的,直接去中国大学 MOOC 搜索即可,这是链接:
https://www.icourse163.org/course/ZJU-199001
说到这,我不得不多说两句翁凯老师了,我看了好几门他的课,最直观的感受是:
讲解透彻、声音好听,而且特别注重细节,贴一张浙大匿名教室系统关于翁凯老师的评价吧:
一句话,翁凯老师是真的想把计算机内部原理、编程语言以深入浅出的方式教给大家。
《C程序设计语言》,一本被称作 C 语言圣经的书。
在短小的篇幅中,涵盖了 <stdio.h>、<string.h> 中的大部分例子,习题也都是经典,从 hello world 开始,到二分查找、二叉树、快排、哈希表等,甚至还用递归下降写了词法分析,帮你理解复杂的声明。
不过要看懂里面的每一个例子,也是有一定难度的,需要有一点点基础,但是不妨碍作为入门书,可以多看几遍。
对了,一直说学编程要多写,但是很多初学者也不知道写什么。
在这里,我给出一些学完 C 语言基本语法后,可以练手的例子:
就用 C 语言把链表翻来覆去的写,从最基本的链表插入、删除、单向、双向、环装链表。
到链表反转、合并、分割等。
别看基础,但是很多同学到大四了,可能都写不对,这里考察是否足够细心、逻辑是否缜密。
会不会操作着就把链给断了。
比如图书管理系统、俄罗斯方块、贪吃蛇之类。
这种代码量大多在 500 - 1000,会综合运用函数、文件操作、动态内存、指针这些关键的东西。
第二阶段:搞懂内存,看书、写代码
这个阶段,是需要掌握一些计算机系统知识才能学好的,比如虚拟地址就和操作系统相关了,而函数调用栈这些又和汇编相关。
又比如很多学了很久的同学,还不太清楚变量的声明和定义区别,extern 又有什么作用,这些实际上就需要理解内存分区的东西。
C 语言的核心就在于指针、内存,能不能学好、用好 C 语言,更多在于是否拥有扎实的计算机结构、存储、运算原理方面的知识。
所以强烈建议在学习 C 语言的同时去了解一下补码、数的二进制表示、内存、汇编等知识,尤其是内存和汇编,这两个对于深刻理解指针和熟练运用有很大的帮助。
我就不仔细介绍了,要介绍的书都在这张思维导图里了。
《C和指针》、《深入理解C指针》,真的是涉及指针方方面面的好书,墙裂推荐。
这俩兄弟懂了其实也不能帮你提高写代码的水平,主要是对于一些编译、链接过程的报错,更加的明确,不至于懵。
比如链接过程中常见的错误是符号未找到(undefined reference)和符号重定义(redefinition)
当你熟悉链接过程,符号查找过程之后,解决对应的报错也会得心应手。
C 语言之下就是汇编,会汇编,你就能直接把 C 语言衣服扒掉,看看背后的实现,比如大家都在讨论数组和指针有什么区别?
你去写个程序,然后 gcc -S 一下,看下汇编代码,你就会发现没啥区别。。。
汇编不需要会写,会看懂部分记得,大可不必去刻意的记住各种指令、寻址方式。
<hr/>
好了,今天的 C 语言学习之路就到这里了,其实还有很多东西没提,比如 Linux C方向的,主要是为了突出学习 C 语言本身,不想喧宾夺主,让大家迷失了方向。
另外,我推荐的这些书籍,我也都汇总了:
这一套学完,C 语言基本问题不大。
有需要的可以看看:书单:书单推荐,少即是多(含下载方式) |