在博客上写下你所经历的挣扎
编辑我最近和 Jemma 讨论了阻止人们写博客的原因。一个让我印象深刻的障碍是:很难确定哪些事情你知道对其他人会有用!
我用于许多博客文章的过程是:
与某些事情作斗争(通常是与计算机相关的)
最终(几天、几个月或几年后),找出如何解决我遇到的一些问题
写一篇博客文章,讲述什么帮助了我
我认为这种方法是有效的,因为如果我在某些事情上挣扎,很有可能其他人也在为此挣扎,而我学到的东西至少对他们中的一些人是有用的!
显然,这并不是写博客的唯一方法,但这是我的方法,所以我将在这里写关于这个的内容 :)。我会举几个具体的博客文章例子,这些文章都是从我挣扎的事情中产生的。
重要的不是挣扎,而是你学到了什么
这里首要的一点是,博客文章并不完全是关于挣扎的。我写 Rust 代码还不是很擅长,但我不会写一篇叫做“我觉得 Rust 很难”的博客文章——那对任何人都没有帮助!
相反,当我学到一些对我有帮助的东西时,我会写下来,这样它也可以帮助其他人。例如,我在 Rust 中挣扎的一个具体问题是理解引用,所以我写了一篇关于 Rust 中的引用是什么的文章,讲述了我学到的内容。
你所挣扎的事情告诉你应该关注什么
好吧,朱莉娅,你可能会想——如果这是关于你所学到的东西,为什么这篇博客文章不叫“写关于你所学到的东西”呢?嗯,我们都学到了很多!例如在过去的8年里的某个时候我学了 Go 。但是关于 Go 有什么值得讨论的?我应该解释语法吗?谈论?解释 Go 模块?net/http
如果我转而思考我在 Go 语言上遇到的困难,事情突然变得清晰多了——我遇到的问题之一就是死锁!这更加具体,而且比介绍 Go 模块更有可能对其他人有用——如何很好地使用 Go 的并发特性并不明显!
弄清楚你学到了什么可能需要数年时间
当我7年前开始在一家“大”公司(“大”指的是员工超过5人的公司)工作时,我真的不知道如何有效地与我的经理合作,这有时会导致误解。这并不理想!
但当我最初遇到这个问题时,除了“哦不,嗯,这很难”之外,我并没有其他有用的话可说。这是因为我还没有解决自己的问题,所以我肯定不能告诉其他人我学到了什么!我花了几年时间才弄清楚如何与经理良好合作。
我仍在寻找新的方法来解释我所学到的东西——例如,就在几个月前,我意识到(在和我的前经理交谈时),有很多具体的信息是经理们不知道的,如果你认为你的经理知道这些信息,你最终会遇到很多沟通误解和问题。
因此,我写了《你的经理可能不知道的事情》这篇文章,作为帮助人们学习如何有效地与他们的经理合作的又一次尝试。我在离职一年半后写了那篇文章,所以当时我甚至没有经理!
在你还记得哪些是难点时写下来
如果你不记得与这个主题斗争时的感受,很容易误判你学到了什么。
当我第一次在工作中使用 git 时,它让我感到困惑,我犯了很多错误。但那是在2011年,我现在已经不记得当时觉得哪些地方困难了!所以我可以说,学习解决 git 问题最重要的是理解git的对象模型(比如分支/提交是如何工作的),但我不确定这是否正确!我知道我曾经在 git 上挣扎,现在我不再挣扎,现在我对 git 对象的工作方式有了一个很好的模型,但我并不确切记得是什么让我从那里走到了这里。
高级模式:写关于他人的挣扎
但如果你不记得某件事的难点,也不全是损失!绝对有可能写关于别人正在挣扎的话题。我发现做这件事最容易的方式是首先教授这个话题,所以这里有一个关于那个的快速故事。
2019年,我写了一本关于 SQL 的杂志。开始时,我以为这会很容易,因为我对 SQL 相当熟悉——我在 SQL 中做了大量的数据分析,所以我以为我能解释它。
但我完全错了。结果发现,当我开始时,我并不知道学习SQL真正具有挑战性的地方是什么。
我花了很多时间和一位对 SQL 新手的朋友讨论它的工作原理,我们意识到其中一个障碍是他们不清楚给定的 SQL 查询是如何顺序执行的。所以我写了《 SQL 查询不是从 SELECT 开始的》,以及一些相关的例子,这帮助很多人更好地理解了 SQL 查询!
这样做的酷之处在于,当我深入研究我认为容易但别人却挣扎的事情时,我也经常能学到新东西。例如,我确实知道SQL查询的执行顺序,但我从未真正明确地思考过这一点。而更明确地了解它的工作原理帮助我更好地理解了窗口函数,这是我之前有点不确定的东西!
有时候你只是还没有学到足够的关于某个主题的知识(这没关系)
仍然有很多编程和职业方面的事情,我过去曾经挣扎过,但我仍然没有可以写下来的具体教训。例如,我曾经在 Kubernetes 和 Envoy 上遇到很多困难,我也在这个博客上写过一些相关的内容,但我仍然不确定我从遇到的一些问题中学到了什么。而且我不再使用它们中的任何一个,所以我可能永远也无法真正说出来!这种感觉不太好,但没关系。
我偶尔会思考过去我挣扎过的主题,并反思我是否学到了什么可以写下来的东西。通常答案是没有,但有时答案是肯定的!
在互联网上展现脆弱有点奇怪
有时候在互联网上谈论我挣扎的事情有点可怕!以下是我做的几件事情,让这个过程不那么可怕:
主要谈论技术问题!谈论我遇到的计算机问题(“我不理解 Linux 中的组是如何工作的”)对我来说感觉很中立。我们不是生来就知道 Linux 中的组是如何工作的,每个人都需要在某个时候学习它。
在谈论人际关系问题时,要稍微模糊一些!例如,让工作得到认可:写一份夸耀文件源于我在晋升过程中的一些压力。我并不具体谈论我的问题,因为每个人晋升的经历都非常不同,我认为过多关注我的特定问题会分散对教训的注意力(“跟踪你的成就!”)。
花很多时间处理事情!通常情况下,我在某件事上挣扎得越多,我需要花越多的时间来处理它,然后才能弄清楚如何在公众面前谈论我从中学到的东西。
不要谈论一切!显然有很多我在我的博客上从未谈论过的事情 :)
几年前我写了另一篇关于我使用的博客原则的博客文章,它谈到了我在这里使用的更多策略。
你可以练习识别你学到了什么
从“我有一个问题!”到“我不再有那个问题了!”再到“这是我学到的具体东西!”其实并不容易!但这是可以练习的。很容易跳过最后一步——你可以在直觉层面上学习东西,但从未真正识别出你到底学到了什么。
例如,我肯定比过去更擅长测试,但我没有花时间去确切识别这些年来我学到了哪些关于测试的知识!我认为,如果我明确地写下我学到的关于测试的知识,那么我就能在未来更一致地做这些事情,从而编写更好的测试。
与朋友或同事交谈以弄清楚你学到了什么
你自己很难注意到自己学到的东西。就像我们刚刚讨论的,我并不真正知道我学到了哪些关于测试的知识!
我发现与朋友或同事交谈可以更容易地确定我想写关于某个主题的内容。与他人交谈的好处有:
它可以帮助澄清你的想法!
他们可能有与你不同的想法!
他们可以告诉你你所说的是否与他们产生共鸣!
为什么我喜欢公开写作关于我所学到的东西
我认为,无论你是否公开写作关于你所学到的东西,记录下你从困难事情中学到的东西都是非常有价值的。这有助于你记住你所学到的,以便你将来能做得更好!
以下是我之所以喜欢公开写作关于我所学到的东西的几个原因:
它帮助了其他人!在经历了一个非常混乱的情况后,能够拿出一些具体的东西来帮助他人应对类似的情况,感觉好多了。
将写作发布到互联网上真的迫使我思考我自认为学到的教训是否真的有道理(“等等,这真的是真的吗?”)。
当我写作时,我经常会提出额外的问题并进行一些额外的研究,所以我学到的更多!
看到其他人的反应经常帮助我学到新的东西。
如果我想记住我过去学到了什么,我只需在我的博客上查找即可!
感谢 Jemma、Kamal、Shae、Matthieu 和 Travis 对这篇文章草稿的反馈。