管理我的個人知識庫

介紹

很難想象在終身學習比軟件工程中更重要的其他領域。另一個獨特的特徵是可以在互聯網上免費獲得學習材料的程度。最重要的是,我們通過記錄問題,提交錯誤報告,編寫註釋,創建文檔等來自己創建各種資源。所有這些資源的總和可以稱爲知識庫。您可能會爭辯說,每個開發人員都有一個系統來管理他們的個人知識庫,無論他們是否知道。在這篇文章中,我將解釋我的知識管理實踐。

軟件工程師的個人知識庫可能與他們的僱主和項目合作伙伴的知識重疊。確保仔細研究您的數據保護義務。一個良好的基礎是嚴格保持您的個人知識庫的技術性,並且永遠不要包含與客戶或一般人相關的數據。

我選擇此主題的原因主要有以下三個:

  1. 樂趣:
    我喜歡考慮自己的工作流程並嘗試改進它們。也許有些過多,當我嘗試向他們推薦一種新工具時,一些朋友已經開始睜大眼睛。

  2. 改善我的系統和工作流程:
    撰寫有關我的Linux設置的帖子對我來說是非常有益的。在記錄我的配置(尤其是我的命令行工作流)時,我發現了自那時以來已消除的一些缺點。寫完本文後,我已經可以說我的知識管理工作流程也得到了類似的改進。

  3. 相關性:
    各種形式的知識管理對於軟件工程都是不可或缺的。

知識管理任務經常完成。有效地完成這些任務是值得的。(資料來源:xkcd.com)

這篇文章的大部分內容都歸因於描述我對軟件工具的使用。星星將

  • 概念

  • 亞搏體育app

  • 沃納

  • 投寄箱

  • 阿爾伯特

複製我所有的做法可能不會很好地爲您服務。我邀請您按照自己的節奏嘗試一些事情,並在每次尋找新想法時重新訪問這篇文章。

收藏

即使每個人都喜歡書,或者至少喜歡這樣說,包括我自己在內,但現實是我們大部分時間都依賴數字資源。挑戰在於如何有效地組織這些知識,而又不會產生太多開銷。

我認爲有些幼稚的方法還不夠。直到幾年前,我主要依靠瀏覽器書籤,但是由於某些原因,瀏覽器沒有提供適當的組織功能。另一種方法是將URL複製到註釋,項目問題,文檔和所有其他類型的手動創建的內容中。這是可行的,我們都定期進行,但與我認爲的書籤管理無關。

我當前的設置稍微複雜一點,但是最後,與僅在瀏覽器中保留書籤相比,它不需要做更多的工作。我將書籤組織成多層,這取決於我要訪問它們的頻率以及它們應保留的時間。

也許您正在考慮現在進行緩存,但是幸運的是,書籤層不是緩存級別。這將很難管理,因爲衆所周知,計算機科學中存在兩個難題:緩存失效,命名和錯誤代碼1。與緩存條目相反,書籤不應在層之間移動。而是將其插入正確的位置並停留在該位置。

下圖說明了我的圖層:

書籤層

1. Chrome書籤

Chrome書籤有一些不錯的好處。它們在設備之間是同步的,可以輕鬆添加新設備,並且在文件夾中組織它們至少帶來了一些結構。對我來說,另一個優勢是Albert Chromium擴展程序,它使我可以從Albert訪問並打開我的Chrome書籤:

直接從Albert搜尋Chrome書籤。按下Enter鍵即可在Chrome中打開所選條目。

由於這些優點,Chrome書籤非常適合我經常需要並且希望能夠獨立於上下文訪問的內容。但是,它們不太適合保留大量的書籤庫。沒有標籤,無法添加註釋,瀏覽器甚至都沒有爲頁面添加書籤的時間戳。進一步不可能使用複雜的查詢來過濾和搜索Chrome書籤。以我的經驗,如果瀏覽器書籤庫的大小超過一定大小,將很難對其進行管理。

合適的Chrome書籤的一些示例:

  • AWS EC2儀表板

  • Google雲平臺控制檯

  • 鬆弛的工作區

  • GitLab開發板

  • 內容網站,例如Hacker NewsInfoQDZone

不應作爲 Chrome書籤的示例

  • 博客文章,稍後閱讀

  • 鏈接到開源項目

  • 堆棧溢出問題

