|
还没开始学习C语言,你们经常问的那些问题
在各种平台私信中,经常有很多初学者问了我很多问题,我大致分成两拨人问的问题,一类是还没开始学的人问的问题,一类就是属于学习过程中产生的问题。这次做了一个汇总,先把前者的问题梳理一下,后面私信就不再详细回复(也没那么多精力去回复),希望能帮到还没开始学C语言就有所恐惧的那部分人。
经过我一天的整理,整合了大量的重复问题,暂时就以下六个,后面要是还有新问题,且有必要回答的那种,我再补充。
1.学C语言难吗
先说我的结论,我觉得不难。
学的时候千万不要带着这个问题去学,高中的时候就学过《为学》,第一段便是:天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。
所以学习任何编程语言,我们都应该先去尝试着学,况且C语言和 Java、C++、C#、JavaScript等编程语言相比,确实简单了不少。同为高级编程语言,C语言涉及到的编程概念少,附带的标准库小,所以对初学者来说,学习成本小,时间短,结合本教程,能够快速掌握编程技术。也正是这些原因,后面出现的编程语言都参考了C语言,说C语言是现代编程语言的开山鼻祖毫不夸张,它改变了编程世界。
编程语言的发展大概经历了以下几个阶段:机器语言→汇编语言→面向过程编程语言→面向对象编程语言。
机器语言和汇编语言是编程语言的拓荒年代,它非常底层,直接和计算机硬件打交道,开发效率低,学习成本高。C语言是面向过程的编程语言(C语言其实也可以做面向对象编程,但是不够友好),已经脱离了计算机硬件,可以设计中等规模的程序了。后来的Java、C++、Python、C#、PHP等等都是面向对象的编程语言,它们在面向过程的基础上又增加了很多概念(封装、继承、多态)。C语言出现的时候,已经度过了编程语言的拓荒年代,具备了现代编程语言的特性,但是这个时候还没有出现“软件危机”,人类也没有动力去开发更加高级的语言,所以也没有太复杂的编程思想。所以我们才说C语言的概念少,词汇少,思想也简单。
所以,以后别再问C语言难不难,直接干它!!!
2.英语和数学不好,能学会吗?
很多初学者认为,编程语言是由英文组成的,而且会涉及很多运算,担心自己的英语和数学功底不好,不能学会编程。
实话实说,我们也没有用英文编程。编程的核心是逻辑,不在于用什么语言。
有人认为是英文阻挡了自己学编程,那多半不是中文和英文的问题,是人的问题。编程这东西跟数学这门课很像,该不会的还是不会(所以某些人也别指望中文编程能解决学不会编程这事)。

首先,学习编程确实需要有一点英语基础,但是要求真的不高,初中水平完全可以胜任。
编程语言起源于美国,是由英文构成的,其中包括几十个英文的关键字以及几百个英文的函数,除非需要对文本进行处理,否则一般不会出现中文。但是,它们都是孤立的单词,不构成任何语句,不涉及任何语法。几十个关键字用得多了自然会记住,至于几百个函数除了常用的能记住,其他的没人能记住了,也没必要去记,查询文档即可。
当然了,话又说回来,如果将来你希望能在这个行业有所造诣,那英文水平还是要主动去提高,因为大部分技术手册都是英文版。不过这都是你学会编程的后话。
那英语不构成学习的障碍,数学基础不好能学会吗?
谈到数学,那真是多虑了,它根本不构成障碍。可以说,只要会四则运算就能学编程。
要知道90%以上的程序员根本不会高等数学,但是根本不妨碍他们成为技术大佬。编程语言确实涉及到很多算法,而且算法就是高等数学的知识,但是这些算法都已经被封装好了,你直接拿来用就可以,根本不用你重复造轮子。
3.初中毕业能学会C语言吗?
初中毕业确实能学会编程,但一般达不到太高的水平。
初中学历可以学会C语言,虽然我们不该打击一个人学习上的积极性,但是起码也尊重一下事物发展的客观规律。编程是知识密集型的行业,需要很强的学习能力。没读高中或者大学,除了家里条件不允许,只剩下学习不好这种情况了。大家的智商都差不多,成绩不好一般都是学习能力差。其中学习能力就包括专注能力、理解能力等。
有很多人不能专注于一件事情,容易走神,人虽然在,心已经飞了,根本钻研不进去。这就是专注能力不够,学习C语言是需要你投入一定专注的。想当初,我学完翁恺老师的C语言课程,大概只用一周,其中三天用在写文档,每天差不多用10小时的精力去学习。
而理解能力是指一个人对事物乃至对知识的理解的一种记忆能力。对于程序员来说,理解能力不能停留在只知道“是什么”,还要知道“怎么样”,甚至更深层次的“为什么”。而我见过一些人学C语言学的比较吃力,排除课程本身教学质量问题,很大程度上是自身理解能力不够好。
所以对于初中毕业生,能给的建议就是提升自己的学历和学习能力。
4. C语言和C++到底有什么关系?我先学哪个?
C语言是1972年由美国贝尔实验室研制成功的,在当时算是高级语言,它的很多新特性都让汇编程序员羡慕不已,后来的很多软件都用C语言开发,包括 Windows、Linux等。但是随着计算机性能的飞速提高,硬件配置与几十年前已有天壤之别,软件规模也不断增大,用C语言开发软件就显得非常吃力了,这时候C++就应运而生了。
C++主要在C语言的基础上增加了面向对象和泛型的机制,提高了开发效率,以适用于大中型软件的编写。早期并没有“C++”这个名字,而是叫做“C with Classes”,“带类的C”。“带类的C”是作为C语言的一个扩展和补充出现的,目的是提高开发效率。但是这个时期的C++非常粗糙,仅支持简单的面向对象编程,也没有自己的编译器,而是通过一个预处理程序(名字叫cfront),先将C++代码“翻译”为C语言代码,再通过C语言编译器合成最终的程序。随着C++的流行,它的语法也越来越强大,已经能够很完善的支持面向对象编程和泛型编程。但是一直也没有诞生出新的C++编译器,而是对原来C编译器不断扩展,让它支持C++的新特性,所以我们通常称为C/C++编译器,因为它同时支持C和C++,例如 Windows下的微软编译器(cl.exe),Linux下的GCC编译器。也就是说,C和C++代码都会通过一个编译器来编译,很难说C++是一门独立的语言,还是对C的扩展。

