大一、大二的新生怎么学C语言呢?作为学长,我简单把我的想法说一下吧。

1. 自学才是硬道理。强大的自学能力是独自解决问题能力的根本,程序员需要拥有强大的独自解决问题的能力。

2. 入门阶段,coding为主,看书为辅。看书只是C语言学习的最简单的一步。入门阶段,动手实践,刷题才是最重要的。coding能够让你变强。

3. 请记住这个公式:只看书+不实践== C语言挂科

4. 如果你以后不想当优秀的工程师,不想在计算机这条路上走太远,只当一个平平淡淡的码农。推荐一条路:跟着老师一步一步走,跟着大学的培养方案,一步一步跟着走就行了。

5. 学长从过来人的角度,推荐一条路:MOOC的浙大在线教程当作主干道,买一本《The C Programming Language》先当作信仰供2个月。MOOC在11月前啃完它,然后尝试去看The C Programming Language,就行了。

6. 如果你想通过计算机这条路走向人生巅峰,推荐一条路:现在开始,买一本C primer plus,简单看一遍前几章语法,打开PTA(浙大的online judge),找一些basic的题,然后去疯狂刷,不懂就思考几小时,几小时没有结果,就群里问。大量的做题,到了开学,再看看The C Programming language,然后向数据结构与进攻,然后再学习算法分析,能在大一结束前学完,差不多了,从此走向人生巅峰。

7. 不懂就问是不可行的!学习很难受,如果有啥不懂的,就多思考,尝试自己去解决问题。如果确定了自己无法解决,那就可以问老师,问学姐,问学长了。问学姐学长不是为了答案,而是为了见多识广。

 

在这里推荐点资源:

一、给初中生看的:

1.《啊哈C语言》

优点:简单易懂,生动有趣。

缺点:看完它,水平有限,还要看别的,才能满足大一考试需求。学的只是C语言的冰山一角。

二、给高中生、大一新生看的经典入门书:

1.《C primer plus》

2.《C Programming: A Modern Approach》

优点:这2本,适合小白看。语法全覆盖,细节多,知识点讲的清楚,就像高中的《王后雄教材完全解读》。

缺点:琐碎细节太多,每一节内容太多,C语言的精华都被藏了起来,找不到重点,有很多学了的知识点,其实压根就不会怎么用。

第一本,真正的入门首选书籍。学长翻过类似C primer plus的书,只能说读的累(内容比较多),是给小白看的好书。

第二本,没翻过,但听说过其大名,也看了看目录,可以得到如下不严谨的评价:这本书足够厚,知识点够细,例题够多,质量极高,所以它厚的很有道理,没有复制粘贴的嫌疑,没有搞怪无厘头。本书适合作为百科全书,不懂就翻,不懂就翻,不懂就翻。

3.《The C Programming Language

首先,C语言的信仰书籍:《The C Programming Language》

优点:作者是最大的优点,本书作者是C语言之父。别的优点,我觉得都不算优点了,比如:内容绝对简洁明了,几乎没有废话、没有过多琐碎细节,只讲最纯粹的C语言。内容全是C语言的核心。代码示例大多都是库函数的实现方法。

缺点:不适合小白,适合有一定编程经验(少数例题涉及到数据结构与算法,第一章跨度太大)的读者。书中例子挑战性依次递增,对小白不友好。

因此此书适合作为一本精炼C语言的书,大一上学期结束,后来再倒过来看这本书,会对C语言的理解焕然一新。

三、给想成为大佬的人看的进阶书

适合对象:

单纯想进阶C语言,

想更加理解指针和内存的,

想搞Linux内核的,

想搞基础设备的,

想搞单片机的,

想进微软去改进windows的,

想搞一些贴近生活的硬件的(比如,闹钟,计时器、甚至简单的机器人)。

想搞软件的话,就别进阶C语言了,当然,学有余力的话,选择一门语言深入下去,准没错(具体选啥,取决于你的就业方向比如:你想做游戏/搞图形,搞服务端开发,那么请直接买一本C++ primer)。

有想法的同学可以进阶看一波。

1.《C陷阱与缺陷》

2.《C专家编程》

3.《C和指针》

4.《Head First C》

此外再补充一些经验:

1、CSDN真的是个好东西。评论里面有人说不敢苟同这个观点,我很理解,也赞同你的想法。CSDN是一个开放的平台,里面有很多大佬,也有很多小白,博客的质量有高有低,甚至有些是错的,这很正常。但有这么一句话:择其善者而从之,其不善者而改之。这么久了,仔细想了想,CSDN上的确给予了我很多帮助,这一点是毋庸置疑的。在借助CSDN寻找答案时,过程中虽然走了很多弯路,但现在反过来看 真的都是值得的。