2. Workona

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中,但是很快就會收到回報,並且隨着時間的推移會逐漸積累回報。

組織自寫資源

擁有一個適當的外部資源系統會很不錯,但是如果您自己編寫的所有內容都亂七八糟,那將無濟於事。因此,組織自寫資源至關重要。

博客文章

我最成功的博客文章是關於我如何免費運行和託管該網站的信息但是,該文章並未涵蓋有關運行此站點的最耗時的工作:編寫和維護博客文章。爲此,我嚴重依賴於概念。我有一個數據庫,其中包含我過去的所有博客文章以及將來的想法。它是簡單的添加標籤一樣donedoingidea,和查看數據庫的看板基於這些標籤車道。

起草員額

在此Blog上發佈的所有帖子均已在Notion中起草當它們或多或少完成時,我使用markdown導出並將內容複製到我的Hugo項目中的新文本文件中這有一些小問題。通常,我必須調整代碼格式和鏈接,但總體而言,它運行良好,並具有一些不錯的好處:

  • 在所有設備上編輯
    使用此概念,即使在移動時也可以在手機上輕鬆編輯草稿。

  • 使用現有的概念內容,
    我可以快速添加代碼片段,鏈接和我保留在概念中的其他內容。這可以通過數據庫關係來完成,也可以僅將相應的塊拖到草稿頁中來完成。

  • 輕量級版本控制
    作爲開發人員,我們喜歡GIT。但是,對於在博客文章中添加幾行內容,這是一個過大的殺傷力。概念具有內置的版本控制功能,並自動跟蹤所有更改。自然,它不提供複雜的合併選項,但是在編寫個人博客時很容易避免衝突。

帖子發佈後,我將帖子從doing移到released

跟蹤更新思路

您可能已經注意到,我的某些博客文章很長。使它們保持最新是一個挑戰。幸運的是,我有一個想法可以幫助我。我有一個數據庫,可以在其中添加更新現有帖子的建議。通過使用關係,我將這些想法鏈接到我的帖子數據庫中的相應帖子:

當您完成設置完美的Linux工作站時,很難知道

追蹤來源

爲了跟蹤有助於創建帖子的第三方資源,我將它們添加到書籤數據庫並將它們鏈接到我的帖子數據庫。

我的書籤數據庫已篩選爲僅顯示與此帖子相關的條目。

您也可以通過我的書籤數據庫公開部分查看此帖子的完整資源列表

記筆記

我想,即使他們沒有系統,只是隨隨便便地將內容寫入文本文件,每個軟件工程師也會在一定程度上做筆記。還有大量用於記錄和整理筆記的免費和付費軟件。有些人甚至喜歡在BuJo系統中使用實物紙

無論您喜歡哪種方法,都必須考慮何時,爲什麼以及如何做筆記。

何時記筆記

我對這個問題考慮了很多,以前我沒有遵守任何有關此問題的預定義規則。爲了更好地瞭解自己的習慣並確定過去最有效的方法,我仔細閱讀了過去幾年的筆記,這些筆記分佈在多個應用程序和許多文件中。我試圖找到常見的模式:

  • 從音頻源捕獲信息
    我是一個視覺學習者,並且喜歡書面內容而不是音頻。但是,每個人都會遇到許多類型的音頻源:

    • 會議會議

    • 簡報

    • 聚會

    • 會議活動

    • 非正式討論

    • 影片

    • 播客

  • 保留經常需要但不適合任何適當的文檔項目的信息
    就我而言,這些信息如下所示:

    • 爲特定技術堆棧設置開發環境

    • 在特定的託管服務上部署項目。

    • 具有多個參數,複雜選項和路徑的命令行。我將它們保存在筆記中,以便可以在不久的將來快速複製粘貼它們。

    • 例如,將來可能需要重複執行的任務說明

  • 問題
    有時我想到一個問題,想問一個具體的人,這個人目前不可用。問題及其最終答案是一個很好的註釋用例。

由於使用Zsh進行了更爲複雜的命令行設置以及用於自動完成和歷史搜索的各種插件,因此保留命令行對我而言變得不再重要。如果你還在用猛砸其默認Ctlr搜索,我想你會從我的利潤崗位上建立一個Linux工作站

