大一如何学习C语言?

做了个小调查,发现使用C语言做第一门编程语言课的大学达到了 90% 以上。

我认为大一先上C语言的核心原因:


▪ 一是语法简单,更加贴近计算机本质的一些东西,学C也不是简单的学语言本身,而是想透过 C 语言去理解一些如寄存器、内存、函数调用、跳转等东西。


▪ 二是为大二、大三阶段的专业课打下一个基础,当然很多同学说我不学C一样可以学操作系统、计网呀。


当然,这些和C没必然关联,只是很多实验你确实不好继续做,除非你只打算看看概念,背背什么是进程、线程。


如何正确的打开C语言?


我认为C语言最为核心的有三块:


▪ 指针


▪ 内存


▪ 系统编程


首先指针和内存是需要在学习C语言过程中就理解、搞定的,推荐两本书:


《C程序设计语言》、《C和指针》


如果你觉得初学看书过于困难,那么可以在职坐标学习C语言线上课程,结合书一起看,相信会理解得更加深刻。


然后,学习完了C语言基本语法后,你会发现似乎只能开发在黑窗口里运行的程序,写不出那些漂亮的 GUI。


确实,C语言本来就不擅长做这些,C语言擅长的是开发系统组件来支撑上层应用。


但是如果你迫切的想做出一些可视化、有趣的东西,那么可以这样做:


找一些C语言的图形库,比如 easyx,借助这些图形库,你完全可以实现一些图形界面的游戏。


继续去学Python、Java 这种语言,然后学习 Web 开发,写写网页。


当然了,如果你对那些可视化的东西没那么大兴趣,甚至还挺喜欢黑窗口的,那么恭喜你,你有成为大佬的潜质。


当你熟悉完C语言基本的语法以后,建议去学习数据结构与算法,用C语言去实现链表、树、二叉树、堆、排序、搜索等等。


推荐看看《算法:C语言实现》这本书。


如果能通过void 指针实现一些泛型数据结构就更棒了,比如标准库里的 qsort 就能支持任意可比较结构体排序。


然后,时间应该很快来到了大二、大三,这时候你应该学习系统编程,什么是系统编程呢,其实就是CSAPP 这本书上所讲授的内容。


系统编程其实就是学习如何用C语言编写出真正可用的软件,比如像 http server、redis 这种,会涉及到:


▪ 如何在 Linux 环境下编程


▪ 系统级接口(system-level interface)究竟是什么


▪ Linux 内核和 C标准库提供了哪些能力


▪ Linux 的系统调用是怎样实现的


▪ 都有哪些系统调用,如何使用


其它诸如mutex、signal、select、epoll、ipc、socket、thread、process(fork)等等


当然,还有一些同学会选择继续学习Java 这种,比如 JVM、多线程、Java Web 等等,这也是没问题的。


但是,相信我,就算你以后不会用到C去编程,利用大学大把的时间去深入学习一些底层的知识。


也是对深入学习Java 有好处的,比如你学 Netty、 Java 的 NIO 最终都要回到 Linux 系统的 epoll、select 上。


系统编程推荐《深入理解计算机系统》、《Unix网络编程》、《Unix高级环境编程》

 


这就是Java、Python 之下的世界,相信 Javaer 都学习过 JVM 的原理,了解过 GC、类加载机制、运行时数据区等知识。


但实际上,JVM 也只是介于操作系统之间的一个中间层。


很多时候JVM、Python 解释器等本身都是需要 Native 本地方法栈去和 OS 打交道的,去和系统调用接口交互。


所以Linux 系统编程对于深入学习编程一定是绕不开(因为很多服务端程序都是运行在Linux上的,所以忽略了Win/Mac


而这是C语言的世界:



所以C的重要性不需要的多说了吧~


不少Java、C#、PHP、Python 程序员工作几年后会遇到瓶颈,有些会回来学习C语言,重拾底层概念,寻求新的突破。


这里不是在否定其它非C程序员就没技术,实际上我本身也不写C,我只是想表达如果你想学习底层机制、操作系统等,请学习C语言。


编程学到一定的时候,你就需要了解底层系统的机制,否则,知其然不知所以然。


真正的高手往往都是有很强的系统性基础知识的,表面的东西永远是肤浅的。


所以利用大学的时间恰恰是打好这些基础的关键时间,等到工作了,大家都是更倾向于学习快速上手业务的技能。


所以,在大学里先学什么语言不重要,你可以先学Python、Java,但是无论如何,如果你想学好 Computer Science,C语言一定绕不开。


也许以后实际工作中你完全没有机会去写C,但是这并没关系,打好了基础,学其它也会学得很快、很透彻。


对于计算机专业的同学,还是建议学好C语言,与其它课程相结合,多懂一点程序背后的实现原理。

获取IT技术知识库

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容