2、国内的教科书,少碰。具体原因:中国应试教育的弊端,东西太死板。

比如:函数的传参,讲了一对概念叫做:实际参数与形式参数,然后就没了????然而:讲一下局部变量的生命周期,解释一下函数的参数列表是定义了新的变量就完事了。

比如:getchar()没有讲,就讲scanf(),告诉我们要在变量前加个&,而&是个什么东西?是取地址符,所以&取的地址究竟是什么?

比如:在指针那一章,莫名其妙来了个地址?地址是什么个玩意?不介绍一下内存的编制和存储单元,想让我死记硬背?

一个指针就是一个变量,这样的点睛之笔,竟然全程藏着掖着。所以难是有道理的,因为书没选对。

这里不是一棒子打死所有国内教材,而是吐槽一下,当初走的弯路,浪费太多时间,心累。。。。。。

3、可以适当百度一下:什么是开发集成环境。开发集成环境(IDE),入门推荐codeblcoks(具体咋用,自己CSDN搜索:codeblcoks环境配置),不推荐DevC++。为什么不推荐呢?编译器会有许多扩展语法,就像用fflush(stdin) 清空stdin流或者case:1 … 2;这样的语法(感谢评论区强调了这并不是标准定义,而是一种编译器的拓展功能)。dev自带的编译器老了,不支持这种编译器的拓展功能。因此不推荐用DevC++。而codeblcoks作为一个开源的软件,现在也是活着的,还有人维护,dev虽说是一代经典,但毕竟dev并没有随着编译器的进步而进步。

总用老的,真的很难受,当然毋庸置疑有人肯定会怼我说,我身边的人反驳我的意见总是这么一句话:''入门阶段不需要什么高端的写法。'' 肯定一点:这个观念没有任何问题,但我是一个喜欢新事物的人,喜欢琢磨一些教学内容外的新知识,因此推荐大家用带有较新的编译器的codeblcoks。

4、C语言学到指针可以提前百度一下内存是什么,了解一下内存分区,如果能思考清楚为什么指针大小在32位操作系统是4个字节?思考不清楚,那就去问老师,老师们应该很喜欢能提出这样问题的同学。当然,老师能不能解释清楚又是另外一回事了。详情可进阶计算机组成原理,计算机操作系统原理。

5、可以适当了百度一下:内存与硬盘的关系。即一般情况下程序保存在硬盘中,运行时会被''拷贝''到内存中。硬盘中的中任何数据只有调入内存中才能真正使用。详情可进阶计算机组成原理,计算机操作系统原理。

6、可以适当百度一下什么是编译器、什么是gcc/g++/gdb与GNU与MingGw。了解就好,不需要深入。如果能试着配置一次环境,用命令行编译一个main.c文件,如果失败了,不骄不躁静下心来千方百计去做到这一点。多的不敢说,至少可以说明一点,你的解决问题的能力很到位。当然,做不出来也没什么,学到越后边,自然就慢慢的会了。详情可进阶编译原理。

8、萌新就不要考虑:(宇宙最强编辑器,狗头滑稽.jpg)记事本、vim 、VSCode、VS、eclipse、idea等等了 ,到了那个高度,自然就都会接触到了。

9、尽早决定考研与就业。

要考研的就好好学专业课 好好学学校的必修课,把考研的知识学到位,考个高分,在学有余力的情况下根据你选择的方向,学习一定的相关工程知识。选择一个会指导你并且带你干活的导师,请务必远离只让你干活当苦力不指导你的导师。

要就业的就可以战略性的放一放高数、线代等(不是不学,而是不用学的特别特别深入。举个例子:没必要把一天24小时,分10个小时给这些科目。很有必要将24小时中的的8个小时给C语言、计算XX原理等专业课,1小时玩耍,1小时学高数等课程。残酷的现实告诉我:这些理论知识,学的再好,多年不用,也会忘的差不多,需要的时候必须二次学习。所以不打算考研的同学,重心可以向专业课倾斜很多。)。

一定要选择一个发展方向:web开发(大学期间前后通吃才有搞)、机器学习、XX引擎游戏开发、神经网络等计算、大数据可视化、服务器运维、嵌入式设备、密码学、网络安全等等一系列方向。选择一个并且努力学下去,毕业后才不会迷茫。

这个方向定的越早,在毕业时别人迷茫、唉声叹气时,你会变得越来越充满自信, 因为你很清楚,你大学4年学了什么,你拥有实力,拥有竞争力,工作后几年,你将是一名优秀的XXXX工程师,也不是一名普普通通的码农。