计算机行业发展非常快,大学里的教育基本都跟不上实际的社会需求。如果你所在的学校还在指定大家使用谭浩强的教材,或使用VC6.0来教大家上机实验,那你不妨看看本文,这里有一些建议可以帮助你不会脱离社会太远。

考虑到这是一个过来人感觉很基础,但是对于初学者又觉得困难重重的问题,我想如果这篇文章要想写得不让你觉得专业名词扎堆,内容高深莫测,读完还是不知所云,那最好的办法也许是,我们通过沟通的方式把整个「C语言应该怎么学」的问题由小及大的展开,慢慢来谈。

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

一、小测试,你准备好学习C语言了吗?

  1. 你是否听说过二进制数,他们是如何进行运算的?(基本的数的进制知识)

  2. 你能说出一个最小的计算机系统由哪些部分构成吗?(基本的计算机结构知识)

  3. 计算机是如何存储图像的? (数字化原理)

上面这三个问题,能回答的同学举手。如果你举手了,那么我们进入下阶段的讨论,否则,我将告诉你,你现在最重要的事情,是赶紧找一本《计算机科学导论》把预备知识补充好。

因为——

C语言说到底是一门以内存为中心的编程语言,你能不能学懂它,其实很大程度上不是取决于你智商高低,而是你是否拥有扎实的计算机结构、存储、运算原理方面的知识!!

在这里,我想强调,任何新知识的学习都是有一定的前提条件的。C语言学习的前提条件就是,对计算机系统要有一个整体的,科学的基础认识。 脱离了这个基础认识,一切都很困难。

所以,有些同学学不会C语言,不是因为他们智商不行,而是因为他们没有准备好。

我花时间写这篇文章来给大家讲C语言的学习,当然是希望大家真正的学会、学懂C语言,并能够真正感觉到它的用处,所以很抱歉我不会像培训机构那样,告诉你“零基础”就能够开始学。但如果你真的按照我说的去做,那么至少从现在起,你确实是开始有点“学院派”的认真了。

在这篇文章的最后,我推荐了一本我曾经读过的《计算机科学导论》。这本书可以说是我的启蒙书,我读过,真心觉得好,所以推荐给需要的同学。

好了,接下来我们进入C语言的学习过程。

二、学C语言到底学些什么—— 「语法」和「函数库」

C语言学习的关键,是要先搞明白,学C语言到底是在学些什么?

我这么一问,有的同学就要翻开课本,指着目录说,我知道我知道,有变量,数据类型,循环语句,函数,哦哦哦,还有指针等等!

很遗憾,如果你以为学习C语言就是学习这些东西,那你得赶紧纠正一下看法,否则接下来的学习会困难重重。因为我曾经就是这么掉到坑里的,这种狭隘的观点让我浪费了大量的时间去学习琐碎的细节,又让我迟迟不能接触到更重要的知识,结果是眼高手低——知道许多别人不知道的无用知识,但是又写不出什么真正像样的程序来。

所谓「语法」,就是入门教材里最着重讲解的内容。也就是那些所谓的变量、数据类型、分支判断、循环、函数、指针等等。

这些内容比较枯燥,但是好消息是这些内容并不难,都是一些格式化的东西。只要你多练习,就会自动的刻在你的脑子里,成为一种下意识的习惯。

但是 「语法」本身其实没什么用。因为它只是一种格式规范,你学得再好,也不能引导你写出厉害的程序。因为在软件设计中,实际上最核心的部分还是在于其 「函数库」部分。

​关于怎么快速学C/C++游戏编程,有什么方法,这个问题,想必大家都已经心中有数了,打算深入了解这个行业的朋友,可以加下小编上面的C/C++游戏编程学习裙【 玖四捌,玖伍四,四捌四】,不管你是小白还是大牛,小编我都欢迎,不定期分享干货,包括小编自己整理的一份2018最新的C/C++资料和0基础入门教程,欢迎初学和进阶中的小伙伴。

什么是 「函数库」?

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. 学习基础语法

  2. 学习简单的少数几个C语言自带的函数

  3. 学习一些程序设计的基础知识(数据结构,算法)

  4. 学习更多更强大的C语言自带的函数

  5. 学习一些特定应用领域的基本理论知识(操作系统,数据库,网络,图像……)

  6. 应用上一阶段学习的到知识进一步学习其他人提供的函数库(网络处理、操作系统管理、图像、密码学等等)

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

四、书籍推荐

基础(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)

你们在学习困难中遇到的问题是什么呢?欢迎提问,抽空给大家解答!

