type
status
date
slug
summary
tags
category
icon
password
时至 5 月,我按照年初的计划,围绕 Java 基础、Android 基础写了一系列博客,工作的缘故,也写了几篇关于 C++ 基础的博客,这个阶段收获良多,亦有许多要改进的地方,故此作一个总结。
怎么写博客
- 草稿箱
我建立了一个草稿箱,用于日常收集和整理博客素材。这些草稿有的只包含一两句话,有的零星罗列一些链接和文件,他们便成为了我构建博客内容的起点。
- 确定博客的思路
确定一篇博客主题后,我会尝试从初学者的角度来思考,以确保内容简洁易懂。在构思博客内容之前,我通常会先草拟一个大纲。例如下面关于 Java 线程的大纲:
- 收集和整理相关的资料
按照大纲的各个部分,收集并整理相关资料。初步内容准备好后,添加必要的代码示例,并考虑是否利用流程图、思维导图或类图等工具,帮助我更清晰地传达观点。
- 编写和发布
撰写博客并做好排版,在这个阶段,博客内容可能还有欠缺。我在文中添加 TODO 或 FEATURE 标记,以便将未完成或需要改进的部分标记出来。我会先把博客扔出去,看一看发布之后的效果,收取一些反馈。在短期内,个人的经验、技术和写作能力难以有显著变化,所以我不会立刻动手做大的修改。然而,当我忙于其他事情的时候,可能会有新的启发对这些已发布的博客是有益的,待到合适的时机我便会回来。
对我来说写博客是一件渐进的事情,最初版本总是难尽人意,一边写作,一边学习,一边完善,才是属于我的写作节奏。
内容风格
在写了两个月的博客之后,我才意识到想要写好博客有多么困难,我梳理了几则重要的事项,指引我后续的写作。
- 整体风格
博客整体上追求简洁,简洁有两层含义,一层是为混乱与无序赋予秩序,一层是减掉一切冗余的部分而不失其蕴意。”简洁是很难达到的,你必须做出很大的努力,用足够清晰的思维才能保持简洁 “,追求简洁,促使我在写作时有更多的思考,更合适的表达。
- 准确表达
经常会遇到类似下面这样的情形,在一篇以 CMake 为主题的博客里,有关它的介绍很多的版本
- CMake 是一个跨平台的开源构建工具,用于管理项目的构建过程。开发人员可以使用 CMake 来描述项目的目录结构、源文件、依赖关系等,并生成适用于不同构建系统的构建文件,如 Makefile、Visual Studio 项目文件等。通过简单的 CMakeLists.txt 文件,开发人员可以轻松地配置、构建和管理复杂的项目。CMake 具有跨平台性、灵活性和易维护性等特点,被广泛应用于现代软件开发中。
- CMake 是一个开源的跨平台构建工具,用于管理软件的构建过程。它使用简单的配置文件(CMakeLists.txt)来生成标准的构建文件(如 Makefile、Visual Studio 项目文件等),从而实现跨平台的软件构建。
- CMake 是一个跨平台的,开源的构建系统(BuildSystem)。CMake 可以通过 CMakeLists.txt 文件来产生特定平台的标准的构建文件,例如:为 Unix 平台生成makefiles文件(使用GCC编译),为 Windows MSVC 生成 projects/workspaces(使用VS IDE编译)或Makefile文件(使用nmake编译)。
这段话要怎么表述才能即准确又简洁,是使用”构建工具”还是”构建系统”呢,准确表达即代表对主题有深刻理解确保无误。这样方使内容可信,读者安心。
- 避免拼凑
由于博客素材是从网上收集而来,直接使用,会有明显的拼凑痕迹,打破上下文的连贯性(像上面 CMake 的示例,直接搬运很容易与上下文风格不一致),这是很多技术博客上面常见的问题。对待写作需要诚恳,即使自己写作能力还不足以清晰流畅的表达,也要坚持所有内容都由自己写出,也因此我不再使用任何辅助写作的 AI 工具,AI 工具会代替你思考,剥夺你提升写作能力的机会。
- 合理组织
一篇博客往往同时包含代码片段、思维导图、流程图等,特别是在文本与图片、文本与代码块之间过渡的地方,怎么组织它们才能使博客阅读时和谐自然呢。我在 技术文档规范 里面做了一些总结,但这目前看起来还是不够的,日后还需要从优秀博客那里学习这一点。
- 理想效果
一篇优秀的博客不仅在内容上提供价值,文字准确流畅,其作者更是有独特的风格和表达方式,可以把你吸引到他的世界,向你展示从他的视角看到的世界是什么样的。遇到这样的博客时常常触动我们、启发我们、激励我们,这正是我所以期待和追求的理想效果。
代码风格
在解释一个技术栈时,我习惯基于原生代码(官方文档、示例、流行的框架等)做最小的改动作为示例程序,因为原生代码是大家都熟悉的,这样阅读时的障碍会减少很多。同时围绕原生代码提供一系列的验证程序,有助于探索技术栈的迭代历程和其本质。
关于对技术栈本质的探索,Nathan一篇博客带给我的遐想,太多的程序员将他们所使用的技术栈视为积木部件,并限制了如何使用和组合这些积木。我们日常写代码时经常发现,我们使用的技术栈与我们设想的理想状态相去甚远。当你探索一个技术栈的本质的时候,由一个很小的点出发,依赖的技术栈、依赖的依赖,围绕这它们的可能是操作系统、编译原理、网络协议、数据结构、算法、微积分、线性代数、流体力学、硬件、论文等等,这些你丢弃在学校里面的知识,重新在你脑海里翻滚,经过漫长的时间和不懈的努力,当您了解这些技术栈的工作原理时,您就可以推断出如果存在理想的工具,什么才是理想的解决方案。软件变成了粘土而不再是积木。
所谓的行业洞察、抽象思维找到了你,使你困惑,围绕在你身边的流程、工具、框架、产品,你不在觉得理所当然,原来他们存在着这样那样的缺陷,也许它们是一些不如你聪明的人构建的,也许随着时间的推移它们已不在适用。你不再能忍受某个流程的拖沓,某个框架的低效,某个工具的反直觉,某个产品糟糕的体验,终于,你决定要出手了,针对某个环节,你提出了自己的解决方案。也许根本性创新的机会始终存在。
获得读者
对于已经完成的博客,我会基于原创性、流畅性、启发性等几个方面,给予其评分,评分达到一定标准的,再将其投稿的公众号或发布到博客平台网站上面。公众号和博客平台都有只能在其内部流转的局限性,我最终的目的是博客基于搜索引擎被看到。
一篇博客的意义是在一次次被阅读、被评论、被提及、被反驳时被赋予的,越多的人看到,才愈有价值。最初,可能很难获得读者,随着时间的推移,随着你的写作和传播的提高,获得读者变得越来越容易。
下个阶段计划
下一个阶段,我会围绕音乐播放器尝试做一系列有趣的事,这些大部分都使用 Android 技术实现
- 播放器、起播速度、播放缓存、通知、进程通讯等相关的技术博客
- 音乐播放器 APP (基于开放的音乐 API)
- 音乐可视化(音乐播放器 + Processing)
- 动物声音博物馆(播放器+收集的动物图片、动物声音等)
- 动物声音博物馆(打印动物图片,扫描动物卡片触发 3D 模型,AR方向)
- 动物声音博物馆(动物卡片 + 点读笔)
- Notion 音乐 Widget(Notion 上做一个音乐小组件)
- 基于以上,尝试做几个有意思的视频