介绍
很难想象在终身学习比软件工程中更重要的其他领域。另一个独特的特征是可以在互联网上免费获得学习材料的程度。最重要的是,我们通过记录问题,提交错误报告,编写注释,创建文档等来自己创建各种资源。所有这些资源的总和可以称为知识库。您可能会争辩说,每个开发人员都有一个系统来管理他们的个人知识库,无论他们是否知道。在这篇文章中,我将解释我的知识管理实践。
软件工程师的个人知识库可能与他们的雇主和项目合作伙伴的知识重叠。确保仔细研究您的数据保护义务。一个良好的基础是严格保持您的个人知识库的技术性,并且永远不要包含与客户或一般人相关的数据。
我选择此主题的原因主要有以下三个:
乐趣:
我喜欢考虑自己的工作流程并尝试改进它们。也许有些过多,当我尝试向他们推荐一种新工具时,一些朋友已经开始睁大眼睛。改善我的系统和工作流程:
撰写有关我的Linux设置的帖子对我来说是非常有益的。在记录我的配置(尤其是我的命令行工作流)时,我发现了自那时以来已消除的一些缺点。写完本文后,我已经可以说我的知识管理工作流程也得到了类似的改进。相关性:
各种形式的知识管理对于软件工程都是不可或缺的。
这篇文章的大部分内容都归因于描述我对软件工具的使用。星星将
概念
亚搏体育app
沃纳
投寄箱
阿尔伯特
复制我所有的做法可能不会很好地为您服务。我邀请您按照自己的节奏尝试一些事情,并在每次寻找新想法时重新访问这篇文章。
收藏
即使每个人都喜欢书,或者至少喜欢这样说,包括我自己在内,但现实是我们大部分时间都依赖数字资源。挑战在于如何有效地组织这些知识,而又不会产生太多开销。
我认为有些幼稚的方法还不够。直到几年前,我主要依靠浏览器书签,但是由于某些原因,浏览器没有提供适当的组织功能。另一种方法是将URL复制到注释,项目问题,文档和所有其他类型的手动创建的内容中。这是可行的,我们都定期进行,但与我认为的书签管理无关。
我当前的设置稍微复杂一点,但是最后,与仅在浏览器中保留书签相比,它不需要做更多的工作。我将书签组织成多层,这取决于我要访问它们的频率以及它们应保留的时间。
也许您正在考虑现在进行缓存,但是幸运的是,书签层不是缓存级别。这将很难管理,因为众所周知,计算机科学中存在两个难题:缓存失效,命名和错误代码1。与缓存条目相反,书签不应在层之间移动。而是将其插入正确的位置并停留在该位置。
下图说明了我的图层:
1. Chrome书签
Chrome书签有一些不错的好处。它们在设备之间是同步的,可以轻松添加新设备,并且在文件夹中组织它们至少带来了一些结构。对我来说,另一个优势是Albert Chromium扩展程序,它使我可以从Albert访问并打开我的Chrome书签:
由于这些优点,Chrome书签非常适合我经常需要并且希望能够独立于上下文访问的内容。但是,它们不太适合保留大量的书签库。没有标签,无法添加注释,浏览器甚至都没有为页面添加书签的时间戳。进一步不可能使用复杂的查询来过滤和搜索Chrome书签。以我的经验,如果浏览器书签库的大小超过一定大小,将很难对其进行管理。
合适的Chrome书签的一些示例:
AWS EC2仪表板
Google云平台控制台
松弛的工作区
GitLab开发板
内容网站,例如Hacker News,InfoQ和DZone
不应作为 Chrome书签的示例:
博客文章,稍后阅读
链接到开源项目
堆栈溢出问题
2. Workona
Workona是我工具箱中的一个相对较新的功能。我对此有不同的感觉,主要是因为它有时会感觉有点慢。虽然有些事情做得很好。
使用Workona,您可以创建带有自己的书签列表的浏览器工作区。当您有多个长期工作的项目时,这很好用。它还将记住您在特定工作区中打开了哪些选项卡,并在设备之间同步此信息。因此,这是我经常需要根据上下文进行操作的好地方。
Workona进一步允许您添加应用程序,然后将收集链接甚至这些应用程序的功能,以便快速访问它们。例如,我用它来访问不同的GitLab和GitHub项目,Slack Workspaces,有时甚至是StackOverflow问题。这些条目由Workona自动创建,因此我看不到它们是书签。也可以直接从Workona访问这些应用程序的功能,主要是创建新资源,例如GitLab / GitHub项目,Google Docs,DropBox文件等。感觉有点像Station直接内置在浏览器中。
对我来说,卖点是Workona 允许我通过快捷方式完成所有上述操作,甚至可以在上自定义这些快捷方式chrome://extensions/shortcuts
。
3.观念
最后,我们到达适合维护大型书签库的层。为此,以及许多其他用例,我使用了Notion。它已成为我个人知识库的核心。
Notion的免费层对您可以创建的块数进行了硬性限制。这意味着如果您认真使用一段时间,则必须切换到付费版本。它对学生和老师都是免费的。
这篇文章中所有指向“概念”的链接都是会员链接。如果您通过这些链接注册一个帐户,您将获得10美元的免费积分,而我将获得5美元。即使您创建了一个免费帐户,此方法也有效。
对我来说,杀手级功能是数据库。它非常灵活,可以单手为我替换多个其他工具。对于我的书签集合,我使用一个大型数据库。可以通过Notion Web Clipper添加新项目。我有点烦恼Web Clipper不允许我直接添加属性和标签,但是除此之外,它工作得很好。以前,我使用Trello,它在保存书签方面也很出色。但是,为了限制我使用的不同工具的数量,我将其替换为概念。
该数据库的目标是,我可以从几年以后的时间里找到一些应该存在的模糊记忆。这是可能的,因为Notion自动存储元数据,例如创建时间戳。更重要的是,我可以添加标签和任意属性。
一旦使用不同的Notion数据库之间的关系,事情就会变得令人兴奋。例如,我有一个博客文章数据库,该数据库与我的书签有关系。现在,我可以按博客文章过滤书签,并快速查看哪些来源影响了特定文章。
我无法涵盖本文中的所有Notion数据库功能。我认为这是您必须亲自了解的东西。不过,有关该主题的概念文档页面可能会给您一些进一步的印象。
此功能丰富的调色板的缺点在于,它需要一些纪律。我标记和注释通过Web Clipper添加的新条目,大约每个月两次。通常,我只是删除新项目,因为它们似乎不再重要。如果我无法想到某项的适当标签或关系,这通常意味着它与我不太相关。
我必须学习困难的方法的另一个重要课程:
不要并行使用太多数据库。概念为筛选和搜索表提供了极好的方法。您甚至可以在仅显示数据特定部分的同一数据库上定义不同的视图。因此,不需要将所有类型的东西分离到不同的数据库中。例如,起初,我有三个不同的数据库,分别用于Python资源,Django资源和Wagtail资源。这是一个糟糕的解决方案。现在,所有这些都使用适当的标签存在于同一数据库中。
我希望有一天我能够从Albert的概念数据库中进行搜索。也许一旦Notion API最终发布,我将自己构建扩展。
为了说明我可能用太多词描述的内容,您可以查看我的书签数据库的公开部分,其中包含有助于撰写本文的所有资源。此公共数据库中的后列显示为空,因为相关表不是公共的。
4.本地书签源
最后一层根本不需要任何工作。这仅意味着在尝试查找某些内容以及考虑添加新书签时要注意本机书签的来源。例如,很容易搜索您在Stack Overflow上回答的问题。返回您的Hacker News帖子或搜索您在GitHub上加注星标的项目也不是问题。将这些内容保存在您自己的书签源中会增加冗余和噪音。
这些是我最常用的本地书签来源:
https://news.ycombinator.com/
https://twitter.com/
https://github.com/
https://gitlab.com/
https://tkainrad.dev/posts/ ;-)
摘要
我知道这听起来非常复杂。但是,我坚持说,与将所有书签保留在浏览器中相比,它实际上不需要做更多的工作。您仍然只需将每个书签添加一次。如果您将系统内部化,则搜索书签将不会有问题,因为很明显可以找到特定资源。诚然,它确实需要维护才能将大量书签收藏在Notion中,但是很快就会收到回报,并且随着时间的推移会逐渐积累回报。
组织自写资源
拥有一个适当的外部资源系统会很不错,但是如果您自己编写的所有内容都乱七八糟,那将无济于事。因此,组织自写资源至关重要。
博客文章
我最成功的博客文章是关于我如何免费运行和托管该网站的信息。但是,该文章并未涵盖有关运行此站点的最耗时的工作:编写和维护博客文章。为此,我严重依赖于概念。我有一个数据库,其中包含我过去的所有博客文章以及将来的想法。它是简单的添加标签一样done
,doing
,idea
,和查看数据库的看板基于这些标签车道。
起草员额
在此Blog上发布的所有帖子均已在Notion中起草。当它们或多或少完成时,我使用markdown导出并将内容复制到我的Hugo项目中的新文本文件中。这有一些小问题。通常,我必须调整代码格式和链接,但总体而言,它运行良好,并具有一些不错的好处:
在所有设备上编辑
使用此概念,即使在移动时也可以在手机上轻松编辑草稿。使用现有的概念内容,
我可以快速添加代码片段,链接和我保留在概念中的其他内容。这可以通过数据库关系来完成,也可以仅将相应的块拖到草稿页中来完成。轻量级版本控制
作为开发人员,我们喜欢GIT。但是,对于在博客文章中添加几行内容,这是一个过大的杀伤力。概念具有内置的版本控制功能,并自动跟踪所有更改。自然,它不提供复杂的合并选项,但是在编写个人博客时很容易避免冲突。
帖子发布后,我将帖子从doing
移到released
。
跟踪更新思路
您可能已经注意到,我的某些博客文章很长。使它们保持最新是一个挑战。幸运的是,我有一个想法可以帮助我。我有一个数据库,可以在其中添加更新现有帖子的建议。通过使用关系,我将这些想法链接到我的帖子数据库中的相应帖子:
追踪来源
为了跟踪有助于创建帖子的第三方资源,我将它们添加到书签数据库并将它们链接到我的帖子数据库。
您也可以通过我的书签数据库的公开部分查看此帖子的完整资源列表。
记笔记
我想,即使他们没有系统,只是随随便便地将内容写入文本文件,每个软件工程师也会在一定程度上做笔记。还有大量用于记录和整理笔记的免费和付费软件。有些人甚至喜欢在BuJo系统中使用实物纸。
无论您喜欢哪种方法,都必须考虑何时,为什么以及如何做笔记。
何时记笔记
我对这个问题考虑了很多,以前我没有遵守任何有关此问题的预定义规则。为了更好地了解自己的习惯并确定过去最有效的方法,我仔细阅读了过去几年的笔记,这些笔记分布在多个应用程序和许多文件中。我试图找到常见的模式:
从音频源捕获信息
我是一个视觉学习者,并且喜欢书面内容而不是音频。但是,每个人都会遇到许多类型的音频源:会议会议
简报
聚会
会议活动
非正式讨论
影片
播客
保留经常需要但不适合任何适当的文档项目的信息
就我而言,这些信息如下所示:为特定技术堆栈设置开发环境
在特定的托管服务上部署项目。
具有多个参数,复杂选项和路径的命令行。我将它们保存在笔记中,以便可以在不久的将来快速复制粘贴它们。
例如,将来可能需要重复执行的任务说明
问题
有时我想到一个问题,想问一个具体的人,这个人目前不可用。问题及其最终答案是一个很好的注释用例。
由于使用Zsh进行了更为复杂的命令行设置以及用于自动完成和历史搜索的各种插件,因此保留命令行对我而言变得不再重要。如果你还在用猛砸其默认Ctl
- r
搜索,我想你会从我的利润岗位上建立一个Linux工作站。
另一方面,重要的是还要弄清楚该系统中不应该注意的内容:
项目特定的知识
与特定软件项目直接相关的所有内容都不应成为您个人知识库中的注释。相反,它应该进入用于跟踪问题,合并请求,文档等的任何系统。这篇文章下面包含一个单独的部分。短时间内需要的信息 有时我需要在交谈中做笔记,而之后我只需要立即做笔记即可。为此,我只打开VSCode并输入。一旦不再需要该信息,就可以完全删除该文件。
一般而言,不要做得过多和做得不够。如果始终记笔记,则会造成开销和冗余。如果您从不做笔记,那么您将不会有笔记。
为什么做笔记
显而易见的答案是记住事情。这并不意味着笔记应该代替您的记忆。相反,记笔记可以提供结构和上下文,因此可以帮助您的大脑建立知识图谱。我相信做笔记会增加您可以从内存中调出的数据量。
此外,有些事情很难记住,例如在聚会上展示的复杂技术堆栈,带有多个不透明选项的命令行,数字等等。写下这些内容可以大大扩展您的知识库。在将来编写文档或编写类似此类博客文章时,注释也非常有用;-)
如何做笔记
在演讲过程中只打一下可能会很诱人。记下目前看来有趣的事情。但是,您应该满足基本的正式要求并写下一些上下文。否则,将来您将无法从笔记中提取有用的信息。如果您定期记笔记,则通过分配标签和属性,具有创建日期,能够过滤和搜索它们等来组织它们也很重要。软件可以帮助解决这些问题。
直到大约一年前,我主要在本地计算机上记录笔记,并将其与Dropbox同步。即使我使用Google Keep / Notes ,几乎只专注于笔记的应用程序(例如Evernote)也从未吸引过我。它还不错,支持例如贴标签,并且在移动设备上的摩擦很小。但是,甚至没有基本的格式支持,更不用说markdown格式或代码语法突出显示了。
然后,我发现了概念。起初,对我而言,记笔记并不是真的。我之所以喜欢它,主要是因为它的数据库概念以及按书签部分所述组织第三方资源。但是,到目前为止,我几乎将其用于几乎所有笔记和其他类型的手写内容。我认为,Notion组合了markdown语法支持,斜杠命令和WYSIWYG,为您带来了绝佳的写作体验。
我强烈建议组织在一个数据库中所有的笔记与适当的标记,如meeting
,presentation
,tc
,和question
。与上述书签数据库类似,Notion将自动为列提供注释的创建时间。如果您经常与同一个人会面,则可以考虑添加一个“ 参与者”列。
notes数据库是另一个很棒的Notion功能的理想用例:Templates。使用此功能,您可以为不同类型的笔记创建模板,然后例如单击一下添加新的会议笔记。根据模板的不同,新注释将带有预定义的布局,并且可能包括会议参与者和议程的字段。这是当我单击以在数据库中添加新的会议记录时打开的内容:
项目特定知识
以我的经验,最好将项目信息尽可能紧密地保持在一起。对我来说,这意味着问题跟踪,合并请求(即拉取请求),文档以及软件项目随附的所有其他内容应与源代码一起存在。
这种做法保证了现在或将来使用该代码的任何人都可以访问所有信息。我的解决方案是将GitLab用于与特定项目相关的所有内容。这包括几乎所有内容,除了一些我有时在概念中写的快速注释,因为我不希望其他人看到它们。
为此,GitLab提供了许多项目管理和文档功能,例如问题管理,项目Wiki,适用于所有项目和帐户的代码段空间等。对于不是特定于问题的所有文档,项目Wiki是一个不错的地方。这可以包括以下内容:
设置开发环境的说明
手动部署说明
架构描述和图表。我是美人鱼的忠实拥护者,它允许使用Markdown创建UML图,并且得到了GitLab的支持。
有关命名约定,设计范例等的准则
如果您已经阅读了有关运行和托管该网站的文章,那么您知道我也将GitLab用于此个人博客项目。尽管如此,我还是将Notion用于许多项目文档和管理任务,因为如上所述,此概念带来了一些独特的好处。
当然,还有其他选择。GitHub追赶过去,并提供了非常相似的功能集。我对Atlassian产品的经验有限,但是我想您可以通过混合使用BitBucket,Confluence和Jira来实现相同的目的。
附带说一句,用Confluence写作很像用概念写作。两者都可以识别markdown语法并提供斜杠命令以快速插入复杂的内容类型。
管理档案
这是相对简单的。我认为最重要的是使用某种形式的云存储。我个人使用Dropbox。
接下来,您应该考虑适当的文件夹结构。最后,您应该能够快速搜索文件。
我使用Linux,并依靠Albert搜索文件。如果这不工作,我使用的locate
命令和,我的最后一招是命令行工具,如find
,和grep
。对于复杂的搜索要求(例如正则表达式匹配以及文件内容),它们仍然是最主要的选择。
如果可以在三个方框中打勾
在所有设备上的可用性
结构体
可搜寻的
你应该准备好了。
概念数据库支持文件列。这意味着您可以将不同的文件上传到每个单元格。我还没有找到与此软件工程直接相关的用例。但是,它非常适合管理发票。
其他用例
在本节中,我想介绍一些软件工程所特有的特殊类型的知识管理用例。我中的大多数人只有在开始使用Notion后才能正确使用。我绝不想说您应该复制所有这些内容,但是非常欢迎您尝试一下您认为有趣的内容。
代码段
当前,我有两种收集代码段的方式。我希望我最终可以以某种方式将它们集成。
VSCode用户片段
第一个是VSCode用户片段。VSCode正确地完成了许多事情,代码段管理就是其中之一。定义新的代码片段并通过键入预定义的字符串来使用它们非常容易。只需按下Ctrl
- Shift
- p
并选择首选项:配置用户片段。然后,您可以将代码片段拆分为多个文件,也可以将所有代码片段一起放入global-snipptes.code-snippets
文件中。这些是我用markdown和Hugo撰写博客文章的一些片段:
|
|
然后,可以通过键入前缀并按Ctrl
+ 来使用代码片段Space
:
概念片段数据库
第二个用例涉及我自己编写的并且想记住的一小段代码。这不一定是出于生产力原因,而是出于怀旧之情。它是小型算法的理想选择,例如,当您通过应用一些灵巧的技术设法大幅提高某些性能时。
我将这些代码片段保存在一个Notion数据库中,该数据库很好用,因为我可以标记它们并添加任意属性。这种习惯的一个好处是,如果您暂时不这样做,那就不是问题。您的数据库不会突然变得混乱。
捷径数据库
我认为打字熟练度对于软件工程师很重要。如果您可以快速键入内容并使用快捷方式在IDE和工具中导航,则更容易保持顺畅。随着工具集的增加,我意识到我很难跟踪自己正在使用的快捷方式,哪些快捷方式可以在哪个应用程序中使用以及是否可以更改它们,以便它们可以在尽可能多的工具中使用。
因此,我开始跟踪我想在任何地方使用的一些快捷方式。这些操作包括创建新选项卡,创建新窗口,打开相应工具的搜索功能等等。
该数据库可帮助我确定重叠部分,并促使我考虑哪些任务适合于我经常使用的特定键组合。比如,我用Ctrl
- Shift
- T
在IDE的搜索类型定义和Ctrl
- Shift
- R
以搜索一般资源。由于我已经将这些组合键记住了多年并且可以很快使用,因此我想尽可能地利用它。因此,我尝试设置我的应用程序,以便每当我使用这些组合之一时便会打开某种搜索。我的Notion数据库使您可以轻松查看哪些应用程序提供搜索功能以及可以修改哪些功能。
例如,我的浏览器现在前锋Ctrl
- Shift
- T
/ R
对Workona,让我转/搜索工作区或使用通用搜索,分别。
概念的过滤和搜索功能非常适合识别设置中的问题。对我来说,问题是两个应用程序使用不同的快捷方式进行非常相似的操作。不幸的是,Notion是应用程序的否定示例,该应用程序不允许您自定义其快捷方式,因此降低了数据库的实用性。如果Notion团队的某人在某个时候阅读了此内容,请您代表我进行游说,以优先处理个性化的键盘快捷键。
我对此用例感到兴奋,并将在以后的博客文章中更详细地讨论它。
工具数据库
我也有一个Notion数据库来跟踪我使用的小型Web工具。这对于经常使用的东西没有多大作用,因为您仍然会记住它们。但是,对于偶尔需要一次的小事情,例如调色板生成器,将手写体检测为LaTeX符号以及检查SSL证书,这非常方便。通常,您可以通过Google找到这些工具,但是有时有许多工具可以完成一项任务,因此最好跟踪工作最有效的工具。
同样,这里重要的是不要过度操作。有大量此类工具的公开列表。您的清单不应该是这些清单的副本,而应该是您不时喜欢和需要的一小部分收藏。
收集新项目的想法
就像当今黄金时代的许多软件工程师一样,我有时会考虑启动新的软件项目,甚至可能启动一家小型企业。
您可能已经猜到了,我将可能的项目的想法保存在一个Notion数据库中。再次带来的主要好处是,它使我可以轻松地将其与其他数据库(例如书签)链接。
结论
类似的帖子通常以警告结尾,您应该非常小心,不要花太多时间来组织和维护知识和工作流程。原则上,我同意这一观点。毕竟,您想提高生产率。
但是,我确实相信,花一些时间思考您的知识管理系统是值得的。关于系统概念化的最重要部分是准确确定要在知识库中维护的信息类型。如果您做对了,您将在整个职业生涯中受益。即使将来可能会更改工具,系统也会保留下来。
请不要在下面的评论中分享您的经验。我确信我的工作流程并不完美,但是它们可能会与您的技巧更加接近。
本文分享自微信公众号 - 黑帽子技术(SNJYYNJY2020)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。