如何学习Linux编程

[ 转自知乎:https://www.zhihu.com/question/20730157/answer/82034823]

1. 学习使用Linux系统

首先,要学 Linux 编程,你得会用 Linux,也就是得在命令行环境下生存下来。

什么叫生存下来呢?就是我现在给你一台主机,键盘,显示器啥的,然后给你一个服务器版的 Linux 系统的光盘或者其他什么安装盘, 你去把这台主机用起来。什么叫用起来呢?你平常用 Windows 电脑干啥,你现在还用这台电脑干啥。新建文件,查看文件,编辑文件,保存文件,复制,移动,删除,打包,解压,联网,下载个什么东西啊等等基本操作你得会。还有软件怎么安装,不仅要熟悉 apt-get 和 yum,还有给你源码的软件怎么安装你得会。另外要熟悉 Linux 下的文件系统,每个目录是干啥的,目录下的文件是干嘛的,插入一个U盘,如何挂载这个U盘,操作U盘下的文件你得会啊。

这个看一本书就行了,《鸟哥的Linux私房菜-基础篇》,记得是基础篇,记得安装 Linux 系统自己操作一遍,还有一本是服务器篇,你既然是要学 Linux 编程开发,那就不用看服务器架设篇了。做完这一步,你可以开发了。

2. 学习Linux开发

Linux 下开发,两种基本语言,C 和 C++,至于其他人要说 Python,Java,Ruby 啥的不讨论,因为就讨论 Linux 下的开发,什么是Linux开发呢?就是利用 Linux 的 API 进行开发咯,首先你得会C语言或者C++语言啊,这个去看丹尼斯的《C程序设计语言》。C++的就去看《Essential C++》或者 《C++ Primer》,然后在Linux下的程序开发,Linux 的 API 是遵循 POSIX标准的,自行谷歌什么叫 POSIX。

Linux 下程序开发几大块,文件操作,这个很重要,你要知道 Linux 下的一个思想叫一切皆文件, 可见文件读写多重要了。I/O模型,五大I/O模型,阻塞,非阻塞,复用,信号驱动和异步I/O,环环相扣丝丝相连,概念和操作都要仔细琢磨,最重要的当属复用,就是 select,poll 和 epoll,面试笔试就问这个东西,要知道他们的适用范围和优缺点。

进程和线程,包括进程和线程的概念和区别,进程和线程的建立, 同步,通信,互斥等等。网络编程,就是 socket 编程,Linux编程,这个学不好等于啥都没学,这个估计还得了解一下TCP/IP协议,编程方面主要是那几步,申请 socket,bind,listen,accept 几步,要熟悉种常见的服务器模型,进程池线程池方式的,多进程方式的,复用方式的,最重要的是复用方式的,这部分可以先只写服务器,测试直接用 Telnet就好了,加快速度么。当然在 linux 下编程,shell 一定是少不了的。

其余的就是数据库,这个东西不属于 Linux,但是还得会,要不然啥都做不了,看那本《MySQL必知必会》,当然深入的话还得找本专业的书细细看。这个时候就可以真刀真枪的去干点有意思的事了,比如写个终端下的类似于QQ的软件啊,包括服务器和客户端啊,慢慢的增加并发数,比如可以同时支持五千人在线啊,文件传输啊等等。然后学学Qt,熟悉一下图形界面,可以把你的终端下的QQ完全改成图形界面下的。估计到这个时候,你差不多在 Linux 下进行像样的开发了吧。在这个过程的学习中,相信你已经学会 Makefile 的编写啊,编译啊,链接啊等等一些细枝末节的东西了,还得反思一下把零散的东西串一串,要系统化。

接下来就是继续深入了,Linux 为什么这么多人用,好处在哪里,你得去稍微的看看内核源码啊,内核的进线程调度啊,我告诉你,Linux 内核的一个链表都够你研究好几节课的。哦,这个时候,数据结构啥的又得翻出来加强一下了不是,计算机网络啥的也得看看,操作系统原理啥的也得看看呢不是,把这些东西放在这里是合适的,前面让你知其然,知道怎么编程怎么做,现在要知其所以然了不是。

在学习的过程中,要不断积累和了解最新的东西,最起码要知道个概念,比如分布式,大数据,云计算, 机器学习,计算机视觉,JIT 等等,形成知识链,这样不会导致你最后不知道学啥。

3. 建议

一定要学一下 Python,一定要学一下 Python,一定要学一下 Python,重要的事情说三遍。它能极大的提高你的工作效率,也能和 C/C++ 结合在一起用,很 nice 的语言。

一定要学习一款版本管理工具,首先要了解一下什么是版本管理。然后选择一款版本管理工具,这个很重要。目前常用的是 git 和 svn,就用 git 就好了,当然你要去用 svn 那也行。还是建议用 git,看廖雪峰的 git 教程就好。

4. 推荐书籍

最后推荐几本书(前面的包含在内):
《鸟哥的Linux私房菜 基础篇》
《C程序设计语言》 丹尼斯写的
《Linux C编程一站式学习》 宋劲杉写的
《Eensstial C++》
《C++ Primer》
《Effective C++》
《Linux网络编程》 宋劲彬写的
《Unix环境高级编程》
《Unix网络编程》 两部
《Linux高级程序设计》 华清远见的
《MySQL必知必会》
《数据库系统概念》
《大话数据结构》
《算法导论》
《Linux内核情景分析》
《深入理解Linux内核》
《深入理解计算机系统》
《现代操作系统》
《深入理解计算机网络》
《TCP/IP》的三卷经典书

5. 推荐网站

廖雪峰的 Python 学习网站 ,另外各大论坛,stackoverflow, 博客园,CSDN等等,多逛逛,当然还有知乎也要多逛逛。差不多就这么多了吧,前文列举的东西,只要完成一半,估计就不用我教你学了,你自己应该知道自己该学啥了。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值