学习 C 语言为什么这么难?

学习 C 语言为什么这么难?

C 语言学习者的第一步怎么这么难?

对于一个大一下只会 C 语言、高数这些理论基础的学生来说,编程只是在一个黑乎乎的命令行窗口 printf 这个 printf 那个,感觉非常 low,提不起任何兴趣——非常正常,引用 codesheep(B 站 Up,我大一时看他的视频对编程逐渐感兴趣)的话,如果你学完语言就能做项目,你就是个天才。

实际上你离一个正式的工程项目还很远:从程序执行到系统生命周期、从代码逻辑到硬件交互、从算法实现到工程实践,你现在还有很大的进步空间,虽然你能做的很少,但你能学的却很多(狗头保命),接下来我将根据目前 C 语言的真实应用场景给你提供一个学习路线。

这是理论上目前的 C 语言应用场景,实际上根据 tiber 榜单,当 C++ 流行度超过 C 语言开始,C++替代 C 语言的趋势就不可逆了,C 语言的部分应用场景逐渐被 C++替代,不过,C 语言在特定领域仍然不可替代。

TIOBE 编程社区指数是编程语言流行度的指标。该指数每月更新一次。排名基于全球技术工程师、课程和第三方供应商的数量。Google、Amazon、Wikipedia、Bing 等超过 20 个流行网站被用于计算排名。需要注意的是,TIOBE 指数并不是关于最佳编程语言或编写代码行数最多的语言。

  • 底层库
    • 操作系统内核开发(Linux/Windows)
    • 嵌入式系统开发(STM32/Arduino)
    • 编译器实现
  • 高性能计算
    • 游戏引擎开发
    • 数据库系统
    • 密码学算法实现
  • 物联网与通信协议
    • 网络协议栈开发(TCP/IP)
    • 蓝牙/WiFi 驱动开发
    • 工业控制系统

C 语言学习为什么感觉困难?实际上 C 语言关键字很少,C 语言标准也非常稳定,你只需要非常短的时间就能够学完 C 语言(的语法),但你要完成一个完整应用(例如数据库、http 服务器)就不得不学习 socket、pthread 等操作系统 API,同理如果要开发嵌入式、计算机图形学、音频处理等领域的相关应用,你也要花费大量时间学习相关领域的基础知识和编程库或者说 API。

学 C 语言的下一步?

实际上学会 C 语言要看你们怎么理解,学会语法,还是或灵活用、举一反三,接下来你有几条路可以走:

第一条路是深入学习计算机相关知识

  1. 数据结构与算法(实际上课表就是这么安排的,大二上)
  2. 计算机网络(我是通信工程的学生,我大二学计网)
  3. 微机原理(大二下)

至于其他 408 的其它四大件,实话实说,我都靠自学,我也在通过学习 Golang、大数据与云原生、计算机视觉等领域对编程逐渐感兴趣,并坚持自学找出路。

结合我自己走过的弯路,我推荐先学习数据结构与算法和计算机网络,无论你怎么未来选什么领域,数据结构都是必不可少的。

至于别人推荐的项目,我劝你还是别了,举个例子,羊哥(codesheep)推荐过的一个 C 语言 JSON 解析库 cjson,除了三年前给了个 star 我就再也没看过,以前是因为我根本不知道 json 是什么,更不知道为什么要 json 解析工具,而现在,我根本也不需要学这个库,有这时间,我不如看看蒋炎岩老师的操作系统。

第二条路就是开始学习自己感兴趣的领域的知识

例如深度学习、大数据、云原生等(这只是我推荐的),不过即使你换领域学习,即使你换语言,C 语言依然无处不在,它总是通过 FFI(外部函数接口)、动态链接库等方式在背后默默支撑着整个技术生态。

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus