本文档适用人员:技术人员
面试的时候,我会问面试者,你日常如何构建自己的知识体系,如何让自己更高更快更强?多数工程师并没有深入地思考过这个问题,基本上是零敲碎打,随机性大。
本着不能让你白来一趟的精神,好为人师的我会娓娓道来:
第一阶段 认真构建完整的知识体系
十几年前我投身软件行业的时候,光是讲解数据库原理、操作系统、TCP/IP、组网、算法等等基础知识的英文原版书摞起来就等身,认认真真看完,各种上手实践,入行后,读遍 C++ 各种经典著作,读遍各种协议原文,认认真真打基础。
很多工程师都说自己平常就是在某些 IT 门户上看看推荐的博文或新闻,我说这属于典型的零敲碎打,不够刺激。
聊到这时,我会举一个例子,为什么要阅读长篇小说,因为中短篇小说就像用针扎你, 而长篇小说就像把你装进一个沙袋里吊起来,从四面八方用狼牙棒打你,酣畅淋漓 。构建可用的知识体系,就得读书,书是有体系结构的,你关心不关心,现阶段你用到用不到,它都讲到了,从头到尾看几遍, 针扎得透透的 。
何谓知识体系?
几年前,前支付宝架构师姚建东曾经在我们公司做过技术人员如何规划自己的分享讲座,他是这么论述的:
技术与技巧包括:
- 计算机基础理论
- 计算机模型:内存/IO/时钟/CPU……
- 算法
- 专项技术领域:
- 语言与工具
- 语言与相关体系
- 开发工具,分析工具,代码管理工具
- HTML/CSS/JS/Ajax
- 常用框架与第三方类库
- 调试与测试
- 调试方法和哲学
- 定位问题
- BUG管理工具
- 单元测试
- 集成测试
- 性能测试
- 安全测试
- 兼容性测试与方法
- JS/Ajax测试与方法
- 服务层测试
- Web层测试
- 网络与系统
- TCP/IP协议与模型,HTTP/SMTP等协议
- Linux系统,网络分析工具,系统分析工具
- 容量,流量与负载均衡
- 应用部署、规范、规划
- 安全
- 监控与故障分析
- 磁盘与存储
- Shell
- DNS与域名
- 缓存,反向代理
- 图片服务器(海量小文件)
- 需求挖掘与分析
- 需求文档格式
- 需求访谈
- 需求分析方法,需求分析工具
- 领域知识与经验
- 系统分析与设计
- UML语言与模型
- 分析模式
- 设计模式,领域驱动
- 系统分析文档格式
- 系统设计文档格式
- 功能性需求与非功能性需求
- 数据与系统
- 数据库
- 可伸缩策略,扩展策略,备份,容灾,性能,安全,高可用……
- 数据设计与范式,SQL/NoSQL,Cache,分布式文件
- 架构设计
- 架构模式,典型互联网公司架构演进历史
- 架构原则,常用策略
- 架构设计方法
- 非功能性理解
- 容量预测与规划
- 架构体系与相关技术
- 过程与管理
- 分析过程
- 研发过程
- 评审过程
- 测试过程
- 发布过程
- 回滚过程
- 文档管理
- 知识管理
- 项目管理
以上其实就是一份从业基础知识清单,你可以按图索骥,阅读相关书籍。
第二阶段 顺着一个Topic钻进去,锻炼自己的预研能力
无论公司业务还是自己喜欢做的事,都可以抽象出通用性课题,然后以做论文的方式杀进去。这个事情得反复操练,有意识操练。
做事方式为:
- 抽象出 Topic——如分布式锁,分布式并行计算引擎,防CSRF的FormToken自动生成框架,定时任务管理与调度平台,分布式跟踪,等等
- 向功课好的学生学习——有针对性地深入了解业界其他公司是如何分析问题和解决问题的,汇总各种方案,站在巨人的肩膀上
- 分析特定应用场景,技术选型
- 兼顾高可用性和可伸缩,做设计评审
- 做测试自证靠谱,梳理知识点,开技术分享会
- 上线商用,总结经验教训,开经验分享会
其中一个重点是汇总和分享。05年时,应电信级统一消息业务需要,我去研究了 SIP 协议,做了各种试验,分析报文,写了一系列的幻灯片,做了公开分享,一时间还颇受欢迎:
- SIP_to_Freshman_by_zhengyun.ppt
- SIP之穿越NAT_by_zhengyun.ppt
- SIP体系架构讲义及消息交互演示_by_zhengyun.ppt
- SIP多方会话消息之实例讲解_by_zhengyun.ppt
- SIP安全框架之认证[NTLM和Kerberos]_by_zhengyun.ppt
- SIP消息之逐项讲解_by_zhengyun.ppt
为什么要写出来、讲出来呢?
因为有一个学习金字塔理论,如下图所示: