如何写一篇好的技术博客
oschina 发布于: 2013年12月10日 (36评)
分享到:
收藏 +181
阿里百川,开启移动应用开发的新篇章
在工作过程中,发现对很多东西都一知半解,不是很透澈,到头来很容易模糊,如果有一篇好的技术博客予以总结,一来即使忘记了,回国头来再看,仍然能 够从自己的思路中恢复;二来总结一下,还会发现一些潜在问题;三来,有利于大家交流技术。很多大公司都有自己的内部技术博客平台,写好自己的技术博客,对 一个技术人员来说,也有一定的成就感。
在网上查阅资料,经常可以看到一些技术博客,要么废话连篇、排版紊乱,要么代码占了篇幅的60%,有些甚至是错的,会让人产生误解。因此,在这总结 一下一篇好的技术博客应该是怎样的,同时也规整自己的不良习惯。本篇博客纯属个人的一点想法,是个原则性的东西,切忌逐条对号入座啊。
本篇博客耗时2小时。
一、带着明确的目的写博客
经常看到这种博客,为了写博客而写博客。比如一篇介绍socket接口的使用方法的博客,罗列了一堆代码,凑上几句话:“首先…,其次….,最 后…”,就算OK。如果你的目的是“练习如何使用写博客的软件”,或者“罗列接口”,甚至“练习写作的方法”,那么可能达到了目的。但是我想,写一篇技术 博客,首先是要明确该博客的目的,通常是学习一项技术、解决一个技术问题什么的,比如“学习Linux内存管理机制”,“解决kernel pannic的问题”,“打发时间”等。
不是所有的的事情都要写一篇博客来记录,要有自己的判断什么东西值的写,什么东西不值的写。
二、写自己的博客
网上相互转载的帖子很多,一篇写的不错的博客经常会被转载,建议不要轻易转载别人的帖子,要写自己的博客。同样一个知识点,或者同样一个问题,你的 理解和别人的理解的程度很可能是不一样的,如果轻易的看过以后转载了别人的博客,可能意味着一次自我学习或体会的机会的放弃。可能有人会说:”同样一个 GFS的架构图,我画也是这样,他画也是这样,因为GFS就是这样设计的“,这里并不是要求任何一个细节都自己去做,而是要有自己的想法、自己的理解,比 如GFS分层的原则是什么?为什么这样分层,分层的好出?如果我要是去做的话,我会怎么搞?
写自己的博客可不是意味着不转载别人的,比如说我看了一篇博客,并且经过实验,却是与博客里面写的完全一致,不多也不少,如果要是自己的写的话,也 会写的基本一样,那就没必要再花费时间自己写了。另外,以及纯粹记录性的博客,可以转载,比如“C语言运算符的优先级”,当然转载还是原创都不重要了。
另外,把别人的好的博客作为自己的原创,不但没品,而且自欺欺人。
如果在博客中参考了别人的博客,可以在参考资料里面提及,如果是完全转载,也应注明转载出处。
三、博客是总结,不是过程
写博客有的时候是一个解决问题的过程。为了解决一个问题,今天采用了a方法,发现不行,明天采用了b方法,发现也不行,后天采用c方法,发现行了, 那么最终的博客应该是在c方法解决问题后,开始写的。当然,前面的a,b方法,是需要做记录的,但只是博客的原始材料,而不是博客本身。
在刚开始写博客时,我经常出现这种情况:对一个技术不清楚,想了解一下,就开一篇技术博客,边查资料边填写博客,结果基本上就是读、复制、粘贴、 读、复制、粘贴…的过程。最后落到自己手里也是空空如也,想起一句谚语:“狗熊掰梆子——掰一个丢一个”,在懊恼自己的缓存为什么这么少的同时,我也想是 否是方法不对?后来我想过,要想掌握一项技术、知识,大概需要这样一个过程:实践遇到问题——理论学习问题——实践解决问题——理论总结问题。我想很多情 况我是缺少了其中的三个部分,只有“理论学习问题”的过程。
后来,我就改成按下列步骤写博客了:
碰到了问题,如果解决不了,而又比较有价值的话,就先记录下来,作为一篇博客的开篇。
首先,先自己分析问题,基于已有的现象,思考,在笔记本上记录问题与可能的思路。
其次,从外界获取经验或者知识,比如请教别人,google等,学习他们,在笔记本上记录关键点。
然后,在实际中用学来的方法去解决问题,笔记本做好记录,要像水流过水渠一样流淌前面记录的思路。
最后,拿过笔记本,将以上过程再总结成一篇博客。
当然,并不是所有博客都能够先从”实践遇到问题”开始,因为很多情况下都是先从书本理论开始学习的(这也就产生了一定的局限性,有时候你学的很好, 反而陷入了固有的框架;有时你学的不好,显得自己更加无知)。这种情况,问题是需要自己总结出来的,比如ULK上会介绍中断和异常的处理机制,这包括中断 的过程、CPU的工作、内核的工作、软中断的处理、tasklet等等,我们学习中断,不仅仅是一旦发生中断,Linux内核是按照什么流程去处理,而是 要找到这么处理的原因,也就是解决了什么问题。有时,实践验证的成本过高,在有条件的前提下做吧。
知识开始学习的时候,经常是只见树木,不见森林。俗话说:”孤木不成林“,弄上三五棵树,才会有”森林“的感觉。
四、尽量拒绝三手技术
在实际学习或者工作中,一个问题不明白,那么就需要请教别人。如果能够从周围的高手、牛人那得到简单、直接的答复,那是最好的。如果不能,就需要自 己在网上查找资料,可能一个问题,林林总总的在网上能搜出很多,选择看哪些就是个问题。尽量去选择原发性的材料,如果你在查gcc的一个编译选项是什么意 思,可以使用man手册,如果还不清楚,就去gnu的官方站点去查,最好不要随便从某个转载的技术博客上获取。如果你要找x86平台CPU访问内存的方 式,应该从Intel的官方站点去找CPU的资料,最好不要随便在网上找篇博客看了拉到(起码应该先看官方材料)。
别人的博客自然带有别人的理解,而这种理解可能带有一定的主观性,有时甚至是错误的,应该养成从原产地采购的习惯。如果哪天能够发明一项技术,那么 这算一手技术;如果你在学习一项成熟的技术,那么该技术就属于二手技术了,如果你再从一个非源发性的地方去学习,那么很可能就是“三手技术”。当然,需要 考虑实践成本,有时实在找不到源发性的材料,也不要太勉强自己了。另外,英文文章的水平整体高于国人的文章水平,应该尽量看英文文章。
五、分清主次、落脚关键点
世界万事万物都有联系,凡是和本篇博客的主题有联系的问题,都在本篇博客中描述,是不现实的,也是没必要的。个人认为,一篇技术博客应该不超过两个 主题,如果超过了,就应该拆分。但是次要问题可能会有不少,这些次要问题不一定都要解决掉,但一定要分清除优先级,和主题关系比较大的,应首先解决,关系 小的,应其次解决,甚至并不在本篇博客中解决。对于没有解决的问题,可以列在”遗留问题“中,对于在其他博客中讨论的问题,给予链接。
根据自己的能力,耕耘到合适的层次。我将掌握一项技术划分为如下层次,在博客中通常应该达到第三个层次:
听说过该技术,了解该技术解决什么问题;
使用过该技术,熟悉该技术的使用方法;
解构过该技术,熟悉该技术的架构、原理;
贯通过该技术,将该技术与自己的以有知识完全融合,可以利用该技术架构或解决其他问题。
六、技术博客的风格
技术博客不是论文,技术博客由其实用性。当然,也有将论文发在博客上的,比如技术博客的作者大部分应该是工程师,而不是学院派。一篇技术博客可以 是小到的一个编程技巧,可以写该技巧的原理、实现方法、好处,但不要写前500后300年的历史介绍和展望未来。技术博客通常关心技术的实用性,而非技术 背后理论的复杂性。技术博客也不应该过分求全责备,把文章写的大而全,而应该追求小而精。
技术博客应以陈述语气,个人感情色彩应该过滤掉,技术不是生活的全部。有人写技术博客,常喜欢加入自己的心情,“xxx让我好烦啊”、“xxx很难,我一直持续搞了两天没睡觉”,我个人拒绝这种“呻吟”的风格。
忌罗列代码。代码是实现的过程,而不是原理,列代码是为了看清流程,而非为了列代码而列代码。我个人的习惯是尽量少列代码,如果能够使用校小的篇幅就能说明原理,绝不使用大篇幅的代码。但是如果简单的罗列代码能够一目了然,也绝不浪费过多的笔墨去描述过程。
图片胜过文字。图片配文字比单纯的文字更加方便理解,甚至一张图就可以省略文字了,多画图,少写字是个原则。
考虑时间成本。博客基本上是以时间换知识,因此需要越来越快,记录时间也很必要。
列出时间遗留问题,以备以后解决。
原文出处:rock3 的博客
分享到:
相关推荐
总的来说,这个源码包提供了一个快速创建二手商品交易平台的解决方案,适合那些希望构建类似58转转或咸鱼网站的个人或团队,尤其是对于初学者,有了文字教程的支持,搭建过程相对简便。然而,需要注意的是,使用此类...
在压缩包内的“转转最新带管理原码浩天版”文件,应该是源码的全部内容,包括PHP代码、数据库配置、前端资源等,用户需要有一定的编程基础来部署和运行这个系统。使用前建议先备份现有环境,按照开发者提供的文档或...
"60个转场音效"这个资源包专门针对这些需求提供了丰富的素材。标题表明这是一个包含60种不同转场效果的集合,适用于网页和Flash项目。转场音效在各种媒体作品中起到过渡和衔接的作用,提升用户体验,使得视觉和听觉...
这个过程可以通过OSG库提供的命令行工具或者专门的转换软件来实现。 4. osgb转ive: IVE是3DWare公司的3D文件格式,主要用于其3D Studio Max软件。将osgb转换为ive,是为了兼容不同的3D平台或软件。这通常需要使用...
综上所述,这个“中文日语转换,汉字转平假名,中文转日语”的工具结合了现代计算机科学与语言学的成果,旨在为用户提供便捷的跨语言沟通桥梁,特别是对于需要处理汉字和平假名转换的场景。它的成功实施依赖于先进的...
标题中的“Node.js-这是一个nodejs库可以把一个多页的pdf转成多页png图片”表明了这个项目是一个基于Node.js的库,其主要功能是将PDF文档转换为多个PNG图像,每一页PDF对应一张PNG图片。这样的工具在需要对PDF进行...
这个转换软件的核心功能是提供了一种便捷的方法来处理3D模型文件。在游戏开发过程中,有时会遇到需要将一个游戏的模型资源用于另一个使用不同格式的游戏,这时就需要这样的转换工具。MDL MDX转换软件能够确保转换...
描述中的"PCM与WAV互转 源代码 亲测有效 欢迎使用"说明这个压缩包提供的内容不仅仅是理论知识,而是包含可以直接运行的源代码,并且这个代码已经经过测试,证明可以成功地在PCM和WAV之间进行转换。这表明用户可以...
综上所述,这个源码包可能是基于ThinkPHP框架开发的一个数据采集系统,用于抓取闲鱼、交易猫、转转等二手交易平台的数据。它可能包含了数据抓取模块(如爬虫)、数据解析模块以及可能的数据库操作和前端展示部分。...
在标签中,“范文/模板/素材”可能暗示这个工具提供了一些预设的布局或模板,帮助用户快速调整图像并排版,以适应PDF文档的格式。而“软件/插件”表明这是一个独立的应用程序或者可能是某个软件的扩展插件,用于增强...
实现这种转换通常需要使用专门的工具,如“IMG转EXE”这个程序。这种工具会解析IMG文件,提取其内容,并打包到EXE文件中。当用户运行这个EXE时,它会执行内部指令,将IMG中的数据写入目标设备,创建一个自启动媒介。...
描述虽然重复,但强调了这个工具是关于“数组转二进制”的,意味着它可能接受一个数组作为输入,然后将其内容编码成二进制形式并保存到文件中。在编程中,数组是一种数据结构,它可以存储相同类型的数据项集合。这种...
这个源码可能是由开发者为学习和交流目的而创建的,不建议用于商业运营。源码中包含了与5173接口的集成,这可能意味着它支持与5173游戏交易平台的数据交互,例如进行虚拟物品交易或支付功能。 源码的主要部分包括...
【标签】"转转闲鱼最新版本"这个标签可能是为了突出这两个应用的更新内容,提醒用户检查并安装最新的更新。在技术领域,定期更新软件是必要的,因为开发者会不断修复漏洞、增强功能,并对新出现的威胁做出反应。用户...
总的来说,这个PDF转CAD工具提供了一个便捷的解决方案,让用户能够将PDF格式的设计图纸转换为CAD格式,便于进一步的编辑和设计工作。其附带的转换工具也支持其他格式,增加了其多功能性。尽管转换后可能存在水印,但...
在MATLAB中,可以使用内置函数如`orth`来找到R的近似正交矩阵,`pinv`来求解最小二乘问题,以及`null`来计算零空间,帮助解决这个问题。具体的代码实现可以参考提供的“已知两个坐标系下对应点坐标求转换矩阵”文件...
这个压缩包提供的源代码似乎涉及了三个主要的转换操作:TXT到PDF、PDF到PNG以及PNG到PDF,同时也提到了图片水印的添加功能。下面将详细讨论这些知识点。 1. **TXT转PDF**: - TXT文件是纯文本格式,而PDF是便携式...
描述中提到,“电脑无法自动安装的可以下载手动安装,带调试软件”,这意味着这个驱动程序包不仅包含驱动文件,还可能包括一个配置或调试工具。这对于排查硬件连接问题、设置通信参数或进行故障排除非常有用。手动...
"JAVA 音频文件PCM转WAV Utils类"是一个Java实用工具类,它的设计目标是为了简化这个转换过程,提供一个可以直接使用的示例代码。这个Utils类可能包含以下功能: 1. **读取PCM数据**:Utils类可能会有一个方法来...
"hexASCII互转.exe"这个文件很可能是一个实用工具,用于帮助用户方便地进行ASCII和十六进制之间的转换。这样的工具通常会有简单的用户界面,用户只需输入文本或十六进制数,点击转换按钮,程序就会自动完成转换过程...