首先,要学习Linux编程,你必须会使用Linux,也就是你必须在命令行环境下生存。生存意味着什么?也就是我给你一台主机,键盘,显示器等,然后给你一张服务器版的Linux系统光盘或者其他安装盘,你就可以使用这个主机了。使用它有什么意义?你平时用你的Windows电脑做什么,你现在还在用这台电脑做什么。新建文件、查看文件、编辑文件、保存文件、复制、移动、删除、打包、解压、上网、下载东西等基本操作你得会。还有就是怎么安装软件,不仅要熟悉apt-get和yum,还有给你源码的软件怎么安装。另外,Linux下的文件系统你一定要熟悉,每个目录是干什么的,目录下的文件是干嘛的,插入一个U盘,这个U盘怎么挂载,你要知道怎么操作文件U盘下。随便看一本书,《鸟哥的Linux私房菜-基础篇》,记得看基础篇,记得自己安装Linux系统和操作,还有一本书是服务器篇,既然想学Linux编程开发,就不用了阅读服务器设置章节。这一步之后,就可以开发了。Linux下的开发,有两种基本语言,C和C++。至于其他人要讲Python、Java、Ruby,我们就不讨论了,因为我们只讨论Linux下的开发。什么是Linux开发?就是使用LinuxAPI进行开发。首先,你必须懂C语言或C++语言。这是丹尼斯的《C程序设计语言》。请注意,这是丹尼斯的。Linux下的程序开发,Linux的API遵循POSIX标准,你可以Google一下什么是POSIX。Linux下程序开发有几个块,文件操作很重要。要知道Linux下万物皆文件,由此可见读写文件的重要性。I/O模型,五大I/O模型,阻塞,非阻塞,多路复用,信号驱动和异步I/O,环环相扣,概念和操作都要慎重考虑,最重要的是多路复用,即,选择、轮询和epoll。这就是你在面试笔试中问的,你需要知道它们的适用范围和它们的优缺点。进程和线程,包括进程和线程的概念和区别,进程和线程的建立,同步,通信,互斥等。网络编程就是socket编程和linux编程。如果你不好好学习,你什么都不知道。您可能需要了解TCP/IP协议。在编程方面,主要有申请socket、bind、listen、accept这几个步骤。熟悉常见的服务器模型,进程池,线程池,多进程,多路复用,最重要的是多路复用,这部分可以只写在服务器上,直接用telnet测试即可。加速?剩下的就是数据库了。这个东西不属于Linux,但是你得知道,不然你什么也做不了。读那个《MySQL必知必会》。当然,如果想更深入,还得找专业书籍仔细阅读。这时候真的可以做点有意思的事情,比如在终端下写一个类似QQ的软件,包括服务端和客户端,慢慢增加并发数,比如可以同时支持5000个。人们在线,文件传输等等。然后学习Qt,熟悉一下图形界面,完全可以把自己终端下的QQ换成图形界面下的QQ。估计到这个时候,你已经差不多在Linux下做像样的开发了。在学习的过程中,相信你已经学会了Makefile的编写、编译、链接等琐碎的事情,你要反思一串串零散的东西才能系统化。接下来再深入一点,为什么这么多人用linux,有什么好处,你得稍微看看内核源码,内核的线程调度,我告诉你,一个链表Linuxkernel足够你上好几节课了。哦,这时候就得把数据结构之类的东西挖出来加强一下是吧?还需要看计算机网络和操作系统的原理?不,把这些东西放在这里是合适的。让您知道它是什么,知道如何编程以及如何做,现在您需要知道为什么不是。在学习的过程中,要不断积累和了解最新的东西,至少要知道一个概念,比如分布式、大数据、云计算、机器学习、计算机视觉、JIT等,形成知识链,这样才不会导致你最后不知道要学什么。有个建议,一定要学Python,一定要学Python,一定要学Python,重要的事情说三遍。可以大大提高你的工作效率,还可以和C/C++这种非常nice的语言结合使用。