思路不对努力白费!0基础学好C语言编程,必须掌握的学习思路!相关推荐

  1. 选择大于努力!0基础学好C语言编程,首先要掌握的是什么?

    互联网时代更新换代太快,大学的书本,教育根本跟不上,所以如何用更少的时间掌握最前端的技术,方法很重要. 考虑到这是一个过来人感觉很基础,但是对于初学者又觉得困难重重的问题,我想如果这篇文章要想写得不让 ...

  2. 计算机二级密码不正确的是什么情况,方法不对努力白费:计算机二级备考正确方向是什么...

    原标题:方法不对努力白费:计算机二级备考正确方向是什么 很多人说计算机二级考试本身并不难,然而考了几次都没过的朋友常常存在,通过网校报课通过二级考试的学员"小秋子"一句话戳中要害: ...

  3. 黑马程序员:Java基础总结----Java语言编程规范

       黑马程序员:Java基础总结        Java语言编程规范:参考自SUN公司文档  ASP.Net+Android+IO开发..Net培训.期待与您交流!  I.   排版规范 A.  规 ...

  4. 零基础学Java语言---编程题

    零基础学Java语言-编程题 注意:没有上机实际测过,代码仅供参考 1.温度转换 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示 ...

  5. 零基础新手自学Python编程教程入门精通学习资料网站大全

    零基础新手自学Python编程教程入门精通学习资料网站大全 今天说下关于Python的一些普及知识,以及学习资料,这一节我来跟大家分享下. 1 为什么要学习Python? 1 Python是一个脚本语 ...

  6. 零基础想学好C语言编程,首先要掌握的是正确的学习思路!

    如果新手要学习编程,一些前辈都会建议从Python.PHP.Java开始学. 不过,有些程序员是直接从C语言强势入门编程的. 那么,如何学习C语言呢?下面提供4种入门C语言的方法: 0.刷题 绝大多数 ...

  7. C语言视频教程免费分享,0基础学C语言

    C语言是一种通用的.过程式的编程语言,广泛用于系统与应用软件的开发.作为计算机编程的基础语言,长期以来它一直是编程爱好者追捧而又比较难学的语言.C语言是一种计算机程序设计语言,它既具有高级语言的特点, ...

  8. python闯关训练营怎么样3.0_【新升级】3周!0基础Python量化投资!闯关式学习打卡,解锁新技能!...

    2020年热度最高的编程语言是谁?Python! Python应用方向很多,包括数据分析.爬虫.开发.运维.自动化测试,不过Python+金融还有一个有趣的应用方向:量化投资. 非金融背景的同学要理解 ...

  9. c语言编程基础心得,C语言编程学习心得体会

    C语言是在国内外广泛使用的一种计算机语言.其语言功能丰富.表达能力强.使用灵活方便.既具有高级语言的优点,又具有低级语言的许多特点,适合编写系统软件.本文是C语言编程学习心得,希望对大家有帮助. C语 ...

最新文章

  1. Yii学习笔记【2】
  2. python语法中infile语句_浅谈pymysql查询语句中带有in时传递参数的问题
  3. java float内存结构_Java后端开发岗必备技能:Java并发中的内存模型
  4. OpenGL textures纹理的实例
  5. [收藏]上班族的真实写照
  6. python中的数据分析库有哪些_全网最全数据分析师干货-python篇
  7. android:Read-only file system解决
  8. Mac 下利用 FileMerge 进行代码比较、合并
  9. 数字图像处理-知识点总结
  10. python 生成器、列表/字典/集合解析式区别
  11. 云服务器是widows7系统,云服务器win7系统
  12. word研究报告排版要领
  13. pygame小游戏开发 - 冰雪英雄会
  14. 班章管家理财入门基础常识有什么?理财产品怎样买最合适
  15. STM32单片机控制A1333角度传感器磁编码器
  16. 《嵌入式系统 - RT-Thread开发笔记》手把手教你使用RT-Thread制作GD32 RISC-V系列BSP
  17. REVV Racing 联手 SuperPlastic,为您带来 Chunder 迷宫锦标赛
  18. arm服务器虚拟x86,x86服务器与arm
  19. 【C语言】之实现多达50位数相乘的运算
  20. 调整计算机启动顺序,电脑双系统如何修改第一启动项???

热门文章

  1. php 百度收录api_PHP查询百度Site收录接口源码
  2. 最新Android面试题整理 5月
  3. hugo 导入图片,两种方式
  4. 【生活小技巧】想保存闪照?怎么破?
  5. modeller建模(单模板建模、多模板建模)
  6. UML图详解(四)对象图
  7. [软工]概要设计说明书(GB8567-88)
  8. 【机房】概要设计说明书
  9. TCP连接中seq和ack是什么东西呢
  10. Hexo博客技巧:添加自定义html页面