技术知识的分析
分类
1. 原理
比如:
- 编译: 编译的流程 实现编程语言虚拟机的流程
- 操作系统: 操作系统实现的文件系统的流程
- 图形学: 渲染的流程
- 网络: http报文格式、http通讯过程
- RPC通讯过程、爬虫的流程
2. 实践经验/填坑
比如:
- iOS如何高效地在长列表中渲染的图片的圆角
- 基于RN的view实现原生UITableView主要功能
- Android 2.x 前端兼容问题
3. 配置/操作指引
比如:
- linux服务器环境配置 (nginx, ufw, redis, supervisor)
- docker 制作, 运行, 部署配置
- 开发机环境配置
- SDL库的安装, 编译, 导入到XCode项目的环境配置 (包括其他平台和IDE)
- jsonrpc, xmlrpc, soap, restfulAPI
这类知识的特点:
- 一看就会,cheap knowledge
- 但是官方文档难看懂,设计反人类
- 找资源/试错/总结需要花时间,需要有人做这份文档
- 有些官方文档成熟,那就不需要做这份文档
对待这类知识的态度:
- 存一份表,用的时候查表
- 或者不需要表,只要记住结论,用的时候Google
- 表的制作需要花时间,在于:找资料、写例子试错、总结
- 表的制作适合团队学习里头分工,每个人研究一份主题文档,加起来效率就高了
作用
为什么学原理
1) 工作外的原理,可以提高自信
- 自信,只有自己觉得能行的时候,才能把事情做好
- 领域知识,指不定哪天就用上了,到时不会有陌生敬畏感
2) 工作中的原理,有实质的帮助
- 原理可以让我明白整个流程,是DEBUG的前提,是程序分层的基础
- 有些场景需要知道内部原理,才可以优化程序,把它变更好
为什么要总结实践经验,存份配置
- 为了快速完成工作
获取途径
原理 → 请教领域专家
实践经验 → 丰富项目经验
操作指引 → 难度不高,但是找资料和试错需要时间,有一个人去搞定就好;适合团队学习,效率大于单兵;
如何掌握知识
先解决,如何理解原理
- 通过 有人教或文章 知道实现流程。<1>
- 选合适的语言。<2>
- 实现这个东西。
再解决,如何深入掌握知识 (针对工作中)
- 理解原理
- 再理解原理为什么要这样做 <3>
- 以及是否有其他方案,哪一种方案更好 能在这个层面去理解,去操纵的时候,算是熟练了;
<1>
注意抓主干去枝末。
比如爬虫:提高爬虫效率,提高爬虫可扩展性,对付反爬虫策略;这些对学习原理来说是枝末。
这些地方要有实际应用才去做 → 实践过程中,解决一个个实际问题提炼总结。
<2>
语言的选择至关重要,要抓主要矛盾
用c++写渲染器,一半时间都在和c++ 打架;
用js写就不会,跑的慢些没关系,能理解原理就行;
要抓主要矛盾,学习图形学的时候,最重要的是图形学的 理论/模型/流程;而不是和内存打架,怎么怎么高效;
自己的项目,无论何时都要用最方便的语言来写;
<3>
注意,有时有些原理并没有为什么,就是规定,谁拳头大谁定;
有些是历史原因,路径依赖;