博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
想做一个合格的C语言程序员,从这篇文章开始
阅读量:5944 次
发布时间:2019-06-19

本文共 3693 字,大约阅读时间需要 12 分钟。

软件行业发展趋势十分快,大学的教育基本都跟上实际的社会发展需求。如果你所属的大学还在指定大家采用谭浩强的教科书,或采用VC6.0来教大家上机实验,那你不妨看一看这篇文章,在这里有一点建议可以帮助你不会脱离社会过远。

充分考虑这是1个过来人觉得很基础,并且对于新手又感觉困难重重的难题,我想要是这本文要想写得不让你认为专业名词扎堆,內容高深莫测,读过还是不知所云,那有效的方法或许是,让我们通过沟通交流的形式把整个「c语言应当怎样学」的问題由小及大的展开,慢慢来谈。

在开始之前,让我们先来做1个小测试。

timg_24_

一、小测试,你做好准备好學習c语言了吗?

  1. 你可否听说过二进制数,他们是怎么实现运算的?(基本的数的进制专业知识)
  2. 你可以讲出1个最小的操作系统由哪几个部分组成吗?(基本的电脑构造小知识)
  3. 电脑是怎么存放图像的? (数字化工作原理)

上边这3个问題,能作答的同学举手。如果你举手了,那麼让我们进到下环节的探讨,要不然,我将对你说,你现在最重要的事情,是赶快找一本《计算机科学导论》把预备专业知识填补好。

因为——

c语言归根结底是一门以内存为中心的计算机语言,你能否学懂它,我觉得很大层度上并不是取决于你智力高低,而是你是否具有扎实的电脑构造、储存、与运算工作原理这方面的专业知识!!

在这,我想要特别强调,一切新专业知识的學習全部都是有一定的前提的。c语言學習的前提就是,对操作系统要有个整体的,科学的基本认知。 脱离了这个基本认知,任何都很艰难。

因此,一些同学学不会c语言,并不是因为他们智力不好,只是因为他们都没有准备好。

我花时间写这一篇文章来给大家讲c语言的学习,当然是期望大家真正的学好、学懂c语言,并能够真的感覺到它的作用,因此抱歉我不想像培训学校那般,对你说“零基础”就可以开始学。但如果你确实按照我说的去做,那么至少从现在起,你确实是开始有点“学院派”的认真了。

在这一篇文章的末尾,我推荐了一本曾经读过的《计算机科学导论》。这一本书可以说是我的启蒙书,我读过,真心实意认为好,所以强烈推荐给需要的同学。

好啦,接着让我们进到c语言的學習过程。

aa64034f78f0f736606959460255b319eac413e5

二、学c语言究竟学些什么东西—— 「语法」和「函数库」

c语言學習的核心,是要先搞搞清楚,学c语言究竟是在学些什么?

我如此一问,有的同学就要翻开教科书,指着目录说,我知道我知道,有变量,数据类型,循环语句,函数,哦哦哦,还有指针等等!

很遗憾,如果你觉得學習c语言就是學習这些東西,那你得马上改正一下看法,要不然接下去的学习会困难重重。因为曾经的我就是这样掉到坑里的,这种狭隘的思想观点让我浪费了很多的时间去學習琐碎的细节,又让我迟迟没法触及到更重要的专业知识,結果是眼高手低——知晓很多其他人不知道的没用专业知识,可是又写出不来什么真正像样的软件程序来。

说白了「语法」,就是新手入门教科书里最主要解读的內容。也就是那些所谓的变量、数据类型、分支判断、循环、函数、指针等等。

这些內容比效枯燥乏味,只是好消息是这些內容并不难,全部都是一些格式化的东西。如果你多练习,就会自动的刻在你的脑中,变为某种无意识的习惯。

可是 「语法」自身其实没有什么用。是因为它就是一种格式规范,你学得再好,也不可以正确引导你写出厉害的软件程序。因为在编程设计中,事实上最关键的一部分还是在于其 「函数库」部分。

u_813955827_1098671323_fm_11_gp_0

什么是 「函数库」?

简单来说,函数库就是别人编写好的C函数,直接提供给你用,你只要调用里面的函数,就能实现一定的功能。例如 printf() 函数,你肯定知道,只要调用这个函数,你就能够在那个黑糊糊的窗口里显示一段文字。你并不明白 printf() 的内部工作原理,但是你知道你只要按照说明去调用,就能够实现对应的功能。

这就是函数库——别人写好的,打包送到你面前,你可以自由调用来做各种各样的事情的函数集合。

我来说几个来自函数库的函数,例如 CreateWindowEx() 函数可以用来创建一个窗体(这个函数由微软提供),例如 GaussianBlur() 函数可以用来对一个图像进行高斯模糊处理(这个函数由 OpenCV 提供),再比如 e链接 函数可以创建一个 HTTP 服务程序(这个函数由 libevent 提供)……

学习从来不是一个人的事情,要有个相互监督的伙伴,工作需要学习C/C++或者有兴趣学习C/C++的伙伴可以加小编自己的学习群773649038,一起学习,一起进步,还有免费学习资料可以给各位伙伴

