目前从事Linux C/C++开发的程序员很多,尤其是百度、腾讯等,他们的网站流量巨大,业务逻辑复杂,会遇到很多瓶颈。 他们需要开发底层服务以提高程序效率并快速响应用户请求。
这些公司的Linux C/C++开发属于底层开发(后台服务、算法支持等),而不是应用开发。 编写的程序在后台运行,没有界面,不直接面向用户。
从事应用开发(尤其是网站开发)的程序员,在工作的前几年得到了飞速的提升,工资也涨得很快。 不知不觉,他们的年薪已经达到了30W。 但是这个时候,很多人都会遇到一个瓶颈期。 如果他们不成为领导者,他们的工资将增长缓慢。
习惯于自我提升的程序员怎么能停滞不前的工资呢? 如果他们不进步,他们就会倒退。 领导力并不适合所有人。
可以切换到底层开发! ! ! 几年的应用开发经验,对用户、业务、交互等都有很好的理解,很容易转入底层开发。 也知道应用层的瓶颈在哪里,如何优化底层。
底层开发的薪水高于应用开发。 再过几年,年薪五六十万不成问题。
当然,以上都是勤劳聪明的程序员,还有很多程序员工作十几年还在做应用层开发。
那么,这个方向适合初学者吗? 初学者绝对可以学习并找到相关的工作。 但是,如果你没有应用开发的经验,我觉得只学底层开发是很枯燥的,因为你做不出一个有趣的东西,天天面对一堆应用。 理论上,他迟早要吐血。
初学者可以给自己定一个目标,做出一个这样的软件,可以有无限的优化空间。 比如一开始他们只是用Qt、GTK+、Fltk等GUI库搭建接口,不能收发信息。 添加一对一聊天功能,可以在这个过程中学习()。 支持多人同时聊天,每添加一个对话,就开一个线程。 在这个过程中,可以学到多线程编程。 提升服务器的性能,让单台服务器可以抵抗10000人同时聊天。 这时候可能需要优化程序,需要注意线程创建和调度的开销,注意通信过程中的缓存。 增加群聊功能,使服务器可以向多个用户发送消息。 这时候,你对沟通的理解会更加深入。 最终可以将多台服务器组合起来,抵抗几十万甚至上百万的人聊天。
您可以自己或团队完成此项目。 在这个过程中,你将全方位学习Linux C/C++编程。
总之,初学者要让学习过程变得有趣,不要天天研究操作系统、数据结构、算法、内存、线程过程、通信等理论,一定要实践。
学习路径
上面说了Linux服务器开发的前景和学习方法,接下来说说学习路线。
1) 语言与工具
C语言和C++是传统的Linux开发语言,需要掌握。 除了基本的语法,你还需要玩转一套工具链。
经典组合是GCC(编译器)+Make/(构建中大型项目必备工具)+GBD(调试器)+(内存分析工具)+Vim/EMACS/Gedit/Text(编辑器)。
现在越来越多的新项目是使用 Clang/LLVM 构建的。 比如NDK已经放弃了GCC,全面转向Clang。
由于C++语法变态,奇*巧*淫*技无处不在,而且没有内存回收机制,近些年彻底爆火,很多底层项目开始转向C++。 嗯,这是一件好事。 作为《C++教程》的作者,我很反感,C++这种垃圾语言早该换掉了。
初学者不要贪心,先学好C/C++语言,掌握GCC、Clang/LLVM等以后省。
2)数据结构与算法
只需学习基础知识并理解概念。 许多库已经封装了常用的数据结构和算法。 在实际开发中不需要从头开始,所以不要深陷其中。 算法是一个无底洞,会吞噬你。 记住,以后有需要可以复习,不需要从头理解。
3)操作系统
除了基本的Linux操作外,还需要了解一些常用的命令; 当然这不是重点,只要你经常使用Linux操作系统,就会习惯的。
内存(虚拟地址空间、内存分配策略)+进程线程(进程通信、线程调度、死锁)+文件系统+输入输出+中断等是重点。 这些都是理论,必须结合实际。
4)通讯()
在服务器上开发,通信是必不可少的,也是重中之重。 除了了解TCP/IP协议族,还需要学习编程,理论联系实际。
ACE、Libev等一两个著名的网络库也要掌握。 毕竟在实际开发中是不可能直接调用Linux API的。 建库提高效率很有必要。
5)接口库
当然在服务器领域一般不需要接口,但是掌握一个接口库可以让你做出一个好玩的软件,学以致用,增加兴趣。
Linux下常用的界面库有Qt、GTK等,其中Qt是老大。
从事Linux开发,操作系统原理和通信是重点,也是最难学的部分。 这是你踏入Linux开发大门的标志。 不学这些,就是耍流氓。
如果你想在你的程序员生涯中取得更高的成就,C/C++是一门编程语言,它不仅可以增强你的思维能力,还可以为编程打下坚实的基础。 如果你想做软件开发,成为一名核心程序员,学好C For C/C++,笔者有一群C/C++程序员(Q世扑:C语言编程学习聚集地(默默成立))如果你觉得它自学C/C++语言比较困难,有兴趣学习或了解C/C++编程的朋友可以进来交流。
2023-06-07
2024-08-13
2023-07-19
2024-03-25
2024-04-28
2023-11-17
2023-12-30
2024-06-17
2023-10-12
2022-10-20