要想成为软件开发专家,需要具备过人的知识广度和深度,对老技术基础必须相当扎实,以下是整理的一些老技术要点路线图,仅供参考。
大类 | 小类 | 备注 | |
软件基本理论 | 编译/链接原理 | 国内的弱点,也是关键点 | |
操作系统基本原理 | |||
GNU汇编基础(AT&T) | |||
UNIX GNU/Linux | Unix及GNU背景 | Unix和GNU是开源领域最为重要的先驱,对当今软件界的影响至关重要,是核心灵魂所在 | |
熟练至少一种发行版,ubuntu/centos/redhat | |||
GNU基本工具 | gcc | ||
gdb | |||
autotools | |||
Vi/vim | |||
Linux内核及应用开发环境 | |||
Uboot | |||
开发语言相关 | C/C++ | Java对非相关人员,不作强制要求,但是也需要有所了解 | |
Python | |||
Java | |||
Shell | |||
Sed/awk | |||
正则表达式 | |||
代码构建管理 | Make |
| |
Cmake |
| ||
Svn |
| ||
Git |
| ||
代码编辑调试 | Vim | Vim最为重要,其它看自己需要 | |
Source insight | |||
Eclipse | |||
Notepad | |||
体系结构相关 | X86 | X86最为重要,其次ARM | |
ARM | |||
MIPS | |||
网络编程 | TCP/IP协议 | 网络编程涉及面很广,TCP/IP是最为重要的 | |
DNS | |||
Socket | |||
路由技术 | |||
应用开发技术 | Web相关 | Html | 非web开发不作要求,但是不能不了解 |
Css | |||
JavaScript | |||
Django/flask等框架 | 非web开发无要求 | ||
数据库 | Mysql | 至少熟悉一种数据库 | |
PostgreSQL | |||
Sqlite | |||
MongoDB | |||
协议相关 | Tcp | 最为重要的基本协议,必须要掌握 | |
Udp | |||
http | |||
Rtp/rtcp/rtsp | 看需要 | ||
音视频 | Ffmpeg | 和业务相关,不强制要求 | |
gstreamer | |||
libmad | |||
Linux应用开发 | 标准C库 | Linux开发者强制要求的技能,对相关技术必须熟练掌握 | |
文件操作 | |||
进程控制 | |||
线程控制 | |||
信号 | |||
IO复用技术 | |||
IPC | |||
Socket网络编程 | |||
多用户和安全 | |||
数据结构 数据表现 | 堆栈 |
| |
队列 | |||
排序 | |||
哈希表 | |||
二叉树/红黑树 | |||
集合 | |||
字典/key-value | |||
Json | |||
Xml | |||
嵌入式相关 | 理解什么是soc | 对嵌入式开发来说,需要熟练掌握 | |
开发板及开发平台搭建 | |||
交叉编译原理 | |||
发行版构建 | Yocto | ||
Openwrt | |||
软件工程 | 面向对象理论 | 写的代码清不清爽,关键在于这里 | |
抽象逻辑能力 | |||
对事物的本质看法 | |||
软件工程模型:UML等 | |||
文档相关 | doxygen | 掌握文档工具是一项很重要的能力 | |
Docbook | |||
Google/baidu | |||
数学能力 | 初等数学 | 非算法开发人员,初等数学完全够用,不要为了学数学,路子走偏了 | |
算法相关人员 | 高等数学 | ||
线性代数 | |||
微积分 | |||
其它数学分支 | |||
Matlab | |||
人类语言 | 英语 | 英语的重要性,自己体会吧 | |
母语 |
下面列出针对以上知识点的书籍清单,仅供参考
知识点 | 书籍名称 |
编译/链接 | 《链接器和加载器》 《程序员的自我修养》 《编译原理》 |
操作系统基本原理 | 《操作系统设计与实现》 |
GNU汇编基础 | 《Professional Assembly Language》 |
Unix及GNU背景 | 搜索网络资料和GNU官网:www.gnu.org |
Linux发行版 | 推荐ubuntu,可以vmware安装,平时多使用,书籍没有推荐 |
Gcc | 《GCC:The Complete Reference》和官方文档 |
Gdb | 官方文档 |
Autotools | 《A Practitioner’s Guide To GNU Autoconf, Automake, and Libtool》和官方资料 |
Linux内核 | 《linux内核设计与实现》 《深入理解linux内核》 《linux内核完全注释(0.11版本)》 《linux设备驱动程序》 |
C | 《C语言的科学与艺术》 《C和指针》 《编程珠玑》 |
C++ | 《C++ primer plus》 《深度探索C++对象模型》 《STL源码剖析》 |
Python | 《python学习手册》 《python核心编程》 |
Java | 《java核心技术》 《java编程思想》 |
Shell | 《shell脚本学习指南》 《Learning The Bash Shell》 |
Sed/awk | 《sed&awk》 《awk程序设计语言》 |
正则表达式 | 《精通正则表达式》 |
Make | 官方手册 |
Cmake | 《Mastering Cmake》 《CMake实践》 |
SVN/GIT | 官方资料或者搜索网络资料,很多很多 |
Vim | 官方资料或者搜索网络资料,很多很多 |
X86体系结构 | 《Intel Architecture Software Developer’s Manual》卷一~三 |
ARM | 《ARM Architecture Reference Manual》 《ARM体系结构与编程》 |
MIPS | 《MIPS体系结构透视》 《See MIPS Run Linux》 |
TCP/IP | 《TCP/IP详解》卷一~三 |
网络编程 | 《UNIX网络编程》 |
路由技术 | 《TCP/IP路由技术》 |
Html | 《HTML权威指南》 |
CSS | 《CSS权威指南》 |
JavaScript | 《JavaScript权威指南》 |
Django | 官方资料和《django book 2.0》,在卖书籍也很多,可以选购 |
Mysql | 《SQL学习指南》 |
MongoDB | 《mongoDB权威指南》 |
http | 《http权威指南》 |
RTP/RTCP | 《RTP:Audio and Video for the Internet》 |
FFMPEG | 官方资料 《FFMPEG从入门到精通》 |
Gstreamer | 官方资料 |
Linux应用开发 | 《UNIX环境高级编程》 |
数据结构 | 《算法导论》和网络资料 |
Soc相关 | 参考各个soc芯片的datasheet |
Yocto | 主要参考官方资料 《嵌入式linux系统开发:基于yocto project》 |
Openwrt | 主要参考官方资料和网络资料 |
面向对象理论 | 《面向对象分析与设计》 |
文档相关 | 参考网络资料和官方资料 |