了解你所不知道的事情的框架
这篇博文最初发布在我的网站上。
在我的职业生涯中,我不得不学习很多很多新事物。我做过小学老师、数字营销人员、软件工程师,现在是一名全职开发者倡导者。我不得不一次又一次地学习全新的概念。这很棒;它让我保持谦逊,让我感到快乐。学习过程中会产生大量的多巴胺。但学习中最困难的部分之一是了解你不知道什么。了解你的不知道什么很重要,因为它可以防止你犯下那些源于判断失误的错误。
我学到了一些关于如何界定我对某个概念的知识界限的方法。我在这里分享我的框架,希望它能对科技界的其他人有所帮助。
第一阶段:无
了解一个新概念的初始阶段是最容易定义的。我从零开始!
这太棒了!我完全知道我不知道什么。假设我对 API 的概念完全陌生。以下是一张图,展示了我对 API 的了解程度:
没有比这更准确的了。我没开玩笑。“你不知道的事情”会让你一次又一次地感到惊讶。我在这里建议的框架并不能让你避免在人前犯错。但我认为它能为你提供一些关于如何学习新事物的一般指导。
第二阶段:概念的一个实例
那么,让我们来思考一下通用概念。我们都认同的定义。例如,根据维基百科,API 的定义是
“应用程序编程接口 (API) 是两个或多个计算机程序相互通信的方式。”
这或许不是最完整的定义,但我认为大多数技术人员都会认同。现在,你可以记住这个定义,但除非你在实际使用中遇到过 API,否则你无法获得 API 的实践经验。
假设我正处于这个阶段。我正在习惯查询 REST API,并且正在学习用 Python 或 Node Express 之类的语言自己构建一个。这个定义适用于我正在构建的 REST API,所以我正在积累一种 API 的经验。这是这个通用概念的一个具体例子。这是我的另一张大脑地图:
所以,我正在学习一些关于 REST API 的知识。目前就这些。箭头指向了一个我没注意到的边界:
我不知道 REST API 和所有 API 有哪些共同点,又有哪些不同点。
所以,我见过一个特定的API实例,但我没见过其他API实例。这是一个问题,因为在“API”这个通用概念下,存在着不同类型的API。就像在“猫”属下,存在着不同种类或物种的猫一样。老虎和狮子也有很大区别。
阶段 3:一个概念的两个不同种类的实例。
假设我开始实现的不是 REST API,而是 GraphQL API。它和 REST API 是不同的,就像狮子和老虎是不同的猫科动物一样。我对 API 的世界观开始崩塌。REST API 和 GraphQL API 之间的差异摧毁了这种世界观,比如
- GraphQL 是应用层,而 REST 是一种 API 风格。并非所有 API 都是 REST 风格的!
- GraphQL 请求类似于 JSON,而 REST 请求通常在 URL 中参数化。并非所有 API 都以相同的方式使用参数!或者具有相同的请求格式。
- 您可以使用 schema 来定义 GraphQL,而不是使用端点列表。并非所有 API 的定义方式都相同!
我知道这张图有点复杂,抱歉。但这是需要做笔记的最重要的阶段。为什么?因为当你意识到自己做了哪些假设时,你就知道下次遇到新的 API 时应该问什么问题。
以下是我做出的假设:
- 所有 API 都采用相同的风格。
- 所有 API 请求的格式都相同。
- 您以相同的方式定义 API。
现在,我的经验已经打破了这些假设,我知道下次学习一种新的 API 时要问什么问题。
第四阶段:不同类型的第三个实例。
好吧,假设我正在学习什么是 tRPC API,以便在工作中实现它。基于我上次做的假设,我现在可能会问什么?
- tRPC 的风格与我熟悉的 REST 和 GraphQL 相比如何?
- tRPC 请求的格式是怎样的?
- 如何映射或定义 tRPC API?
这些问题将帮助我理解什么是 tRPC API,比我理解什么是 REST 或 GraphQL API 要快得多。
此外,我将更好地理解 API 的一般概念,因为我将了解所有这些 API 之间的共同点。在此阶段,我还将更好地理解 GraphQL 和 REST API,因为我可以列出它们的局限性。
概括这个过程
我认为每次学习新东西时,都必须经历这 4 个阶段,而且没有其他方法可以绕过。
但如果你有意识地这样做,它会加快学习的进程。
因此,当你开始时,承认“我对此一无所知。我应该问一些了解这方面的人,首先构建的最佳实例是什么”,可以为你省去一些痛苦。
再说一次,一旦你构建了第一个实例,承认“我在这里做出的假设可能不适用于其他实例。我应该问问构建过其他类型实例的人,它们之间有什么区别”,将有助于你在构建下一个实例时决定是否要学习新的范式。
鏂囩珷鏉ユ簮锛�https://dev.to/cerchie/a-framework-for-knowing-what-you-dont-know-1m2d