另一方面,重要的是還要弄清楚該系統中不應該注意的內容

  • 項目特定的知識
    與特定軟件項目直接相關的所有內容都不應成爲您個人知識庫中的註釋。相反,它應該進入用於跟蹤問題,合併請求,文檔等的任何系統。這篇文章下面包含一個單獨的部分

  • 短時間內需要的信息 有時我需要在交談中做筆記,而之後我只需要立即做筆記即可。爲此,我只打開VSCode並輸入。一旦不再需要該信息,就可以完全刪除該文件。

一般而言,不要做得過多和做得不夠。如果始終記筆記,則會造成開銷和冗餘。如果您從不做筆記,那麼您將不會有筆記。

爲什麼做筆記

顯而易見的答案是記住事情。這並不意味着筆記應該代替您的記憶。相反,記筆記可以提供結構和上下文,因此可以幫助您的大腦建立知識圖譜。我相信做筆記會增加您可以從內存中調出的數據量。

此外,有些事情很難記住,例如在聚會上展示的複雜技術堆棧,帶有多個不透明選項的命令行,數字等等。寫下這些內容可以大大擴展您的知識庫。在將來編寫文檔或編寫類似此類博客文章時,註釋也非常有用;-)

如何做筆記

在演講過程中只打一下可能會很誘人。記下目前看來有趣的事情。但是,您應該滿足基本的正式要求並寫下一些上下文。否則,將來您將無法從筆記中提取有用的信息。如果您定期記筆記,則通過分配標籤和屬性,具有創建日期,能夠過濾和搜索它們等來組織它們也很重要。軟件可以幫助解決這些問題。

直到大約一年前,我主要在本地計算機上記錄筆記,並將其與Dropbox同步。即使我使用Google Keep / Notes ,幾乎只專注於筆記的應用程序(例如Evernote)也從未吸引過我。它還不錯,支持例如貼標籤,並且在移動設備上的摩擦很小。但是,甚至沒有基本的格式支持,更不用說markdown格式或代碼語法突出顯示了。

然後,我發現了概念起初,對我而言,記筆記並不是真的。我之所以喜歡它,主要是因爲它的數據庫概念以及按書籤部分所述組織第三方資源但是,到目前爲止,我幾乎將其用於幾乎所有筆記和其他類型的手寫內容。我認爲,Notion組合了markdown語法支持,斜槓命令和WYSIWYG,爲您帶來了絕佳的寫作體驗。

我強烈建議組織在一個數據庫中所有的筆記與適當的標記,如meetingpresentationtc,和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對於複雜的搜索要求(例如正則表達式匹配以及文件內容),它們仍然是最主要的選擇。

如果可以在三個方框中打勾

  1. 在所有設備上的可用性

  2. 結構體

  3. 可搜尋的

你應該準備好了。

概念數據庫支持文件列。這意味着您可以將不同的文件上傳到每個單元格。我還沒有找到與此軟件工程直接相關的用例。但是,它非常適合管理髮票。

其他用例

在本節中,我想介紹一些軟件工程所特有的特殊類型的知識管理用例。我中的大多數人只有在開始使用Notion後才能正確使用我絕不想說您應該複製所有這些內容,但是非常歡迎您嘗試一下您認爲有趣的內容。

代碼段

當前,我有兩種收集代碼段的方式。我希望我最終可以以某種方式將它們集成。

VSCode用戶片段

第一個是VSCode用戶片段。VSCode正確地完成了許多事情,代碼段管理就是其中之一。定義新的代碼片段並通過鍵入預定義的字符串來使用它們非常容易。只需按下CtrlShiftp並選擇首選項:配置用戶片段然後,您可以將代碼片段拆分爲多個文件,也可以將所有代碼片段一起放入global-snipptes.code-snippets文件中。這些是我用markdown和Hugo撰寫博客文章的一些片段:

 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
"figure": {
"scope": "markdown",
"prefix": "fig",
"body": [
"{{< figure src=\"/images/\" class=\"center-figure\" caption=\"\" >}}"
],
"description": "Insert hugo figure shortcode"
},
"callout": {
"scope": "markdown",
"prefix": "callout",
"body": [
"{{% callout \"warning info tip note\" %}}",
"",
"{{%/callout %}}"
],
"description": "Insert hugo callout shortcode"
},
"code": {
"scope": "markdown",
"prefix": "code",
"body": [
"{{< highlight bash \"linenos=table\">}}",
"",
"{{< / highlight >}}"
],
"description": "Insert hugo code shortcode"
}

