要想成为软件开发专家,需要具备过人的知识广度和深度,对老技术基础必须相当扎实,以下是整理的一些老技术要点路线图,仅供参考。
|
大类 |
小类 |
备注 | |
|
软件基本理论 |
编译/链接原理 |
国内的弱点,也是关键点 | |
|
操作系统基本原理 | |||
|
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 |
主要参考官方资料和网络资料 |
|
面向对象理论 |
《面向对象分析与设计》 |
|
文档相关 |
参考网络资料和官方资料 |

本文详述了成为软件开发专家所需掌握的核心技术与知识,涵盖了从操作系统原理到网络编程,从数据库管理到音视频处理等多个方面,旨在为有志于深入软件开发领域的读者提供全面的学习指南。
992

被折叠的 条评论
为什么被折叠?



