如何学好C 和后端开发(文末赠8本书)
时间:2021-09-03 10:07:59
手机看文章
扫描二维码
随时随地手机看文章
[导读]不论是学Java还是学C,我们的目的都是为了进BAT等大厂。众所周知C难学难精,Java难道不香吗?我们为什么还要学习C折磨自己?上面的代码就是C,不论真伪,C确实不易维护,能看懂别人写的C代码,着实有点困难。Java其实也挺难学的,它只是跟C难的不在一个点上,C难的是语言本身,...
不论是学Java还是学C ,我们的目的都是为了进BAT等大厂。
众所周知C 难学难精,Java难道不香吗?我们为什么还要学习C 折磨自己?上面的代码就是C ,不论真伪,C 确实不易维护,能看懂别人写的C 代码,着实有点困难。Java其实也挺难学的,它只是跟C 难的不在一个点上,C 难的是语言本身,Java难的是各种框架、库。既然都难,那我们为什么不选个性能王者?要知道,3种主流的操作系统Windows、Linux、Unix内核部分也都是用C 和汇编写的。C 的难其实也有好处,市场上这类人才很稀缺。Java虽说也是需求量不小,但想找到个不错的Java开发者还是可以的,反观C ,就难了,这恰恰就是我们的增值点。看看各大厂在招聘C 研发、开发工程师时给出的薪资就能感觉到。01C/C 当前的应用领域C 在传统上很强势的领域中依然具有统治地位,譬如服务器端开发、游戏开发、嵌入式软件开发、基础设施和超大型软件应用领域。
但是,C 的整套语法不具备“功能完备性”,在大多数情况下,单纯地使用其本身提供的功能无法创建出任何有意义的程序,还必须借助操作系统API来实现。例如,C 本身不直接提供网络通信功能的SDK,必须借助操作系统提供的套接字API才能实现网络通信;而对于Java来说,JDK自带的java.net、java.io等包则提供了完整的网络通信功能。所以,熟悉操作系统相关原理和API是用好C 的前提,这也是C 难学、对新手不友好的主要原因之一。不过,随着C 标准和版本的不断迭代,这种现状正在改变:在C 标准库中引入了越来越多的功能,避免直接调用操作系统API。不管怎样,应用直接使用操作系统API,程序执行效率高,控制力度大,开发能力仅仅限制于操作系统本身,这是 C 的优势之一。比如对于 Java,假设操作系统提供了某个功能,但Java虚拟机不提供该功能,则开发人员也无法使用该功能。编程大师Charles Petzold曾说过,操作系统是一个非常复杂的系统,在API之上加一层编程语言并不能消除其复杂性,最多将复杂性隐藏起来而已,而懂得系统API能让我们更快地挣脱困境。 03如何学好C 和后端开发学好 C/C 体系的技术栈必须结合操作系统的运行机制来学习。展开来说,就是你必须掌握操作系统层面的几大基础知识:
如果已打好基础,就可以找一些高质量的开源项目去实战。最好找一些没有复杂业务的开源项目,或者是自己熟悉其业务的开源项目(如IM系统)。如果不熟悉其业务,那么不但要学习其业务(软件功能),还要学习其源码,最终两者难以兼顾。因此,在学习这些项目之前,应该先确定自己的学习目的。如果学习目的是学习和借鉴这款软件的架构设计,那么建议先进行整体把握,不要一开始就迷失在细枝末节中,这叫作“粗读”。如果学习目的是学习开源软件在一些细节上的处理方法,那么可以有针对性地阅读自己感兴趣的模块,深入每一行代码。当然,学习适合自己当前阶段的项目源码才是最好的。学习的过程一般是接触、熟悉、模仿、创造。不管对什么开源项目,在没有任何思路或者解决方案时,我们都应该先接触、熟悉、不断模仿,做到至少心中有一套对某场景的解决方案,再来谈创新、批判及改造。总之,C 是一门讲究深度的编程语言,其“深度”不体现在掌握多少C 语法,而在于是否熟悉所写的C 代码背后的系统原理,这是需要长期积累的,当然,一旦学成,就可以快速学习其他编程语言和框架。
说了这么多,再给大家强烈推荐一本学习C 的新书《C 服务器开发精髓》,作者是有着多年高性能高并发服务开发经验的张远龙老师。这本书正是一本可以帮你成为 C/C 技术栈熟练工的书。听说这本书京东还没到货就已经预售出2000册,到货直接登顶京东计算机图书TOP1。我也和电子工业出版社杨老师给大家申请到了3本赠书,大家可以通过XXXXXX参与抽奖。当然也一并给大家申请了5折包邮的粉丝福利价!原价168元,现在半价84元直接入手!要知道这可是有700多页干货的大部头,等不及的朋友可以扫码或者点击阅读原文直接下单。
最后如何送书
此次朋友圈点赞送书,全靠运气,2021 年 8 月21 号晚 8 点朋友圈点赞顺序为 8、38、68、98、128、158、188、218 的 8 位小伙伴各送一本《C 服务器开发精髓》。添加下面微信好友,参加送书活动。
众所周知C 难学难精,Java难道不香吗?我们为什么还要学习C 折磨自己?上面的代码就是C ,不论真伪,C 确实不易维护,能看懂别人写的C 代码,着实有点困难。Java其实也挺难学的,它只是跟C 难的不在一个点上,C 难的是语言本身,Java难的是各种框架、库。既然都难,那我们为什么不选个性能王者?要知道,3种主流的操作系统Windows、Linux、Unix内核部分也都是用C 和汇编写的。C 的难其实也有好处,市场上这类人才很稀缺。Java虽说也是需求量不小,但想找到个不错的Java开发者还是可以的,反观C ,就难了,这恰恰就是我们的增值点。看看各大厂在招聘C 研发、开发工程师时给出的薪资就能感觉到。01C/C 当前的应用领域C 在传统上很强势的领域中依然具有统治地位,譬如服务器端开发、游戏开发、嵌入式软件开发、基础设施和超大型软件应用领域。
1. 我们目前见到的各种桌面应用软件,尤其是Windows桌面软件,例如QQ、安全类杀毒类软件、浏览器等。2. 一些基础软件和高级语言的运行时环境,例如大型数据库软件、Java虚拟机、C#的CLR、Python编译器和运行时环境等。3. 业务型应用软件的后台,例如大型网络游戏的服务端和一些企业内部的应用系统等。通常情况下,我们可以将C 看作C语言的一个超集。C 虽然从功能层面来看,离C语言越来越“远”,但从语法层面来看,其大多数语法与C语言基本一致。对于C 面向对象的特性,如果仔细探究的话,我们会发现C 类方法的具体语法还是C语言的过程式语法,虽然这种现状正在不断改变。C语言目前主要用于操作系统类偏底层的应用开发,比如Windows、Linux这样的大型商业操作系统,以及嵌入式操作系统、嵌入式设备。有些开源软件也会选择C语言进行开发,主要是考虑程序执行效率和生成的可执行文件的体积(C代码生成的可执行文件体积相对较小),当然,其中不乏一些历史技术选型的原因,比如Redis、libevent、Nginx等。在将高级语言翻译成机器二进制码时,C 编译器生成了大量的额外机器码,而这种机器码相对于C语言来说不是必需的。例如,对于一个C 类的实例方法,编译器在生成这个方法的机器码时,会将函数的第1个参数设置为对象的this指针地址,以此来实现对象与函数的绑定。正因如此,许多开发者都会优化和调整编译器生成的汇编代码。 02C 与操作系统虽然Java、Python等的SDK或运行时环境最终也会调用操作系统API,但其自带的SDK或者运行时环境都提供了常见的操作系统功能。而C 的运行时环境一般是操作系统自身,因此C 是离操作系统更近的一种编程语言,执行效率更高。
但是,C 的整套语法不具备“功能完备性”,在大多数情况下,单纯地使用其本身提供的功能无法创建出任何有意义的程序,还必须借助操作系统API来实现。例如,C 本身不直接提供网络通信功能的SDK,必须借助操作系统提供的套接字API才能实现网络通信;而对于Java来说,JDK自带的java.net、java.io等包则提供了完整的网络通信功能。所以,熟悉操作系统相关原理和API是用好C 的前提,这也是C 难学、对新手不友好的主要原因之一。不过,随着C 标准和版本的不断迭代,这种现状正在改变:在C 标准库中引入了越来越多的功能,避免直接调用操作系统API。不管怎样,应用直接使用操作系统API,程序执行效率高,控制力度大,开发能力仅仅限制于操作系统本身,这是 C 的优势之一。比如对于 Java,假设操作系统提供了某个功能,但Java虚拟机不提供该功能,则开发人员也无法使用该功能。编程大师Charles Petzold曾说过,操作系统是一个非常复杂的系统,在API之上加一层编程语言并不能消除其复杂性,最多将复杂性隐藏起来而已,而懂得系统API能让我们更快地挣脱困境。 03如何学好C 和后端开发学好 C/C 体系的技术栈必须结合操作系统的运行机制来学习。展开来说,就是你必须掌握操作系统层面的几大基础知识:
首先,应该打好基础。我们要熟练使用C ,还要结合具体的操作系统学习C ,熟悉某操作系统的API函数,以及与系统API关联的各类技术,比如各种进程与线程函数、多线程资源同步函数、文件操作函数、系统时间函数、内存分配与管理函数、网络编程、PE或ELF文件的编译、链接原理等。
- 第一个基础知识是汇编。
- 第二个基础知识是编译、链接与运行时体系知识。
- 第三个基础知识是狭义的操作系统原理。
- 第四个基础知识是多线程知识。
- 第五个是网络编程,直白地说就是 Socket 编程。
如果已打好基础,就可以找一些高质量的开源项目去实战。最好找一些没有复杂业务的开源项目,或者是自己熟悉其业务的开源项目(如IM系统)。如果不熟悉其业务,那么不但要学习其业务(软件功能),还要学习其源码,最终两者难以兼顾。因此,在学习这些项目之前,应该先确定自己的学习目的。如果学习目的是学习和借鉴这款软件的架构设计,那么建议先进行整体把握,不要一开始就迷失在细枝末节中,这叫作“粗读”。如果学习目的是学习开源软件在一些细节上的处理方法,那么可以有针对性地阅读自己感兴趣的模块,深入每一行代码。当然,学习适合自己当前阶段的项目源码才是最好的。学习的过程一般是接触、熟悉、模仿、创造。不管对什么开源项目,在没有任何思路或者解决方案时,我们都应该先接触、熟悉、不断模仿,做到至少心中有一套对某场景的解决方案,再来谈创新、批判及改造。总之,C 是一门讲究深度的编程语言,其“深度”不体现在掌握多少C 语法,而在于是否熟悉所写的C 代码背后的系统原理,这是需要长期积累的,当然,一旦学成,就可以快速学习其他编程语言和框架。
说了这么多,再给大家强烈推荐一本学习C 的新书《C 服务器开发精髓》,作者是有着多年高性能高并发服务开发经验的张远龙老师。这本书正是一本可以帮你成为 C/C 技术栈熟练工的书。听说这本书京东还没到货就已经预售出2000册,到货直接登顶京东计算机图书TOP1。我也和电子工业出版社杨老师给大家申请到了3本赠书,大家可以通过XXXXXX参与抽奖。当然也一并给大家申请了5折包邮的粉丝福利价!原价168元,现在半价84元直接入手!要知道这可是有700多页干货的大部头,等不及的朋友可以扫码或者点击阅读原文直接下单。
最后如何送书
此次朋友圈点赞送书,全靠运气,2021 年 8 月21 号晚 8 点朋友圈点赞顺序为 8、38、68、98、128、158、188、218 的 8 位小伙伴各送一本《C 服务器开发精髓》。添加下面微信好友,参加送书活动。