编程知识提纯之法
编程知识提纯,本质上就是将编程知识结构化。
引言
在“打造适合自己的知识库”一文中,讲到了打造知识库的一般步骤。其中整理固然是必要工作,而核心却在于知识提纯。
在“职业发展战术设计:构建可持续积累的职业优势”一文中,谈到:构建良好职业优势的一大基础支撑能力即是知识提纯能力。
信息过滤能力和知识提纯能力,是现代社会里职场人士的两大核心能力。即使从事自由职业,这两大能力也不可或缺。
结构化方法
编程知识提纯,本质上就是将编程知识结构化。为什么能够将编程知识结构化呢?因为编程知识是基于逻辑构建的,而逻辑是一个极具结构化特征的事物。
结构化特征:
- 层次性: 事物的结构具有层次性,可以分为多层,上层的服务依赖下层的实现。
- 组合性: 可以通过组合简单部件来构建复杂部件。
- 逻辑性: 事物的内在具有很强的关联性,不是随机偶然的,可以运用心智去理解。
- 整体性: 事物的各个子部分组成事物的整体,子部分的协作共同完成整体的功能。
编程知识很好地体现了结构化的特征:
- 层次性:由基础概念相互联结而成,概念之间相互贯通;理解了基础概念,才能更好地理解各种原理和技术机制,否则欲速则不达。
- 组合性:简单的知识能够组合出复杂的知识;简单的组件构成复杂的组件。
- 逻辑性:软件的基础是数学与逻辑,毋需多言。
- 整体性:体系化的编程知识的效用远大于孤立的编程知识的效用。
编程知识剖析框架
编程知识可以解析为五层结构: 原理与模型 - 结构与算法 - 设计与封装 - 限制与考量 - 操作与应用。
-
原理与模型:这是第一性原理所在的地方,即事物基于什么理念而建立,建立什么模型较为恰当。经典力学、相对论、量子论都是原理和模型,从实践中提炼而来,也用于指导实践。程序的原理与模型就是数学与逻辑的表达。
-
结构与算法:这是实现的基本层次,即事物的结构、组织、存储和关联,步骤、流程与变化方向。
-
设计与封装:这是设计的基本层次,在结构与算法的基础上进行封装,使之灵活可靠,实现各种关键质量属性。
-
限制与考量:这是设计的限制层次,需要重点考量什么因素,有哪些限制,对设计及决策的影响。比如软件开发要考虑法律政策的限制,不能做违法的事情;设计列车要考虑地理特征、路线资源调度限制等。
-
操作与应用:这是使用的层次。如何让事物更加安全易用方便,能够应用到哪些场合。
举一个本地缓存的例子:
- 原理与模型: 邻近原则,近水楼台先得月,预先加载,从邻近的地方获取数据更加快速;
- 结构与算法: 数据结构采用 HashMap(或缓存行),设计操作 HashMap(缓存行) 的方法;
- 设计与封装: 考虑性能、并发安全、过期策略、命中统计等;
- 限制与考量:考虑容量限制、过期时间、大数据量的存储空间占用、计时的细节;
- 操作与应用: 内存缓存,作为数据库重要数据的缓冲区,提升性能。
通过以上五个方面,即可将“缓存”这个知识点透彻理解。
这个框架不仅仅限于理解编程知识,可以作为理解各类知识的通用框架。
技术思考框架
“抽象-思路-考量-优化-细节” 五步曲。基于“编程知识剖析框架”而构建。
- 抽象:给用户提供怎样的抽象;
- 思路:如何去实现它,基本的依据、结构、算法与实现;
- 考量:工程应用上需要考虑哪些因素,做到安全可靠高质量;
- 优化:在考量的基础上,从多个层面去优化和完善;
- 细节:在优化的基础上,打磨细节,精益求精。
知识梳理提纯
- 识别原理、知识、经验、方法,培养要点提炼能力。
- 按照上述框架结构化改造技术文摘。
- 少而精。重要、精练、简洁为要。
- 列成清晰宜读的条目形式。
- 注重知识之间的关联性。
- 保留文章原文链接。
原理-知识-方法-经验
- 原理:事物何以存在的基础支撑。原理是对事物主要特征的勾勒。通常是事物的构成要素(部件)及关联(交互)。原理不涉及大量细节,仅仅是指明起决定性因素的部分。
- 知识: 指明一个必达或潜在的联系。比如水在一个大气压的前提下温度达到100摄氏度会沸腾(液体汽化)。知识充实原理的细节部分。
- 方法:实现某个目标的明确的步骤序列。方法使得原理和知识可以应用于现实的目标。
- 经验:特定问题或场景的特定方法或巧妙方法。比如复利的七二法则。经验或是由某种原理推导而得,或是还未理解原理但确实奏效。经验是更有效率的方法,但应用到不适用的场景会导致错误或失败。
基本准则
- 能够一行命令说清楚的,不用文字。
- 能够用一行文字说清楚的,删除不必要之语。
- 去除引述、衔接、啰嗦之语。
- 去除含糊之语。如果读不懂,且只是解释性语句,直接删除。
删减的勇气
文字太多,阅读会耗时,也很难形成清晰有力的印象。古人云:“把书读薄”,正在于此。格言为什么有力?正因其短小、精悍、有力。而今之文多赘语。
做知识提纯面对的一个问题是: 如何大幅度删减不必要的文字,同时保留文章的精髓?想删而不敢删,似乎字字都有联系,下不了手去大幅度删减,这可能是很多想做知识提纯工作的人要面对的一个问题。
解决这个问题的办法:
- 保留原文链接。潜在风险:原文被删除或网址不可达。
- 如果原文写得特别精彩,保留原文全文亦可(可作为自己写文章的参考)。
- 提取原文的关键字、关键内容。
- 保留原文的行文逻辑关联。
稍微做点知识提纯工作就会发现,很多网络文章都很啰嗦,就说明这篇文章质量不怎么样,给它润色修改都是很耗时的工作,可以直接舍弃,寻找更好的文章。很多文章为了保持所谓的生动有趣,掺杂了太多水分,反而导致文章质量下降。实际上也是浪费读者的时间。寸寸光阴寸寸金。节省读者的时间才是最重要的。
因此,我的观点是:宁可文章写得“枯燥”一点,也要保证干货的密度很大。牛逼的人往往就是有耐心读那些干货很多但略显枯燥的东西。太枯燥了也不好,可能直接劝退。实际上,一个事物是否枯燥,取决于一个人的知识和学问修养。相对论对于我来说或许很枯燥,但对于物理学家来说可能就是好玩的东西。
好文章的特征:
- 图文并茂;
- 文字简练朴实;
- 行文衔接少,干货多。
一点技巧
- 拆分条目。大段的文字不适合阅读,可以拆分成多个条目,每一行表达一个点。
- 加标题。让段落内容的中心清晰明确,提纲挈领。我一般加两级标题 H2,H3, 偶尔 H4。
- 知识小卡片。不了解的地方,可以向 AI 提问,添加内容,做成知识小卡片,作为补遗。
拆分成条目的例子
比如下面的大段文字。看到这种文字是不是很头疼?很难读下去?脑中一团浆糊。
拆分成条目的形式之后:每一行都是一个小的知识点,清晰悦目,是不是宜读多了?
另外还有一个细节点:英文单词和汉字最好分开一个空格。这是写论文的基本要求,但是很多人都忽视了。
有人可能说这些细节不重要。但我深信:把事情做细致,也是让自身变得更好的一种途径。很多事情的益处,只有自己才能体会。
加标题
以下是我给一篇文章加标题的例子。 看上去是不是层次感更加分明 ?
知识小卡片
很适合给单个知识点或概念建立知识小卡片。
提纯哪些知识
知识浩如烟海,提纯哪些知识也是值得斟酌的问题。
在“如何做编程知识投资及减少知识失效的影响”一文中讲到:原理类、设计类、经验类知识是非常重要的。
普通人对于知识的需求,就是解决工作和生活上的问题。可以以两种导向来进行:
- 以问题为导向。提出一个问题,围绕解答它来搜集和提纯知识。常见于学习。
- 以需求为导向。提出一个需求,围绕解决它来搜集和提出知识。常见于工作。
小结
知识提纯能力是一项非常重要的能力。说它是现代职场中应当具备的一项核心竞争力也不为过。在知识社会里,知识是第一生产原材料。如何运用知识的力量,转化成可观的效益,是每个人都值得去思考和探索的问题。