谈谈写文章的一些感想

用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章,技术文章也可以有温度。

初衷

还依稀记得当时写Android系列文章的初衷:自己从事Android开发已经有很多年了,从App开发到Android framework层甚至更底层,自己还算有一些经验。时常想着能通过写文章的方式把自己的经验与大家分享下,若以后不在做相关的工作了,这些文章也可以是对自己过往的一个总结,证明自己曾经做过这个工作。

甚至将来能对自己的孩子骄傲的说:“你爹我可是写过很多技术文章的,并且这些技术文章是别具一格,还有非常非常多的阅读量的,不信你们可以去网上搜”。

写何种文章

既然初衷这么坚定了,那该写何种文章呢?

源码分析类的?

这里的源码分析主要是指方法调用链类的,比如A方法调用了B方法,B方法又调用了C方法之类的。其实我注册公众号注册的是非常早的,那时候断断续续的写过一些文章,这些文章主要是以源码分析为主的,这些文章的阅读量非常低,我也曾经深深得思考过为啥我写的以源码分析的文章阅读量这么低呢?

我不知道大家有没有这种感觉,在与大家分享技术的时候,如果分享的都是大篇幅的代码,那应该不会有太多的听众感兴趣,咱们程序员本身上班时间就在无时无刻与代码打交道,而一个技术分享本身应该轻松些。更何况大篇幅的代码还需要大家动脑子去琢磨、去看懂,而如果用文字把大篇幅代码所要做的事情表达出来,对于听众来说是不是轻松很多。

源码或者方法调用链只是一个思想或者一个解题思路的具体实现,只知其表不知其里。如果能用简单的语言把解题思路、原理讲解清楚,能把复杂的问题简单话。读者能从中学习到为啥要这样做?这样做的好处是啥?即时使用另外一种语言也可以实现相应的功能(语言只是一个工具而已),或者把相应的思路应用于工作中也是可以的。就如深入理解Java虚拟机这本书作者基本上都是把各种知识点的内核、原理用文字和图讲解清楚,而很少涉及到源码 (除非必须需要贴源码)。

因此完全源码分析类的文章就被我排除掉了,我这里提到的文章尽量不要完全以源码分析为主,不是说文章里面不要出现源码,比如某个开源库的源码设计的非常的漂亮,我觉得非常有必要把设计绝妙地方展示出来与大家一起讨论分享

易读、有趣、有深度、体系化

很多的技术文章往往给人一种冷冰冰、高大尚的感觉,我不希望写这样的文章,我希望写容易读懂有趣的文章,就像Head First设计模式这本书以一种非常让人容易理解的方式来讲解设计模式,还有像码农翻身这本书作者把各种知识点通过故事的方式讲解出来,不仅有趣还非常容易理解。

文章易读有趣的同时还需要有深度,并且是体系化的,如果各种知识点散落在各地,而没有形成体系化,那我觉得这些知识点会很容易忘记,并且读者也没有多大的兴趣。

真正写文章时

当真正开始写这类文章之时才发现这类文章是比较难写的,你需要考虑节与节之间的连贯性,有时候还要考虑设计的故事情节中如何把知识点带进去,带进去的同时还需要把知识点讲的深入。

我是init进程这篇文章作为第一篇开头文章,在写之前就构思过几个版本,后来最终定下了我的父亲我和我的子孙我和我的子进程是如何创建的我的子进程的善后工作我的信息中心–属性服务我的工作内容这样的章节来介绍init进程,这样的章节设计就像在介绍一个人一样,他的父亲、他的孩子、他的孩子是何时出生的等等,希望这样更能容易让人理解。

在写进程杀手–lmkd这篇文章的之前,我在想怎么样才能让大家更容易知道lmkd进程的作用及它是如何杀进程的。因此我采用了我是谁我的出生杀进程这件事情何时杀收集进程该杀谁这样的章节来介绍lmkd进程,首先我是谁通过对话这种轻松的方式介绍了lmkd它的作用,我的出生介绍了lmkd是如何被创建的,杀进程这件事情介绍了lmkd要杀进程应该分为何时杀收集进程该杀谁这三步。何时杀是因为lmkd它不知道什么时候杀进程,因此需要被通知。收集进程是因为lmkd要杀进程,那它肯定要有进程被它杀才行,而这些被杀的进程是需要init进程和systemserver进程把要杀的进程交给lmkd才可以。该杀谁介绍了lmkd收集了很多进程,当收到该杀进程的通知时候,该选择哪个进程被杀掉。

在写logd、logcat进程的时候,我在想其实logd进程的整个核心原理就是生产者/消费者模式,打印日志就是日志的生产者,日志显示就是日志的消费者,而logd使用了各种高性能的数据结构来存储这些日志。因此我就从这个核心原理开始介绍logd进程。

而写Android 大话binder通信这篇文章的主要目的是通过一个发送情书的故事来把binder通信过程中都经历了哪些方法、参数都发生了哪些变化、都经历了哪些层、层之间都定义了哪些协议等这些知识都通过故事的方式展现出来,当然在一些关键的地方也会深入介绍相应知识点比如一次复制,BpBinderBBinderfd在传输过程中需要进行转换等等。本意就是希望通过这种轻松的方式把binder通信的整个过程都介绍给大家。

其实每篇文章在写的时候都是经过好几方面的考虑和设计的,有的文章在写了一半的时候发现整个思路及连贯性完全行不通,这时候不得不全部删掉重新开始设计重新写。

希望自己能坚持把这种风格的文章写下去,坚持这件事情其实是最难最难最难的,有时候精心写的文章阅读量不高,会对自己产生打击,但是这又何凡呢,打击多了也就有免疫力了。同时自己也在想着录制一些不一样的视频能把各种知识以视频的方式展现给大家。

下面是Android系列的文章:
我是init进程
属性服务的设计魅力
进程杀手–lmkd
Android日志系统–logd、logcat
我是installd进程
Apk安装之谜
Android 存储成长记
Android vold(卷管理)
Android ServiceManager和它的兄弟们

Android 大话binder通信
Android zygote访谈录

请添加图片描述

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值