网友问我,为什么《ASP.NET第一步》的后续作品迟迟没有动笔。其实,我关于《第二步》的内容,我早已确定了大致的方向,但是有了《第一步》的写作经历和一些反馈之后,我深深体会到了技术书籍是非常难写的。
首先来说说定位于初学者的书,我见过的一些类型有:
q 以一个完善的示例作为卖点,初学者认为可以通过这个书达到编写这样一个示例的水平。其实不然,书中描述了完成整个示例的过程,但是看过之后发现脑子里没有留下什么,照抄都完成不了,更不要说举一反三了。
q 一切演示都是使用Hello World类型的示例,书佷容易看懂。但是看过之后,要自己实践却没有头绪,因为初学者只明白了最简单的实现,并不知道从哪里获悉其它知识点。
我认为,面向初学者的书应该有几个要点:
q 一定要说清楚开发环境的构建,并一步一步让初学者在这个环境中构建一个不复杂而又有代表性的实用程序(Hello World没有用)。可以不说为什么这么做,但是一定要让初学者看到最终结果,给予足够信心。走出第一步往往是最困难的。
q 围绕知识点的示例可以是佷简单的,但是之后要提到知识点相关的一些扩展知识,或者开发时需要注意的地方,避免初学者走弯路,并且给初学者进阶的指引。
q 除了知识点的介绍,还要教会初学者如何自己来解决问题,以及开发过程中的一些技巧,并且尽可能多提供开发经验相关的东西。知识点可以MSDN上查,但是技巧和经验很难查到,这些东西比列一个MSDN中的成员表格更具有价值。
其实,面向初学者的书倒还好,面向有经验的希望提高的开发人员的书就非常难写了,有很多所谓的高级编程:
q 有的是知识点的堆积,面面俱到的一本厚书,堆积了大量实现上的知识点(如何去实现),而不是剖析内部原理。这样的书称不上高级,顶多叫大全。
q 有的确实是在剖析原理,可惜代码实在太多,文字实在太少。读者只能看了代码望而却步,却从中获取不到什么有价值的信息。
q 介绍了很多高级特性,企业级的应用方案。但是我们知道,一个方案在自己应用的时候就完全不是官方文档说的这么简单了,还设计到安全、效率等。
我觉得,此类书应该具有如下特性:
q 内容选择上要选大家不知道的内容,或基于某个知识点上扩展的内容,或自定义/扩展某个组件。
q 只提到怎么使用某个高深的特性却不说其工作原理,实在有点愧对高级两个字。但解释工作原理不等于搬出一大堆代码,最好是以图文的形式让读者直接理解其原理。
q 可以深入剖析知识点,但是代码尽量简单来体现知识点,而不是把一些无关的代码参杂在一起,徒增阅读难度。
q 一定要把知识点在实际应用时候会遇到的问题,以及最佳实践介绍给读者。官方的一些代码示例仅仅是示例,它们没有考虑安全、效率等很多方面,照搬这些示例用于开发会遇到很多问题。
我把《第二步》的定位在面向初学者和有经验的开发人员之间,也就是阅读了《第一步》的读者。希望给予读者的最佳体验是:
q 阅读后感叹“还可以这样做,我怎么就没有想到呢?”——技巧
q 阅读后觉得已经了解了原先不知道的一些组件背后的工作方式和原理。——剖析
q 阅读后已经有能力制作一个完整的企业级的系统。——经验
对于C#、ASP.NET控件这些老内容我希望能带给读者更多技巧、原理上的知识,而不是如何去使用,对于WCF、LINQ等内容,我希望带给读者更多企业级实际应用中的模式以及开发时常见问题的解决方案,而不是如何去用它们实现最简单的东西。
注意,这不是为《第二步》打广告,佷可能没有《第二步》,此文只是希望大家对技术图书的现状进行讨论。很多人在骂国人写的书看不得,其实我觉得老外写的书也有很大一部分是看不得的,国人写出精品不是不可能,但有一点需要铭记,就是不要写“好卖”的书,而是写“对读者有用”的书。