热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

如何精简一本书

跟我之前已经出版的作品相比,《Redis使用教程》(后简称《教程》)在篇幅方面有了显著的增加:因为《

《Redis使用教程》 的写作工作已经接近尾声了, 除了继续撰写最后剩下的几章之外, 我也开始对全书已完成的章节实施修整, 而修整工作最重要的一步, 就是要去芜存菁、删繁就简, 从而达到减少书本篇幅的目的。

跟我之前已经出版的作品相比, 《Redis使用教程》(后简称《教程》)在篇幅方面有了显著的增加:

  • 以《Redis设计与实现》(后简称《实现》)为例子, 我在写《实现》的时候, Redis 才刚进入 3.0 版本, 并且因为《实现》关注的是功能的内部实现, 只要把内部实现特别是数据结构说清楚就行了, 具体的功能并不需要一一介绍清楚, 所以整本书的篇幅限制在了 400 页之内。
  • 另一方面, 对于现在的《教程》来说, 因为是面向新手和使用者写的一本入门书和参考书, 所以每个功能都需要巨细无遗地覆盖到, 而且 Redis 5.0 本身就比 3.0 要多得多, 因此这次《教程》的篇幅应该会在 500 至 600 页左右。

因为《教程》本身篇幅已经不少了, 所以为了保证该书的可读性, 我必须保证书本内容足够紧凑, 没有多余的章节。

为了做到这一点, 我首先把目光聚焦到了书本的《编程练习》部分来。 具体来说, 书本开头的大部分大章都会在章末有名为《编程练习》的一节, 在这一节里面, 我会根据那一章的内容, 设计两三个需要进行编程的题目, 这些题目通常是正文内容的一个延伸, 又或者是正文介绍的程序的一个变种。 举个例子, 书本的《列表》一章在正文里介绍了如何使用列表命令去实现一个先进先出队列, 而该章的其中一个编程练习就是要读者去实现一个后进先出队列(又称栈)。

在刚开始写《教程》的时候, 《编程练习》本来是我觉得不错的构思的其中一个。 但是现在回过头重新审视这个部分, 我却有了相反的想法, 其中的原因大概可以归纳为以下几点:

  1. 不是每个人都喜欢做练习。 必须承认, 并不是每个人都喜欢做练习, 据我所知, 包括我在内的很多读者都不会真的认真去完成书本中列出的练习, 最多就是看着题目思考一下, 然后再去对答案, 这样的话, 编程练习中最为重要的“编程”部分就缺失了, 整个题目在读者脑海中过一下就没了, 效果不大, 更别说有些读者还会直接跳过习题。
  2. 书本的习题没有做到一视同仁。 因为内容的问题, 书本有些大章是没有《编程练习》部分的, 这样一来的话, 读者在阅读的时候可能就会产生这样的疑问“为什么上一章有习题,而这章却没有呢?”。 但我也不希望为了让每章都有练习而去给某些大章加上一些没有用的练习题, 这跟我想要为书本“瘦身”的想法也是完全相左的。
  3. 书本的篇幅有限。 正如之前所说, 介绍 Redis 本身的功能已经占用了相当大的篇幅, 书本目前的编程练习起码要占用二三十页, 这并不是一个小的数字。

综合来说, 编程练习并不属于书本的核心内容, 这个环节从某种程度上来说对于书本是可有可无的。 因此为了保证书本的简洁性, 我决定从书本中移除各章的《编程练习》部分。

如何精简一本书

移除各章的《编程练习》部分

当然, 对《编程练习》部分的移除工作并不是简单粗暴地完成的: 我重新审视了各个练习, 只移除了当中不太重要、没有太多新内容的练习, 至于那些引入了重要知识或者非常有趣的练习, 我接下来会将它们转移到各章的正文里面, 让它们直接以正文而不是练习的方式出现在书本里面, 这样读者就不会错过任何有趣的内容了。

虽然编程练习没有在这次的《Redis使用教程》里面出现, 但这次构思编程练习题目对于我来说也是一次非常宝贵的经验, 并且计算机知识方面的习题在诸如培训和课堂教学这样的场景里也是不可或缺的。 考虑到这一点, 未来如果有机会的话, 我也许会通过某种方式来给大家出一些 Redis 方面的书面习题和编程题目, 希望大家到时候会感兴趣。

精简一本书并不是一件容易的事情, 但为了提高书本的可读性, 有时候作者必须要有壮士断腕的勇气和决心才行。 当初我在撰写《Redis设计与实现》的时候, 曾经也在书本里面花费了不少篇幅去罗列和介绍 Redis 每种数据结构的底层实现 API , 但是当我完成书本初稿回头去审视这些内容的时候, 却发现它们不仅作用不大, 而且还很容易引起读者的厌倦, 所以虽然当时花了不少时间去写这个部分, 但是最后却把它们全删了, 删掉的部分至少有 30 页或以上。 虽然这种大刀阔斧的删减还是挺让自己心疼的, 但书本最终出来的效果很好, 大家都很喜欢和欣赏《Redis实现与设计》的简洁精炼, 我很庆幸当初自己做了正确的事情。

好的, 关于书本精简方面的话题就介绍到这里了, 接下来如果有其他这方面的想法或者有其他关于《Redis使用教程》的想法想要介绍的话, 我会再写文章的, 希望大家会感兴趣。

最后祝大家国庆节快乐!

黄健宏

2018.10.1


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 我们


推荐阅读
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文详细介绍了云服务器API接口的概念和作用,以及如何使用API接口管理云上资源和开发应用程序。通过创建实例API、调整实例配置API、关闭实例API和退还实例API等功能,可以实现云服务器的创建、配置修改和销毁等操作。对于想要学习云服务器API接口的人来说,本文提供了详细的入门指南和使用方法。如果想进一步了解相关知识或阅读更多相关文章,请关注编程笔记行业资讯频道。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 006_Redis的List数据类型
    1.List类型是一个链表结构的集合,主要功能有push,pop,获取元素等。List类型是一个双端链表的结构,我们可以通过相关操作进行集合的头部或者尾部添加删除元素,List的设 ... [详细]
  • 栈和队列的共同处和不同处
    本文主要介绍了栈和队列的共同处和不同处。栈和队列都是由几个数据特性相同的元素组成的有限序列,也就是线性表。队列是限定仅在表的一端插入元素、在另一端删除元素的线性表,遵循先进先出的原则。栈是限定仅在表尾进行插入或删除操作的线性表,遵循后进先出的原则。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Linux的uucico命令使用方法及工作模式介绍
    本文介绍了Linux的uucico命令的使用方法和工作模式,包括主动模式和附属模式。uucico是用来处理uucp或uux送到队列的文件传输工具,具有操作简单快捷、实用性强的特点。文章还介绍了uucico命令的参数及其说明,包括-c或--quiet、-C或--ifwork、-D或--nodetach、-e或--loop、-f或--force、-i或--stdin、-I--config、-l或--prompt等。通过本文的学习,读者可以更好地掌握Linux的uucico命令的使用方法。 ... [详细]
author-avatar
手机用户2502935255
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有