其他还有什么库函数?太多了。从控制网络通信,到截取视频画面并分析其中的人脸位置,到加解密本地文件,甚至包括微信收发消息,抓取淘宝商品信息……库函数的数量和有用程度远远超乎大家的想象。

诶?你从来没听说过还有这些东西?课本里也没提到?

那是因为你看的是入门教材,着重讲解语法,顺带提到了少量的 C 语言自带的库函数而已。事实上 C 语言包含的库函数本身就有不少,但是更多更强大的还是许多第三方库函数,例如我上面提到的这些。

重点是在于,我想告诉你,库函数才是你学习C语言并将其应用于实际的关键!!

学会调用别人的库函数,甚至写出自己的库函数,都是极其重要的。因为一个函数,本质上就是一个功能单位。你拥有的基础设施越多,你的发挥空间越大。道理就是这么简单。这就是我需要向大家强调的第二个观点,要想写出实用的C程序,一大关键就是研究并学会使用各种库函数。

你看见隔壁王二写了个三维程序能让一个彩色的立方体在空中旋转?快找 OpenGL 库函数来用。什么?刘大宝写了个网络软件能在局域网里聊天?快找 Socket 库来用。

看见了吗?库函数有多重要?

但是,函数库的学习并不是孤立的。许多库函数背后需要一定的领域知识支撑。同样如我第一个观点所述,需要预备知识。学懂一个函数库,代表的不仅仅是明白如何调用那么简单, 而更反映了我们对一个特定领域——网络、数字图像、密码学、操作系统等的认识。

timg_6_

三、基本的学习过程与一般规律

如我前面所述,C语言学习主要是以语法入门,然后到函数库。再具体一些来说,包括以下阶段:

  1. 学习基础语法
  2. 学习简单的少数几个C语言自带的函数
  3. 学习一些程序设计的基础知识(数据结构,算法)
  4. 学习更多更强大的C语言自带的函数
  5. 学习一些特定应用领域的基本理论知识(操作系统,数据库,网络,图像……)
  6. 应用上一阶段学习的到知识进一步学习其他人提供的函数库(网络处理、操作系统管理、图像、密码学等等)

对于本科阶段的同学来说,着重学好1-4,有选择的学习一下5-6,做一些小作品出来,就已经非常非常不错了。这就是一般的学习规律。说得很简短,但是要做到真的很不容易。

timg_3_

四、书籍推荐

基础(C语言入门,初学,编程基础)

  1. 《C语言程序设计:现代方法》(第2版)(C Programming: A Modern Approach, 2nd Edition, K.N.King)
  2. 《深入理解计算机系统》(修订版或第2版)(Computer Systems: A Programmer's Perspective, Randal E. Bryant et al),阅读建议
  3. 《C语言程序设计》(第2版)(The C Programming Language, Brian W. Kernighan & Dennis M. Ritchie)
  4. 《程序员修炼之道》(The Pragmatic Programmer: From Journeyman to master, Andy Hunt & Dave Thomas)

-

内核/驱动

  1. 《Linux内核设计与实现》(第3版)(Linux Kernel Development, 3rd Edition, Robert Love)
  2. 《Linux设备驱动程序》(第3版)(Linux Device Driver, 3rd Edition, Jonathan Corbet et al)
  3. 《深入Linux内核架构》(Professional Linux Kernel Architecture, Wolfgang Mauerer)

应用

  1. 《UNIX环境高级编程》(Advanced Programming in the UNIX Environment, W. Richard Stevens)
  2. 《UNIX网络编程》(Unix Network Programming, W. Richard Stevens)

-

进阶

  1. 《C陷阱与缺陷》(C Traps and Pitfalls, Andrew Koenig)
  2. 《C专家编程》(Expert C Programming, Peter van der Linden)
  3. 《ARM嵌入式系统开发:软件设计与优化》(ARM System Developer's Guide: Designing and Optimizing System Software, Andrew Sloss et al)

-

如有侵权,请联系删除

转载地址:http://edzxx.baihongyu.com/

你可能感兴趣的文章
关于self.用法的一些总结
查看>>
UIView翻译 (参考)
查看>>
Android Display buffer_handle_t的定义
查看>>
SSH详解
查看>>
ASM概述
查看>>
【290】Python 函数
查看>>
godaddy域名转发(域名跳转)设置教程
查看>>
silverlight学习布局之:布局stackpanel
查看>>
理解并自定义HttpHandler
查看>>
从前后端分离到GraphQL,携程如何用Node实现?\n
查看>>
JavaScript标准库系列——RegExp对象(三)
查看>>
Linux Namespace系列(09):利用Namespace创建一个简单可用的容器
查看>>
关于缓存命中率的几个关键问题!
查看>>
oracle中create table with as和insert into with as语句
查看>>
kafka连接异常
查看>>
11g废弃的Hint - BYPASS_UJVC
查看>>
为什么工业控制系统需要安全防护?
查看>>
Mongodb部署记录[3]-主从搭建
查看>>
hive sql操作
查看>>
tomcat 深度优化
查看>>