怎样如软件工程师一样组织知识
知识
![](/data/attachment/album/201901/08/153009n1wdrptp1i6peprq.jpg)


总体上说，软件开发和技术是以非常快的速度发展的领域，所以持续学习是必不可少的。在互联网上花几分钟找一下，在 Twitter、媒体、RSS 订阅、Hacker News 和其它专业网站和社区等地方，就可以从文章、案例研究、教程、代码片段、新应用程序和信息中找到大量有用的信息。


保存和组织所有这些信息可能是一项艰巨的任务。在这篇文章中，我将介绍一些我用来组织信息的工具。


我认为在知识管理方面非常重要的一点就是避免锁定在特定平台。我使用的所有工具都允许以标准格式（如 Markdown 和 HTML）导出数据。


请注意，我的流程并不完美，我一直在寻找新工具和方法来优化它。每个人都不同，所以对我有用的东西可能不适合你。


### 用 NotionHQ 做知识库


对我来说，知识管理的基本部分是拥有某种个人知识库或维基。这是一个你可以以有组织的方式保存链接、书签、备注等的地方。


我使用 [NotionHQ](https://www.notion.so/) 做这件事。我使用它来记录各种主题，包括资源列表，如通过编程语言分组的优秀的库或教程，为有趣的博客文章和教程添加书签等等，不仅与软件开发有关，而且与我的个人生活有关。


我真正喜欢 NotionHQ 的是，创建新内容是如此简单。你可以使用 Markdown 编写它并将其组织为树状。


这是我的“开发”工作区的顶级页面：


[![Image](/data/attachment/album/201901/08/153018k6v8fmmze8g28m0g.png)](https://res.cloudinary.com/practicaldev/image/fetch/s--uMbaRUtu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://i.imgur.com/kRnuvMV.png)


NotionHQ 有一些很棒的其他功能，如集成了电子表格/数据库和任务板。


如果您想认真使用 NotionHQ，您将需要订阅付费个人计划，因为免费计划有所限制。我觉得它物有所值。NotionHQ 允许将整个工作区导出为 Markdown 文件。导出功能存在一些重要问题，例如丢失页面层次结构，希望 Notion 团队可以改进这一点。


作为一个免费的替代方案，我可能会使用 [VuePress](https://vuepress.vuejs.org/) 或 [GitBook](https://www.gitbook.com/?t=1) 来托管我自己的知识库。


### 用 Pocket 保存感兴趣的文章


[Pocket](https://getpocket.com/) 是我最喜欢的应用之一！使用 Pocket，您可以创建一个来自互联网上的文章的阅读列表。每当我看到一篇看起来很有趣的文章时，我都会使用 Chrome 扩展程序将其保存到 Pocket。稍后，我会阅读它，如果我发现它足够有用，我将使用 Pocket 的“存档”功能永久保存该文章并清理我的 Pocket 收件箱。


我尽量保持这个阅读清单足够小，并存档我已经处理过的信息。Pocket 允许您标记文章，以便以后更轻松地搜索特定主题的文章。


如果原始网站消失，您还可以在 Pocket 服务器中保存文章的副本，但是您需要 Pocket Premium 订阅计划。


Pocket 还具有“发现”功能，根据您保存的文章推荐类似的文章。这是找到可以阅读的新内容的好方法。


### 用 SnippetStore 做代码片段管理


从 GitHub 到 Stack Overflow 的答案，到博客文章，经常能找到一些你想要保存备用的好代码片段。它可能是一些不错的算法实现、一个有用的脚本或如何在某种语言中执行某种操作的示例。


我尝试了很多应用程序，从简单的 GitHub Gists 到 [Boostnote](https://boostnote.io/)，直到我发现 [SnippetStore](https://github.com/ZeroX-DG/SnippetStore)。


SnippetStore 是一个开源的代码片段管理应用。SnippetStore 与其他产品的区别在于其简单性。您可以按语言或标签整理片段，并且可以拥有多个文件片段。它不完美，但是可以用。例如，Boostnote 具有更多功能，但我更喜欢 SnippetStore 组织内容的简单方法。


对于我每天使用的缩写和片段，我更喜欢使用我的编辑器 / IDE 的代码片段功能，因为它更便于使用。我使用 SnippetStore 更像是作为编码示例的参考。


[Cacher](https://www.cacher.io/) 也是一个有趣的选择，因为它与许多编辑器进行了集成，他有一个命令行工具，并使用 Gi​​tHub Gists 作为后端，但其专业计划为 6 美元/月，我觉这有点太贵。


### 用 DevHints 管理速查表


[Devhints](https://devhints.io/) 是由 Rico Sta. Cruz 创建的一个速查表集合。它是开源的，是用 Jekyll 生成的，Jekyll 是最受欢迎的静态站点生成器之一。


这些速查表是用 Markdown 编写的，带有一些额外的格式化支持，例如支持列。


我非常喜欢其界面的外观，并且不像可以在 [Cheatography](https://cheatography.com/) 等网站上找到 PDF 或图像格式的速查表， Markdown 非常容易添加新内容并保持更新和进行版本控制。


因为它是开源，我创建了自己的分叉版本，删除了一些我不需要的速查表，并添加了更多。


我使用速查表作为如何使用某些库或编程语言或记住一些命令的参考。速查表的单个页面非常方便，例如，可以列出特定编程语言的所有基本语法。


我仍在尝试这个工具，但到目前为止它的工作很好。


### Diigo


[Diigo](https://www.diigo.com/index) 允许您注释和突出显示部分网站。我在研究新东西时使用它来注释重要信息，或者从文章、Stack Overflow 答案或来自 Twitter 的鼓舞人心的引语中保存特定段落！;）




---


就这些了。某些工具的功能方面可能存在一些重叠，但正如我在开始时所说的那样，这是一个不断演进的工作流程，因为我一直在尝试和寻找改进和提高工作效率的方法。


你呢？是如何组织你的知识的？请随时在下面发表评论。


谢谢你的阅读。




---


作者简介：Bruno Paz，Web 工程师，专精 #PHP 和 @Symfony 框架。热心于新技术。喜欢运动，@FCPorto 的粉丝！




---


via: <https://dev.to/brpaz/how-do-i-organize-my-knowledge-as-a-software-engineer-4387>


作者：[Bruno Paz](http://brunopaz.net/) 选题：[oska874](https://github.com/oska874) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出


OK
Software Development and Technology in general are areas that evolve at a very fast pace and continuous learning is essential.

Some minutes navigating in the internet, in places like Twitter, Medium, RSS feeds, Hacker News and other specialized sites and communities, are enough to find lots of great pieces of information from articles, case studies, tutorials, code snippets, new applications and much more.

Saving and organizing all that information can be a daunting task. In this post I will present some tools tools that I use to do it.

One of the points I consider very important regarding knowledge management is to avoid lock-in in a particular platform. All the tools I use, allow to export your data in standard formats like Markdown and HTML.

Note that, My workflow is not perfect and I am constantly searching for new tools and ways to optimize it. Also everyone is different, so what works for me might not working well for you.

##
[
](#knowledge-base-with-notionhq)
Knowledge base with NotionHQ

For me, the fundamental piece of Knowledge management is to have some kind of personal Knowledge base / wiki. A place where you can save links, bookmarks, notes etc in an organized manner.

I use [NotionHQ](https://www.notion.so/) for that matter. I use it to keep notes on various topics, having lists of resources like great libraries or tutorials grouped by programming language, bookmarking interesting blog posts and tutorials, and much more, not only related to software development but also my personal life.

What I really like about Notion, is how simple it is to create new content. You write it using Markdown and it is organized as tree.

Here is my top level pages of my "Development" workspace:

Notion has some nice other features like integrated spreadsheets / databases and Task boards.

You will need to subscribe to paid Personal Plan, if you want to use Notion seriously as the free plan is somewhat limited. I think its worth the price. Notion allows to export your entire workspace to Markdown files. The export has some important problems, like loosing the page hierarchy, but hope Notion Team can improve that.

As a free alternative I would probably use [VuePress](https://vuepress.vuejs.org/) or [GitBook](https://www.gitbook.com/?t=1) to host my own.

##
[
](#save-interesting-articles-with-pocket)
Save interesting articles with Pocket

[Pocket](https://getpocket.com) is one of my favorite applications ever! With Pocket you can create a reading list of articles from the Internet.

Every time I see an article that looks interesting, I save it to Pocket using its Chrome Extension. Later on, I will read it and If I found it useful enough, I will use the "Archive" function of Pocket to permanently save that article and clean up my Pocket inbox.

I try to keep the Reading list small enough and keep archiving information that I have dealt with. Pocket allows you to tag articles which will make it simpler to search articles for a particular topic later in time.

You can also save a copy of the article in Pocket servers in case of the original site disappears, but you will need Pocket Premium for that.

Pocket also have a "Discover" feature which suggests similar articles based on the articles you have saved. This is a great way to find new content to read.

##
[
](#snippet-management-with-snippetstore)
Snippet Management with SnippetStore

From GitHub, to Stack Overflow answers, to blog posts, its common to find some nice code snippets that you want to save for later. It could be some nice algorithm implementation, an useful script or an example of how to do X in Y language.

I tried many apps from simple GitHub Gists to [Boostnote](https://boostnote.io/) until I discovered [SnippetStore](https://github.com/ZeroX-DG/SnippetStore).

SnippetStore is an open source snippet management app. What distinguish SnippetStore from others is its simplicity. You can organize snippets by Language or Tags and you can have multi file snippets. Its not perfect but it gets the job done. Boostnote, for example has more features, but I prefer the simpler way of organizing content of SnippetStore.

For abbreviations and snippets that I use on a daily basis, I prefer to use my Editor / IDE snippets feature as it is more convenient to use. I use SnippetStore more like a reference of coding examples.

[Cacher](https://www.cacher.io/) is also an interesting alternative, since it has integrations with many editors, have a cli tool and uses GitHub Gists as backend, but 6$/month for its pro plan, its too much IMO.

##
[
](#managing-cheat-sheets-with-devhints)
Managing cheat sheets with DevHints

[Devhints](https://devhints.io/) is a collection of cheat sheets created by Rico Sta. Cruz. Its open source and powered by Jekyll, one of the most popular static site generator.

The cheat sheets are written in Markdown with some extra formatting goodies like support for columns.

I really like the looks of the interface and being Markdown makes in incredibly easy to add new content and keep it updated and in version control, unlike cheat sheets in PDF or Image format, that you can find on sites like [Cheatography](https://cheatography.com).

As it is open source I have created my own fork, removed some cheat sheets that I dont need and add some more.

I use cheat sheets as reference of how to use some library or programming language or to remember some commands. Its very handy to have a single page, with all the basic syntax of a specific programming language for example.

I am still experimenting with this but its working great so far.

##
[
](#diigo)
Diigo

[Diigo](https://www.diigo.com/index) allows you to Annotate and Highlight parts of websites. I use it to annotate important information when studying new topics or to save particular paragraphs from articles, Stack Overflow answers or inspirational quotes from Twitter! ;)

And thats it. There might be some overlap in terms of functionality in some of the tools, but like I said in the beginning, this is an always evolving workflow, as I am always experimenting and searching for ways to improve and be more productive.

What about you? How to you organize your Knowledge?. Please feel free to comment below.

Thank you for reading.

## Top comments (9)

Thank you Bruno for sharing these tips!

I'm on a very similar quest of creating my own knowledge base and I relate a lot with your post :)

In my experience, I have really trouble with the snippets and cheatsheets parts. I never remember about which ones I have or store, and when I was using more than two or three softwares to keep different parts of knowledge, I lost track of where I keep what, and eventually give up. Can you talk a bit more how does it look like when you use your Snippets or Cheatsheets? And how does it look like to use so many different softwares?

Hello. Thank you for your comment.

Yes, Snippets and Cheatsheets is the most difficult part also for me and I am still trying to figure out the perfect workflow.

Right now I am trying to think like this:

I am very bad at memorizing shortcuts so I try to give clear abbreviations and make use of the editor autocomplete function to help me found what I want.

A tip, create your own snippets with sane abbreviations and avoid using third party snippets. You can take inspiration of course but I cant stand with some 3 or 4 letters abbreviations that most snippet packages you can find for popular editors like VSCode or Sublime use.

I use most VSCode and PHPStorm / Intelij but mostly in different contexts, so right now I dont feel the need to have snippets in sync between the two, but would be nice to have some kind of tool to do that.

For a more kind of reference cheat sheets that behaves like a resume of some language documentation, DevHints is working great so far. I like that its just Markdown, which make it kinda portable to other systems.

Same tip as before. Build your own, based on your needs.

For code that I might want to reference later, like interesting scripts or algorithms implementation I found on the internet, then it goes to SnippetStore.

There are some overlap in this for sure.

For example, I constantly search on Google the syntax for "create table" in MySQL. should I make it a snippet in my IDE or adding to the "MySQL" reference in DevHints? In the IDE works great if I am creating a database migration for example, but what if I want to run the query directly in the database? God, organizing snippets is hard!

Its a matter of trying and thinking well about how you want your workflow to be. Maybe you need to build your own tools. Who knows.

About the use of different softwares, I think its ok, If you are clear about the use of each one. It should be a no brainer to know when to use each of them and where to search for a specific piece of information.

In my case, besides snippets that like I said, still have some doubts, its very clear. Found an interesting article, archive to Pocket. All kinds of personal notes, NotionHQ.

Of course, the less software you have to use the better. For example I was using Evernote together with Pocket, and I completely ditched it now as Pocket can do everything I want.

I hope I answered your questions.

Btw, if you want inspiration about building a personal knowledge base take a look at this. Its simply amazing and an inspiration to me!

Thank you for the detailed explanation :)

Yes, we are on the same page about snippets and cheatsheet, it's plain hard. I will try to give a second chance with DevHints though... And yes, that knowledge base is the master of them all.

Hello, very nice tip for code snippets organize, mine are all lost in many locations. Pocket is the best utility for organizing the reading list, I'm using it for many years. I'm using Evernote instead of Notion+Diigo, works really nice for me.

Today are you using the same tools?

I love diigo too!

Nice suggestions! Thank you

Have you ever tried TiddlyWiki?

Nice Share and Good Advice! *Cheers

Can you share your resources, I mean the development workspace.

great article! nice advice !