好奇的探索者,理性的思考者,踏实的行动者。
Table of Contents:
作用:
* 形成知识框架、知识地图
* 遇到问题、知识时可以快速定位,并和已有的知识建立联系
* 遇到新知识时知道把其挂在知识树的什么位置,如何跟已有的知识进行关联
* 排查自己的知识盲区,查漏补缺
操作系统
linux
命令
shell脚本
系统编程
内核原理
内核源码
windows
编译原理
前端
后端
计算机网络
网络分层
应用层
DHCP PEX HTTP HTTPS FTP RTMP(流媒体协议)
传输层
tcp udp
网络层
ip
链路层
arp
网络编程
工具
tcpdump wireshark
数据库(数据存储)
关系型数据库
非关系型数据库
k-v型数据库
内存型数据库
软件工程
源码版本控制
自动化编译
自动化测试
平台经验
windows、linux、ios、Android、嵌入式
见识
下一代技术知识
阅读代码
快速了解程序的功能,程序的具体行为,语言方面, 数据结构和算法方面
软件设计
使用什么样的代码技术达到怎么样的功能,而系统架构设计直接决定了软件的质量、性能和可维护性
需求分析
接受给定的需求和代码规格
能对规格的遗漏提出疑问
对有矛盾的地方可以识别出
了解全面情况,提出需要被规格化的整体范围。
能够提出更好的可选方案,根据经验的浮现给出需求
问题分解
系统分解
编写程序
代码组织
同一文件、跨文件代码组织、源码树组织
代码可读性、强健性、防御性编码、错误处理
工具类库、编程框架的使用
接口api的查找能力(快速上手)
接口api的使用能力
接口的封装和设计(功能抽象分封装)
接口api的实现能力
熟悉软件工程
每个程序员都应该明白软件工程是什么东西,都应该知道,需求分析,设计,编码,测试,Release和维护这几个阶段
软件开发的方法论,比如:敏捷开发或瀑布模型。
使用程序库或框架
一个程序员需要学会使用已有的代码,无论是标论的程序库,或是第三方的,还是自己公司内部的,
站在前人的基础上,可以让你的工作事半功倍。
程序调试
assert
打印调试
断点
单元测试
单元测试框架
重构代码
重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能
开发自动化
批处理文件、shell脚本、python脚本
自动化编译,自动化测试,自动化部署,系统集成
运维能力
快速学习的技能
与人的沟通能力
语言的表达能力
写作能力
团队协作能力
时间管理能力
故障处理能力