[转载]如何创作一个优秀的编程博客
写下的不仅仅是代码,还有文章。
假如你是开源社区的一员,你能够通过代码帮助我们提高编程水平。写作也是一样:不但可以提升自己的知名度,还能让好的想法传播得更广。
更重要的,写作本身就是思考。没有比写作更好的方法来理解技术了。
为什么写博客###
无论你专业宽窄与否,只要你比其他人更懂得如何分析纽约地铁时刻表,那么请把它写出来。如果你曾经成功地教会家里的猫咪照看电子宠物,也请写下来。专业是什么不重要,重要的是把你的理解展示出来。这样我就能够知道你的专长,向你请教。
例如,HappyBase(HBase的Python驱动)的作者,在项目启动前给我发了一封邮件。他从我的博客了解到,我正在开发MongoDB的相关驱动,于是他问了我很多关于连接池的疑难问题。与他一起工作非常令人振奋,对我而言这也是为热门项目贡献的一个高效方法。
让自己成为社区专家或者令人信服的讲解员会让你受益良多。你提交的补丁会更容易被项目接受,你会收到技术大会的演讲邀请,你会有更多的用户以及工作机会。
为bug撰写分析文章会让你思考得更深入,比其它任何技巧都要管用。我对“写作-思考”的方式是如此热衷,以至于每次遇到疑难问题我会立刻开始写一篇关于这个问题的文章。去年遇到PyMongo的连接池bug的时候我就是这么干的。最后定位到的问题是,Python 2.6中为threadlocal赋值不是线程安全的。
如果不是通过写作的方式确认每一步行动及结果,我肯定无法发现如此复杂的竞态条件。
博客要写什么###
在我看来,程序员的写作内容包含五种类型:故事(story)、观点(opinion)、指南(how-to)、原理分析和评论(review)。如果你已经下定决心写作,但还没有选好一个主题或者不知道如何开始,下面的内容会对你有所帮助。
故事####
“下面我要向你介绍有关Foo(技术)的那些事,它是如何让我学会Bar(技巧)并最终达成Baz(目标)。首先这么做……,然后就会出现……。这些就是有关Foo的故事。”
例如:
- 我们遇到了一次运行中断,下面是时候总结了。
- 我参加了一个会议,听了某某演讲,与某技术大拿进行了交流,有所收获。
- 我通过了某项极难的考验,我的FitBit也通过了检验。
- 我曾经养过仓鼠。它们后来挂了,我非常伤心。最后就这样接受了。
我们天生对故事感兴趣。你不需要感到忏悔或者觉得自己令人讨厌。如果从你的博客了解过一些关于你的情况,你的技术文章会让我感觉更加亲切,我也会记得你的名字。
观点####
“论文,论点,反对意见,重复论点。”就像我们从高中学到的那样,最重要的是不只持有某个观点,而且能够通过强有力的论据来提供支持。
不要重复这些无用的争论,比如“Foo技术很烂”或者“Bar比Foo更好”。攻击别人不会带来任何价值。Miyagi先生说过:空手道只是一种自卫的手段。
例如:
- Foo会成为下一项伟大的技术。
- Bar与Baz可以很好地配合工作。
- 开源项目的作者对用户绝对负责。
- 不参与开源项目没有问题。
- 大学生的职业选择有很大的问题。
指南####
“在某些条件下运行Foo时非常重要的。我将会向你展示如何使用Foo。先这么做……,再那么做……。现在我会向你展示如何使用Foo。你应该行动起来使用Foo。”
指南的内容必须是积极的:你必须让读者了解使用的时机和重要性。
例如:
- 如何调试崩溃、内存泄露或者竞态条件?
- 如何孕育一个开源项目?
- 如何准备一个技术演讲?
- 如何举办一场技术会议?
- 每当解决一个难题,请把解决的过程写下来!
原理分析####
“你想知道Foo的工作机制吗?我会展示Foo的实现方式。它可以完成这项和那项功能,我会告诉你它是如何做到的。”
在读完代码之后,每一项让我敬畏的技术几乎都是易于理解的。写一篇技术分析对深入该技术是一个很好的切入点。
然而”技术的工作原理“这一类的文章靠的并不是**。当然,有些用户希望通过理解背后的工作原理来更好地使用这项技术。像我这样对所有事情工作机制都感兴趣的人,必定会成为这些文章的读者。对这类内容不感兴趣的朋友可以跳过。
例如:
- Django ORM是如何生成SQL的?
- socket.settimeout()是怎样工作的?
- Python代码为什么会报告SyntaxWarning?
- xrange是如何工作的?
评论####
“我读过相关文章、知道运行效果、也实际操作过或者知道这项技术在哪里用过。这就是我对这项技术的理解和经验。它有自己的优缺点。总结一下,在某种特定条件下它是最合适的技术。”
在对书籍、电影、游戏或者项目进行好坏评价打分是相当诱人的,但并不管用。描述分析而不是评价,告诉我它们究竟好在哪里。
例如:
- 技术书籍!尽管在你所在的领域中保持阅读最新的著作是很好的,但它们不必是最新发布的版本。带着写书评的观点阅读会让你读得更加仔细,而且阅读会教你如何写作。下面是我对O'Reilly《使用MongoDB和Backbone构建Node应用》一书的书评“。
- 虽然是别人的项目,但评论时请保持温柔。
- 游戏、电影、音乐和书籍与编程不同:写书评是最佳练**,可以让博客保持热度。
如何找到读者###
不要关心点击量。点击量不是编程写作的目标。就像Seth Godin说的那样:“大多数时候,如果要取悦大众注定会失败。更容易做到的是把目标人群缩小,而不是扩大。这样可以在一个充满信任和喜悦的群体中建立长期价值,这样的工作能够经历时间的考验。”
一旦你不再关心点击率,就不要在SEO上浪费时间了。你的目标不是获取更多的点击量。你不是网络热点资源。偶尔点击的访问者对你没有价值,因为你展示的不是广告。与之相反,你的目标是吸引所在领域的专家,并与他们分享你的想法。幸运的话,你会因此更容易地与行业专家进行交流。
首先,找到你所在技术社区的信息聚合点。我写了很多有关Python的内容。Planet Python是目前为止发布文章的最佳频道。任何在“Python”分类上发布的文章能够保证有至少上百次访问。向p***@python.org投稿会让你的文章获得发布。(这是由许多忙碌的志愿者负责维护的,请保持耐心。)如果你想要写其它编程语言或技术的文章,请找到该技术的信息聚合点并请求加入他们。
将你的文章在Tweeter上分享也是很有意义的。将你的文章发布到reddit对应的分类频道会更有价值。在你的主页中向读者展示最好的文章,而不是最新的文章。
你可以到Hacker News上试试,但是我认为那里不是发布严肃技术文章的地方,所以后来没有继续在那里发布。
如何改进你的博客###
模仿,模仿那些最好的博客和最好的文章。
不要模仿Daring Fireball、GigaOM或TechCrunch。这些是业界的新闻站点,所有的内容最终会落实到一个问题:哪些公司的股票会飘红?哪些会变绿?这些与专业无关。不仅如此,而且会很枯燥。
请模仿下面这些作者:
- Glyph Lefkowitz。在他的“Unyielding”中讨论异步的最大优点,不是高效而是可以更容易地避免竞态条件。
- Kristina Chodorow。她的这篇“Stock Option Basics”讲述了她退出创业公司的故事,并分享了很多保持持续价值的财务建议。关于MongoDB单元测试的文章非常专业,但是我经常查看这篇文章的原因是它提供了完整额MongoDB开发文档信息。Kristina的风趣和蔼的嗓音出现在她的博客和O'Reilly's的《MongoDB终极指南》中。
- Armin Ronacher。他的“Exec in Python”篇幅非常长,但非常详尽且经典。全部读完几乎需要1个小时。这篇文章花费了几天时间写成。可以确信,在正式发布之后,他肯定花费了不少时间继续跟进修订。这篇文章对Python 2和Python 3的运行时给出了详尽的讲解,包括web2py的工作机制,并且提出了一种可替代的工作机制。
- Julia Evans在她的博客中是松散却精力旺盛的,和她的演讲风格一样。但是不要被表面现象迷惑,她在匿名会议上的提案非常严谨。同样严谨的还有她通过机器学**解决商业稳定的建议。
- Graham Dumpleton关于Python装饰器的权威系列让相同主题的其它文章相形见绌。
如何达成优秀博客###
写作并不总是需要很多时间,因为并不要求定期或经常发布。有价值的文章通常不是定期发布的,但却有深度的文章。更重要的是,不要仓促动笔去写一篇文章,因为好的主题总是一直在那里。就像Patrick McKenzie说的那样:“你可以而且应当把主要的精力放在最有价值的主题上。写一堆不那么有价值的文章和写一篇经典的文章花费的时间一样长。”
(这是同一篇文章的第二个链接,这篇文章的质量就像上面说的那样。)
所以,别着急。当你有一个好的想法或者非同寻常的经历时,把它写下来。
总结###
你知道编程中哪些东西是值得探究的,或者对某个常见的主题有新的见解。但不管怎样,我希望你能够用写作的方式分享你的知识。写作比其它任何方式都能更好地加深你对技术的理解。如果你不知道写些什么,试试我上面提到的点子或者看看那些可以激发灵感的博客。磨练文章成就长久价值。
原文:“Write An Excellent Programming Blog” by A. Jesse Jiryu Davis
原文链接:https://dzone.com/articles/write-excellent-programming
翻译:唐尤华
转载自: https://sanwen8.cn/p/1a6pFAS.html
PS:
一篇优秀的文章必定是原创、专业、新颖、独特的见解,蕴含着自己用心学习和探索的成果。