从“问题少女”到IT图书

来源:互联网 发布:伊藤园和三得利 知乎 编辑:程序博客网 时间:2024/05/01 22:57

<script type="text/javascript"><!--google_ad_client = "pub-0241434510974184";/* 博客文章广告728x90, */google_ad_slot = "7316585398";google_ad_width = 728;google_ad_height = 90;// --></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>

从“问题少女”到IT图书

本文发表于2005年6月《中华读书报》

公司里有个年轻的女秘书,因为酷爱提问题,大家都把她叫做“问题少女”。有一天,“问题少女”问了这么一个与技术相关的小问题:“Excel工作表中有一列存有电话和传真号码的数据,其中的每个单元格都符合‘01088889999/01088886666’这样的格式:以‘/’分隔,电话号码在前,传真号码在后。请问,该如何操作,才能把这列数据拆分成两列呢?”

公司里的程序员抢先发言:“太简单了吧!在第二列开头写上公式‘=LEFT(A1,FIND("/",A1)-1)’,在第三列开头写上公式‘=RIGHT(A1,LEN(A1)-FIND("/",A1))’,然后分别将这两个公式粘贴到整个第二和第三列,不就大功告成了吗?”

财务部的出纳小姐却说:“不对,不对!谁有耐心写这么麻烦的公式呀?你只要把那列数据导出成文本文件,然后再以‘/’为分隔符导入文本文件,数据不就变成两列了吗?”

这时,销售部经理突然现身,他一脸不屑地说:“你们这帮糊涂虫,打开‘数据’菜单,里面不是写着两个斗大的汉字‘分列’吗?难道这样现成的功能都是中看不中用的摆设?”

于是,在场的所有人都开怀大笑起来。大家都以为“问题少女”已经找到了最好的答案,没想到“问题少女”马上就提出了新的问题:“你们说的这三种方法都不好!第一种方法是在欺负我不懂编程。第二种方法看上去倒很是精妙,但如果不问你,我怎么会往导入/导出功能上想呢?第三种方法更是在欺负人了,我昨天刚读完一本《Excel大全》,明明见过‘分列’功能,可临到用时就是想不起来——你这么说,不是在挖苦我记忆力低下吗?现在,我最最郁闷的是,这个分列的问题我是弄清楚了,可今后碰到其他问题时,我还要问上一圈吗?什么时候我才能自己想出解决问题的方法,不当‘问题少女’呢?”

我个人认为,“问题少女”最后提出的这个问题关系重大:往小了说,它关系到“问题少女”这样一个可以活跃公司气氛的称呼究竟能存在多长时间;往大了讲,它关系到每一本出色的IT图书究竟该如何编撰。

举例说来,如果我们要为所有像“问题少女”一样的商务人士(他们通常也是图书购买欲望和购买能力最强的一类人)撰写一本Excel的入门教材,那么,根据前面的讨论,至少有三种写法可供选择:

(1)如果按照销售部经理的意思,这本教材肯定要从菜单和工具栏开始,不厌其烦地罗列Excel拥有的全部功能和操作——至于读者能否记住每一个知识点,能否将每个功能彻底消化并应用到工作实践中去,那就不是我们该操心的事情了。

(2)当然,也可以按照出纳小姐的思路,在这本教材里塞满各种“绝招”和“秘技”。捧着这样一本书,读者在阅读时一定会有拍案叫绝的冲动,但合上书以后,大多数人就未必能学到什么真正可以举一反三的东西了。

(3)最简单的写法,当然还得按照那位程序员的意思来办。在程序员眼中,一切都可以编程实现!能写公式的写公式,能用VBA的用VBA,真想不出办法的时候,用Java配上JDBC不是也可以把Excel的工作表搅得天翻地覆吗?当然,惟一的遗憾是,这样一本入门教材会吓倒不少像“问题少女”那样的初学者,但这应该怪读者懒惰,而不应该怪作者刁钻。

大多数明眼人应该已经看出来了,上面这三种写法都没办法真正解答“问题少女”的疑问。如果想让“问题少女”不再发问——换句话说,就是要让“问题少女”学会自己思考和解决问题——一本Excel入门教材也许应该花上更大的力气,引导读者更深刻地理解Excel的精神内涵。简单地说,假如我是该书的作者,我会努力让读者明白以下事实:

(1)Excel首先是一种管理电子表格的工具,而单元格是它最基本的操作对象。因此,诸如分列这种基于单元格的操作,Excel即便不在菜单项里直接提供,也会提供变通的解决方案。

(2)Excel同时也是一个数据处理和再现的平台,是一个五脏俱全的数据库软件。就像所有数据库软件都可以在数据导入和导出时执行各种最基本的转换操作一样,Excel的导入/导出功能当然可以胜任数据分列或类似的任务。

(3)Excel更是一个面向对象的软件开发平台,工作表中的单元格是其最基本的对象类型,而单元格的格式、内容以及相关的各类函数就是该对象类型所拥有的属性和方法了。根据这样的思路,我们在使用公式或VBA语言组合某些高级操作时,就会有水到渠成的感觉了。

这样的讲解更有助于启发读者的思路,可以引导读者用自己的判断和直觉来把握Excel这个看似简单质朴,实则暗藏玄机的经典软件。经验证明,这一思路可以在实际工作中收到奇效。有一次,公司里一位程序员试图用Java语言为市场部开发一套用于数码照片标引和检索的小软件。市场部提出的需求很是复杂,又要支持基于图片的录入、修改、浏览和检索,又要在录入过程中随时对已标引的图片执行排序、筛选、分类汇总等复杂操作。正当这个程序员满头大汗敲打键盘的时候,我提醒他说:“Excel是一种管理电子表格的工具,而录入或修改数据这样的需求最适于用电子表格来解决;Excel同时也是一个数据处理和再现的平台,而排序、筛选、分类汇总等复杂的数据操作正好属于数据处理和再现的范畴;Excel更是一个面向对象的软件开发平台,从这个思路出发,将数据中的每一条记录和它对应的数码照片同时展现在Excel界面中应该不是件很困难的事——作为一个职业程序员,你完全可以借助Excel,在五分钟内完成这套软件的所有开发工作!”

我的话里绝对没有夸大其词之处。如果使用Java语言,为了完成上述需求,也许需要写上一千多行代码。而我在五分钟之内,就用Excel搭出了如图 1所示的照片标引和检索环境:在左边的窗口里,用户可以借助Excel提供的功能,完成数据录入、修改、检索、排序、筛选、分类汇总等各种操作;无论用户正在操作哪一条记录,右边的窗口都会在VBA代码的指挥下,自动显示出与该数据相关的图片来——在这个解决方案里,我没有使用任何公式,一共也只编写了四行VBA代码!

显然,使用这种基于目标导向、鼓励多维思考的教学方法,大多数IT图书——无论是讲解Excel等应用软件,还是讲解C#等编程语言的图书——都可以为读者提供一种全新的、与众不同的入门指南。在日前出版的《PowerPoint演说家》一书中,我已经大胆地尝试了这种不一样的写作方式。其效果嘛,据读者反映还算不错。也许,我还要在接下来的技术写作过程中,沿着这条道路继续探索下去……

[王咏刚,2005年6月]