其实学C和C++并没有什么先后顺序,但是个人建议:对于没有任何编程基础的读者,建议先从C语言学起,不要贪多嚼不烂。等你熟悉了C语言,能编写出上百行的代码,就对编程有些概念了,这个时候再去了解C++究竟在C语言基础上增加了什么,你就站在了一定的高度。有编程基础的读者,相信你自己能做出正确的判断。
5. 学了C语言到底能做什么,能从事什么工作?
C语言也是一门通用性的语言,并没有针对某个领域进行优化,就目前而言,C语言主要用于较底层的开发,例如:
- Windows、Linux、MacOS等操作系统的内核90%以上都使用C语言开发
- 驱动开发,让硬件和操作系统连接起来,这样用户才能使用硬件、程序员才能控制硬件
- 单片机开发属于软硬件的结合,基本是使用C语言开发
- 开发系统组件或服务,用于支撑上层应用
- 如果对软件某个模块(例如算法和搜索部分)的效率要求较高,也可以使用C语言来开发
当然,C语言也能用于PC软件开发,做出类似 QQ、迅雷、Chrome 等带界面的程序,但是由于C语言开发效率低,第三方库较少,实际项目中已经没有程序员这么做了,大家已经转向了 C++。
那么,学完C语言可以去哪些应用领域工作呢?
- 应用软件。Linux操作系统中的应用软件都是使用C语言编写的,因此这样的应用软件安全性非常高。
- 对性能要求严格的领域。一般对性能有严格要求的地方都是用C语言编写的,比如网络程序的底层和网络服务器端底层、地图查询等。
- 系统软件和图形处理。C语言具有很强的绘图能力和可移植性,并且具备很强的数据处理能力,可以用来编写系统软件、制作动画、绘制二维图形和三维图形等。
- 数字计算。相对于其他编程语言,C语言是数字计算能力超强的高级语言。
- 嵌入式设备开发。手机、PDA等时尚消费类电子产品相信大家都不陌生,其内部的应用软件、游戏等很多都是采用C语言进行嵌入式开发的。
- 游戏软件开发。游戏大家更不陌生,很多人就是由玩游戏而熟悉了计算机。利用C语言可以开发很多游戏,比如推箱子、贪吃蛇等。
上面仅列出了几个主要的C语言应用领域,实际上,C语言几乎可以应用到程序开发的任何领域。
所以说,C语言往深了学,要学习操作系统,虽然C语言和操作系统之间没有必然联系,但是别忘了,连操作系统都是C语言写的,C语言的主要用途也在底层开发上面。
6.学C语言要什么配置的电脑和什么软件?
其实初学C语言不需要太高端的电脑,但也不能太差。以笔记本电脑为例,现在笔记本大体分为三类:轻薄本(商务本)、性能本、游戏本,这三类的性能从低到高排列。这三个类型的笔记本在不考虑后期专研哪个方向的情况下,都可以拿来学C语言。假如跟我一样做嵌入式开发的,需要经常用到开发板,那建议选择性能本或者游戏本,因为现在很多轻薄本都采用雷电接口,没有现成的USB可以,还需要买扩展坞(目前扩展坞一分钱一分货,性能好的都不便宜)来扩展接口,不如性能本和游戏本方便。再考虑到便携性的话,就选择性能本吧,用过游戏本的同学都知道,游戏本性能最强,但也是很大很重的存在,而且续航能力不强,还不如直接用PC。
具体配置上,CPU买新不买旧,主频4.0GHz以上吧,毕竟考虑到以后还有别的用途,干脆一步到位。内存16GB以上,硬盘上固态,至少512GB,读写速度更快。显卡方面也许不用太高级,不打游戏的同学选用集成显卡都行(除非图像处理用的多)。其他的咱就不做具体推荐了,基本就是按需购买了。
至于软件,作为初学者来说,当然是越简单越好。现在支持C语言的IDE(集成开发环境)也是五花八门,比如Visual Studio、Dev-C++、Code::Blocks等,都是很常见的IDE。可能有很多人会推荐Visual Studio,毕竟它是Windows下的标准IDE,实际开发中大家也都在使用。不过于我个人而言,我比较推荐Dev-C++,因为VS其实对新手还是有一些复杂,用习惯了就没事。Dev-C++则是一款免费开源的IDE,内嵌GCC编译器(Linux GCC 编译器的 Windows 移植版)。Dev-C++的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能比起VS来说就很弱了。
不过这也只是我个人在初学的时候用的,我后面都是用Notepad++写程序,在配合MinGW完成编译。而更多时候是在Linux的环境下,也不需要用到IDE。
这里再提一下,如果是用苹果笔记本的同学,在Mac OS下推荐使用Apple官方开发的Xcode。另外,Visual Studio也推出了Mac版本,已经习惯了Visual Studio的同学可以高兴一把。 |
|