然後,可以通過鍵入前綴並按Ctrl來使用代碼片段Space


概念片段數據庫

第二個用例涉及我自己編寫的並且想記住的一小段代碼。這不一定是出於生產力原因,而是出於懷舊之情。它是小型算法的理想選擇,例如,當您通過應用一些靈巧的技術設法大幅提高某些性能時。

我將這些代碼片段保存在一個Notion數據庫中,該數據庫很好用,因爲我可以標記它們並添加任意屬性。這種習慣的一個好處是,如果您暫時不這樣做,那就不是問題。您的數據庫不會突然變得混亂。

我在Noion中的代碼段數據庫的示例性條目。

捷徑數據庫

我認爲打字熟練度對於軟件工程師很重要。如果您可以快速鍵入內容並使用快捷方式在IDE和工具中導航,則更容易保持順暢。隨着工具集的增加,我意識到我很難跟蹤自己正在使用的快捷方式,哪些快捷方式可以在哪個應用程序中使用以及是否可以更改它們,以便它們可以在儘可能多的工具中使用。

因此,我開始跟蹤我想在任何地方使用的一些快捷方式。這些操作包括創建新選項卡,創建新窗口,打開相應工具的搜索功能等等。

該數據庫可幫助我確定重疊部分,並促使我考慮哪些任務適合於我經常使用的特定鍵組合。比如,我用CtrlShiftT在IDE的搜索類型定義和CtrlShiftR以搜索一般資源。由於我已經將這些組合鍵記住了多年並且可以很快使用,因此我想盡可能地利用它。因此,我嘗試設置我的應用程序,以便每當我使用這些組合之一時便會打開某種搜索。我的Notion數據庫使您可以輕鬆查看哪些應用程序提供搜索功能以及可以修改哪些功能。

例如,我的瀏覽器現在前鋒CtrlShiftTRWorkona,讓我轉/搜索工作區或使用通用搜索,分別。

我的概念快捷方式數據庫的屏幕截圖

概念的過濾和搜索功能非常適合識別設置中的問題。對我來說,問題是兩個應用程序使用不同的快捷方式進行非常相似的操作。不幸的是,Notion是應用程序的否定示例,該應用程序不允許您自定義其快捷方式,因此降低了數據庫的實用性。如果Notion團隊的某人在某個時候閱讀了此內容,請您代表我進行遊說,以優先處理個性化的鍵盤快捷鍵。

我對此用例感到興奮,並將在以後的博客文章中更詳細地討論它。

工具數據庫

我也有一個Notion數據庫來跟蹤我使用的小型Web工具。這對於經常使用的東西沒有多大作用,因爲您仍然會記住它們。但是,對於偶爾需要一次的小事情,例如調色板生成器,將手寫體檢測爲LaTeX符號以及檢查SSL證書,這非常方便。通常,您可以通過Google找到這些工具,但是有時有許多工具可以完成一項任務,因此最好跟蹤工作最有效的工具。

我在Notion中的軟件工具數據庫的屏幕快照。

同樣,這裏重要的是不要過度操作。有大量此類工具的公開列表。您的清單不應該是這些清單的副本,而應該是您不時喜歡和需要的一小部分收藏。

收集新項目的想法

就像當今黃金時代的許多軟件工程師一樣,我有時會考慮啓動新的軟件項目,甚至可能啓動一家小型企業。
您可能已經猜到了,我將可能的項目的想法保存在一個Notion數據庫中。再次帶來的主要好處是,它使我可以輕鬆地將其與其他數據庫(例如書籤)鏈接。

結論

類似的帖子通常以警告結尾,您應該非常小心,不要花太多時間來組織和維護知識和工作流程。原則上,我同意這一觀點。畢竟,您想提高生產率。

但是,我確實相信,花一些時間思考您的知識管理系統是值得的關於系統概念化的最重要部分是準確確定要在知識庫中維護的信息類型。如果您做對了,您將在整個職業生涯中受益。即使將來可能會更改工具,系統也會保留下來。

請不要在下面的評論中分享您的經驗。我確信我的工作流程並不完美,但是它們可能會與您的技巧更加接近。



本文分享自微信公衆號 - 黑帽子技術(SNJYYNJY2020)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章